summaryrefslogtreecommitdiff
path: root/daemons/gptp/common/wireless_port.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'daemons/gptp/common/wireless_port.hpp')
-rw-r--r--daemons/gptp/common/wireless_port.hpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/daemons/gptp/common/wireless_port.hpp b/daemons/gptp/common/wireless_port.hpp
new file mode 100644
index 00000000..bfffbd47
--- /dev/null
+++ b/daemons/gptp/common/wireless_port.hpp
@@ -0,0 +1,179 @@
+/******************************************************************************
+
+Copyright (c) 2009-2015, Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the Intel Corporation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+******************************************************************************/
+
+#ifndef WIRELESS_PORT_HPP
+#define WIRELESS_PORT_HPP
+
+#include <common_port.hpp>
+#include <avbts_oscondition.hpp>
+
+class WirelessDialog
+{
+public:
+ Timestamp action;
+ uint64_t action_devclk;
+ Timestamp ack;
+ uint64_t ack_devclk;
+ uint8_t dialog_token;
+ uint16_t fwup_seq;
+
+ WirelessDialog( uint32_t action, uint32_t ack, uint8_t dialog_token )
+ {
+ this->action_devclk = action; this->ack_devclk = ack;
+ this->dialog_token = dialog_token;
+ }
+
+ WirelessDialog() { dialog_token = 0; }
+
+ WirelessDialog & operator=( const WirelessDialog & a )
+ {
+ if (this != &a)
+ {
+ this->ack = a.ack;
+ this->ack_devclk = a.ack_devclk;
+ this->action = a.action;
+ this->action_devclk = a.action_devclk;
+ this->dialog_token = a.dialog_token;
+ this->fwup_seq = a.fwup_seq;
+ }
+ return *this;
+ }
+};
+
+class WirelessPort : public CommonPort
+{
+private:
+ OSCondition *port_ready_condition;
+ LinkLayerAddress peer_addr;
+ WirelessDialog prev_dialog;
+
+public:
+ WirelessPort( PortInit_t *portInit, LinkLayerAddress peer_addr );
+ virtual ~WirelessPort();
+
+ /**
+ * @brief Media specific port initialization
+ * @return true on success
+ */
+ bool _init_port( void );
+
+ /**
+ * @brief Perform media specific event handling action
+ * @return true if event is handled without errors
+ */
+ bool _processEvent( Event e );
+
+ /**
+ * @brief Process message
+ * @param buf [in] Pointer to the data buffer
+ * @param length Size of the message
+ * @param remote [in] source address of message
+ * @param link_speed [in] for receive operation
+ * @return void
+ */
+ void processMessage
+ (char *buf, int length, LinkLayerAddress *remote, uint32_t link_speed);
+
+ /**
+ * @brief Sends a general message to a port. No timestamps
+ * @param buf [in] Pointer to the data buffer
+ * @param len Size of the message
+ * @param mcast_type Enumeration
+ * MulticastType (pdelay, none or other). Depracated.
+ * @param destIdentity Destination port identity
+ * @return void
+ */
+ void sendGeneralPort
+ ( uint16_t etherType, uint8_t * buf, int len, MulticastType mcast_type,
+ PortIdentity * destIdentity );
+
+ /**
+ * @brief Nothing required for wireless port
+ */
+ void syncDone() {}
+
+ /**
+ * @brief Switches port to a gPTP master
+ * @param annc If TRUE, starts announce event timer.
+ * @return void
+ */
+ void becomeMaster( bool annc );
+
+ /**
+ * @brief Switches port to a gPTP slave.
+ * @param restart_syntonization if TRUE, restarts the syntonization
+ * @return void
+ */
+ void becomeSlave( bool restart_syntonization );
+
+ /**
+ * @brief Receives messages from the network interface
+ * @return Its an infinite loop. Returns false in case of error.
+ */
+ bool openPort();
+
+ /**
+ * @brief Wraps open port method for argument to thread
+ * @param larg pointer to WirelessPort object
+ * @return thread exit code
+ */
+ static OSThreadExitCode _openPort( void *larg )
+ {
+ WirelessPort *port = (decltype(port))larg;
+
+ if (!port->openPort())
+ return osthread_error;
+
+ return osthread_ok;
+ }
+
+ /**
+ * @brief Sets previous dialog
+ * @param dialog new value of prev_dialog
+ */
+ void setPrevDialog( WirelessDialog *dialog )
+ {
+ prev_dialog = *dialog;
+ }
+
+ /**
+ * @brief Sets previous dialog
+ * @return reference to prev_dialog
+ */
+ WirelessDialog *getPrevDialog( void )
+ {
+ return &prev_dialog;
+ }
+};
+
+#endif/*WIRELESS_PORT_HPP*/