Initial Commit
[apps/agl-service-unicens.git] / ucs2-lib / inc / ucs_exc.h
diff --git a/ucs2-lib/inc/ucs_exc.h b/ucs2-lib/inc/ucs_exc.h
new file mode 100644 (file)
index 0000000..e703f6a
--- /dev/null
@@ -0,0 +1,323 @@
+/*------------------------------------------------------------------------------------------------*/
+/* UNICENS V2.1.0-3491                                                                            */
+/* Copyright (c) 2017 Microchip Technology Germany II GmbH & Co. KG.                              */
+/*                                                                                                */
+/* This program is free software: you can redistribute it and/or modify                           */
+/* it under the terms of the GNU General Public License as published by                           */
+/* the Free Software Foundation, either version 2 of the License, or                              */
+/* (at your option) any later version.                                                            */
+/*                                                                                                */
+/* This program is distributed in the hope that it will be useful,                                */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of                                 */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                  */
+/* GNU General Public License for more details.                                                   */
+/*                                                                                                */
+/* You should have received a copy of the GNU General Public License                              */
+/* along with this program.  If not, see <http://www.gnu.org/licenses/>.                          */
+/*                                                                                                */
+/* You may also obtain this software under a propriety license from Microchip.                    */
+/* Please contact Microchip for further information.                                              */
+/*------------------------------------------------------------------------------------------------*/
+
+/*!
+ * \file
+ * \brief Internal header file of class CExc.
+ *
+ * \cond UCS_INTERNAL_DOC
+ * \addtogroup G_EXC
+ * @{
+ */
+
+#ifndef UCS_EXC_H
+#define UCS_EXC_H
+
+/*------------------------------------------------------------------------------------------------*/
+/* Includes                                                                                       */
+/*------------------------------------------------------------------------------------------------*/
+#include "ucs_inic_pb.h"
+#include "ucs_obs.h"
+#include "ucs_fsm.h"
+#include "ucs_dec.h"
+#include "ucs_base.h"
+#include "ucs_inic.h"
+
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*------------------------------------------------------------------------------------------------*/
+/* Macros                                                                                         */
+/*------------------------------------------------------------------------------------------------*/
+
+
+
+#define EXC_FID_HELLO               0x200U
+#define EXC_FID_WELCOME             0x201U
+#define EXC_FID_SIGNATURE           0x202U
+#define EXC_FID_DEVICE_INIT         0x203U
+#define EXC_FID_ENABLEPORT          0x210U        
+#define EXC_FID_CABLE_LINK_DIAG     0x211U
+#define EXC_FID_PHY_LAY_TEST        0x220U
+#define EXC_FID_PHY_LAY_TEST_RES    0x221U
+#define EXC_FID_BC_DIAG             0x222U
+#define EXC_FID_BC_ENABLE_TX        0x223U
+#define EXC_FID_MEM_SESSION_OPEN    0x300U
+#define EXC_FID_MEM_SESSION_CLOSE   0x301U
+#define EXC_FID_MEMORY_READ         0x302U
+#define EXC_FID_MEMORY_WRITE        0x303U
+
+
+
+#define EXC_WELCOME_SUCCESS              0U    /*!< \brief Welcome.Result reports success */
+
+
+
+
+
+
+/*------------------------------------------------------------------------------------------------*/
+/* Structures                                                                                     */
+/*------------------------------------------------------------------------------------------------*/
+/*! \brief Structure holds parameters for API locking */
+typedef struct Exc_ApiLock_
+{
+    /*! \brief API locking instance for EXC functions */
+    CApiLocking     api;
+    /*! \brief Observer used for locking timeouts for EXC functions */
+    CSingleObserver observer;
+
+} Exc_ApiLock_t;
+
+/*! \brief   Structure ExcSingleSubjects */
+typedef struct Exc_Ssubjects_
+{
+    CSingleSubject hello;               /*!< \brief Subject for the Hello.Status and Hello.Error messages */
+    CSingleSubject welcome;             /*!< \brief Subject for the Welcome.ResultAck and Welcome.ErrorAck messages */
+    CSingleSubject signature;           /*!< \brief Subject for the Signature.Status and Signature.Error messages */
+    CSingleSubject deviceinit;          /*!< \brief Subject for the DeviceInit.Error message */
+    CSingleSubject enableport;          /*!< \brief Subject for the EnablePort.ResultAck  and EnablePort.ErrorAck messages */
+    CSingleSubject cablelinkdiag;       /*!< \brief Subject for the CableLinkDiagnosis.ResultAck and CableLinkDiagnosis.ErrorAck messages */
+    CSingleSubject phylaytest;          /*!< \brief Subject for the PhysicalLayerTestResult.Status and PhysicalLayerTest.Error messages */
+    CSingleSubject phylaytestresult;    /*!< \brief Subject for the PhysicalLayerTestResult.Status and PhysicalLayerTestResult.Error messages */
+    CSingleSubject memsessionopen;      /*!< \brief Subject for the MemorySessionOpen.Result and MemorySessionOpen.Error messages */
+    CSingleSubject memsessionclose;     /*!< \brief Subject for the MemorySessionClose.Result and MemorySessionClose.Error messages */
+    CSingleSubject memoryread;          /*!< \brief Subject for the MemoryRead.Result and MemoryRead.Error messages */
+    CSingleSubject memorywrite;         /*!< \brief Subject for the MemoryWrite.Result and MemoryWrite.Error messages */
+    CSingleSubject bcdiag;              /*!< \brief Subject for the BCdiag.Result and Error messages */
+    CSingleSubject enabletx;            /*!< \brief Subject for the BC_EnableTx.Status and Error messages  */
+} Exc_Ssubjects_t;
+
+
+
+
+/*! \brief   Structure of class CExc. */
+typedef struct CExc_
+{
+    /*! \brief pointer to the FktID/OPType list */
+    Dec_FktOpIsh_t const *fkt_op_list_ptr;  
+
+    /*! \brief Subjects for single-observer */
+    Exc_Ssubjects_t       ssubs;
+
+    /*! \brief Parameters for API locking */
+    Exc_ApiLock_t         lock;                 
+
+    /*! \brief Reference to base instance */
+    CBase *base_ptr;
+
+    /*! \brief Reference to a Transceiver instance */
+    CTransceiver         *xcvr_ptr;             
+
+} CExc;
+
+/*! \brief   Structure used for returning method results/errors
+ *
+ *  Either the data_info or the error part of the structure contain the information.
+ *  In case an error happened, data_info will be NULL. If no error happened,
+ *  error.code is 0 and error.info is NULL.
+*/
+typedef struct Exc_StdResult_
+{
+    Ucs_StdResult_t  result;    /*!< \brief Result code and info byte stream */
+    void            *data_info; /*!< \brief Reference to result values */
+
+} Exc_StdResult_t;
+
+
+/*! \brief   This structure provides information on the Physical layer test result */
+typedef struct Exc_PhyTestResult_
+{
+    uint8_t   port_number;      /*!< \brief Port Number */ 
+    bool      lock_status;      /*!< \brief Lock status */
+    uint16_t  err_count;        /*!< \brief Number of Coding Errors */
+
+} Exc_PhyTestResult_t;
+
+
+/*! \brief  Result values of the BCDiag command*/
+typedef enum Exc_BCDiagResValue_
+{
+    DUT_SLAVE       = 0x01U,     /*!< \brief Slave answered. No break on this segment. */
+    DUT_MASTER      = 0x02U,     /*!< \brief TimingMaster answered: ring is closed. */
+    DUT_NO_ANSWER   = 0x03U,     /*!< \brief Ring break found. */
+    DUT_TIMEOUT     = 0x04U      /*!< \brief No answer on back channel */
+
+} Exc_BCDiagResValue;
+
+/*! \brief  Provides BackChannel Diagnosis result */
+typedef struct Exc_BCDiagResult_
+{
+    Exc_BCDiagResValue  diag_result;
+    uint16_t            admin_addr;
+} Exc_BCDiagResult;
+
+
+/*! \brief   This structure provides information on the Coax Diagnosis */
+typedef struct Exc_CableLinkDiagResult_
+{
+    uint8_t  port_number;
+    uint8_t  result;
+
+} Exc_CableLinkDiagResult_t;
+
+
+/*! \brief   This structure provides information on the Hello.Status message */
+typedef struct Exc_HelloStatus_t_
+{
+    uint8_t version;
+    Ucs_Signature_t signature;
+
+} Exc_HelloStatus_t;
+
+/*! \brief   This structure provides information on the Welcome.Result message */
+typedef struct Exc_WelcomeResult_t_
+{
+    uint8_t res;
+    uint8_t version;
+    Ucs_Signature_t signature;
+
+} Exc_WelcomeResult_t;
+
+/*! \brief   This structure provides information on the Signature.Status message */
+typedef struct Exc_SignatureStatus_t_
+{
+    uint8_t version;
+    Ucs_Signature_t signature;
+
+} Exc_SignatureStatus_t;
+
+/*! \brief   This structure provides information on the MemoryRead.Result message */
+typedef struct Exc_MemReadResult_
+{
+    uint16_t session_handle;
+    uint8_t  mem_id;
+    uint32_t address;
+    uint8_t  unit_len;
+    uint8_t  unit_data[18];
+
+} Exc_MemReadResult_t;
+
+/*! \brief   This structure provides information on the MemoryWrite.Result message */
+typedef struct Exc_MemWriteResult_
+{
+    uint16_t session_handle;
+    uint8_t  mem_id;
+
+} Exc_MemWriteResult_t;
+
+
+/*------------------------------------------------------------------------------------------------*/
+/* Prototypes                                                                                     */
+/*------------------------------------------------------------------------------------------------*/
+extern void Exc_Ctor(CExc *self, CBase *base_ptr, CTransceiver *rcm_ptr);
+extern void Exc_OnRcmRxFilter(void *self, Msg_MostTel_t *tel_ptr);
+
+extern Ucs_Return_t Exc_Hello_Get(CExc *self, 
+                                  uint16_t target_address, 
+                                  uint8_t version_limit,
+                                  CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_Welcome_Sr(CExc *self, 
+                                   uint16_t target_address, 
+                                   uint16_t admin_node_address,
+                                   uint8_t version,
+                                   Ucs_Signature_t signature,
+                                   CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_Signature_Get(CExc *self, 
+                                      uint16_t target_address, 
+                                      uint8_t version_limit, 
+                                      CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_DeviceInit_Start(CExc *self, 
+                                  uint16_t target_address, 
+                                  CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_EnablePort_Sr(CExc *self, 
+                                      uint16_t target_address, 
+                                      uint8_t port_number, 
+                                      bool enabled, 
+                                      CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_CableLinkDiagnosis_Start (CExc *self, 
+                                                  uint16_t target_address, 
+                                                  uint8_t port_number, 
+                                                  CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_PhyTest_Start(CExc *self, 
+                                      uint8_t port_number, 
+                                      Ucs_Diag_PhyTest_Type_t type, 
+                                      uint16_t lead_in, 
+                                      uint32_t duration, 
+                                      uint16_t lead_out,
+                                      CSingleObserver *obs_ptr);
+extern Ucs_Return_t  Exc_PhyTestResult_Get(CExc *self, 
+                                           CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_BCDiag_Start(CExc *self, 
+                                     uint8_t position, 
+                                     uint16_t admin_na,
+                                     uint16_t t_send,
+                                     uint16_t t_wait4dut, 
+                                     uint16_t t_switch,
+                                     uint16_t t_back,
+                                     bool     autoback,
+                                     CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_BCEnableTx_StartResult(CExc *self, 
+                                               uint8_t port,
+                                               CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_MemSessionOpen_Sr(CExc *self, 
+                                          uint16_t target_address,
+                                          uint8_t session_type,
+                                          CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_MemSessionClose_Sr(CExc *self, 
+                                           uint16_t target_address,
+                                           uint16_t session_handle,
+                                           CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_MemoryRead_Sr(CExc *self, 
+                                      uint16_t target_address,
+                                      uint16_t session_handle,
+                                      uint8_t  mem_id,
+                                      uint32_t address,
+                                      uint8_t  unit_len,
+                                      CSingleObserver *obs_ptr);
+extern Ucs_Return_t Exc_MemoryWrite_Sr(CExc *self, 
+                                       uint16_t target_address,
+                                       uint16_t session_handle,
+                                       uint8_t  mem_id,
+                                       uint32_t address,
+                                       uint8_t  unit_len,
+                                       uint8_t  unit_data[],
+                                       CSingleObserver *obs_ptr);
+
+#ifdef __cplusplus
+}   /* extern "C" */
+#endif
+
+#endif  /* #ifndef UCS_EXC_H */
+
+/*!
+ * @}
+ * \endcond
+ */
+
+/*------------------------------------------------------------------------------------------------*/
+/* End of file                                                                                    */
+/*------------------------------------------------------------------------------------------------*/
+