Для получения разнообразных статусов/состояний UART необходима команда функции pid_ioctl.
$return = pid_ioctl($pid, "get ITEM");
ITEM/элемент | Описание | Возврат значений | Тип возврата |
---|---|---|---|
baud | baud rate[bps] | e.g. 9600 | Целое число |
parity | parity | 0 / 1 / 2 / 3 / 4 | Целое число |
data | data bit[bit] | 8 / 7 | Целое число |
stop | stop bit[bit] | 1 / 2 | Целое число |
flowctrl | flowctrl | 0 / 1 / 2 / 3 | Целое число |
txbuf | size of send buffer[Byte] | e.g. 1024 | Целое число |
txfree | free send buffer size[Byte] | e.g. 1024 | Целое число |
rxbuf | size of receive buffer[Byte] | e.g. 1024 | Целое число |
rxlen | received data size[Byte] | e.g. 10 | Целое число |
Проверка текущей информации UART выглядит следующим образом:
$pid = pid_open("/mmap/uart0"); // open UART 0
$baud = pid_ioctl($pid, "get baud"); // get baud rate
$parity = pid_ioctl($pid, "get parity"); // get parity
$data = pid_ioctl($pid, "get data"); // get data bit
$stop = pid_ioctl($pid, "get stop"); // get stop bit
$flowctrl = pid_ioctl($pid, "get flowctrl"); // get flow control mode
echo "baud = $baud\r\n"; // output e.g.: baud = 9600
echo "parity = $parity\r\n"; // output e.g.: parity = 0
echo "data = $data\r\n"; // output e.g.: data = 8
echo "stop = $stop\r\n"; // output e.g.: stop = 1
echo "flowctrl = $flowctrl\r\n"; // output e.g.: flowctrl = 0
Оставшийся размер данных в буфере отправки может быть рассчитан следующим образом:
remaining data size in send buffer = size of buffer - free size of buffer
В примере ниже показано, как проверить размер оставшихся данных буфера отправки.
$txlen = -1;
$data = "0123456789";
$pid = pid_open("/mmap/uart0"); // open UART 0
pid_ioctl($pid, "set baud 9600"); // baud rate: 9600 bps
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
pid_ioctl($pid, "set flowctrl 0"); // flow control: none
pid_write($pid, $data); // write data to UART
while($txlen)
{
$txbuf = pid_ioctl($pid, "get txbuf"); // get size of send buffer
$txfree = pid_ioctl($pid, "get txfree"); // get remaining size of send buffer
$txlen = $txbuf - $txfree; // calculate remaining data size
echo "tx len = $txlen\r\n"; // prints the size
usleep(1000);
}
pid_close($pid);
Ниже показано, как получить размер данных UART.
$rxlen = pid_ioctl($pid, "get rxlen[ $string]");
Если после команды "get rxlen" указана строка, функция pid_ioctl возвращает 0 до тех пор, пока строка не войдет в UART. Если указанная строка приходит, то она возвращает весь размер данных, включая строку.
Оставшийся размер буфера приема может быть рассчитан следующим образом:
>remaining size of receive buffer = size of buffer - received data size
Данный пример показывает, как получить оставшийся размер буфера приема.
$rdata = "";
$pid = pid_open("/mmap/uart0"); // open UART 0
pid_ioctl($pid, "set baud 9600"); // baud rate: 9600 bps
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
pid_ioctl($pid, "set flowctrl 0"); // flow control: none
$rxbuf = pid_ioctl($pid, "get rxbuf"); // get size of receive buffer
$rxlen = pid_ioctl($pid, "get rxlen"); // get received data size
$rxfree = $rxbuf - $rxlen; // get remaining size of receive buffer
echo "rxfree = $rxfree\r\n"; // print the size
pid_close($pid);