Refacor whole structure
[opengigevision:opengigevision.git] / Gvcp.h
1 #ifndef GVCP_H
2 #define GVCP_H
3
4 #include <memory>
5 #include <boost/thread.hpp>
6 #include <boost/asio.hpp>
7
8 enum EnAddrs
9 {
10   DATASTREAM_PACKET_SIZE = 0x00000d04,
11   GRABBING_STOPPED = 0x0001020c,
12   PIXEL_FORMAT = 0x0001010c,
13   GENICAM_ZIPFILEINFO_ADDRESS = 0x00000200
14 };
15
16 enum EnVals
17 {
18   EXCLUSIVE_ACCESS = 0x03,
19   STOP_GRAB_VALUE = 0x01000000,
20   PIXEL_FORMAT_8BIT_VALUE = 0x01000801,
21   PIXEL_FORMAT_12BIT_VALUE = 0x01000c01
22 };
23
24 class GigEVision;
25
26 class GvcpManager
27 {
28
29   public:
30   GvcpManager(GigEVision& gev);
31
32   ~GvcpManager();
33
34   void Connect(const std::string& sAddr, const std::string& sPort);
35
36   uint32_t Read(const std::string& sKey);
37   uint32_t Read(uint32_t addr);
38
39   std::vector<uint8_t> ReadBlock(const std::string& sKey, uint32_t nSize);
40   std::vector<uint8_t> ReadBlock(uint32_t addr, uint32_t nSize);
41
42   bool Write(const std::string& sKey, uint32_t nVal);
43   bool Write(uint32_t addr, uint32_t nVal);
44
45   bool RequestResend(uint32_t nImage, uint32_t nStartPack, uint32_t nEndPack);
46
47   boost::asio::ip::address_v4 FindCam();
48
49   void StartHeartbeat();
50
51   void StopHeartbeat();
52
53   private:
54   void Heartbeat();
55   GigEVision& m_gev;
56   boost::asio::ip::udp::socket m_sock;
57   boost::asio::ip::udp::resolver::iterator m_it;
58   std::auto_ptr<boost::asio::deadline_timer> m_heartbeatTimer;
59   boost::thread m_ioThread;
60   int m_nMsgNr;
61   bool m_bHeartbeatRun;
62 };
63
64
65 #endif // GVCP_H