File Coverage

blib/lib/BACnet/DataTypes/Bool.pm
Criterion Covered Total %
statement 33 37 89.1
branch 6 8 75.0
condition n/a
subroutine 7 7 100.0
pod 0 2 0.0
total 46 54 85.1


line stmt bran cond sub pod time code
1             #!/usr/bin/perl
2              
3             package BACnet::DataTypes::Bool;
4              
5 27     27   163 use warnings;
  27         46  
  27         1565  
6 27     27   134 use strict;
  27         154  
  27         989  
7              
8 27     27   246 use BACnet::DataTypes::Utils;
  27         170  
  27         923  
9              
10 27     27   138 use parent 'BACnet::DataTypes::DataType';
  27         129  
  27         178  
11              
12             use constant {
13 27         11761 CONTEXT_LENGTH => 0x01,
14             TRUE => 1,
15             FALSE => 0,
16 27     27   2482 };
  27         68  
17              
18             sub construct {
19 7     7 0 231534 my ( $class, $bool_in, $modified_tag ) = @_;
20              
21 7         38 $bool_in = BACnet::DataTypes::Utils::_normalize_bool($bool_in);
22              
23 7         30 my $self = {
24             data => '',
25             val => $bool_in
26             };
27              
28 7 100       24 if ( defined $modified_tag ) {
29             $self->{data} .=
30 4         19 BACnet::DataTypes::Utils::_make_head( $modified_tag, 1,
31             CONTEXT_LENGTH );
32 4         13 $self->{data} .= pack( 'C', $bool_in );
33             }
34             else {
35             $self->{data} .=
36 3         16 BACnet::DataTypes::Utils::_make_head(
37             BACnet::DataTypes::Utils::BOOL_TAG,
38             0, $bool_in );
39             }
40              
41 7         71 return bless $self, $class;
42             }
43              
44             sub parse {
45 8     8 0 27 my ( $class, $data_in ) = @_;
46              
47 8         32 my $self = bless { data => $data_in }, $class;
48              
49 8         31 my @bytes = unpack( "C*", $data_in );
50              
51 8         33 my $headache = BACnet::DataTypes::Utils::_correct_head(
52             data_in => $data_in,
53             expected_tag => BACnet::DataTypes::Utils::BOOL_TAG,
54             lvt_is_length => 0,
55             );
56              
57 8 50       29 if ( $headache ne "" ) {
58 0         0 $self->{error} = "Application Bool: $headache";
59 0         0 return $self;
60             }
61              
62 8 100       26 if ( BACnet::DataTypes::Utils::_get_head_ac_class($data_in) == 1 ) {
63              
64 5 50       16 if (
65             !BACnet::DataTypes::Utils::_current_length(
66             $data_in, BACnet::DataTypes::Utils::_get_head_lvt($data_in)
67             )
68             )
69             {
70 0         0 $self->{error} = "Application Bool: invalid lvt length";
71 0         0 return $self;
72             }
73              
74             $self->{val} =
75 5         16 $bytes[ BACnet::DataTypes::Utils::_get_head_length($data_in) ];
76             }
77             else {
78 3         10 $self->{val} = $bytes[0] & 0x07;
79             }
80              
81 8         56 return $self;
82             }
83              
84             1;