Цитата:
|
Сообщение от Alvarez
портировать необходимое API из более поздней SDK в раннюю не получится. Причина очевидна - ранние SDK используют соответственно ранние версии Symbian.
Единственное , что приходит на ум - покопайте в своём SDK ETel. Это общий интерфейс для доступа к телефонным функциям, он не должен эволюционировать вместе с Symbian. Изменяются только TSY модули, реализующие этот интерфейс.
|
О чем я и писал в первом сообщении. ETel API поставляется в SDK в урезанном виде. Напр., отсутствуют заголовочные файлы для etelbgsm.lib Но и это не проблема, можно декомпиллировать библиотеку и извлечь необходимые параметры и названия функций или можно скачать уже готовый заголовочный файл etelbgsm.h, в котором уже содержатся необходимые описания класса RBasicGsmPhone. Существует также заголовочный файл etelagsm.h, который содержит описание класса RAdvGsmPhone и который тоже можно найти.
Так вот, класс RBasicGsmPhone содержит API для получения уровня сигнала GetSignalStrength(), которое, судя по отзывам, работает для модели 3650 и для некоторых других моделей. Но для N-Gage QD в моем случае и для какой-то модели (не указанной) по описанию на форуме эта функция всегда возвращает 100. В некоторых случаях для других людей эта функция всегда возвращает 0. Но превалирующее число описаний утверждает правильность работы данной функции.
Данная функция (или весь класс RBasicGsmPhone) построена на доступе к интерфейсу модуля phonetsy.tsy.
Но это не единственный способ, вероятно. Или использование данного способа требует специальной подготовки, про которую мне не известно. Эти выводы напрашиваются, поскольку существуют работающие приложения для Symbian 6.1, которые получают силу сигнала в необходимых единицах измерения. Но как это реализовано, мне не известно.
А как насчет обратной совместимости у Symbian? Будет ли программа для версии 6.1 работать в 7.0?
Существует ли способ декомпилировать .app файл? Или хотя бы выделить из него обращения к функциям DLL с целью поиска использованных библиотек?
Исходной предпосылкой для проблемы является код, приведенный ниже, который не работает и всегда возвращает значение 100 для уровня сигнала.
PHP код:
RTelServer server;
RBasicGsmPhone phone;
RTelServer::TPhoneInfo info;
TInt32 lSignal;
User::LeaveIfError(server.Connect() );
User::LeaveIfError(server.LoadPhone Module(_L("Phonetsy.tsy")));
User::LeaveIfError(server.GetPhoneI nfo(0, info));
User::LeaveIfError(phone.Open(serve r, info.iName));
User::LeaveIfError(phone.GetSignalS trength(lSignal));
TInt SigStrength = lSignal;
phone.Close();
server.UnloadPhoneModule(_L("Phonetsy.tsy"));
server.Close();
|