sonar_tritech
SeaNetTypesInternal.hpp
Go to the documentation of this file.
1 #ifndef _SEANET_TYPES_INTERNAL_H_
2 #define _SEANET_TYPES_INTERNAL_H_
3 
4 #include "SeaNetTypes.hpp"
5 #define SEA_NET_MAX_PACKET_SIZE 4096 // mtHeadData is the biggest package
6 
7 namespace sea_net
8 {
9 
10  static const char PACKET_START = '@';
11  static const char PACKET_END = 0x0A;
12  static const int WRITE_TIMEOUT = 500; //im ms
13 
14  struct HeadCommand
15  {
16  uint8_t V3B_params; uint16_t head_control; uint8_t head_type;
17  uint32_t txn_ch1; uint32_t txn_ch2; uint32_t rxn_ch1; uint32_t rxn_ch2;
18  uint16_t pulse_length; uint16_t range_scale; uint16_t left_limit;
19  uint16_t right_limit; uint8_t ad_span; uint8_t ad_low; uint8_t initial_gain_ch1;
20  uint8_t initial_gain_ch2; uint16_t slope_ch1; uint16_t slope_ch2; uint8_t motor_step_delay_time;
21  uint8_t motor_step_angle_size; uint16_t ad_interval; uint16_t number_of_bins;
22  uint16_t max_ad_buff; uint16_t lockout_time; uint16_t minor_axis_dir;
23  uint8_t major_axis_pan; uint8_t crtl2; uint16_t scan_z; uint8_t ad_span_ch1;
24  uint8_t ad_span_ch2; uint8_t ad_low_ch1; uint8_t ad_low_ch2; uint8_t igain_ch1;
25  uint8_t igain_ch2; uint8_t adc_set_point_ch1; uint8_t adc_set_point_ch2;
28 
30  {
31  //clear everything
32  memset(this,0,sizeof(*this));
33  }
34  } __attribute__ ((packed)) __attribute__((__may_alias__));
35 
36  struct AliveData
37  {
38  bool ready;
39  bool motor_on;
40  bool scanning;
41  bool no_config;
44  ready(false),motor_on(false),scanning(false),
45  no_config(true),config_send(false){};
46  };
47 
48 
49 
51  {
52  uint8_t node_type;
53  uint8_t type;
54  uint16_t packed_size;
55  uint8_t device_type;
56  uint8_t head_status;
57  uint8_t sweep_code;
58  uint16_t head_control;
59  uint16_t range;
60  uint32_t txn;
61  uint8_t gain;
62  uint16_t slope;
63  uint8_t ad_span;
64  uint8_t ad_low;
65  uint16_t heading_offset;
66  uint16_t ad_interval;
67  uint16_t left_limit;
68  uint16_t right_limit;
70  uint16_t bearing;
71  uint16_t data_bytes;
72  const uint8_t *scan_data;
73  };
74 
76  {
77  uint8_t node_type;
78  uint8_t type;
79  uint16_t packed_size;
80  uint8_t device_type;
81  uint8_t head_status;
82  uint8_t sweep_code;
83  uint16_t head_control;
84  uint16_t range;
85  uint32_t txn;
86  uint8_t gain;
87  uint16_t slope;
88  uint8_t ad_threshold;
89  uint8_t filt_gain;
90  uint16_t left_limit;
91  uint16_t right_limit;
93  uint16_t scan_time;
94  uint16_t data_count;
95  const uint8_t *scan_data;
96  };
97 
98  struct BBUserData
99  {
102  full_duplex(0){};
103  };
104 
106  {
107  public:
108  static int isValidPacket(uint8_t const *buffer,size_t size);
109  static std::vector<uint8_t> createPaket(DeviceType device_type,
110  PacketType packet_type,
111  uint8_t* payload = NULL,
112  size_t payload_size = 0);
113 
114  static std::vector<uint8_t> createSendDataPaket(DeviceType device_type);
115 
116  public:
117  void setSize(size_t size);
118  void invalidate();
119  bool validate();
120  uint8_t *getPacketPtr();
121 
122  bool isValid() const;
123  PacketType getPacketType() const;
124  DeviceType getReceiverType() const;
125  DeviceType getSenderType() const;
126 
127  void getRawData(const uint8_t * &buffer,size_t &size)const;
128 
129  void decodeAliveData(AliveData &data) const;
130  void decodeHeadData(ImagingHeadData &data) const;
131  void decodeHeadData(ProfilingHeadData &data) const;
132  void decodeAuxData(std::vector<uint8_t> &aux_data) const;
133  void decodeVersionData(VersionData &version) const;
134  void decodeBBUserData(BBUserData &data) const;
135 
136  private:
137  //we do not use a std::vector because this would introduce
138  //dynamic memory allocation if different packet types are stored
139  uint8_t packet[SEA_NET_MAX_PACKET_SIZE];
140  size_t size;
141  bool valid;
142  };
143 
144 }
145 #endif
uint16_t right_limit
Definition: SeaNetTypesInternal.hpp:19
uint8_t sweep_code
Definition: SeaNetTypesInternal.hpp:57
bool config_send
Definition: SeaNetTypesInternal.hpp:42
PacketType
Definition: SeaNetTypes.hpp:28
uint8_t initial_gain_ch2
Definition: SeaNetTypesInternal.hpp:20
uint8_t ad_low_ch2
Definition: SeaNetTypesInternal.hpp:24
uint32_t txn_ch2
Definition: SeaNetTypesInternal.hpp:17
uint32_t txn
Definition: SeaNetTypesInternal.hpp:85
uint8_t head_status
Definition: SeaNetTypesInternal.hpp:56
Definition: SeaNetTypesInternal.hpp:75
uint32_t rxn_ch1
Definition: SeaNetTypesInternal.hpp:17
uint16_t slope_ch1
Definition: SeaNetTypesInternal.hpp:20
uint16_t ad_interval
Definition: SeaNetTypesInternal.hpp:21
uint8_t ad_span
Definition: SeaNetTypesInternal.hpp:19
uint8_t sweep_code
Definition: SeaNetTypesInternal.hpp:82
bool motor_on
Definition: SeaNetTypesInternal.hpp:39
uint8_t ad_span_ch2
Definition: SeaNetTypesInternal.hpp:24
uint16_t left_limit
Definition: SeaNetTypesInternal.hpp:90
sea_net::Profiling __attribute__
uint8_t ad_low
Definition: SeaNetTypesInternal.hpp:19
uint16_t number_of_bins
Definition: SeaNetTypesInternal.hpp:21
uint16_t head_control
Definition: SeaNetTypesInternal.hpp:83
uint16_t head_control
Definition: SeaNetTypesInternal.hpp:58
uint16_t range_scale
Definition: SeaNetTypesInternal.hpp:18
uint16_t bearing
Definition: SeaNetTypesInternal.hpp:70
uint8_t initial_gain_ch1
Definition: SeaNetTypesInternal.hpp:19
uint16_t advanced_slope_ch1
Definition: SeaNetTypesInternal.hpp:26
Definition: SeaNetTypesInternal.hpp:105
uint16_t slope
Definition: SeaNetTypesInternal.hpp:62
uint16_t data_count
Definition: SeaNetTypesInternal.hpp:94
Definition: SeaNetTypesInternal.hpp:50
uint32_t txn
Definition: SeaNetTypesInternal.hpp:60
uint8_t type
Definition: SeaNetTypesInternal.hpp:53
uint8_t igain_ch1
Definition: SeaNetTypesInternal.hpp:24
uint8_t head_status
Definition: SeaNetTypesInternal.hpp:81
uint8_t ad_span
Definition: SeaNetTypesInternal.hpp:63
uint8_t ad_span_ch1
Definition: SeaNetTypesInternal.hpp:23
uint16_t left_limit
Definition: SeaNetTypesInternal.hpp:18
uint8_t ad_low_ch1
Definition: SeaNetTypesInternal.hpp:24
uint8_t V3B_params
Definition: SeaNetTypesInternal.hpp:16
uint8_t node_type
Definition: SeaNetTypesInternal.hpp:52
uint8_t node_type
Definition: SeaNetTypesInternal.hpp:77
uint32_t rxn_ch2
Definition: SeaNetTypesInternal.hpp:17
uint16_t max_ad_buff
Definition: SeaNetTypesInternal.hpp:22
bool scanning
Definition: SeaNetTypesInternal.hpp:40
bool ready
Definition: SeaNetTypesInternal.hpp:38
uint16_t left_limit
Definition: SeaNetTypesInternal.hpp:67
uint8_t adc_set_point_ch2
Definition: SeaNetTypesInternal.hpp:25
Definition: SeaNet.cpp:7
uint16_t slope
Definition: SeaNetTypesInternal.hpp:87
const uint8_t * scan_data
Definition: SeaNetTypesInternal.hpp:95
uint8_t type
Definition: SeaNetTypesInternal.hpp:78
const uint8_t * scan_data
Definition: SeaNetTypesInternal.hpp:72
uint16_t scan_time
Definition: SeaNetTypesInternal.hpp:93
uint16_t right_limit
Definition: SeaNetTypesInternal.hpp:91
bool no_config
Definition: SeaNetTypesInternal.hpp:41
uint8_t adc_set_point_ch1
Definition: SeaNetTypesInternal.hpp:25
HeadCommand()
Definition: SeaNetTypesInternal.hpp:29
Definition: SeaNetTypesInternal.hpp:36
uint8_t motor_step_delay_time
Definition: SeaNetTypesInternal.hpp:20
DeviceType
Definition: SeaNetTypes.hpp:19
bool full_duplex
Definition: SeaNetTypesInternal.hpp:100
uint16_t lockout_time
Definition: SeaNetTypesInternal.hpp:22
uint16_t ad_interval
Definition: SeaNetTypesInternal.hpp:66
uint32_t txn_ch1
Definition: SeaNetTypesInternal.hpp:17
uint16_t slope_ch2
Definition: SeaNetTypesInternal.hpp:20
uint16_t advanced_slope_delay_ch2
Definition: SeaNetTypesInternal.hpp:27
uint8_t device_type
Definition: SeaNetTypesInternal.hpp:55
uint8_t head_type
Definition: SeaNetTypesInternal.hpp:16
uint8_t motor_step_angle_size
Definition: SeaNetTypesInternal.hpp:21
uint8_t motor_step_angle_size
Definition: SeaNetTypesInternal.hpp:69
uint16_t pulse_length
Definition: SeaNetTypesInternal.hpp:18
uint8_t filt_gain
Definition: SeaNetTypesInternal.hpp:89
uint8_t igain_ch2
Definition: SeaNetTypesInternal.hpp:25
uint8_t ad_threshold
Definition: SeaNetTypesInternal.hpp:88
#define SEA_NET_MAX_PACKET_SIZE
Definition: SeaNetTypesInternal.hpp:5
uint16_t advanced_slope_delay_ch1
Definition: SeaNetTypesInternal.hpp:26
uint16_t range
Definition: SeaNetTypesInternal.hpp:84
uint8_t motor_step_angle_size
Definition: SeaNetTypesInternal.hpp:92
uint8_t major_axis_pan
Definition: SeaNetTypesInternal.hpp:23
uint8_t gain
Definition: SeaNetTypesInternal.hpp:61
HeadCommand()
Definition: SeaNetTypesInternal.hpp:26
BBUserData()
Definition: SeaNetTypesInternal.hpp:101
uint16_t range
Definition: SeaNetTypesInternal.hpp:59
uint16_t advanced_slope_ch2
Definition: SeaNetTypesInternal.hpp:26
uint8_t ad_low
Definition: SeaNetTypesInternal.hpp:64
uint16_t scan_z
Definition: SeaNetTypesInternal.hpp:23
uint16_t packed_size
Definition: SeaNetTypesInternal.hpp:54
uint16_t heading_offset
Definition: SeaNetTypesInternal.hpp:65
Definition: SeaNetTypes.hpp:9
AliveData()
Definition: SeaNetTypesInternal.hpp:43
uint8_t device_type
Definition: SeaNetTypesInternal.hpp:80
Definition: SeaNetTypesInternal.hpp:98
uint16_t minor_axis_dir
Definition: SeaNetTypesInternal.hpp:22
uint16_t packed_size
Definition: SeaNetTypesInternal.hpp:79
uint8_t crtl2
Definition: SeaNetTypesInternal.hpp:23
uint16_t data_bytes
Definition: SeaNetTypesInternal.hpp:71
uint16_t right_limit
Definition: SeaNetTypesInternal.hpp:68
uint8_t gain
Definition: SeaNetTypesInternal.hpp:86
uint16_t head_control
Definition: SeaNetTypesInternal.hpp:16