Files
kunlun/app/chargepile/iot_cp_socket.h
2024-09-28 14:24:04 +08:00

382 lines
13 KiB
C
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/****************************************************************************
*
* Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
*
* This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
* be copied by any method or incorporated into another program without
* the express written consent of Aerospace C.Power. This Information or any portion
* thereof remains the property of Aerospace C.Power. The Information contained herein
* is believed to be accurate and Aerospace C.Power assumes no responsibility or
* liability for its use in any way and conveys no license or title under
* any patent or copyright and makes no representation or warranty that this
* Information is free from patent or copyright infringement.
*
* ****************************************************************************/
#ifndef _INCLUDE_IOT_CP_SOCKET_H_
#define _INCLUDE_IOT_CP_SOCKET_H_
/******************************************************************************/
/**************************** Defination used by Task *************************/
/******************************************************************************/
/* event ID */
enum cp_socket_status_event_id_e {
/* in idle status*/
CP_SOCKET_EVENT_ID_IDLE = 0x00,
/* confirm event for begaining to charge */
CP_SOCKET_EVENT_ID_CHARG_START_CFM = 0x01,
/* confirm event for stopping charging */
CP_SOCKET_EVENT_ID_CHARG_STOP_CFM = 0x02,
/* plug in/out */
CP_SOCKET_EVENT_ID_PLUG_IO = 0x03,
/* abnormal voltage: 0ver/under volt */
CP_SOCKET_EVENT_ID_ABNORM_VOLT = 0x04,
/* abnormal current: overcurrent */
CP_SOCKET_EVENT_ID_ABNORM_CURR = 0x05,
/* leakage current */
CP_SOCKET_EVENT_ID_LEAKAGE = 0x06,
/* ground connection error */
CP_SOCKET_EVENT_ID_GROUND_ERR = 0x07,
/* ... */
CP_SOCKET_EVENT_ID_UNKNOWN = 0xFF,
};
/* List of the command id. */
enum cp_socket_cmd_id_e {
/* config/query parameter. */
CP_SOCKET_CID_CONFIG = 0x00,
/* query/response/indication the plug state */
CP_SOCKET_CID_PLUG_INFO = 0x01,
/* indication when event happes, see CP_SOCKET_EVENT_XX */
CP_SOCKET_CID_STATUS_EVENT = 0x02,
/* periodly report data event: indicate */
CP_SOCKET_CID_DATA_EVENT = 0x03,
/* set the relay state */
CP_SOCKET_CID_RELAY_STATE = 0x04,
/* max command id */
CP_SOCKET_CID_MAX = 0x05,
/* ... */
/* invalid opertion code */
CP_SOCKET_INVALID = 0xFF,
};
/* Operation code. */
enum cp_socket_cmd_opcode_e {
/* command for change the meter configuration or relay state */
CP_SOCKET_OP_CONFIG = 0x00,
/* response config result error or ok to upper layer */
CP_SOCKET_OP_CFM = 0x01,
/* command for query the status or configuration */
CP_SOCKET_OP_QUERY = 0x02,
/* response query message to upper layer */
CP_SOCKET_OP_RESPONSE = 0x03,
/* indicate message to upper layer */
CP_SOCKET_OP_INDICATION = 0x04,
/* the max op number. */
CP_SOCKET_OP_MAX = CP_SOCKET_OP_INDICATION,
/* ... */
/* invalid opertion code */
CP_SOCKET_OP_INVALID = 0xFF,
};
/* Return status of the command */
enum cp_socket_cmd_response_e {
CP_SOCKET_RESP_OK = 0x00,
CP_SOCKET_RESP_ERROR = 0x01,
CP_SOCKET_RESP_BUSY = 0x02,
/* ... */
CP_SOCKET_RESP_UNKNOWN = 0xFF,
};
/* reasons of command hand failure */
enum cp_socket_cmd_fail_reason_e {
/* no failure */
CP_SOCKET_NO_FAIL = 0x00,
/* CID is not supported */
CP_SOCKET_FAIL_CID_NOT_SUPPORT = 0x01,
/* op_code is not supported */
CP_SOCKET_FAIL_OPC_NOT_SUPPORT = 0x02,
/* busy, not handle */
CP_SOCKET_FAIL_BUSY = 0x03,
/* parameter is invaild */
CP_SOCKET_FAIL_PARAM_ERR = 0x04,
/* ... */
CP_SOCKET_FAIL_UNKNOWN = 0xFF,
};
/* 0:first socket..., max is the total num of sockets, all select all sockets */
enum cp_socket_id_e {
/* the first socket */
CP_SOCKET_ID_0 = 0,
CP_SOCKET_ID_1 = 1,
CP_SOCKET_ID_2 = 2,
CP_SOCKET_ID_3 = 3,
/* select all sockets */
CP_SOCKET_ID_ALL = 4,
/* the max socket num */
CP_SOCKET_ID_MAX = CP_SOCKET_ID_ALL,
};
#pragma pack(push) // save the pack status
#pragma pack(1) // 1 byte align
typedef struct _cp_socket_fault_t {
/* error status */
uint16_t overvolt :1,
/* undervolt */
undervolt :1,
/* overcurrent */
overcur :1,
/* overload */
overload :1,
/* over temperature */
overtemp :1,
/* connection faluare */
conn_fail :1,
/* leak-current protection */
leak_cur_protec :1,
/* ground fault */
gnd_err :1,
/* charging timeout alarm enable */
charg_timeout :1,
/* reserved for future */
resved :7;
} cp_socket_fault_t;
/* parameter whitch will config into socket */
typedef struct _cp_socket_cmd_cfg_param_t {
/* target plug's number, range from 0 to 3, 4 means target
* plugs are all of the 4 plugs
*/
uint8_t plug_id;
/* the rated voltage, such as 110V or 220v, unit: 1V */
uint32_t rated_volt;
/* the current threshold when charge full, unit:1mA1~1000*/
uint16_t charge_full_i_th;
/* the current threshold when load is over, unit:0.1A1~160*/
uint16_t overload_i_th;
/* the current threshold when leak,unit:1 mA1~255*/
uint8_t leak_i_th;
/* threshold of open circuit */
uint8_t discon_cur_th;
union {
/* overvolt alarm enable */
uint16_t alarm_en_overvolt :1,
/* undervolt alarm enable */
alarm_en_undervolt :1,
/* overcurrent alarm enable */
alarm_en_overcur :1,
/* overload alarm enable */
alarm_en_overload :1,
/* over temperature enable */
alarm_en_overtemp :1,
/* connection failure temperature enable */
alarm_en_conn_fail :1,
/* leak-current protection alarm enable */
alarm_en_leak_cur :1,
/* ground fault alarm enable */
alarm_en_gnd_err :1,
/* charging timeout alarm enable */
alarm_en_charge_timeout :1,
/* reserved for future */
resved :7;
uint16_t alarm_en_data;
} alarm;
} cp_socket_cmd_cfg_param_t;
/* relay state */
typedef struct _cp_relay_state_t {
/* target plug's ID, range from 0 to 3, 4 means target
* plugs are all of the 4 plugs
*/
uint8_t plug_id;
bool_t relay_state;
} cp_relay_state_t;
/* query the assigned plug's configration parameters */
typedef struct _cp_socket_cmd_query_param_t {
/* target plug's ID, range from 0 to 3, 4 means target
* plugs are all of the 4 plugs
*/
uint8_t plug_id;
} cp_socket_cmd_query_param_t;
/* response the configuration prameter: from socket task to cp_task */
typedef struct _cp_socket_cmd_param_resp_t {
/* how many plug's config parameter containd by the pkt */
uint8_t plug_cnt;
/* plug's parameter setting data */
cp_socket_cmd_cfg_param_t param[0];
} cp_socket_cmd_param_resp_t;
/* single plug's meter data */
typedef struct _cp_socket_plug_meter_data_t {
/* charging current, unit: mA */
uint32_t charging_i;
/* power rate, unit: w */
uint32_t power_rate;
/*The amount of electricity since power on, unit: 0.01kwh */
uint32_t pwr_consum;
/* power factor, unit: 0.01 */
uint8_t pwr_factor;
} cp_socket_plug_meter_data_t;
/* single plug's info include meter data and plugin status,fault status */
typedef struct _cp_socket_plug_info_t {
/* plug's ID, range from 0 to 3, 4 means all */
uint8_t plug_id;
/* plug's meter data */
cp_socket_plug_meter_data_t meter_data;
/* Monitor plug or unplug state. 0--unpluged, 1--plugged */
bool_t is_plug_in;
/* incumbent volt of plug, unit: 100mv */
uint32_t incumbent_v;
/* fault status */
cp_socket_fault_t fault_status;
/* relay state */
bool_t relay_state;
} cp_socket_plug_info_t;
/* report/response the plug infor from meter_task to cp_task */
typedef struct _cp_socket_cmd_plug_info_resp_t {
/* count of plug containd by the pkt */
uint8_t plug_cnt;
/* charging volt, unit: 100mV */
uint32_t volt;
/* leak-current, unit: mA */
uint32_t leak_i;
/* voltage frequnce, unit: 0.01HZ */
uint32_t freq;
/* plug info data */
cp_socket_plug_info_t plug_info[0];
} cp_socket_cmd_plug_info_resp_t;
/* query the assigned plug's info */
typedef struct _cp_socket_cmd_query_plug_info_t {
/* target plug's ID, range from 0 to 3, 4 means target
* plugs are all of the 4 plugs
*/
uint8_t plug_id;
} cp_socket_cmd_query_plug_info_t;
/* once a config command was sent, confirm should be rececived */
typedef struct _cp_socket_cmd_confirm_t {
/* result of the confirm for cmd, 0--successful, none 0-- failed */
uint8_t result;
/* failure reason */
uint8_t reason;
} cp_socket_cmd_confirm_t;
/* query the assigned plug's info */
typedef struct _cp_socket_cmd_query_fault_info_t {
/* target plug's ID, range from 0 to 3, 4 means target
* plugs are all of the 4 plugs
*/
uint8_t plug_id;
} cp_socket_cmd_query_fault_info_t;
/* each socket fault source. */
typedef struct _cp_socket_cmd_fault_src_t {
/* target plug's ID, range from 0 to 3, 4 means target
* plugs are all of the 4 plugs
*/
uint8_t plug_id;
/* source of fault */
cp_socket_fault_t fault_src;
} cp_socket_cmd_fault_src_t;
/* report when fault status event occer. */
typedef struct _cp_socket_cmd_fault_rpt_t {
/* how many sockets fault status response or indicate */
uint8_t plug_cnt;
/* fault status data */
cp_socket_cmd_fault_src_t fault[0];
} cp_socket_cmd_fault_rpt_t;
/* report the plug's data periodcaly */
typedef struct _cp_socket_cmd_event_data_rpt_t {
/* count of plug containd by the pkt */
uint8_t plug_cnt;
/* charging volt, unit: 100mV */
uint32_t volt;
/* leak-current, unit: mA */
uint32_t leak_i;
/* voltage frequnce, unit: 0.01HZ */
uint32_t freq;
/* plug info data, inlcude meter data and event data */
cp_socket_plug_info_t plug_info[0];
} cp_socket_cmd_event_data_rpt_t;
/* report the plug's info periodcaly */
typedef struct _cp_socket_cmd_event_status_t {
/* event id, see EVENT_ID_XXX */
uint8_t event_id;
/* plug id, see CP_SOCKET_ID_X */
uint8_t plug_id;
/* source of fault */
cp_socket_fault_t fault_src;
/* Monitor plug or unplug state. 0--unpluged, 1--plugged */
bool_t is_plug_in;
/* incumbent volt of plug, unit: 100mv */
uint32_t incumbent_v;
/* charging volt, unit: 100mV */
uint32_t volt;
/* leak-current, unit: mA */
uint32_t leak_i;
/* plug's meter data, uplayer may want to known the exact value */
cp_socket_plug_meter_data_t meter_data;
} cp_socket_cmd_event_status_t;
typedef struct _cp_socket_hdr_t {
/* Reference to enum cp_socket_cmd_id_e */
uint8_t cid;
/* Reference to enum cp_socket_cmd_opcode_e */
uint8_t opcode;
} cp_socket_hdr_t;
/* The argument for charging pile socket command handle. */
typedef struct _cp_socket_cmd_arg_t {
/* command header */
cp_socket_hdr_t hdr;
/* the priority of this command. */
uint16_t prio;
uint16_t dlen;
/* if need ack */
uint16_t need_ack;
/* the argument for this command. */
uint8_t arg[0];
} cp_socket_cmd_arg_t;
#pragma pack(pop)
typedef uint32_t(*cp_socket_resp_cb)(iot_pkt_t *pkt);
/* Initialize the iot charging pile socket module. */
uint32_t cp_socket_task_init(void);
/* De-initializing charging pile socket module. */
void cp_socket_task_deinit(void);
/* API function for charging pile task to send cmd to charging pile socket. */
/* for cp socket is to receive cmds; for cp task is to send cmds */
uint32_t cp_socket_cmd_send_mssage(iot_pkt_t *arg);
/* Charging pile task registed callback. Charging pile socket use to
* response command previous received. Cmd-Resp works as ping-pong method.
* Hook interface with charging pile task.
*/
uint32_t cp_socket_register(cp_socket_resp_cb cb);
#endif