Здравствуйте! Мое устройство общается с компьютером по UART. Я хочу сделать так, чтобы можно было просто писать и читать /dev/ttyS0.
С помощью программы minicom получается и принимать, и посылать данные на любой скорости.
С помощью простого чтения из /dev/ttyS0 почему-то ничего не принимается! Запись же в /dev/ttyS0 работает (устройство реагирует).
Вопрос: как устанавливать скорость ком-порта? Как сделать так, чтобы команды
#!/usr/bin/perl -w
use strict;
use CGI qw(:all);
print "Content-type: text/html\r\n\r\n";
my $portname = "ttyS0";
my $random = int(rand(1000));
my $readline;
open (my $port, "+>/dev/$portname") || die "cannot open port $portname: $!\n";
#system("stty 115200 raw < /dev/${portname}\n");
$/=":";
print $port "test string, $random\n\r";
$readline = <$port>;
print $readline;
close ($port);
Так как это моя первая программа на perl, то во многом еще не разобрался, к примеру со strict она не хочет устанавливать параметры порта. В настоящее время приходится его отключать, устанавливать параметры порта, затем включать
Проверяю с кабелем ttyS0 - ttyS1 и запущенным screen на терминале ttyS1, при запуске через web данного скрипта (установлен apache2, необходимые расширения для работы с perl, программа помещена в cgi-bin и на нее установлены права запуска и SGID на группу dialout) происходит запрос на screen, ответ, завершаемый двоеточием, отображается на экране браузера.
Естесственно это лишь набросок, демонствирующий возможность непосредственного общения web интерфейса с устройством на МК, потому и возник интерес к Вашему посту.
If OpenSerialPort(0,"/dev/ttyS0",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,256,256)
WriteSerialPortString(0,"Радиокот")
CloseSerialPort(0)
Else
MessageRequester("", "Не удалось открыть COM порт!")
EndIf
If OpenSerialPort(0,"COM1",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,256,256)
WriteSerialPortString(0,"Радиокот")
CloseSerialPort(0)
Else
MessageRequester("", "Не удалось открыть COM порт!")
EndIf
Yftul писал(а):Заинтересовал меня данный вопрос. Не могли бы Вы подробнее описать свое устройство?
Мое устройство - это 6 цифровых индикаторов и датчик TSOP (для приема команд с ИК пульта). По ком-порту устройству передаются команды, управляющие индикатором, а компьютеру от устройства - коды с пульта. Я хочу сделать нечто вроде проигрывателя - компьютер с музыкой, колонки и эта штучка.
Сейчас у меня команда инициализации выглядит так:
Я не стал разбираться в этих параметрах, а просто взял те, которые установил minicom.
Скрипты все, наверное, тоже напишу на перле, но инициализацию порта имеет смысл делать один раз при старте системы.