Получение статуса UART


Для получения разнообразных статусов/состояний UART необходима команда функции pid_ioctl.

$return = pid_ioctl($pid, "get ITEM");

Доступные статусы/состояния UART

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

Проверка текущей информации 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);