Program Listing for File gp_input.hpp
↰ Return to documentation for file (include/kobuki_core/packets/gp_input.hpp
)
/*****************************************************************************
** Preprocessor
*****************************************************************************/
#ifndef KOBUKI_CORE_GP_INPUT_HPP__
#define KOBUKI_CORE_GP_INPUT_HPP__
/*****************************************************************************
** Include
*****************************************************************************/
#include <vector>
#include "../packet_handler/payload_base.hpp"
#include "../packet_handler/payload_headers.hpp"
/*****************************************************************************
** Namespace
*****************************************************************************/
namespace kobuki
{
/*****************************************************************************
** Interface
*****************************************************************************/
class GpInput : public packet_handler::payloadBase
{
public:
GpInput() : packet_handler::payloadBase(false, 16) {};
struct Data {
Data() : digital_input(0), analog_input(4) {}
uint16_t digital_input;
std::vector<uint16_t> analog_input;
} data;
bool serialise(ecl::PushAndPop<unsigned char> & byteStream)
{
buildBytes(Header::GpInput, byteStream);
buildBytes(length, byteStream);
buildBytes(data.digital_input, byteStream);
for (unsigned int i = 0; i < data.analog_input.size(); ++i)
{
buildBytes(data.analog_input[i], byteStream);
}
for (unsigned int i = 0; i < 3; ++i)
{
buildBytes(0x0000, byteStream); //dummy
}
return true;
}
bool deserialise(ecl::PushAndPop<unsigned char> & byteStream)
{
if (byteStream.size() < static_cast<unsigned int>(length)+2)
{
//std::cout << "kobuki_node: kobuki_inertia: deserialise failed. not enough byte stream." << std::endl;
return false;
}
unsigned char header_id(0x00), length_packed(0x00);
buildVariable(header_id, byteStream);
buildVariable(length_packed, byteStream);
if( header_id != Header::GpInput ) return false;
if( length_packed != length ) return false;
buildVariable(data.digital_input, byteStream);
//for (unsigned int i = 0; i < data.analog_input.size(); ++i)
// It's actually sending seven 16-bit variables.
// 0-3 : the analog pin inputs
// 4 : ???
// 5-6 : 0
for (unsigned int i = 0; i < 4; ++i)
{
buildVariable(data.analog_input[i], byteStream);
}
for (unsigned int i = 0; i < 3; ++i) {
uint16_t dummy;
buildVariable(dummy, byteStream);
}
//showMe();
return constrain();
}
bool constrain()
{
return true;
}
void showMe()
{
}
};
} // namespace kobuki
#endif /* KOBUKI_CORE_GP_INPUT_HPP__ */