/*
 * 文 件 名:  ProtocolConstants
 * 版    权:  华设设计集团股份有限公司
 * 描    述:  充电桩协议常量定义
 * 修 改 人:  lvwenbin
 * 修改时间:  2025/12/22
 */
package com.ruoyi.ems.charging.protocol;

/**
 * 充电桩协议常量定义
 * 基于《充电桩与运营平台交互协议V2.0》
 *
 * @author lvwenbin
 * @version [版本号, 2025/12/22]
 */
public final class ProtocolConstants {
    
    private ProtocolConstants() {
        // 私有构造函数，防止实例化
    }
    
    // ==================== 协议基础常量 ====================
    
    /**
     * 起始标志
     */
    public static final byte START_FLAG = 0x68;
    
    /**
     * 协议版本 V2.0 = 0x14 (版本号乘10)
     */
    public static final byte PROTOCOL_VERSION = 0x14;
    
    /**
     * 数据域最大长度
     */
    public static final int MAX_DATA_LENGTH = 200;
    
    /**
     * 最大帧长度 (起始标志1 + 数据长度1 + 数据域最大200 + 帧校验2)
     */
    public static final int MAX_FRAME_LENGTH = 204;
    
    // ==================== 加密标志 ====================
    
    /**
     * 不加密
     */
    public static final byte ENCRYPT_NONE = 0x00;
    
    /**
     * 3DES加密
     */
    public static final byte ENCRYPT_3DES = 0x01;
    
    // ==================== 帧类型码定义 - 充电桩发起(奇数) ====================
    
    /**
     * 充电桩登录认证 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_LOGIN_REQ = 0x01;
    
    /**
     * 充电桩心跳包 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_HEARTBEAT_REQ = 0x03;
    
    /**
     * 计费模型验证请求 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BILLING_VERIFY_REQ = 0x05;
    
    /**
     * 充电桩计费模型请求 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BILLING_REQ = 0x09;
    
    /**
     * 实时监测数据上送 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_REALTIME_DATA = 0x13;
    
    /**
     * 充电握手 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_CHARGING_HANDSHAKE = 0x15;
    
    /**
     * 参数配置 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_PARAM_CONFIG = 0x17;
    
    /**
     * 充电结束 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_CHARGING_END = 0x19;
    
    /**
     * 错误报文 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_ERROR = 0x1B;
    
    /**
     * 充电阶段BMS中止 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BMS_STOP = 0x1D;
    
    /**
     * 充电阶段充电机中止 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_CHARGER_STOP = 0x21;
    
    /**
     * 充电过程BMS需求、充电机输出 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BMS_DEMAND = 0x23;
    
    /**
     * 充电过程BMS信息 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BMS_INFO = 0x25;
    
    /**
     * 充电桩主动申请启动充电 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_START_CHARGE_REQ = 0x31;
    
    /**
     * 远程启机命令回复 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_REMOTE_START_RESP = 0x33;
    
    /**
     * 远程停机命令回复 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_REMOTE_STOP_RESP = 0x35;
    
    /**
     * 交易记录 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_TRANSACTION = 0x3B;
    
    /**
     * 余额更新应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BALANCE_UPDATE_RESP = 0x41;
    
    /**
     * 卡数据同步应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_CARD_SYNC_RESP = 0x43;
    
    /**
     * 离线卡数据清除应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_CARD_CLEAR_RESP = 0x45;
    
    /**
     * 离线卡数据查询应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_CARD_QUERY_RESP = 0x47;
    
    /**
     * 充电桩工作参数设置应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_WORK_PARAM_SET_RESP = 0x51;
    
    /**
     * 对时设置应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_TIME_SYNC_RESP = 0x55;
    
    /**
     * 计费模型应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_BILLING_SET_RESP = 0x57;
    
    /**
     * 二维码设置应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_QRCODE_SET_RESP = 0x59;
    
    /**
     * 地锁数据上送 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_LOCK_DATA = 0x61;
    
    /**
     * 地锁控制返回 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_LOCK_CONTROL_RESP = 0x63;
    
    /**
     * 脉冲检测设置响应 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_PULSE_SET_RESP = (byte) 0x81;
    
    /**
     * 脉冲检测数据 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_PULSE_DATA = (byte) 0x83;
    
    /**
     * 远程重启应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_REMOTE_RESTART_RESP = (byte) 0x91;
    
    /**
     * 远程更新应答 (充电桩->运营平台)
     */
    public static final byte FRAME_TYPE_REMOTE_UPDATE_RESP = (byte) 0x93;
    
    // ==================== 帧类型码定义 - 运营平台发起(偶数) ====================
    
    /**
     * 登录认证应答 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_LOGIN_RESP = 0x02;
    
    /**
     * 心跳包应答 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_HEARTBEAT_RESP = 0x04;
    
    /**
     * 计费模型验证请求应答 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_BILLING_VERIFY_RESP = 0x06;
    
    /**
     * 计费模型请求应答 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_BILLING_RESP = 0x0A;
    
    /**
     * 读取实时监测数据 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_READ_REALTIME_DATA = 0x12;
    
    /**
     * 运营平台确认启动充电 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_START_CHARGE_RESP = 0x32;
    
    /**
     * 运营平台远程控制启机 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_REMOTE_START = 0x34;
    
    /**
     * 运营平台远程停机 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_REMOTE_STOP = 0x36;
    
    /**
     * 交易记录确认 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_TRANSACTION_CONFIRM = 0x40;
    
    /**
     * 远程账户余额更新 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_BALANCE_UPDATE = 0x42;
    
    /**
     * 离线卡数据同步 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_CARD_SYNC = 0x44;
    
    /**
     * 离线卡数据清除 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_CARD_CLEAR = 0x46;
    
    /**
     * 离线卡数据查询 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_CARD_QUERY = 0x48;
    
    /**
     * 充电桩工作参数设置 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_WORK_PARAM_SET = 0x52;
    
    /**
     * 对时设置 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_TIME_SYNC = 0x56;
    
    /**
     * 计费模型设置 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_BILLING_SET = 0x58;
    
    /**
     * 二维码设置 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_QRCODE_SET = 0x5A;
    
    /**
     * 遥控地锁升锁与降锁命令 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_LOCK_CONTROL = 0x62;
    
    /**
     * 脉冲检测设置 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_PULSE_SET = (byte) 0x82;
    
    /**
     * 远程重启 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_REMOTE_RESTART = (byte) 0x92;
    
    /**
     * 远程更新 (运营平台->充电桩)
     */
    public static final byte FRAME_TYPE_REMOTE_UPDATE = (byte) 0x94;
    
    // ==================== 充电桩状态定义 ====================
    
    /**
     * 离线
     */
    public static final byte GUN_STATUS_OFFLINE = 0x00;
    
    /**
     * 故障
     */
    public static final byte GUN_STATUS_FAULT = 0x01;
    
    /**
     * 空闲
     */
    public static final byte GUN_STATUS_IDLE = 0x02;
    
    /**
     * 充电中
     */
    public static final byte GUN_STATUS_CHARGING = 0x03;
    
    /**
     * 空闲-脉冲静置
     */
    public static final byte GUN_STATUS_IDLE_PULSE = 0x04;
    
    /**
     * 充电中-脉冲检测
     */
    public static final byte GUN_STATUS_CHARGING_PULSE = 0x05;
    
    // ==================== 充电桩类型定义 ====================
    
    /**
     * 直流桩
     */
    public static final byte PILE_TYPE_DC = 0x00;
    
    /**
     * 交流桩
     */
    public static final byte PILE_TYPE_AC = 0x01;
    
    // ==================== 网络链接类型 ====================
    
    /**
     * SIM卡
     */
    public static final byte NETWORK_TYPE_SIM = 0x00;
    
    /**
     * LAN
     */
    public static final byte NETWORK_TYPE_LAN = 0x01;
    
    /**
     * WAN
     */
    public static final byte NETWORK_TYPE_WAN = 0x02;
    
    /**
     * 其他
     */
    public static final byte NETWORK_TYPE_OTHER = 0x03;
    
    // ==================== 登录结果 ====================
    
    /**
     * 登录成功
     */
    public static final byte LOGIN_SUCCESS = 0x00;
    
    /**
     * 登录失败
     */
    public static final byte LOGIN_FAIL = 0x01;
    
    // ==================== 计费模型验证结果 ====================
    
    /**
     * 计费模型一致
     */
    public static final byte BILLING_VERIFY_MATCH = 0x00;
    
    /**
     * 计费模型不一致
     */
    public static final byte BILLING_VERIFY_MISMATCH = 0x01;
    
    // ==================== 工作参数设置 ====================
    
    /**
     * 允许正常工作
     */
    public static final byte WORK_ALLOW = 0x00;
    
    /**
     * 停止使用，锁定充电桩
     */
    public static final byte WORK_DISABLE = 0x01;
    
    // ==================== 枪归位状态 ====================
    
    /**
     * 未归位
     */
    public static final byte GUN_NOT_RETURNED = 0x00;
    
    /**
     * 已归位
     */
    public static final byte GUN_RETURNED = 0x01;
    
    /**
     * 未知
     */
    public static final byte GUN_UNKNOWN = 0x02;
    
    // ==================== 是否插枪 ====================
    
    /**
     * 未插枪
     */
    public static final byte GUN_NOT_CONNECTED = 0x00;
    
    /**
     * 已插枪
     */
    public static final byte GUN_CONNECTED = 0x01;
    
    // ==================== 心跳超时配置 ====================
    
    /**
     * 心跳间隔(秒)
     */
    public static final int HEARTBEAT_INTERVAL_SECONDS = 10;
    
    /**
     * 心跳超时次数
     */
    public static final int HEARTBEAT_TIMEOUT_COUNT = 3;
    
    // ==================== 长度常量 ====================
    
    /**
     * 桩编号长度 (BCD码 7字节)
     */
    public static final int PILE_CODE_LENGTH = 7;
    
    /**
     * 枪号长度 (BCD码 1字节)
     */
    public static final int GUN_NO_LENGTH = 1;
    
    /**
     * 交易流水号长度 (BCD码 16字节)
     */
    public static final int TRANSACTION_NO_LENGTH = 16;
    
    /**
     * CP56Time2a时间格式长度
     */
    public static final int CP56TIME2A_LENGTH = 7;
    
    /**
     * 物理卡号长度
     */
    public static final int PHYSICAL_CARD_NO_LENGTH = 8;
    
    /**
     * 逻辑卡号长度
     */
    public static final int LOGICAL_CARD_NO_LENGTH = 8;
    
    /**
     * VIN码长度
     */
    public static final int VIN_LENGTH = 17;
}
