Данные, полученные с UART, сохраняются в буфере приема. Для чтения данных необходима функция pid_read.
Ниже показано, как использовать функцию pid_read.
pid_read($pid, $var[, $len]);
Аргумент $var - это переменная для сохранения прочитанных данных, а $len - это размер прочитанных данных.
Данный пример проверяет и выводит полученные данные в UART каждую секунду.
$rdata = "";
$pid = pid_open("/mmap/uart0"); // open UART 0
pid_ioctl($pid, "set baud 9600"); // baud rate: 9600bps
pid_ioctl($pid, "set parity 0"); // parity: none
pid_ioctl($pid, "set data 8"); // data bit: 8
pid_ioctl($pid, "set stop 1"); // stop bit: 1
$rxbuf = pid_ioctl($pid, "get rxbuf"); // get size of receive buffer
while(1)
{
$rxlen = pid_ioctl($pid, "get rxlen"); // get size of received data
$rx_free = $rxbuf - $rxlen; // get remaining size
echo "$rx_free / $rxbuf\r\n"; // print remaining size
$len = pid_read($pid, $rdata, $rxlen); // read data
echo "len = $len / "; // print size of read data
echo "rdata = $rdata\r\n"; // print read data
sleep(1);
}
pid_close($pid);
Данные, записанные функцией pid_write, хранятся в буфере отправки и передаются внешне через UART.
Ниже показано, как использовать функцию pid_write.
pid_write($pid, $var[, $wlen]);
Аргумент $var - это переменная, содержащая данные для отправки, а $wlen - размер отправляемых данных.
В данном примере каждую секунду выводится оставшийся размер буфера отправки и длина отправляемых данных.
$sdata = "0123456789";
$pid = pid_open("/mmap/uart0"); // open UART 0
pid_ioctl($pid, "set baud 9600"); // baud rate: 9600bps
$txbuf = pid_ioctl($pid, "get txbuf"); // get size of send buffer
while(1)
{
$txfree = pid_ioctl($pid, "get txfree"); // get remaining size
echo "txfree = $txfree\r\n"; // print remaining size
$len = pid_write($pid, $sdata, $txfree); // write data
echo "len = $len\r\n"; // print length of data sent
sleep(1);
}
pid_close($pid);
Третий аргумент функции pid_write означает длину записи данных. Длина записи данных должна быть меньше, чем оставшийся размер данных буфера отправки (во избежание потери данных). Настоятельно рекомендуется проверить оставшийся размер буфера отправки перед отправкой данных.