Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,219 @@
|
||||
#ifndef _BS_OCPP_CTRL_H_
|
||||
#define _BS_OCPP_CTRL_H_
|
||||
|
||||
#include "publicdata/type.h"
|
||||
#include "publicdata/public_define.h"
|
||||
|
||||
|
||||
|
||||
#if BS_OCPP_EN //OCPP平台使能
|
||||
#include "bs_ocpp_json_data.h"
|
||||
#include "meter_calculate/meter_calculate_impl.h"
|
||||
#include "publicdata/publicdata.h"
|
||||
#include "main.h"
|
||||
#include "flash_file_mgr/ocpp_mv_offline_flash_impl.h"
|
||||
|
||||
#define OCPP_TIMERCNT_NUM 12 //ocpp 计时计数
|
||||
#define OCPP_ACK_STRUCT_NUM 5 //ocpp 应答结构体数量
|
||||
|
||||
#define OCPP_MALLOC pvPortMalloc
|
||||
#define OCPP_FREE vPortFree
|
||||
|
||||
typedef enum{
|
||||
OCPP_TIMER_BootNotification = 0, //登录帧
|
||||
OCPP_TIMER_Heartbeat, //心跳帧
|
||||
OCPP_TIMER_StatusNotification_GUNA, //A枪 状态上传
|
||||
OCPP_TIMER_StatusNotification_GUNB, //B枪 状态上传
|
||||
OCPP_TIMER_MeterValues_GUNA, //A枪电表数据上传
|
||||
OCPP_TIMER_MeterValues_GUNB, //B枪电表数据上传
|
||||
OCPP_TIMER_StopTransaction_GUNA, //A枪停止充电数据上传
|
||||
OCPP_TIMER_StopTransaction_GUNB, //B枪停止充电数据上传
|
||||
OCPP_TIMER_Authorize_GUNA, //A枪鉴权查询上传
|
||||
OCPP_TIMER_Authorize_GUNB, //B枪鉴权查询上传
|
||||
}OCPP_SEND_TIMER;
|
||||
|
||||
typedef enum{
|
||||
OCPP_STATE_CHANGE_FLAG = 0, //状态变位标志
|
||||
OCPP_TRADE_UPLOAD_FLAG, //交易订单上传标志
|
||||
OCPP_START_RESULT_FLAG, //启动结果上送标志
|
||||
OCPP_STOP_RESULT_FLAG, //停止结果上送标志
|
||||
OCPP_VIN_START_FLAG, //VIN鉴权请求上送标志
|
||||
OCPP_VIN_RESULT, //VIN鉴权结果
|
||||
OCPP_BILL_INDEX, //上送订单索引号
|
||||
}OCPP_CHARGE_FLAG;
|
||||
|
||||
/** DiagnosticsStatusNotification 待上送状态:外部/FTP 仅赋值;ocpp_send_mag_ctrl 监听非 0 则发送并清 0 */
|
||||
typedef enum {
|
||||
OCPP_DIAG_NOTIFY_PENDING_NONE = 0,
|
||||
OCPP_DIAG_NOTIFY_PENDING_UPLOADING,
|
||||
OCPP_DIAG_NOTIFY_PENDING_UPLOADED,
|
||||
OCPP_DIAG_NOTIFY_PENDING_UPLOAD_FAILED,
|
||||
} OCPP_DIAG_NOTIFY_PENDING_E;
|
||||
|
||||
/** FirmwareStatusNotification 待上送状态:与 Diagnostics 同套路(u8_*_notify_pending + ocpp_send_mag_ctrl) */
|
||||
typedef enum {
|
||||
OCPP_FW_NOTIFY_PENDING_NONE = 0,
|
||||
OCPP_FW_NOTIFY_PENDING_DOWNLOADING,
|
||||
OCPP_FW_NOTIFY_PENDING_DOWNLOADED,
|
||||
OCPP_FW_NOTIFY_PENDING_INSTALLING,
|
||||
OCPP_FW_NOTIFY_PENDING_INSTALLED,
|
||||
OCPP_FW_NOTIFY_PENDING_DOWNLOAD_FAILED,
|
||||
OCPP_FW_NOTIFY_PENDING_INSTALLATION_FAILED,
|
||||
} OCPP_FW_NOTIFY_PENDING_E;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
U8_T flag; //存储标志
|
||||
U8_T check_count; //查询次数
|
||||
U8_T gunNo; //抢号
|
||||
U16_T u16_cnt; /* 存储计数(回绕安全:v_clear_save_cmd 基于 max-min 差值检测回绕)*/
|
||||
OCPP_CMD cmd; //命令值
|
||||
char key[64]; //随机数密钥
|
||||
}OCPP_DATA_SAVE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
OCPP_CMD cmd; //命令值
|
||||
U8_T gunNo; //枪号
|
||||
U8_T type; //应答数据类型 不同帧自定义
|
||||
U8_T timer_cnt; //计时计数 用于超时判定
|
||||
char ack_key[64]; //回复相同秘钥
|
||||
char ack_data[32]; //应答数据内容 不同帧自定义
|
||||
}OCPP_DATA_RECV_ACK;
|
||||
|
||||
/** 未结补单:先 Authorize 再 StartTransaction 的鉴权阶段 */
|
||||
typedef enum {
|
||||
OCPP_UNSETTLED_AUTH_NONE = 0,
|
||||
OCPP_UNSETTLED_AUTH_WAIT,
|
||||
OCPP_UNSETTLED_AUTH_OK
|
||||
} OCPP_UNSETTLED_AUTH_PHASE_E;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
U8_T id; //平台id 0-1
|
||||
U8_T u8_register_flag; //登录标志
|
||||
U8_T u8_ping_ack; //ping包回复标志
|
||||
|
||||
U8_T u8_unsettled_order_flag; //离线订单上送检查
|
||||
U8_T u8_reboot_flag; //重启标志 0无动作 1平台下发重启 2本地重启
|
||||
U8_T u8_log_file_upload; //日志文件上传标志
|
||||
U8_T u8_diag_notify_pending; //见 OCPP_DIAG_NOTIFY_PENDING_E,仅赋值触发;发送在 ocpp_send_mag_ctrl
|
||||
U8_T u8_fw_notify_pending; //见 OCPP_FW_NOTIFY_PENDING_E,与 u8_diag_notify_pending 并列、同发送机制
|
||||
U8_T u8_fw_reboot_pending; //Installed 已成功上送后再 v_sys_reboot(避免未上报即复位)
|
||||
U8_T u8_fw_installing_fsn_sent; //FSN(Installing) 已 sm>0 发出;STEP_FTP_SAVE 写头/复位前须为 1
|
||||
|
||||
S_LOG_DATA *s_unsettled_order_data;
|
||||
U8_T u8_unsettled_auth_phase; // 未结补单:Authorize→StartTransaction 流水线阶段,取值见 OCPP_UNSETTLED_AUTH_PHASE_E
|
||||
U32_T u32_unsettled_last_auth_s; // 未结补单:上次发出 Authorize 的秒时间戳(get_current_seconds),用于发送节流
|
||||
U32_T u32_unsettled_last_stx_s; // 未结补单:上次发出 StartTransaction 的秒时间戳(get_current_seconds),用于发送节流
|
||||
|
||||
|
||||
struct
|
||||
{
|
||||
U8_T u8_MeterValues_type; //数据上送标志 0无动作 1空闲数据上送 2充电中数据上送 3交易开始数据上送 4交易停止数据上送
|
||||
|
||||
//平台召测数据 "BootNotification","DiagnosticsStatusNotification","FirmwareStatusNotification","Heartbeat","MeterValues","StatusNotification"
|
||||
U8_T u8_get_Trigger_BootNotification;
|
||||
U8_T u8_get_Trigger_DiagnosticsStatusNotification;
|
||||
U8_T u8_get_Trigger_FirmwareStatusNotification;
|
||||
U8_T u8_get_Trigger_Heartbeat;
|
||||
U8_T u8_get_Trigger_MeterValues;
|
||||
U8_T u8_get_Trigger_StatusNotification;
|
||||
|
||||
U8_T u8_aut_cnt; //鉴权次数
|
||||
U8_T u8_StatusNotification_send_cnt; //状态上传次数(保留,周期上送已取消)
|
||||
U8_T u8_need_status_after_login; // BootNotification Accepted/Pending 后每枪需上送一次 StatusNotification
|
||||
|
||||
U8_T s_u8_mv_ws_fail_snap_req; /** MeterValues ws 发送失败时置位,下一周期强制写一条离线 MV */
|
||||
int s_ocpp_live_stop_tx_id; /** 在线已上送 StopTransaction 的 transactionId(按枪),-1 表示无 */
|
||||
}s_ctrl_flag[GUN_MAX_CNT]; //数据控制标志
|
||||
|
||||
struct
|
||||
{
|
||||
U16_T u16_timerCnt; //周期发送计数
|
||||
U16_T u16_timeNUM ; //计数周期值
|
||||
}s_timerCnt[OCPP_TIMERCNT_NUM];
|
||||
|
||||
U16_T u16_ocpp_ping_timer; //ping包周期计数
|
||||
U32_T u32_timer; //计时计数
|
||||
ULONG ulong_timer; //接收计时
|
||||
OCPP_DATA_RECV_ACK *ack_ctrl[OCPP_ACK_STRUCT_NUM];
|
||||
}OCPP_DATA_CTRL;
|
||||
|
||||
int recv_mags(char* recv_mag);
|
||||
|
||||
|
||||
/****************************************************
|
||||
*函数名称: v_ocpp_init_data()
|
||||
*功能说明: OCPP 应用层全量初始化:`v_ocpp_mv_offline_init`、清 OCPP_DATA_CTRL、Flash 配置与定时器、再走联网恢复(含 4G)
|
||||
*参数说明:
|
||||
* 上电由平台主任务调用;TCP 长时间连不上时亦调用本函数;diag/fw 等 pending 随 memset 清零
|
||||
****************************************************/
|
||||
void v_ocpp_init_data(U8_T bs_flag);
|
||||
/** 仅联网恢复:释放应答、可选 v_bs_4G_data_init、fd=-1、ulong_restart_timer;不执行 memset(OCPP_DATA_CTRL) */
|
||||
void v_ocpp_init_data_ex(U8_T bs_flag, U8_T reset_4g_modem);
|
||||
/****************************************************
|
||||
*函数名称: v_ocpp_tcp_connect()
|
||||
*功能说明: TCP连接功能实现 - 配置4G模块
|
||||
*参数说明:
|
||||
* 输入参数:
|
||||
* 输出参数: 0失败 1成功
|
||||
****************************************************/
|
||||
U8_T v_ocpp_tcp_connect();
|
||||
/****************************************************
|
||||
*函数名称: v_ocpp_logo_on()
|
||||
*功能说明: 平台桩信息登录 -
|
||||
*参数说明:
|
||||
* 输入参数:
|
||||
* 输出参数: 0失败 1成功
|
||||
****************************************************/
|
||||
U8_T v_ocpp_logo_on();
|
||||
/****************************************************
|
||||
*函数名称: v_ocpp_recv_data()
|
||||
*功能说明: 数据接收处理 -
|
||||
*参数说明:
|
||||
* 输入参数:
|
||||
* 输出参数:
|
||||
****************************************************/
|
||||
void v_ocpp_recv_data();
|
||||
/****************************************************
|
||||
*函数名称: v_ocpp_send_ctrl()
|
||||
*功能说明: sdk私有协议逻辑控制 -
|
||||
*参数说明:
|
||||
* 输入参数:
|
||||
* 输出参数:
|
||||
****************************************************/
|
||||
void v_ocpp_send_ctrl();
|
||||
/****************************************************
|
||||
*函数名称: v_ocpp_private_logic()
|
||||
*功能说明: sdk私有协议逻辑控制 -
|
||||
*参数说明:
|
||||
* 输入参数:
|
||||
* 输出参数:
|
||||
****************************************************/
|
||||
void v_ocpp_private_logic(U8_T bs_flag);
|
||||
/** 仅置 u8_diag_notify_pending(Uploaded / UploadFailed);实际上送由 ocpp_send_mag_ctrl 监听该变量完成 */
|
||||
void v_ocpp_set_diag_upload_notify_pending(U8_T pending);
|
||||
/** 置 u8_fw_notify_pending;合法值见 OCPP_FW_NOTIFY_PENDING_E;实际上送由 ocpp_send_mag_ctrl */
|
||||
void v_ocpp_set_fw_notify_pending(U8_T pending);
|
||||
/** FSN(Installing) 是否已由 ocpp_send_mag_ctrl 成功发出(供 ec200a STEP_FTP_SAVE 等待) */
|
||||
U8_T u8_ocpp_fw_installing_fsn_sent(void);
|
||||
void v_ocpp_clr_fw_installing_fsn_sent(void);
|
||||
/** Installed 上送成功后需复位:置位,由 ocpp_send_mag_ctrl 在 FSN(Installed) 发出后调用 v_sys_reboot(旧流程;FTP 升级现改 EEPROM+先复位) */
|
||||
void v_ocpp_set_fw_reboot_after_installed(U8_T pending);
|
||||
/** FTP 写升级头后:FRAM 置位,复位;BootNotification Accepted/Pending 后再发 FSN Installed */
|
||||
void v_ocpp_fw_eeprom_set_installed_after_boot(void);
|
||||
/** 在线会话已上送 StopTransaction(如 Remote)后登记 txId,避免 EEPROM 掉电单重复 StopTx PowerLoss */
|
||||
void v_ocpp_mark_live_stop_tx_done(U8_T gun_idx, int transaction_id);
|
||||
/** 未结/掉电补单是否应跳过(同枪同 txId 已在线停充上送) */
|
||||
U8_T u8_ocpp_skip_unsettled_stop_for_live_tx(S_LOG_DATA *log);
|
||||
/** 未结单与当前枪正在进行的在线充电为同一会话(勿 StopTx / 勿抢 session MV 补发) */
|
||||
U8_T u8_ocpp_unsettled_is_live_charging_session(S_LOG_DATA *log);
|
||||
|
||||
/** 未结订单:preTradeNo 是否仍为占位/空(须先 Authorize→StartTransaction) */
|
||||
U8_T u8_ocpp_is_pre_trade_no_pending(const U8_T *p);
|
||||
/** 补发一条离线缓存的 MeterValues(与 send_mag 主动帧格式一致) */
|
||||
int32_t s32_ocpp_send_meter_values_replay(int gunNo, int transactionId, const S_OCPP_MV_OFFLINE_MV *mv);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user