| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
#!/usr/bin/perl |
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
package BACnet::DataTypes::ObjectIdentifier; |
|
4
|
|
|
|
|
|
|
|
|
5
|
27
|
|
|
27
|
|
163
|
use warnings; |
|
|
27
|
|
|
|
|
54
|
|
|
|
27
|
|
|
|
|
1658
|
|
|
6
|
27
|
|
|
27
|
|
154
|
use strict; |
|
|
27
|
|
|
|
|
105
|
|
|
|
27
|
|
|
|
|
767
|
|
|
7
|
|
|
|
|
|
|
|
|
8
|
27
|
|
|
27
|
|
15286
|
use BACnet::DataTypes::Utils; |
|
|
27
|
|
|
|
|
145
|
|
|
|
27
|
|
|
|
|
998
|
|
|
9
|
|
|
|
|
|
|
|
|
10
|
27
|
|
|
27
|
|
189
|
use parent 'BACnet::DataTypes::DataType'; |
|
|
27
|
|
|
|
|
61
|
|
|
|
27
|
|
|
|
|
245
|
|
|
11
|
|
|
|
|
|
|
|
|
12
|
27
|
|
|
27
|
|
2011
|
use constant { LENGTH => 0x04 }; |
|
|
27
|
|
|
|
|
66
|
|
|
|
27
|
|
|
|
|
15692
|
|
|
13
|
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
# std-page 421, std: 12 |
|
15
|
|
|
|
|
|
|
our $obj_types = { |
|
16
|
|
|
|
|
|
|
'Accumulator' => 23, |
|
17
|
|
|
|
|
|
|
'Analog-Input' => 0, |
|
18
|
|
|
|
|
|
|
'Analog-Output' => 1, |
|
19
|
|
|
|
|
|
|
'Analog-Value' => 2, |
|
20
|
|
|
|
|
|
|
'Averaging' => 18, |
|
21
|
|
|
|
|
|
|
'Binary-Input' => 3, |
|
22
|
|
|
|
|
|
|
'Binary-Output' => 4, |
|
23
|
|
|
|
|
|
|
'Binary-Value' => 5, |
|
24
|
|
|
|
|
|
|
'Calendar' => 6, |
|
25
|
|
|
|
|
|
|
'Command' => 7, |
|
26
|
|
|
|
|
|
|
'Device' => 8, |
|
27
|
|
|
|
|
|
|
'Event-Enrollment' => 9, |
|
28
|
|
|
|
|
|
|
'File' => 10, |
|
29
|
|
|
|
|
|
|
'Group' => 11, |
|
30
|
|
|
|
|
|
|
'Life-Safety-Point' => 21, |
|
31
|
|
|
|
|
|
|
'Life-Safety-Zone' => 22, |
|
32
|
|
|
|
|
|
|
'Loop' => 12, |
|
33
|
|
|
|
|
|
|
'Multi-State-Input' => 13, |
|
34
|
|
|
|
|
|
|
'Multi-State-Output' => 14, |
|
35
|
|
|
|
|
|
|
'Multi-State-Value' => 19, |
|
36
|
|
|
|
|
|
|
'Notification-Class' => 15, |
|
37
|
|
|
|
|
|
|
'Program' => 16, |
|
38
|
|
|
|
|
|
|
'Pulse-Converter' => 24, |
|
39
|
|
|
|
|
|
|
'Schedule' => 17, |
|
40
|
|
|
|
|
|
|
'Trend-Log' => 20, |
|
41
|
|
|
|
|
|
|
}; |
|
42
|
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
our $obj_types_rev = { reverse %$obj_types }; |
|
44
|
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
sub construct { |
|
46
|
53
|
|
|
53
|
0
|
460059
|
my ( $class, $obj_type, $obj_inst, $modified_tag ) = @_; |
|
47
|
|
|
|
|
|
|
|
|
48
|
53
|
|
|
|
|
303
|
my $self = { |
|
49
|
|
|
|
|
|
|
data => '', |
|
50
|
|
|
|
|
|
|
object_type => $obj_type, |
|
51
|
|
|
|
|
|
|
object_instance => $obj_inst, |
|
52
|
|
|
|
|
|
|
}; |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
# Context Tag |
|
55
|
|
|
|
|
|
|
|
|
56
|
53
|
|
|
|
|
265
|
$self->{data} .= BACnet::DataTypes::Utils::_construct_head( |
|
57
|
|
|
|
|
|
|
BACnet::DataTypes::Utils::OBJECT_ID_TAG, |
|
58
|
|
|
|
|
|
|
$modified_tag, LENGTH ); |
|
59
|
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
$self->{data} .= |
|
61
|
53
|
|
|
|
|
246
|
pack( 'N', ( ( $obj_type << 22 ) | ( $obj_inst & 0x3fffff ) ) ); |
|
62
|
|
|
|
|
|
|
|
|
63
|
53
|
|
|
|
|
239
|
return bless $self, $class; |
|
64
|
|
|
|
|
|
|
} |
|
65
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
sub parse { |
|
67
|
52
|
|
|
52
|
0
|
164
|
my ( $class, $data_in ) = @_; |
|
68
|
|
|
|
|
|
|
|
|
69
|
52
|
|
|
|
|
274
|
my $self = bless { data => $data_in, }, $class; |
|
70
|
|
|
|
|
|
|
|
|
71
|
52
|
|
|
|
|
252
|
my $headache = BACnet::DataTypes::Utils::_correct_head( |
|
72
|
|
|
|
|
|
|
data_in => $data_in, |
|
73
|
|
|
|
|
|
|
expected_tag => BACnet::DataTypes::Utils::OBJECT_ID_TAG, |
|
74
|
|
|
|
|
|
|
expected_length => LENGTH, |
|
75
|
|
|
|
|
|
|
); |
|
76
|
|
|
|
|
|
|
|
|
77
|
52
|
50
|
|
|
|
168
|
if ( $headache ne "" ) { |
|
78
|
0
|
|
|
|
|
0
|
$self->{error} = "Object Identifier: $headache"; |
|
79
|
0
|
|
|
|
|
0
|
return $self; |
|
80
|
|
|
|
|
|
|
} |
|
81
|
|
|
|
|
|
|
|
|
82
|
52
|
|
|
|
|
154
|
my $data = unpack( 'N', |
|
83
|
|
|
|
|
|
|
substr( $data_in, BACnet::DataTypes::Utils::_get_head_length($data_in) ) |
|
84
|
|
|
|
|
|
|
); |
|
85
|
|
|
|
|
|
|
|
|
86
|
52
|
|
|
|
|
235
|
$self->{object_type} = $data >> 22; |
|
87
|
|
|
|
|
|
|
|
|
88
|
52
|
50
|
|
|
|
161
|
if ( !defined $self->{object_type} ) { |
|
89
|
0
|
|
|
|
|
0
|
$self->{error} = "Object Identifier: undefined object identifier"; |
|
90
|
0
|
|
|
|
|
0
|
return $self; |
|
91
|
|
|
|
|
|
|
} |
|
92
|
|
|
|
|
|
|
|
|
93
|
52
|
|
|
|
|
218
|
$self->{object_instance} = $data & 0x3fffff; |
|
94
|
|
|
|
|
|
|
|
|
95
|
52
|
|
|
|
|
206
|
return $self; |
|
96
|
|
|
|
|
|
|
} |
|
97
|
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
sub instance { |
|
99
|
37
|
|
|
37
|
0
|
136
|
my ($self) = @_; |
|
100
|
|
|
|
|
|
|
|
|
101
|
37
|
|
|
|
|
173
|
return $self->{object_instance}; |
|
102
|
|
|
|
|
|
|
} |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
sub type { |
|
105
|
37
|
|
|
37
|
0
|
21208
|
my ($self) = @_; |
|
106
|
|
|
|
|
|
|
|
|
107
|
37
|
|
|
|
|
207
|
return $self->{object_type}; |
|
108
|
|
|
|
|
|
|
} |
|
109
|
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
sub val { |
|
111
|
74
|
|
|
74
|
0
|
22605
|
my ($self) = @_; |
|
112
|
|
|
|
|
|
|
|
|
113
|
74
|
|
|
|
|
442
|
return [ $self->{object_type}, $self->{object_instance} ]; |
|
114
|
|
|
|
|
|
|
} |
|
115
|
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
1; |