На мобильном устройстве есть usb device который в системе торчит как /dev/ttyGS0. В настольную систему это устройство подключенное по usb торчит как /det/ttyACM0.
На мобильном устройстве запускаем прогу:
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <iostream>
int main()
{
int fd = open("/dev/ttyGS0", 0 );
if ( fd == -1 ) std::cerr << "open: " << strerror(errno) << std::endl;;
fd_set watch;
while (true)
{
std::cerr << "wait in select" << std::endl;
FD_ZERO(&watch);
FD_SET(fd, &watch);
int res = select(fd + 1, &watch, 0, 0, 0);
if ( res == -1 )
{
std::cerr << "select: " << strerror(errno) << std::endl;
return 1;
}
if ( res && FD_ISSET(fd, &watch) )
{
std::cerr << "Has data" << std::endl;
int canRead = 0;
if ( ioctl(fd, FIONREAD, &canRead) < 0 )
std::cerr << "ioctl: " << strerror(errno) << std::endl;
std::cerr << " size: " << canRead << std::endl;
char array[canRead];
res = read(fd, &array, canRead);
if ( res == -1 )
{
std::cerr << "read: " << strerror(errno) << std::endl;;
return 1;
}
std::cerr << " has read: " << res << std::endl;
}
}
}
на компе пускаем прогу:
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
#include <errno.h>
#include <string.h>
int main()
{
int fd = open("/dev/ttyACM0", O_RDWR | O_SYNC );
if ( fd == -1 )
{
std::cerr << "open: " << strerror(errno) << std::endl;
return 1;
}
std::cerr << "File descriptor: " << fd << std::endl;
char array[18];
int res = write(fd, &array, 18);
if ( res == -1 )
{
std::cerr << "write: " << strerror(errno) << std::endl;
return 1;
}
std::cerr << "Has write: " << res << std::endl;
close(fd);
}
На мобильном устройстве реакции на запуск проги на настольном компе никакой! Хотя на echo 1 > /dev/ttyACM0 прога на мобильном устройстве срабатывает. И самое прикольное: если после представленной проги запустить echo 1 > /dev/ttyACM то будут пересланы все данные которые раньше якобы отсылала программа. Коточе ЧЯДНТ и чего не хватает в моих вызовах write???