AT-команды модема GSM UCS2 ошибка 500

Три дня назад я начал делать простое приложение для отправки SMS. Я уже протестировал его, и он работает в режиме GSM CSCS, но когда я переключаю его в UCS2, он не показывает буквы кириллицы.

<?php
error_reporting(E_ALL);

$fp = fopen("/dev/ttyUSB0", 'w+');

$msg = strtoupper(bin2hex(mb_convert_encoding("Тест", "UCS-2", "UTF-8")));
$number_raw = "+359000000000";
$number = bin2hex(mb_convert_encoding($number_raw, "UCS-2", "UTF-8"));
echo $number."<br>";
echo $msg;
$debug = false;
if(!$fp || $debug){
  //echo "Can not open!";
}else{
  fwrite($fp, "AT+CMGF=1".chr(13)); // OK
  sleep(5);
  fwrite($fp, 'AT+CSCS="UCS2"'.chr(13)); // OK
  sleep(5);
  fwrite($fp, 'AT+CMGS="'.$number.'"'.chr(13)); // OK
  sleep(5);
  fwrite($fp, $msg.chr(26)); // ERROR 500
  echo "<br>Sent";
}
?>

Номер и сообщение закодированы правильно в соответствии с этим источником: http://www.columbia.edu/kermit/ucs2.html

Когда сообщение отправлено, я получаю его (поэтому кодировка номера верна), но содержимое не отображается должным образом.

https://imgur.com/a/cCaTU

Каковы возможные причины такого поведения и может ли это быть моя кодировка файла PHP? Также почему Linux находит 3 устройства GSM tty?


person Andrey Tsarev    schedule 03.01.2018    source источник
comment
Нет! Нет! Нет! Вы должны никогда, никогда, никогда, никогда, никогда, никогда, никогда, никогда, никогда, никогда, никогда не используйте такой сон. Вы ДОЛЖНЫ читать и анализировать ответы, возвращаемые модемом, иначе вы прервать команды.   -  person hlovdal    schedule 19.01.2018


Ответы (1)


После того, как вы удалили все ужасные вызовы sleep и реализовали правильный синтаксический анализ окончательного ответа, вам нужно исправить синтаксический анализ для ожидания "\r\n> " ответ AT+CMGS.

Без каких-либо исправлений проблема с кодировкой набора символов является очень незначительной проблемой. Когда вы запускаете AT+CSCS="UCS2", каждая строка будет закодирована модемом таким образом и должна быть закодирована вами до вечности (или другого набора символов), например, для переключения с UCS2 на UTF -8 будет AT+CSCS="005500540046002D0038", а не AT+CSCS="UTF-8".

person hlovdal    schedule 19.01.2018