initial
This commit is contained in:
103
vnproglib/cpp/include/vn/packetfinder.h
Normal file
103
vnproglib/cpp/include/vn/packetfinder.h
Normal file
@ -0,0 +1,103 @@
|
||||
#ifndef _VNPROTOCOL_UART_PACKETFINDER_H_
|
||||
#define _VNPROTOCOL_UART_PACKETFINDER_H_
|
||||
|
||||
#include "nocopy.h"
|
||||
#include "vntime.h"
|
||||
#include "packet.h"
|
||||
|
||||
#if PYTHON
|
||||
#include "vn/util/boostpython.h"
|
||||
#endif
|
||||
|
||||
namespace vn {
|
||||
namespace protocol {
|
||||
namespace uart {
|
||||
|
||||
/// \brief Helps with management of communication with a sensor using the UART
|
||||
/// protocol.
|
||||
///
|
||||
/// Internally, the PacketFinder keeps track of a running data index which
|
||||
/// keeps a running count of the bytes that are processed by the class. This is
|
||||
/// useful for users who wish to keep track of where packets where found in the
|
||||
/// incoming raw data stream. When the PacketFinder receives its first byte
|
||||
/// from the user, this is given the index of 0 for the running index and
|
||||
/// incremented for each byte received.
|
||||
class vn_proglib_DLLEXPORT PacketFinder : private util::NoCopy
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
/// \brief Defines the signature for a method that can receive
|
||||
/// notifications of new valid packets found.
|
||||
///
|
||||
/// \param[in] userData Pointer to user data that was initially supplied
|
||||
/// when the callback was registered via registerPossiblePacketFoundHandler.
|
||||
/// \param[in] possiblePacket The possible packet that was found.
|
||||
/// \param[in] packetStartRunningIndex The running index of the start of
|
||||
/// the packet.
|
||||
/// \param[in] timestamp The timestamp the packet was found.
|
||||
typedef void (*ValidPacketFoundHandler)(void* userData, Packet& packet, size_t runningIndexOfPacketStart, xplat::TimeStamp timestamp);
|
||||
|
||||
/// \brief Creates a new /ref PacketFinder with internal buffers to store
|
||||
/// incoming bytes and alert when valid packets are received.
|
||||
PacketFinder();
|
||||
|
||||
/// \brief Creates a new /ref PacketFinder with an internal buffer the size
|
||||
/// specified.
|
||||
///
|
||||
/// \param[in] internalReceiveBufferSize The number of bytes to make the
|
||||
/// internal buffer.
|
||||
explicit PacketFinder(size_t internalReceiveBufferSize);
|
||||
|
||||
~PacketFinder();
|
||||
|
||||
/// \brief Adds new data to the internal buffers and processes the received
|
||||
/// data to determine if any new received packets are available.
|
||||
///
|
||||
/// \param[in] data The data buffer containing the received data.
|
||||
/// \param[in] length The number of bytes of data in the buffer.
|
||||
void processReceivedData(char data[], size_t length);
|
||||
void processReceivedData(char data[], size_t length, bool bootloaderFilter);
|
||||
|
||||
/// \brief Adds new data to the internal buffers and processes the received
|
||||
/// data to determine if any new received packets are available.
|
||||
///
|
||||
/// \param[in] data The data buffer containing the received data.
|
||||
/// \param[in] length The number of bytes of data in the buffer.
|
||||
/// \param[in] timestamp The time when the data was received.
|
||||
void processReceivedData(char data[], size_t length, bool bootloaderFilter, xplat::TimeStamp timestamp);
|
||||
|
||||
#if PYTHON
|
||||
|
||||
void processReceivedData(boost::python::list data);
|
||||
|
||||
#endif
|
||||
|
||||
/// \brief Registers a callback method for notification when a new possible
|
||||
/// packet is found.
|
||||
///
|
||||
/// \param[in] userData Pointer to user data, which will be provided to the
|
||||
/// callback method.
|
||||
/// \param[in] handler The callback method.
|
||||
void registerPossiblePacketFoundHandler(void* userData, ValidPacketFoundHandler handler);
|
||||
|
||||
/// \brief Unregisters the registered callback method.
|
||||
void unregisterPossiblePacketFoundHandler();
|
||||
|
||||
#if PYTHON
|
||||
|
||||
boost::python::object* register_packet_found_handler(/*boost::python::object* callable*/ PyObject* callable);
|
||||
//void register_packet_found_handler(boost::python::object* callable);
|
||||
|
||||
#endif
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
Impl *_pi;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user