diff options
author | Christian Gromm <christian.gromm@microchip.com> | 2016-12-08 16:46:07 +0100 |
---|---|---|
committer | Christian Gromm <christian.gromm@microchip.com> | 2016-12-08 16:46:07 +0100 |
commit | 0a28683a1ff9f3975c8b68b15017cf342bab5f3d (patch) | |
tree | 2f350b709db4d45532fc0624cfce22ec11e43ccf /Src/ConnectionInfo.h | |
parent | 18c9e9fc0000861257ab06f6a033612b0c567674 (diff) |
src: vod-server: import sources
This patch adds the source tree of the Video-On-Demand server and
its configuration scripts.
Change-Id: I6db8c43d46c7450baf117a541bd7153496dbcd4c
Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
Diffstat (limited to 'Src/ConnectionInfo.h')
-rw-r--r-- | Src/ConnectionInfo.h | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/Src/ConnectionInfo.h b/Src/ConnectionInfo.h new file mode 100644 index 0000000..13016f5 --- /dev/null +++ b/Src/ConnectionInfo.h @@ -0,0 +1,316 @@ +/* + * Video On Demand Samples + * + * Copyright (C) 2015 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 3 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 This file contains a helper class to store MOST connections + */ +/*----------------------------------------------------------*/ +#ifndef CONNECTIONINFO_H +#define CONNECTIONINFO_H + +#include <stdint.h> +#include <stdbool.h> +#include <stddef.h> +#include "SafeVector.h" +#include "Types.h" +#include "MacAddr.h" + +/*! + * \brief This is a helper class for the CNetworkManagerHandler. It keeps track of the reported connections + * and the instanced CMultiplexer classes. + */ +class CConnectionInfo +{ +public: + CConnectionInfo(); + CConnectionInfo( CMacAddr *macAddr, TChannelId channelId, uint8_t mostInstance, bool isTx ); + ~CConnectionInfo(); + + ///The Ethernet MAC address of this connection. + CMacAddr *macAddr; + + ///The device type as specified in XML file and configured in the config string (Group-Address) + TDeviceId deviceType; + + ///The instance count of this device class. Starting at 0 for the first instance. Incremented with every occurrence. + uint8_t deviceInstance; + + ///The channel ID as declared in the configuration XML file. + TChannelId channelId; + + ///The MOST ring instance. Starting at 0 for the first MOST ring, on the first OS81110. + TMostInstace mostInstance; + + ///The MOST data used by this channel. + EPDataType_t dataType; + + ///The reserved MOST bandwidth in bytes for this channel. + TBlockwidth reservedBandwidth; + + ///The amount of bytes reserved for this channel in Driver. If no buffers were allocated, this value is -1. + int32_t bufferSize; + + ///In case this is a local connection, the path of the character device is stored in this variable. (e.g. /dev/mdev0). + char deviceName[64]; + + ///TRUE if this connections is a source. FALSE if this connection is a sink, + bool isTX; + + //TRUE, if the input socket of this connection was successfully created. + bool inSocketCreated; + + //TRUE, if the output socket of this connection was successfully created. + bool outSocketCreated; + + //TRUE, if the input socket and the output socket of this connection were successfully connected. + bool socketsConnected; + + ///The MOST connection label. + uint32_t mostConnectionLabel; + + ///If this socket is a splitted / combined socket, this value holds the offset in byte. -1 if this is a normal socket. + int16_t splittedOffset; + + ///If this socket is a splitted / combined socket, this value holds the maximum bandwidth of all splitted sockets in byte. -1 if this is a normal socket. + int16_t splittedMaxBandwidth; + + ///This is USB specific. It describes how many sub-frames are concatenated into a single USB microframe. + uint16_t packetsPerXact; +}; + +/*! + * \brief This is a storage class holding multiple CConnectionInfo in a container. + * It supports adding, removing, serializing and deserializing + */ +class CConnectionInfoContainer +{ +private: + CSafeVector<CConnectionInfo *> allInfos; + bool Compare( CConnectionInfo *c, CConnectionInfo *t ); +public: + + /*----------------------------------------------------------*/ + /*! \brief Default Constructor of CConnectionInfoContainer + */ + /*----------------------------------------------------------*/ + CConnectionInfoContainer(); + + /*----------------------------------------------------------*/ + /*! \brief Default Destructor of CConnectionInfoContainer + */ + /*----------------------------------------------------------*/ + ~CConnectionInfoContainer(); + + + + /*----------------------------------------------------------*/ + /*! \brief Gets the amount of entries stored in the whole database. + * \return The amount of entries. + */ + /*----------------------------------------------------------*/ + uint32_t GetAllInfoAmount(); + + + + /*----------------------------------------------------------*/ + /*! \brief Gets the information at the corresponding position. + * \param index - the position inside the database + * \note Use GetAllInfoAmount() to get the max index (n-1). + * \return The information if found, NULL if out of range + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetInfo( uint32_t index ); + + + /*----------------------------------------------------------*/ + /*! \brief Compares to container. + * \param containerToCompare - The container to compare. + * \return true, if both containers stores the same information. false, otherwise. + */ + /*----------------------------------------------------------*/ + bool Compare( CConnectionInfoContainer *containerToCompare ); + + + + /*----------------------------------------------------------*/ + /*! \brief Checks if the given information is already stored inside the database. + * \param checkInfo - the information object to be checked + * \return true, if the information is already stored inside the database. false, otherwise. + */ + /*----------------------------------------------------------*/ + bool ExistsEntry( CConnectionInfo *checkInfo ); + + + /*----------------------------------------------------------*/ + /*! \brief Gets an info object with the given parameters + * \param macAddr - The MAC address of the device + * \param channelId - The channel identifier as used in the XML file. + * \param mostInstance - The MOST ring instance, starting 0 for the first MOST instance. + * \return The info object if found. NULL, otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetInfo( CMacAddr *macAddr, TChannelId channelId, uint8_t mostInstance ); + + + /*----------------------------------------------------------*/ + /*! \brief Gets the amount of devices with the same + * \param mostInstance - The MOST ring instance. Starting at 0 for the first MOST ring. + * \param deviceId - The device ID as declared in the configuration XML file. + * \return The Amount of devices found, with the given deviceId + */ + /*----------------------------------------------------------*/ + uint8_t GetAmountOfDevices( TMostInstace mostInstance, TDeviceId deviceId ); + + + /*----------------------------------------------------------*/ + /*! \brief Helper function, which delivers a CConnectionInfo object to the given search parameters. + * \param macAddr - Searches for the given MAC address. + * \param channelId - Search for the given Channel address. + * \param mostInstance - Search on the given MOST ring instance. + * \param isTx - true, search for a transmission connection. false, search for a reception connection. + * \return An pointer to the matching CConnectionInfo object if found. NULL otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetInfo( CMacAddr *macAddr, TChannelId channelId, uint8_t mostInstance, bool isTx ); + + + /*----------------------------------------------------------*/ + /*! \brief Stores the given information inside the database. + * \param info - The information to be stored. + */ + /*----------------------------------------------------------*/ + void AddInfo( CConnectionInfo *info ); + + + /*----------------------------------------------------------*/ + /*! \brief Helper function, which deletes all stored informations retrieved so far. + */ + /*----------------------------------------------------------*/ + void DestroyAllInfos(); + + + /*----------------------------------------------------------*/ + /*! \brief Helper function, which delete the information matching to the given parameters. + * \param macAddr - Searches for the given MAC address. + * \param channelId - Search for the given Channel address. + * \param mostInstance - Search on the given MOST ring instance. + */ + /*----------------------------------------------------------*/ + void DestroyInfo( CMacAddr *macAddr, TChannelId channelId, uint8_t mostInstance ); + + /*----------------------------------------------------------*/ + /*! \brief Helper function, which prints all available information to the console. + * \param hideTx - true, when transmission connections shall not be shown in the table. + * \param hideRx - true, when reception connections shall not be shown in the table. + */ + /*----------------------------------------------------------*/ + void PrintTable( bool hideTx, bool hideRx ); + + /*----------------------------------------------------------*/ + /*! \brief Serializes all connection informations to multi line string. + * \param pBuffer, buffer which then will hold the serialized string. + * \param bufferLen, the size of the given buffer. + * \return The amount of bytes used from the given buffer. + */ + /*----------------------------------------------------------*/ + uint32_t SerializeToString( char *pBuffer, uint32_t bufferLen ); + + /*----------------------------------------------------------*/ + /*! \brief Deserializes all connection informations to multi line string. + * \param pBuffer, buffer which will read of the serialized string. + * \return True, if the string could be used to deserialize all data. False, error occurred. + * \note The given buffer will be manipulated by strtok operation! + */ + /*----------------------------------------------------------*/ + bool DeserializeFromString( char *pBuffer ); + + + /*----------------------------------------------------------*/ + /*! \brief Returns the amount of entries, which contains a CDEV device name + * \return The amount of devices. + */ + /*----------------------------------------------------------*/ + uint32_t GetAmountOfCDevs(); + + + /*----------------------------------------------------------*/ + /*! \brief Retrieves the information of the specific CDEV. + * \param cdevInst - The index of the CDEV device, starting with 0 for the first device. + * \note Use GetAmountOfCDevs() the get the maximum possible index (n-1). + * \return The information object, if found. NULL, otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetConnectionInfoOfCdev( uint32_t cdevInst ); + + + + /*----------------------------------------------------------*/ + /*! \brief Retrieves the information of the specific CDEV. + * \param cdevInst - The index of the CDEV device, starting with 0 for the first device. + * \param splittedIndex - Index of splitted socket entry, starting with 0 for the first splitted entry which has an offset greater than zero. + * \note Use GetAmountOfCDevs() the get the maximum possible index (n-1). + * \return The information object, if found. NULL, otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetConnectionInfoOfCdev( uint32_t cdevInst, uint32_t splittedIndex ); + + + /*----------------------------------------------------------*/ + /*! \brief Returns the amount of entries, which acts as a sink channel. + * \return The amount of devices. + */ + /*----------------------------------------------------------*/ + uint32_t GetAmountOfSinks(); + + + /*----------------------------------------------------------*/ + /*! \brief Retrieves the information of the specific sink. + * \param cdevInst - The index of the sink, starting with 0 for the sink. + * \note Use GetAmountOfSinks() the get the maximum possible index (n-1). + * \return The information object, if found. NULL, otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetConnectionInfoOfSink( uint32_t sinkInst ); + + + + /*----------------------------------------------------------*/ + /*! \brief Gets the information object by the given MAC address. + * \param mac - The MAC address of the searched device. + * \return The information object, if found. NULL, otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetConnectionInfoByMacAddress( const uint8_t *mac ); + + + /*----------------------------------------------------------*/ + /*! \brief Gets the opposite device information connected with given MAC address. + * \param mac - The MAC address of the device, which then the information of connected opposite device is returned. + * \return The information object, if found. NULL, otherwise. + */ + /*----------------------------------------------------------*/ + CConnectionInfo *GetRemoteConnectionInfoByMacAddress( const uint8_t *mac ); +}; + +#endif //CONNECTIONINFO_H |