#!/usr/bin/perl # simple read operation against waterkotte with control 'resümat cd4 (8126)' # (c) 2009 alexander.philipp.lintenhofer # use strict; use Device::SerialPort; use POSIX qw(floor); ##################################################################################################### if ($#ARGV != 0) { die "Usage: $0 \n"; } my $attr = $ARGV[0]; use constant TYPE_UNDEF => 0; use constant TYPE_DATE => 1; use constant TYPE_TIME => 2; use constant TYPE_DATETIME => 3; use constant TYPE_DEC => 4; use constant TYPE_FLOAT1 => 5; use constant TYPE_FLOAT3 => 6; use constant TYPE_BIN => 7; use constant TYPE_BOOL => 8; use constant TYPE_SPECI => 9; use constant DLE => 0x10; use constant STX => 0x02; use constant ETX => 0x03; my @frame; our %wp_memory; require('WPmemaddr.inc.pl'); require('WPhelperfunctions.inc.pl'); ##################################################################################################### ##################################################################################################### # main # @frame = buildFrame($attr); for (my $attempt=0; $attempt<5;$attempt++) { if ((scalar(@frame) > 10)&&(my $serial = Device::SerialPort->new("/dev/ttyr00",0,'/tmp/wp_op.lock'))) { $serial->baudrate(9600); $serial->parity("none"); $serial->databits(8); $serial->stopbits(1); $serial->write_settings || undef $serial; # frame contains bytes, but for serial->write we need a string if (($serial->write(pack("C*",@frame)))==scalar(@frame)) { my @comdump; sleep 1; my ($count,$retVal) = $serial->read(16); if ($count > 10) { for(my $i=0; $i < length($retVal); $i++) { $comdump[$i] = ord(substr($retVal,$i,1)); } print interpretData(@comdump)."\n"; } else { print STDERR "Read operation failed\n"; exit 1; } } else { print STDERR ("Error writing to rs232\n"); exit 1; } $serial->close() || print STDERR ("Close failed\n"); exit 0; } sleep 2; } print STDERR ("Open failed\n"); exit 1; ##################################################################################################### ##################################################################################################### # functions # ##################################################################################################### ##################################################################################################### # buildFrame() # - builds command-frame according to selected attribute # sub buildFrame { my $changeAttr = $_[0]; if (defined($wp_memory{$changeAttr})) { ########################################################################################### # 1.) frame header, delimiter, start text @frame = (0xff,DLE,STX); ########################################################################################### # 2.) push(@frame,(0x01,0x15)); ########################################################################################### # 3.) push(my @bytes,(hex2bytearray($wp_memory{$attr}{addr},2))); ########################################################################################### # 4.) push(@bytes,(hex2bytearray($wp_memory{$attr}{bytes},2))); # byte stuffing... my @stuffedBytes; for (my $i=0, my $j=0; $i