BACnet
view release on metacpan or search on metacpan
lib/BACnet/DataTypes/Date.pm view on Meta::CPAN
#!/usr/bin/perl
package BACnet::DataTypes::Date;
use warnings;
use strict;
use BACnet::DataTypes::Utils;
use parent 'BACnet::DataTypes::DataType';
use constant { YEAR_OFFSET => 1900 };
use constant { LENGTH => 4 };
# this did not check if the date make sense or not, because someone may want to use some weird calendar
sub construct {
my ( $class, $year, $month, $day, $day_of_the_week, $modified_tag ) = @_;
# $month (1-12), $day, $day_of_the_week (1-7)
my $self = {
data => '',
year => $year,
month => $month,
day => $day,
day_of_the_week => $day_of_the_week,
};
$self->{data} .= BACnet::DataTypes::Utils::_construct_head(
BACnet::DataTypes::Utils::DATE_TAG,
$modified_tag, LENGTH );
if ( defined $year ) {
$self->{data} .=
BACnet::DataTypes::Utils::_encode_int_octet_undef( $year - YEAR_OFFSET,
0xFF );
}
else {
$self->{data} .=
BACnet::DataTypes::Utils::_encode_int_octet_undef( $year, 0xFF );
}
my @date_parts = ( $month, $day, $day_of_the_week );
for my $date_part (@date_parts) {
$self->{data} .=
BACnet::DataTypes::Utils::_encode_int_octet_undef( $date_part, 0xFF );
}
return bless $self, $class;
}
sub parse {
my ( $class, $data_in ) = @_;
my $data = substr $data_in, 1;
my $self = bless { data => $data_in, }, $class;
my $headache = BACnet::DataTypes::Utils::_correct_head(
data_in => $data_in,
expected_tag => BACnet::DataTypes::Utils::DATE_TAG,
expected_length => LENGTH,
);
if ( $headache ne "" ) {
$self->{error} = "Date: $headache";
return $self;
}
my $head_len = BACnet::DataTypes::Utils::_get_head_length($data_in);
$self->{year} =
BACnet::DataTypes::Utils::_decode_int_octet_undef(
substr( $data_in, $head_len, 1 ), 0xFF );
( run in 0.427 second using v1.01-cache-2.11-cpan-39bf76dae61 )