Je suis en train de développer une application pour Apalis iMX6 avec Qt C++ sous Linux et j'ai ajouté cette application dans le démarrage au moyen de profile.d
ce code doit mettre ttymxc1 en mode RS485 comme ci-dessous :
int enableRS485(){
struct serial_rs485 rs485conf;
int fd = open ("/dev/ttymxc1", O_RDWR);
if (fd < 0) {
printf("Error: Can't open: /dev/ttymxc1 %d\n",fd);
return fd;
}
rs485conf.flags |= SER_RS485_ENABLED;
rs485conf.flags &= ~(SER_RS485_RTS_ON_SEND);
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
rs485conf.flags |= SER_RS485_RX_DURING_TX;
err = ioctl (fd, TIOCSRS485, &rs485conf);
if (err < 0) {
printf("Error: TIOCSRS485 ioctl not supported.\n");
return err;
}
err = close (fd);
if (err < 0) {
printf("Error: Can't close: /dev/ttyLP1 %d\n",err);
return err;
}
return 0;
}
cette fonction fonctionne également et ne pose aucun problème. mais lorsque j'essaie d'ouvrir le port série parfois Pendant le démarrage de l'application, je n'ai pas pu obtenir ce port série et QSerialPortInfo m'a montré que ttymxc1 est en cours d'utilisation :
void SerialClass::initSerial()
{
m_serialPort = new QSerialPort();
enableRS485();
sleep(1);
m_serialPort->setPortName("/dev/ttymxc1");
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
m_serialPort->setBaudRate(9600);
m_serialPort->setRequestToSend(false);
bool res = m_serialPort->open(QIODevice::ReadWrite);
}
" QSerialPort::errorOccured Le signal " " sera émis avec la valeur " PermissionError "
mais mystérieusement "ls -l /proc/[0-9] /fd/ |grep /dev/ttymxc1" me montre que ttymxc1 est utilisé par mon application.
il n'y a pas d'application qui fonctionne avec le port série et mon application est juste pour une exécution unique.
Y a-t-il une idée ?
Gracias