Еще про SMS-ки на QMI модеме
May. 4th, 2025 04:37 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Написал на LUA декодилку 16ричных ucs-2 sms-ок которые возвращает uqmi.
Функция ucs2utf8 у меня получилась извращенная, потому что в свежем openwrt lua 5.1, в котором побитовых операций нет. И даже целочисленного деления нет, оно в 5.3 появилось. А тащить всякие левые модули на роутер хочется по минимуму. 9-килобайтный json.lua правда, пришлось притащить.
А ucs2utf8 получилась такая:
function ucs2utf8(c)
code = ("0x"..c)+0
if code < 128 then
return string.format("%c",code)
elseif code < 2048 then
return string.format("%c%c",math.floor(code/64) + 192, code % 64 +128)
else
return string.format("%c%c%c",math.floor(code/4096) +224,
math.floor(code/64) % 64 + 128,
code % 64 +128)
end
end
Используется вот так:
string.gsub(hexstring,"(....)",ucs2utf8)
Надо еще конкатенацию порезанных на куски sms-ок написать, и удаление. Причем удаление мультипарт-сообщения должно быть одной операцией. По номеру первой части.
Для отладки скрипта, которой я занимаюсь на ноутбуке, я перед вызовом uqmi вставляю ssh root@wifi. Оно так правда, медленнее, но работает.
Upd Почитал ихсодники uqmi. Пожалуй декодирование ucs-2 логичнее туда добавить. Но оно сишное. это среду кросс-компиляции развоворачивать надо.