xmlrpc доступ к последовательному порту невозможен; другой ответ (AT cmd, C ++, python)

У меня есть код C ++ для общения с модемом, основанный на классе BufferedAsyncSerial (увидеть Вот) используя последовательную библиотеку от boost. С коротким кодом в C ++, как это

BufferedAsyncSerial device("/dev/ttyACM0",9600);
device.writeString("AT\r");
std::cout << device.readString() << std::endl;
boost::this_thread::sleep(boost::posix_time::seconds(2));
std::cout << device.readString() << std::endl;
device.close()

Я могу отправить AT подать команду на аналоговый модем через последовательный порт /dev/ttyACM0 и получить правильный ответ из порта, а именно:OK». Промежуток в режиме ожидания обеспечивает модему некоторое время для обработки ввода.

Все это я обернул в класс xmlrpc, чтобы передать чтение / запись через другой компьютер (для теста он фактически идентичен), чтобы получить доступ к функциональности с помощью xmlrpc с питоном:

device = xmlrpclib.ServerProxy("http://localhost:8080/RPC2")
device.serial.open("/dev/ttyACM0")
device.serial.send("AT\r")
for i in range(100):
time.sleep(0.1)
print device.serial.read()

На стороне сервера C ++ функции open / close / read / и write упакованы соответственно, имя порта такое же, как и скорость передачи данных. Однако при выполнении этих функций Python AT отправляется на модем (я могу прочитать его через соединение xmlrpc!), но никогда OK появляется, независимо от того, как часто или как долго я пытаюсь.

Если есть специалист по C ++ / boost / serial / xmlrpc / python, я буду признателен за любые советы. Вот некоторые дополнительные комментарии и замечания:

  • Используемый сервер C ++ xmlrpc — abyss / xmlrpc-c, с которым я не знаком
  • Если я закодирую всю цепочку open / write / read / close в одной функции, которую я могу переместить через xmlrpc, я получу ожидаемый результат
  • Я проверил, что доступ к фактическому экземпляру BufferedAsyncSerial осуществляется через один класс, и зарегистрировал порядок и детали каждой команды. Они идентичны в обоих случаях, я ничего не пропускаю.
  • Я также проверил, что объект, над которым я работаю, является тем же объектом, то есть имеет тот же адрес в памяти

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]