День добрый, недавно столкнулся с проблемой соединения 2х устройств по i2c: slave AT90CAN32, master Linux Based.
Сообствено, как грамотно реализовать обработку комманд со стороны Linux?
Дело в том, что на slave реализовано н-ое кол-во комманд, причем некоторые комманды могут выполнятся на устройстве долго, и необходимо другой коммандой запрашивать статус выполнения.
В итоге горе-программист, который разработал класс для работы с устройством, принебрег многими вещами, на мой взгляд.
Но так как я сам, не очень силен в программировании протоколов, хочу спросить советов.
Вот пример одной комманды которая уже реализована:
/**
* @brief количество диспенсеров на инауте.
*
* @return QList<int> список из 36 позиций, в котором хранятся количество
* диспенсеров на каждом инауте.
*/
QList<int> RaspiTWI::dispensersInOuts() {
QByteArray data(37, 0x00);
QList<int> result;
unsigned char checkSumm,
status;
this->writeTWI("\x11\x11");
data = this->readTWI(37);
checkSumm = data.at(36);
data = data.mid(0, 36);
if (!(this->checkCS(&data) == checkSumm)) qDebug() << "Dispensers in inouts is a trap!";
for(int i=0; i<data.size(); i++){
result << data.at(i);
}
do {
usleep(STATUS_DELAY);
status = this->checkStatus();
}while(status == 0x01);
//qDebug() << "status is" << status;
return result;
}
1) Я думаю, что ни есть хорошо после записи данных в шину сразу же их читать 2) Циклический запрос статуса в функции, тоже не очень хорошо
Подскажите, как грамотно организовать общение и прокомментируйте подход, который приведен выше.