rcdiscover
deviceinfo.cc
Go to the documentation of this file.
1
/*
2
* rcdiscover - the network discovery tool for Roboception devices
3
*
4
* Copyright (c) 2017 Roboception GmbH
5
* All rights reserved
6
*
7
* Author: Heiko Hirschmueller
8
*
9
* Redistribution and use in source and binary forms, with or without
10
* modification, are permitted provided that the following conditions are met:
11
*
12
* 1. Redistributions of source code must retain the above copyright notice,
13
* this list of conditions and the following disclaimer.
14
*
15
* 2. Redistributions in binary form must reproduce the above copyright notice,
16
* this list of conditions and the following disclaimer in the documentation
17
* and/or other materials provided with the distribution.
18
*
19
* 3. Neither the name of the copyright holder nor the names of its contributors
20
* may be used to endorse or promote products derived from this software without
21
* specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
* POSSIBILITY OF SUCH DAMAGE.
34
*/
35
36
#include "
deviceinfo.h
"
37
38
#include <sstream>
39
40
namespace
rcdiscover
41
{
42
43
namespace
44
{
45
46
/*
47
Extract at most len bytes from p as characters and returns them as string.
48
Extraction ends if a null byte is encountered or if len bytes have been
49
extracted.
50
51
@param p Pointer to byte array.
52
@param len Maximum number of bytes to extract.
53
@return Extracted string.
54
*/
55
56
std::string extract(
const
uint8_t *p,
size_t
len)
57
{
58
std::ostringstream out;
59
60
while
(*p != 0 && len > 0)
61
{
62
out << static_cast<char>(*p);
63
64
p++;
65
len--;
66
}
67
68
return
out.str();
69
}
70
71
}
72
73
DeviceInfo::DeviceInfo
(std::string iface_name) :
74
iface_name(std::move(iface_name))
75
{
76
clear
();
77
}
78
79
void
DeviceInfo::set
(
const
uint8_t *raw,
size_t
len)
80
{
81
// clear stored information
82
83
clear
();
84
85
// extract information
86
87
if
(len >= 4)
88
{
89
major
=(
static_cast<
int
>
(raw[0])<<8)|raw[1];
90
minor
=(
static_cast<
int
>
(raw[2])<<8)|raw[3];
91
}
92
93
if
(len >= 16)
94
{
95
mac
=0;
96
for
(
int
i=0; i<6; i++)
mac
=(
mac
<<8)|raw[10+i];
97
}
98
99
if
(len >= 40)
100
{
101
ip
=0;
102
for
(
int
i=0; i<4; i++)
ip
=(
ip
<<8)|raw[36+i];
103
}
104
105
if
(len >= 56)
106
{
107
subnet
=0;
108
for
(
int
i=0; i<4; i++)
subnet
=(
subnet
<<8)|raw[52+i];
109
}
110
111
if
(len >= 72)
112
{
113
gateway
=0;
114
for
(
int
i=0; i<4; i++)
gateway
=(
gateway
<<8)|raw[68+i];
115
}
116
117
if
(len >= 104)
manufacturer_name
=extract(raw+72, 32);
118
if
(len >= 136)
model_name
=extract(raw+104, 32);
119
if
(len >= 168)
device_version
=extract(raw+136, 32);
120
if
(len >= 216)
manufacturer_info
=extract(raw+168, 48);
121
if
(len >= 232)
serial_number
=extract(raw+216, 16);
122
if
(len >= 248)
user_name
=extract(raw+232, 16);
123
}
124
125
void
DeviceInfo::clear
()
126
{
127
major
=
minor
=0;
128
mac
=0;
129
ip
=0;
130
subnet
=0;
131
gateway
=0;
132
133
manufacturer_name
.erase();
134
model_name
.erase();
135
device_version
.erase();
136
manufacturer_info
.erase();
137
serial_number
.erase();
138
user_name
.erase();
139
}
140
141
}
rcdiscover::DeviceInfo::clear
void clear()
Clears all information.
Definition:
deviceinfo.cc:125
rcdiscover::DeviceInfo::device_version
std::string device_version
Definition:
deviceinfo.h:196
rcdiscover::DeviceInfo::set
void set(const uint8_t *raw, size_t len)
Extracts the RAW GigE Vision information according to the given DISCOVERY_ACK package.
Definition:
deviceinfo.cc:79
rcdiscover::DeviceInfo::ip
uint32_t ip
Definition:
deviceinfo.h:190
rcdiscover::DeviceInfo::manufacturer_info
std::string manufacturer_info
Definition:
deviceinfo.h:197
rcdiscover::DeviceInfo::user_name
std::string user_name
Definition:
deviceinfo.h:199
rcdiscover
Definition:
deviceinfo.cc:40
rcdiscover::DeviceInfo::minor
int minor
Definition:
deviceinfo.h:187
rcdiscover::DeviceInfo::DeviceInfo
DeviceInfo(std::string iface_name)
Definition:
deviceinfo.cc:73
rcdiscover::DeviceInfo::model_name
std::string model_name
Definition:
deviceinfo.h:195
deviceinfo.h
rcdiscover::DeviceInfo::serial_number
std::string serial_number
Definition:
deviceinfo.h:198
rcdiscover::DeviceInfo::gateway
uint32_t gateway
Definition:
deviceinfo.h:192
rcdiscover::DeviceInfo::mac
uint64_t mac
Definition:
deviceinfo.h:189
rcdiscover::DeviceInfo::subnet
uint32_t subnet
Definition:
deviceinfo.h:191
rcdiscover::DeviceInfo::major
int major
Definition:
deviceinfo.h:186
rcdiscover::DeviceInfo::manufacturer_name
std::string manufacturer_name
Definition:
deviceinfo.h:194
rcdiscover
Author(s): Heiko Hirschmueller
, Raphael Schaller
autogenerated on Thu Aug 1 2024 02:55:56