#!/usr/bin/perl

use lib '.';
use lib 'd:/Perl/sitel/lib';
use lib 'd:/Programs/Perl/lib';

use strict;

use Win32::SerialPort;

#シリアルポートの設定
my $conf_file = 'serialport.conf';
my $port_name = 'COM1';
my $UseModule = 0;
my $BaudRate = 9600;
my $Parity   = 'none';
my $DataBits = 8;
my $StopBits = 1;
#フロー制御方法の選択；rts(ハードウェア制御)、xoff(ソフトウェア制御)、
#           dtr(rtsと同じことができるがピンが違う)がある。特に理由がない限りrts。
my $HandShake = 'none';
#読込み＆書込みバッファ
my $WriteBufferSize = 1024 * 20;
my $ReadBufferSize  = 1024 * 4;
#読込み時間間隔の設定
my $ReadInterval = 800;
my $ReadCharTime = 400;
my $ErrorMessage = 1;
my $UserMessage  = 1;

my $com1 = new Win32::SerialPort($port_name) or die;
$com1->baudrate($BaudRate );
$com1->parity($Parity);
$com1->databits($DataBits);
$com1->stopbits($StopBits);
$com1->handshake($HandShake);
$com1->buffers($WriteBufferSize, $ReadBufferSize);
$com1->read_interval($ReadInterval);
$com1->read_char_time($ReadCharTime);
$com1->error_msg($ErrorMessage);
$com1->user_msg($UserMessage);
$com1->write_settings();
$com1->save($conf_file);
undef $com1;



if($UseModule) {
#シリアルポートを普通のファイルハンドルに見せかける
	tie *PORT, 'Win32::SerialPort', $conf_file or die "Can't open serialport [$conf_file]\n";
}
else {
	open( PORT, "+>$port_name" ) || die "Can't open $port_name: $!";
}

while(1) {
	print ">>";
	my $command = <>;
	if($command =~ /bye/i) {
		last;
	}

	print PORT $command;
	my $serial = <PORT>;
	print $serial;
}

exit





#測定装置に文字を送信
print PORT "DATE?\n"; 
my $response = getc PORT; 

if ($response eq NAK()) {
  warn "serialport error";
} 
  elsif ($response eq ACK()) {
  my $text = <PORT>;  
  print $text;
} 
  else {
  warn "no response";
}

close PORT or warn "Can't close serialport";


exit;

sub ACK () {chr 0x06} # 通信成功信号
sub NAK () {chr 0x15} # 通信失敗信号

