MyTetra Share
Делитесь знаниями!
Как работать с последовательным портом на языке Си на Android-устройстве?
Время создания: 02.05.2024 16:31
Текстовые метки: android, андроид, linux, последовательный, порт, UART, tty, C, Си, язык
Раздел: Компьютер - Android - Программирование под Андроид
Запись: xintrea/mytetra_syncro/master/base/1714656699bod1r4ks79/text.html на raw.github.com

Работа с последовательными портами в Android (как и в любом другом Linux) не отличается от работы с любыми другими файлами и устройствами: вызовов open, read, write и close обычно хватает и лишь иногда к ним в довесок нужен ioctl.



int fd = open("/dev/ttyMT3", O_RDWR);

int result = write(fd, command, strlen(command));



Для работы с терминалом необходимо использовать модуль termio который предоставляет все необходимые структуры для настройки режима работы терминала, в т.ч и бодрейт. Дело в том, что изначально последовательное устройство настроено на режим работы в качестве терминала, т.е драйвер отдаст данные только после того, как устройство на UART пошлёт \n, или превысит размер внутреннего буфера для сообщения. Если вам нужно работать с бинарными данными и получать их «на лету» — необходимо настроить последовательный порт в «binary» режим:



tcgetattr(modemFd, &tio);

tio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);

tio.c_oflag &= ~(OPOST);

tio.c_cflag |= (CS8);

tio.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);

tcsetattr(modemFd, TCSAFLUSH, &tio);



Если же вам достаточно текстового терминального режима, то можно продолжить как есть и использовать fgets, fscanf и прочие удобные функции из libc! О том, как собрать нативную программу для смартфона и как вообще выбросить Android из него, читайте в отдельной статье.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования