Perl conversion to python...

Benjamin Schollnick bschollnick at gmail.com
Mon Nov 23 14:26:18 CET 2009


Folks,

I'm having some issues here with pyserial & trying to translate a perl
script to python...  It's probably my inexperience with PySerial &
perl that is troubling me...

Can anyone assist?

I'm concerned, since I can't seem to receive the data in any reliable
manner..  I've tested multiple times, and only once received data...
So I suspect that my Transmit & receive code is faulty...

def		xmit ( data, serialport ):
	for x in data:
		xmit_byte (x, serialport)
#	serialport.write ( binascii.unhexlify ( data ) )
#	for x in data:
#		print str(x).encode ('hex')
#		serialport.write ( x.encode('hex'))

def		receive ( serialport ):
	received = serialport.read (20)
	print received, "!"

----- Perl Code ----
sub tx_command {
	my $port = shift;
	my $cmd = shift;

#	warn "tx_command($cmd)\n";

	my @cmd_bytes = split(/\s/, $cmd);

	foreach my $byte (@cmd_bytes) {
		$byte = pack('C', hex($byte));

		$port -> write($byte);
		select(undef, undef, undef, 0.01);
	}
}

# returns the rtt, or 0 if no response
sub rx_response {
	my ($port, $address) = @_;

	$port->read_char_time(0);     # don't wait for each character
	$port->read_const_time(5000); # timeout if we don't get what we're
looking for

	my $buf = '';

	my $t_start = time;

	### accumulate one byte at a time until we see the substring we're
looking for

	while (1) {
		my ($count_in, $string_in) = $port->read(1);

		if ($count_in == 0) {
		#	warn "TIMEOUT\n";
			return 0;
		}

		$buf .= $string_in;

		my $bufstring = packed_to_text($buf);

		#warn "bufstring: ".$bufstring;

		if ($bufstring =~/02 50 $address (.. .. ..) (..) (.. ..)/) {

			my $powerlinc_addr = $1;
			my $flags = $2;
			my $command = $3;

		#	warn "got response!\n";

			my $rtt = time() - $t_start;

			return $rtt;
		}

	}
}




More information about the Python-list mailing list