File Coverage

blib/lib/BACnet/DataTypes/ObjectIdentifier.pm
Criterion Covered Total %
statement 35 39 89.7
branch 2 4 50.0
condition n/a
subroutine 10 10 100.0
pod 0 5 0.0
total 47 58 81.0


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;