Initial commit: CCU621_M firmware project with BLE debug link support.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-08 17:28:36 +08:00
commit 9ceb218f80
1597 changed files with 724159 additions and 0 deletions
+395
View File
@@ -0,0 +1,395 @@
#ifndef _BS_OCPP_CONFIG_H_
#define _BS_OCPP_CONFIG_H_
#include "bs_ocpp_ctrl.h"
#if BS_OCPP_EN //配置参数 分可选、必选
//枚举 每个连接器相对于其电表(若无电表则相对于电网连接)的相序
typedef enum
{
ENUM_NotApplicable, // 不适用(单相交流/直流充电桩,非三相场景)
ENUM_Unknown, // 未知(设备未检测到相序,需人工排查接线)
ENUM_RST, // 标准参考相序(L1-R、L2-S、L3-T,默认推荐配置)
ENUM_RTS, // 反向参考相序(L1-R、L2-T、L3-S,相序反转需修正)
ENUM_SRT, // 反向240度旋转(L1-S、L2-R、L3-T,特殊场景接线)
ENUM_STR, // 标准120度旋转(L1-S、L2-T、L3-R,特殊场景接线)
ENUM_TRS, // 标准240度旋转(L1-T、L2-R、L3-S,特殊场景接线)
ENUM_TSR // 反向120度旋转(L1-T、L2-S、L3-R,特殊场景接线)
} OCPP_CONNECTOR_PHASE;
//枚举MeterValues测量项 顺序固定!不可变更! (定义顺序关联了配置参数结构体里相关数组的下标)
typedef enum
{
// ------------------- 能量累计值(Register- 文档7.31核心能量类 -------------------
ENUM_EnergyActiveExportRegister, // 有功电能输出累计值(Wh)- 设备向电网输出的总有功电能累计
ENUM_EnergyActiveImportRegister, // 有功电能输入累计值(Wh)- 电网向设备输入的总有功电能累计
ENUM_EnergyReactiveExportRegister, // 无功电能输出累计值(VARh)- 设备向电网输出的总无功电能累计
ENUM_EnergyReactiveImportRegister, // 无功电能输入累计值(VARh)- 电网向设备输入的总无功电能累计
// ------------------- 能量时段值(Interval- 文档7.31时段能量类 -------------------
ENUM_EnergyActiveExportInterval, // 有功电能输出时段值(Wh)- 单个时钟对齐时段内输出的有功电能
ENUM_EnergyActiveImportInterval, // 有功电能输入时段值(Wh)- 单个时钟对齐时段内输入的有功电能
ENUM_EnergyReactiveExportInterval, // 无功电能输出时段值(VARh)- 单个时钟对齐时段内输出的无功电能
ENUM_EnergyReactiveImportInterval, // 无功电能输入时段值(VARh)- 单个时钟对齐时段内输入的无功电能
// ------------------- 功率类 - 文档7.31功率计量类 -------------------
ENUM_PowerActiveExport, // 有功功率输出(W)- 设备向电网输出的实时有功功率
ENUM_PowerActiveImport, // 有功功率输入(W)- 电网向设备输入的实时有功功率
ENUM_PowerOffered, // 提供的功率(W)- 充电桩可向EV提供的最大可用有功功率
ENUM_PowerReactiveExport, // 无功功率输出(VAR)- 设备向电网输出的实时无功功率
ENUM_PowerReactiveImport, // 无功功率输入(VAR)- 电网向设备输入的实时无功功率
ENUM_PowerFactor, // 功率因数(无单位,0~1)- 实时有功功率与视在功率的比值
// ------------------- 电流类 - 文档7.31电流计量类 -------------------
ENUM_CurrentImport, // 输入电流(A)- 电网向设备输入的实时电流
ENUM_CurrentExport, // 输出电流(A)- 设备向电网输出的实时电流
ENUM_CurrentOffered, // 提供的电流(A)- 充电桩可向EV提供的最大可用电流
// ------------------- 电气参数类 - 文档7.31基础电气参数 -------------------
ENUM_Voltage, // 电压(V)- 充电桩输出端的实时线电压
ENUM_Frequency, // 电网频率(Hz)- 接入电网的实时频率(50/60Hz)
// ------------------- 物理/状态量类 - 文档7.31非电气计量项 -------------------
ENUM_Temperature, // 温度(℃)- 充电桩/EV电池的实时温度(文档标注为℃/℉,默认℃)
ENUM_SoC, // 电池剩余电量(%- EV电池的State of Charge0~100%
ENUM_RPM, // 转速(转/分钟)- 冷却风扇/泵等设备的实时转速
// 统计最大数量标志,用于定义配置参数中数组空间的大小
ENUM_measurand_Num,
} OCPP_MEASURAND_ID;
/*
//MeterValues测量项结构体
typedef struct
{
OCPP_MEASURAND_ID enum_measurandID; //枚举变量
const char* str_data; //对应字符串内容
}OCPP_MEASURAND_INFO;
*/
/*
// MeterValues测量项 结构体数组(枚举值 ↔ 标准字符串 映射表,只读不可修改。顺序对应枚举顺序,固定不可变更)
const OCPP_MEASURAND_INFO OCPP_measurand_info[] =
*/
// MeterValues测量项 串数组(标准字符串 只读不可修改。顺序对应枚举顺序,固定不可变更)
extern const char *OCPP_measurand_str[];
// 配置参数 结构体 前半部分必选 后半部分可选
typedef struct
{
// ------------------- 必选boolean类型(U8_T -------------------
U8_T u8_AuthorizeRemoteTxRequests; // 远程启动交易是否需要预授权
U8_T u8_LocalAuthorizeOffline; // 离线时是否允许本地授权启动交易
U8_T u8_LocalPreAuthorize; // 在线时是否无需等待中央系统授权即可本地启动交易
U8_T u8_StopTransactionOnEVSideDisconnect; // EV端断开时是否自动停止交易
U8_T u8_StopTransactionOnInvalidId; // 收到无效授权状态时是否停止当前交易
U8_T u8_UnlockConnectorOnEVSideDisconnect; // EV端断开时是否解锁充电点侧连接器
U8_T u8_LocalAuthListEnabled; // 是否启用本地授权列表
// ------------------- 必选integer类型(U16_T -------------------
U16_T u16_ClockAlignedDataInterval; // 时钟对齐数据间隔(秒)
U16_T u16_ConnectionTimeOut; // 准备状态超时自动取消交易时间(秒)
U16_T u16_GetConfigurationMaxKeys; // 单个GetConfiguration请求最大键数量
U16_T u16_HeartbeatInterval; // 心跳间隔(秒)
U16_T u16_MeterValueSampleInterval; // 计量数据采样间隔(秒)
U16_T u16_NumberOfConnectors; // 充电点物理连接器数量
U16_T u16_ResetRetries; // 充电点复位失败后重试次数
U16_T u16_TransactionMessageAttempts; // 交易消息提交失败后重试次数
U16_T u16_TransactionMessageRetryInterval; // 交易消息重试间隔(秒)
U16_T u16_LocalAuthListMaxLength; // 本地授权列表最大存储条目数
U16_T u16_SendLocalListMaxLength; // 单个SendLocalList请求最大发送条目数
U16_T u16_ChargeProfileMaxStackLevel; // 充电配置最大堆叠层级
U16_T u16_ChargingScheduleMaxPeriods; // 单个充电计划最大时段数
U16_T u16_MaxChargingProfilesInstalled; // 同时可安装的充电配置最大数量
// ------------------- 必选CSL类型 -------------------------------
OCPP_CONNECTOR_PHASE enum_ConnectorPhaseRotation[3]; //各枪电表的连接相序
/*合并 MeterValuesAlignedData、
MeterValuesSampledData、
StopTxnAlignedData、
StopTxnSampledData
MeterValues测量项在以上数据单元是否需要
bit 0 MeterValuesAlignedData是否需要
bit 1 MeterValuesSampledData是否需要
bit 2 StopTxnAlignedData是否需要
bit 3 StopTxnSampledData是否需要
*/
U8_T u8_MeterValuesMeasurandNeed[ENUM_measurand_Num];
/*支持的功能配置文件列表
bit 0 :Core(核心) 是否支持
bit 1 FirmwareManagement(固件管理) 是否支持
bit 2 LocalAuthListManagement(本地授权列表管理) 是否支持
bit 3 Reservation(预约) 是否支持
bit 4 SmartCharging(智能充电) 是否支持
bit 5 RemoteTrigger(远程触发) 是否支持
*/
U8_T u8_SupportedFeatureProfiles;
/*充电调度支持的物理量列表
bit 0 'Current'(电流) 是否支持
bit 1 'Power'(功率) 是否支持
*/
U8_T ChargingScheduleAllowedChargingRateUnit;
// ------------------- 可选boolean类型(U8_T0=false,非0=true -------------------
U8_T u8_AllowOfflineTxForUnknownId; // 是否允许未知ID用户离线启动交易
U8_T u8_AuthorizationCacheEnabled; // 是否启用本地授权缓存
U8_T u8_ReserveConnectorZeroSupported; // 是否支持对0号连接器进行预约
U8_T u8_ConnectorSwitch3to1PhaseSupported; // 是否支持交易期间三相切单相充电
// ------------------- 可选integer类型(U16_T,单位见注释) -------------------
U16_T u16_BlinkRepeat; // 充电点指示灯闪烁次数
U16_T u16_ConnectorPhaseRotationMaxLength; // 相位旋转配置最大条目数(补充:可选核心项)
U16_T u16_LightIntensity; // 充电点灯光亮度(百分比)
U16_T u16_MaxEnergyOnInvalidId; // 无效ID用户最大允许充电能量(Wh)
U16_T u16_MeterValuesAlignedDataMaxLength; // 时钟对齐计量项列表最大长度(可选)
U16_T u16_MeterValuesSampledDataMaxLength; // 采样计量项列表最大长度(可选)
U16_T u16_MinimumStatusDuration; // 状态稳定后发送通知的最短持续时间(秒)
U16_T u16_StopTxnAlignedDataMaxLength; // 交易停止时对齐计量项最大长度(可选)
U16_T u16_StopTxnSampledDataMaxLength; // 交易停止时采样计量项最大长度(可选)
U16_T u16_SupportedFeatureProfilesMaxLength; // 支持功能配置文件列表最大长度(可选)
U16_T u16_WebSocketPingInterval; // WebSocket Ping间隔(秒,0表示禁用)
//------------------私有配置------------------------
char QRCodeConnector1[NUM_64];
char QRCodeConnector2[NUM_64];
} OCPP_CONFIG;
typedef struct
{
S8_T s8_ChangeAvailability[GUN_MAX_CNT]; //更改枪可用性 <0 不可用 >=0 可用 ||>0时可扩充枪预约状态
int card_ver; //卡号版本
char chargePointVendor[OCPP_CiString20]; //供应商信息 可改
}S_OCPP_CHARGE_CFG_DATA;
typedef struct
{
Comm_Time time;
OCPP_CONFIG s_ocpp_config_data; //数据内容
S_OCPP_CHARGE_CFG_DATA s_ocpp_charge_data; //充电相关数据
}S_OCPP_FLASH_CFG_DATA;
extern S_OCPP_FLASH_CFG_DATA s_ocpp_flash_cfg_data;
#endif
#if BS_OCPP_EN //OCPP可配置参数
/*
U8 timeNUm
1、将数据类型定义枚举表
2、创建枚举和字符串的映射结构体; 包含枚举变量、支持标志、数据类型、对应字符串内容、
3、编写根据接收字符串查找映射表对应枚举的函数
4、根据枚举码 使用switch 将模块搭建出来
typedef struct
{
1、枚举
2、支持标志 U8_T
3\数据 数字/字符
4、对应字符串内容 char*;
}METERV_MAG;
const METERV_MAG met[] =
{
{1,“a },
{2.},
}
0 1
U8_T u8_action(type =0 get 。1 set ,meiju ,char *v)
meiju eMMC_HIGH_VOLTAGE_RANGE(const char *mag )
{
}
*/
//保存unknown的Key串
extern char *unknown_tmpbuf[GetConfiguration_NUM];
//OCPP可配置参数枚举
typedef enum
{
ENUM_NULL = 0,
//Core Profile
ENUM_ALLOW_OFFLINE_TX_FOR_UNKNOWN_ID, /* 可选 允许未知用户ID的离线交易 (布尔: 0/1) */
ENUM_AUTHORIZATION_CACHE_ENABLED, /* 可选 启用本地授权缓存 (布尔: 0/1) */
ENUM_AUTHORIZE_REMOTE_TX_REQUESTS, /* 必选 允许远程启动充电事务 (布尔: 0/1) */
ENUM_BLINK_REPEAT, /* 可选 充电桩指示灯闪烁次数 (整数: 次数) */
ENUM_CLOCK_ALIGNED_DATA_INTERVAL, /* 必选 时钟对齐的数据上报间隔 (整数: 秒) */
ENUM_CONNECTION_TIME_OUT, /* 必选 TCP连接超时时间 (整数: 秒) */
ENUM_CONNECTOR_PHASE_ROTATION, /* 必选 连接器相位旋转配置 (字符串: L1/L2/L3顺序) */
ENUM_CONNECTOR_PHASE_ROTATION_MAX_LENGTH, /* 可选 相位旋转配置最大长度 (整数: 字节数) */
ENUM_GET_CONFIGURATION_MAX_KEYS, /* 必选 GetConfiguration请求最大返回Key数 (整数: 数量) */
ENUM_HEARTBEAT_INTERVAL, /* 必选 心跳间隔 (整数: 秒) */
ENUM_LIGHT_INTENSITY, /* 可选 充电桩灯光亮度 (整数: 百分比) */
ENUM_LOCAL_AUTHORIZE_OFFLINE, /* 必选 本地离线授权模式 (布尔: 0/1) */
ENUM_LOCAL_PRE_AUTHORIZE, /* 必选 本地预授权模式 (布尔: 0/1) */
ENUM_MAX_ENERGY_ON_INVALID_ID, /* 可选 无效ID用户的最大允许充电能量 (整数: Wh) */
ENUM_METER_VALUES_ALIGNED_DATA, /* 必选 对齐数据上报的测量项列表 (字符串: 逗号分隔的measurand值) */
ENUM_METER_VALUES_ALIGNED_DATA_MAX_LENGTH, /* 可选 对齐数据列表最大长度 (整数: 字符数) */
ENUM_METER_VALUES_SAMPLED_DATA, /* 必选 采样数据上报的测量项列表 (字符串: 逗号分隔的measurand值) */
ENUM_METER_VALUES_SAMPLED_DATA_MAX_LENGTH, /* 可选 采样数据列表最大长度 (整数: 字符数) */
ENUM_METER_VALUE_SAMPLE_INTERVAL, /* 必选 采样间隔 (整数: 秒) */
ENUM_MINIMUM_STATUS_DURATION, /* 可选 状态最小持续时间 (整数: 秒) */
ENUM_NUMBER_OF_CONNECTORS, /* 必选 充电桩连接器数量 (整数: 数量) */
ENUM_RESET_RETRIES, /* 必选 复位重试次数 (整数: 次数) */
ENUM_STOP_TRANSACTION_ON_EV_SIDE_DISCONNECT, /* 必选 EV端断开时停止事务 (布尔: 0/1) */
ENUM_STOP_TRANSACTION_ON_INVALID_ID, /* 必选 无效ID时停止事务 (布尔: 0/1) */
ENUM_STOP_TXN_ALIGNED_DATA, /* 必选 事务停止时的对齐数据项 (字符串: 逗号分隔的measurand值) */
ENUM_STOP_TXN_ALIGNED_DATA_MAX_LENGTH, /* 可选 停止事务对齐数据最大长度 (整数: 字符数) */
ENUM_STOP_TXN_SAMPLED_DATA, /* 必选 停止事务时的采样数据项 (字符串: 逗号分隔的measurand值) */
ENUM_STOP_TXN_SAMPLED_DATA_MAX_LENGTH, /* 可选 停止事务采样数据最大长度 (整数: 字符数) */
ENUM_SUPPORTED_FEATURE_PROFILES, /* 必选 支持的功能配置文件 (字符串: 逗号分隔的FeatureProfile值) */
ENUM_SUPPORTED_FEATURE_PROFILES_MAX_LENGTH, /* 可选 功能配置文件列表最大长度 (整数: 字符数) */
ENUM_TRANSACTION_MESSAGE_ATTEMPTS, /* 必选 事务消息重试次数 (整数: 次数) */
ENUM_TRANSACTION_MESSAGE_RETRY_INTERVAL, /* 必选 事务消息重试间隔 (整数: 秒) */
ENUM_UNLOCK_CONNECTOR_ON_EV_SIDE_DISCONNECT, /* 必选 EV端断开时解锁连接器 (布尔: 0/1) */
ENUM_WEB_SOCKET_PING_INTERVAL, /* 可选 WebSocket Ping间隔 (整数: 秒) */
//Local Auth List Management Profile
ENUM_LOCAL_AUTH_LIST_ENABLED, /* 必选 启用本地授权列表 (布尔: 0/1) */
ENUM_LOCAL_AUTH_LIST_MAX_LENGTH, /* 必选 本地授权列表的最大条目数 (整数) */
ENUM_SEND_LOCAL_LIST_MAX_LENGTH, /* 必选 发送本地列表的最大条目数 (整数) */
//Reservation Profile
ENUM_RESERVE_CONNECTOR_ZERO_SUPPORTED, /* 可选 是否支持预留连接器0 (布尔: 0/1) */
//Smart Charging Profile
ENUM_CHARGE_PROFILE_MAX_STACK_LEVEL, /* 必选 充电配置最大堆叠层级 (整数) */
ENUM_CHARGING_SCHEDULE_ALLOWED_RATE_UNIT, /* 必选 充电速率允许单位 (字符串: "A"或"W") */
ENUM_CHARGING_SCHEDULE_MAX_PERIODS, /* 必选 充电计划最大时段数 (整数) */
ENUM_CONNECTOR_SWITCH_3TO1_PHASE_SUPPORTED, /* 可选 是否支持三相切单相充电 (布尔: 0/1) */
ENUM_MAX_CHARGING_PROFILES_INSTALLED, /* 必选 最大可安装充电配置数 (整数) */
//私有配置
ENUM_QRCODE_TEXT_CONNECTOR1, /* 枪1二维码 */
ENUM_QRCODE_TEXT_CONNECTOR2, /* 枪2二维码 */
//num-end OCPP配置参数的总数量,作为在根据字符串寻找对应枚举变量时的上限;未来添加新变量时需在此位置前添加;
ENUM_OCPP_CONFIG,
}OCPP_CONFIG_KEY_ID;
//OCPP可配置参数是否支持
typedef enum
{
ENUM_SUPPORT_NOT = 0,
ENUM_SUPPORT_YES,
}OCPP_CONFIG_SUPPORT;
//OCPP可配置参数数据类型
typedef enum
{
ENUM_TYPE_INT = 0,
ENUM_TYPE_CSL,
}OCPP_CONFIG_TYPE;
//OCPP修改配置参数返回操作结果
typedef enum
{
ENUM_Rejected = 0,
ENUM_Accepted,
ENUM_Required,
ENUM_NotSupported,
}OCPP_SETCONFIG_RET;
//OCPP获取配置参数返回只读结果
typedef enum
{
ENUM_RnW = 0,
ENUM_R_Only,
}OCPP_GETCONFIG_RET;
//OCPP可配置参数结构体
typedef struct
{
OCPP_CONFIG_KEY_ID u8_keyID; //1,枚举变量
OCPP_CONFIG_SUPPORT u8_support; //2,支持标志 0:不支持,1:支持。
OCPP_CONFIG_TYPE u8_type; //3,数据类型 1:integer2:CSL。
const char* str_data; //4、对应字符串内容 char*;
}OCPP_CONFIG_INFO;
//OCPP可配置参数操作类型
typedef enum
{
ENUM_TYPE_GET = 0,
ENUM_TYPE_SET,
}OCPP_CONFIG_OPERATE;
//OCPP可配置参数结构体数组
extern const OCPP_CONFIG_INFO OCPP_config_info[];
/*******************************************************************************
* 名称: u8_find_OCPP_configID
* 功能: 根据字符串查找对应OCPP配置参数的枚举变量
* 参数: *mag OCPP配置参数的键的字符串
* 返回: 返回该键在OCPP_CONFIG_KEY_ID的对应枚举量,若返回ENUM_NULL则未找到该键
* 说明:
******************************************************************************/
OCPP_CONFIG_KEY_ID u8_find_OCPP_configID(const char *mag);
/*******************************************************************************
* 名称: find_OCPP_configMag
* 功能: 根据配置参数的枚举号 找对应字符串 并赋值
* 参数: keyID 配置参数的枚举号
* *mag 要赋值串的指针头
* u16_len 被赋值的key串最大长度
* 返回: -
* 说明:
******************************************************************************/
void find_OCPP_configMag(OCPP_CONFIG_KEY_ID keyID, char *mag, U16_T u16_len);
/*******************************************************************************
* 名称: u8_check_OCPP_configSupport
* 功能: 根据配置参数的枚举号 找是否支持
* 参数: keyID 配置参数的枚举号
* 返回: 是否支持标志
* 说明:
******************************************************************************/
OCPP_CONFIG_SUPPORT u8_check_OCPP_configSupport(OCPP_CONFIG_KEY_ID keyID);
/*******************************************************************************
* 名称: u8_OCPP_config_operate
* 功能: 对OCPP配置参数进行读或写
* 参数: operate_type 操作类型,ENUM_TYPE_GET--获取参数,ENUM_TYPE_GET--设置参数
* *key_mag 配置参数键的字符串
* *value_mag 配置参数值的字符串
* u16_len 配置参数值的字符串的最大长度
* 返回: 参数修改时:0-Rejected 1-Accepted 2-RebootRequired 3-NotSupported
* 参数获取时 0-readonly-false 1-readonly-ture
* 说明:
******************************************************************************/
U8_T u8_OCPP_config_operate(OCPP_CONFIG_OPERATE operate_type, const char *key_mag, char *value_mag , U16_T u16_len);
/****************************************************
*函数名称: v_ocpp_init_config_data()
*功能说明: 程序运行前 配置参数初始化
*参数说明:
* 输入参数:
* 输出参数:
****************************************************/
void v_ocpp_init_config_data();
void v_flash_save_ocpp_cfg_data(void);
#endif
#endif