summaryrefslogtreecommitdiffstats
path: root/ucs2-lib/inc/ucs_nodedis.h
diff options
context:
space:
mode:
authorFulup Ar Foll <fulup@iot.bzh>2017-05-26 18:45:56 +0200
committerFulup Ar Foll <fulup@iot.bzh>2017-05-26 18:45:56 +0200
commitd2e42029ec04c3f224580f8007cdfbbfe0fc47a6 (patch)
treead2ccf167cf7997c84191d41e6ba55cb2efd6bed /ucs2-lib/inc/ucs_nodedis.h
parent18e393e1443fd4c38b34979888fb55d30448cf31 (diff)
Initial Commit
Diffstat (limited to 'ucs2-lib/inc/ucs_nodedis.h')
-rw-r--r--ucs2-lib/inc/ucs_nodedis.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/ucs2-lib/inc/ucs_nodedis.h b/ucs2-lib/inc/ucs_nodedis.h
new file mode 100644
index 0000000..bd4b676
--- /dev/null
+++ b/ucs2-lib/inc/ucs_nodedis.h
@@ -0,0 +1,197 @@
+/*------------------------------------------------------------------------------------------------*/
+/* 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 CNodeDiscovery.
+ *
+ * \cond UCS_INTERNAL_DOC
+ */
+#ifndef UCS_NODEDIS_H
+#define UCS_NODEDIS_H
+
+/*------------------------------------------------------------------------------------------------*/
+/* Includes */
+/*------------------------------------------------------------------------------------------------*/
+#include "ucs_exc.h"
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define ND_NUM_NODES 40U /*!< \brief max number of nodes */
+
+
+
+/*! \brief Function signature of node evaluation callback used by Node Discovery service.
+ *
+ * The Node Discovery service announces the signature of each node it has found to the
+ * application via the evaluation function. In this function the application
+ * decides how the Node Discovery service shall proceed with the node.
+ * The application maintains two lists:
+ *
+ * <dl>
+ * <dt> *set_list* </dt>
+ * <dd> Contains the signatures of the nodes the system shall contain
+ *
+ * <dt> *device_list* </dt>
+ * <dd> Contains the signatures of the nodes detected in the system
+ * </dl>
+ *
+ * The evaluation has to follow these rules:
+ * - If the node is not part of the *set_list*, it is regarded as unknown (\ref UCS_ND_CHK_UNKNOWN)
+ * and will be ignored.
+ * - If the node is part of the *set_list* and is not yet in the *device_list*, the Node Discovery
+ * Service shall try to add the node to network (\ref UCS_ND_CHK_WELCOME).
+ * - If the node is already part of the *device_list*, there are two possibilities: the node in the
+ * *device_list* experienced a reset or there are two nodes with the same signature. Evaluation
+ * result is \ref UCS_ND_CHK_UNIQUE. The Node Discovery service will perform further tests.
+ *
+ * \param self The instance
+ * \param signature Signature of the respective node
+ * \returns UCS_ND_CHK_WELCOME Node is ok, try to add it to the network.
+ * \returns UCS_ND_CHK_UNIQUE Test if this node is unique.
+ * \returns UCS_ND_CHK_UNKNOWN Node is unknown, no further action.
+ * \ingroup G_UCS_NODE_DISCOVERY
+ */
+typedef Ucs_Nd_CheckResult_t (*Nd_EvalCb_t)(void *self, Ucs_Signature_t *signature);
+
+/*! \brief Function signature of result callback used by Node Discovery service.
+ *
+ * The Node Discovery service reports the result of each node and some system events by
+ * this callback function.
+ *
+ * \note The parameter <b>signature</b> will be NULL, if parameter <b>code</b> is
+ * \ref UCS_ND_RES_STOPPED, \ref UCS_ND_RES_NETOFF or \ref UCS_ND_RES_ERROR.
+ *
+ * \param self The instance
+ * \param code Result code
+ * \param signature Signature of the respective node
+ * \ingroup G_UCS_NODE_DISCOVERY
+ */
+typedef void (*Nd_ReportCb_t)(void *self, Ucs_Nd_ResCode_t code, Ucs_Signature_t *signature);
+
+
+/*------------------------------------------------------------------------------------------------*/
+/* Structures */
+/*------------------------------------------------------------------------------------------------*/
+/*! \brief Structure decribing a node. */
+typedef struct Nd_Node_
+{
+ /*bool available; */ /*!< \brief node available? *//*! i todo RWI: */
+ /*uint16_t node_address; */ /*!< \brief node address used for welcome command */
+ /*uint8_t result; */ /*!< \brief result parameter of Welcome.Result message */
+ /*uint8_t version; */ /*!< \brief version parameter of Hello and Welcome messages */
+ Ucs_Signature_t signature; /*!< \brief signature of the node */
+ CDlNode node; /*!< \brief enables listing */
+
+} Nd_Node;
+
+
+/*! \brief Initialization structure of the Node Discovery service. */
+typedef struct Nd_InitData_
+{
+ void *inst_ptr; /*!< \brief The instance used when invoking the callback functions */
+ Nd_ReportCb_t report_fptr; /*!< \brief Report callback function */
+ Nd_EvalCb_t eval_fptr; /*!< \brief Evaluation callback function */
+
+} Nd_InitData_t;
+
+
+
+
+/*! \brief Structure of class CNodeDiscovery. */
+typedef struct CNodeDiscovery_
+{
+ CInic *inic; /*!< \brief Reference to CInic object */
+ CExc *exc; /*!< \brief Reference to CExc object */
+ CBase *base; /*!< \brief Reference to CBase object */
+
+ bool running; /*!< \brief Indicates th Node Discovery is running. */
+ CSingleObserver nd_hello; /*!< \brief Observes the Hello result */
+ CSingleObserver nd_welcome; /*!< \brief Observes the Welcome result */
+ CSingleObserver nd_signature; /*!< \brief Observes the Signature result */
+ CSingleObserver nd_init; /*!< \brief Observes the DeviceInit result */
+
+ CMaskedObserver nd_terminate; /*!< \brief Observes events leading to termination */
+
+ CObserver nd_nwstatus; /*!< \brief Observes the MOST Network status */
+
+ CFsm fsm; /*!< \brief Node Discovery state machine */
+ CService service; /*!< \brief Service instance for the scheduler */
+
+ CTimer timer; /*!< \brief timer for monitoring messages */
+
+
+ CDlList new_list; /*!< \brief list of detected nodes */
+ CDlList unused_list; /*!< \brief list of unused node elements */
+ Nd_Node nodes[ND_NUM_NODES]; /*!< \brief device nodes */
+ Ucs_Signature_t current_sig; /*!< \brief node which is checked currently */
+
+ Exc_WelcomeResult_t welcome_result; /*!< \brief buffer for welcome result */
+ Exc_SignatureStatus_t signature_status; /*!< \brief buffer for signature status */
+
+ bool stop_request; /*!< \brief indicates a request to stop node discovery */
+ bool hello_mpr_request; /*!< \brief indicates an Hello.Get request due to an MPR event*/
+ bool hello_neton_request; /*!< \brief indicates an Hello.Get request due to an NetOn event*/
+ bool neton; /*!< \brief indicates Network availability */
+
+ void *cb_inst_ptr; /*!< \brief Instance required for callback functions */
+ Nd_ReportCb_t report_fptr; /*!< \brief Report callback function */
+ Nd_EvalCb_t eval_fptr; /*!< \brief Node evaluation callback function */
+
+}CNodeDiscovery;
+
+
+
+/*------------------------------------------------------------------------------------------------*/
+/* Prototypes */
+/*------------------------------------------------------------------------------------------------*/
+void Nd_Ctor(CNodeDiscovery *self,
+ CInic *inic,
+ CBase *base,
+ CExc *exc,
+ Nd_InitData_t *init_ptr);
+
+
+extern Ucs_Return_t Nd_Start(CNodeDiscovery *self);
+extern Ucs_Return_t Nd_Stop(CNodeDiscovery *self);
+extern void Nd_InitAll(CNodeDiscovery *self);
+
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* UCS_NODEDIS_H */
+/*!
+ * \endcond
+ */
+
+/*------------------------------------------------------------------------------------------------*/
+/* End of file */
+/*------------------------------------------------------------------------------------------------*/
+