LCOV - code coverage report
Current view: top level - zephyr/net - ocpp.h Coverage Total Hit
Test: new.info Lines: 81.6 % 38 31
Test Date: 2025-09-05 22:20:39

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2024 Linumiz
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : /**
       8              :  * @file ocpp.h
       9              :  *
      10              :  * @defgroup ocpp_api OCPP library
      11              :  * @since 4.3
      12              :  * @version 0.1.0
      13              :  * @ingroup networking
      14              :  * @{
      15              :  * @brief OCPP Charge Point Implementation
      16              :  *
      17              :  * @note The implementation assumes Websocket module is enabled.
      18              :  *
      19              :  * @note By default the implementation uses OCPP version 1.6.
      20              :  */
      21              : 
      22              : #ifndef ZEPHYR_INCLUDE_NET_OCPP_H_
      23              : #define ZEPHYR_INCLUDE_NET_OCPP_H_
      24              : 
      25              : #include <stdio.h>
      26              : #include <zephyr/kernel.h>
      27              : #include <zephyr/net/net_ip.h>
      28              : 
      29              : #ifdef __cplusplus
      30              : extern "C" {
      31              : #endif
      32              : 
      33              : /** Max length of string literals e.g idtag */
      34            1 : #define CISTR50 50
      35              : 
      36              : /**
      37              :  * @brief OCPP IdTag authorization status in result to ocpp request
      38              :  *        authorization
      39              :  */
      40            1 : enum ocpp_auth_status {
      41              :         OCPP_AUTH_INVALID,      /**< IdTag not valid */
      42              :         OCPP_AUTH_ACCEPTED,     /**< accepted, allowed to charge */
      43              :         OCPP_AUTH_BLOCKED,      /**< blocked to charge */
      44              :         OCPP_AUTH_EXPIRED,      /**< IdTag expired, not allowed to charge */
      45              :         OCPP_AUTH_CONCURRENT_TX /**< Parallel access of same IdTag */
      46              : };
      47              : 
      48            0 : enum ocpp_notify_reason {
      49              :         /** User must fill the current reading */
      50              :         OCPP_USR_GET_METER_VALUE,
      51              : 
      52              :         /** Process the start charging request as like idtag received from local
      53              :          *  e.g authorize etc
      54              :          */
      55              :         OCPP_USR_START_CHARGING,
      56              : 
      57              :         /** Process the stop charging sequence */
      58              :         OCPP_USR_STOP_CHARGING,
      59              : 
      60              :         /** Unlock mechanical connector of CP */
      61              :         OCPP_USR_UNLOCK_CONNECTOR,
      62              : };
      63              : 
      64              : /** @brief OCPP meter readings to be filled on user callback request from
      65              :  *         library
      66              :  */
      67            0 : enum ocpp_meter_measurand {
      68              :         OCPP_OMM_CURRENT_FROM_EV,               /**< current from EV, in A */
      69              :         OCPP_OMM_CURRENT_TO_EV,                 /**< current to EV, in A */
      70              :         OCPP_OMM_CURRENT_MAX_OFFERED_TO_EV,     /**< maximum current offered to EV, in A */
      71              :         OCPP_OMM_ACTIVE_ENERGY_FROM_EV,         /**< active energy from EV, in Wh */
      72              :         OCPP_OMM_ACTIVE_ENERGY_TO_EV,           /**< active energy to EV, in Wh */
      73              :         OCPP_OMM_REACTIVE_ENERGY_FROM_EV,       /**< reactive energy from EV, in varh */
      74              :         OCPP_OMM_REACTIVE_ENERGY_TO_EV,         /**< reactive energy to EV, in varh */
      75              :         OCPP_OMM_ACTIVE_POWER_FROM_EV,          /**< active power from EV, in W */
      76              :         OCPP_OMM_ACTIVE_POWER_TO_EV,            /**< active power to EV, in W */
      77              :         OCPP_OMM_REACTIVE_POWER_FROM_EV,        /**< reactive power from EV, in var */
      78              :         OCPP_OMM_REACTIVE_POWER_TO_EV,          /**< reactive power to EV, in var */
      79              :         OCPP_OMM_POWERLINE_FREQ,                /**< powerline frequency, in Hz */
      80              :         OCPP_OMM_POWER_FACTOR,                  /**< power factor of supply */
      81              :         OCPP_OMM_POWER_MAX_OFFERED_TO_EV,       /**< maximum power offered to EV, in W */
      82              :         OCPP_OMM_FAN_SPEED,                     /**< fan speed, in rpm */
      83              :         OCPP_OMM_CHARGING_PERCENT,              /**< charging percentage */
      84              :         OCPP_OMM_TEMPERATURE,                   /**< temperature inside charge point, in Celsius */
      85              :         OCPP_OMM_VOLTAGE_AC_RMS,                /**< AC RMS supply voltage, in V */
      86              : 
      87              :         OCPP_OMM_END
      88              : };
      89              : 
      90              : /** @brief OCPP user callback notification/request of input/output values
      91              :  *         union member should be accessed with enum value ocpp_notify_reason
      92              :  *         correspondingly.
      93              :  *         e.g. callback reason is OCPP_USR_GET_METER_VALUE, struct meter_val
      94              :  *              is valid
      95              :  */
      96            1 : union ocpp_io_value {
      97              : 
      98              :         struct {
      99              :                 /** Input to user, requested connector_id or 0 - main meter */
     100            1 :                 int id_con;
     101              : 
     102              :                 /** Input to user, measurand */
     103            1 :                 enum ocpp_meter_measurand mes;
     104              : 
     105              :                  /** To be filled by user, value as string */
     106            1 :                 char val[CISTR50];
     107            0 :         } meter_val;
     108              : 
     109              :         struct {
     110            1 :                 char idtag[CISTR50];    /**< Input to user */
     111              : 
     112              :                 /** Input to user(optional). connector id -1 means invalid */
     113              :                 int id_con;
     114            0 :         } start_charge;
     115              : 
     116              :         struct {
     117              :                 int id_con;     /**< Input to user, to stop charging connector */
     118            0 :         } stop_charge;
     119              : 
     120              :         struct {
     121              :                 int id_con;     /**< Input to user, to unlock connector id. */
     122            0 :         } unlock_con;
     123              : };
     124              : 
     125              : /** @brief Parameters for ocpp_init information about Charge Point (CP)
     126              :  *         all are string literal except num_of_con
     127              :  */
     128            1 : struct ocpp_cp_info {
     129            1 :         char *model;            /**< Charge Point (CP) model */
     130            1 :         char *vendor;           /**< CP vendor */
     131              : 
     132            1 :         int num_of_con;         /**< Max. number of connector supports */
     133              : 
     134              :         /** optional fields */
     135            1 :         char *sl_no;            /**< CP serial number */
     136            1 :         char *box_sl_no;        /**< Box serial number */
     137            1 :         char *fw_ver;           /**< Firmware version */
     138            1 :         char *iccid;            /**< ICC ID */
     139            1 :         char *imsi;             /**< IMSI */
     140            1 :         char *meter_sl_no;      /**< Main power meter serial number */
     141            1 :         char *meter_type;       /**< Main power meter type */
     142              : };
     143              : 
     144              : /** @brief Parameters for ocpp_init information about central system (CS) */
     145            1 : struct ocpp_cs_info {
     146            1 :         char *cs_ip;    /**< Central system IP address */
     147            1 :         char *ws_url;   /**< Websocket url exclude ipaddr & port */
     148            1 :         int port;       /**< Central system port number */
     149            1 :         sa_family_t sa_family; /**< IP protocol family type 4/6 */
     150              : };
     151              : 
     152              : /** @brief Parameters opaque session handle for ocpp_* API */
     153            1 : typedef void *ocpp_session_handle_t;
     154              : 
     155              : /**
     156              :  * @brief Asynchronous event notification callback registered by the
     157              :  *        application. advised callback should not be hold for longer time
     158              :  *        to unblock the ocpp protocol stack/lib.
     159              :  *
     160              :  * @param[in] reason for callback invoked.
     161              :  * @param[in] io reffered corresponding to reason.
     162              :  * @param[in] user_data passed on ocpp_init.
     163              :  *
     164              :  * @return 0 or a negative error code (errno.h)
     165              :  */
     166            1 : typedef int (*ocpp_user_notify_callback_t)(enum ocpp_notify_reason reason,
     167              :                                            union ocpp_io_value *io,
     168              :                                            void *user_data);
     169              : 
     170              : /**
     171              :  * @brief OCPP library init.
     172              :  *
     173              :  * @param[in] cpi Charge Point information
     174              :  * @param[in] csi Central System information
     175              :  * @param[in] cb user register callback
     176              :  * @param[in] user_data same reference will be passed on callback
     177              :  *
     178              :  * @return 0 on success or a negative error code (errno.h) indicating reason of failure
     179              :  *
     180              :  * @note Must be called before any other ocpp API
     181              :  */
     182            1 : int ocpp_init(struct ocpp_cp_info *cpi,
     183              :               struct ocpp_cs_info *csi,
     184              :               ocpp_user_notify_callback_t cb,
     185              :               void *user_data);
     186              : 
     187              : /**
     188              :  * @brief API to request a new Session
     189              :  *
     190              :  * @param[out] hndl a valid opaque handle
     191              :  *
     192              :  * @return 0 on success or a negative error code (errno.h) indicating reason of failure
     193              :  *
     194              :  * @note Each connector should open unique session after ocpp_init and
     195              :  * prior to anyother ocpp_* request message api
     196              :  */
     197            1 : int ocpp_session_open(ocpp_session_handle_t *hndl);
     198              : 
     199              : /**
     200              :  * @brief API to close a Session
     201              :  *
     202              :  * @param[in] hndl a handle received from session open
     203              :  */
     204            1 : void ocpp_session_close(ocpp_session_handle_t hndl);
     205              : 
     206              : /**
     207              :  * @brief Authorize request call to CS to get validity of idtag
     208              :  *
     209              :  * @param[in] hndl session handle
     210              :  * @param[in] idtag (string literal) to get authorize validity
     211              :  * @param[out] status authorization status
     212              :  * @param[in] timeout_ms timeout in msec
     213              :  *
     214              :  * @return 0 on success or a negative error code (errno.h) indicating reason of failure
     215              :  */
     216            1 : int ocpp_authorize(ocpp_session_handle_t hndl,
     217              :                    char *idtag,
     218              :                    enum ocpp_auth_status *status,
     219              :                    uint32_t timeout_ms);
     220              : 
     221              : /**
     222              :  * @brief Notify transaction start to CS
     223              :  *
     224              :  * @param[in] hndl session handle
     225              :  * @param[in] meter_val energy meter reading of this connector in Wh
     226              :  * @param[in] conn_id connector id should be > 0 and sequential number
     227              :  * @param[in] timeout_ms timeout in msec
     228              :  *
     229              :  * @return: 0 on success
     230              :  *          EACCES - not authorized, should follow the stop charging process
     231              :  *          a negative error code (errno.h) indicating reason of failure
     232              :  */
     233            1 : int ocpp_start_transaction(ocpp_session_handle_t hndl,
     234              :                            int meter_val,
     235              :                            uint8_t conn_id,
     236              :                            uint32_t timeout_ms);
     237              : 
     238              : /**
     239              :  * @brief Notify transaction stopped to CS
     240              :  *
     241              :  * @param[in] hndl session handle
     242              :  * @param[in] meter_val energy meter reading of this connector in Wh
     243              :  * @param[in] timeout_ms timeout in msec
     244              :  *
     245              :  * @return 0 on success or a negative error code (errno.h) indicating reason of failure
     246              :  */
     247            1 : int ocpp_stop_transaction(ocpp_session_handle_t hndl,
     248              :                           int meter_val,
     249              :                           uint32_t timeout_ms);
     250              : 
     251              : #ifdef __cplusplus
     252              : }
     253              : #endif
     254              : 
     255              : #endif /* ZEPHYR_INCLUDE_NET_OCPP_H_ */
     256              : 
     257              : /**@}  */
        

Generated by: LCOV version 2.0-1