PDA

View Full Version : Signal strength dBm (Symbian 60 v6.1)


Suriken
27-10-2005, 15:23
Вощем, уже второй день ищу способ получить уровень сигнала в дБм для девайса (Nokia N-Gage QD), который использует сабжевую операционку. Использую Nokia Symbian 60 SDK V1.2.
Стандартные средства не позволяют получить желаемую цифру. Они могут дать только количество палок на индикаторе сигнала (RSystemAgent), да и то не факт, что точно.
Наиболее распространенным способом является искуственное расширение возможностей SDK путем добавления etelbgsm.h и использования метода RBasicGsmPhone::GetSignalStrength. Но данный метод при запуске в эмуляторе всегда возвращает число 46000, а при запуске на девайсе - число 100.
На девайс была поставлена прога CellTrack. Она показывает 100% уровень сигнала, но также и его величину в дБм, колеблющуюся (!) примерно от -68 до -72. Т.е. способ получения этой величины таки существует и работает. Автор проги не отвечает.
У кого-нибудь есть какие-нибудь идеи по этому поводу? Как получить сабжевую инфу?

ЗЫ Всякие классы для SDK V2.0 и для Symbian V8.1a ессно не работают (пробовал).

Alvarez
27-10-2005, 16:19
Попробуйте что нибудь типа

#include <rconnmon.h>

{

RConnectionMonitor monitor;
monitor.ConnectL();

TUint count;
TRequestStatus status;
TUint ids[15];

monitor.GetConnectionCount(count, status);
User::WaitForRequest(status);

if(status.Int() != KErrNone)
{
// handle error
}

// fill connections array in
TUint numSubConn;

for(TInt i = 1; i <=count; i++)
{
TInt ret = monitor.GetConnectionInfo(i, ids[i-1], numSubConn);
if(ret != KErrNone)
{
// error handling
}
}

// get signal strenght for the active connection ids[0]
TInt strength; // in DBm
monitor.GetIntAttribute(ids[0], 0, KSignalStrength, strength, status);
User::WaitForRequest(status);

if(status.Int() != KErrNone)
{
// handle error
}


// etc...

monitor.Close();

}

С уважением.

Suriken
27-10-2005, 16:46
Единственное, что меня тут не устраивает, так это то, что RConnectionMonitor - часть API Series 60 DP 2nd Edition, FP2.
rconnmon.h отутсвует в SDK 1.2, а SDK более высоких версий не работают для Symbian 6.1

Или как-то все-таки можно импортировать необходимое API в V6.1? Как?

Super Drag
27-10-2005, 21:43
А для чего тебе все это надо ?

Suriken
27-10-2005, 21:45
А для чего тебе все это надо ?
Чтобы построить карту покрытия.

IKO
27-10-2005, 21:51
не, вы ребята гении однозначно! читаю вас и фигею с собственнои тупости!

Suriken
27-10-2005, 21:52
не, вы ребята гении однозначно! читаю вас и фигею с собственнои тупости!
Поэтому я не читал Котлера ;)

IKO
27-10-2005, 21:59
Поэтому я не читал Котлера ;)


а тоже!:) открыл, посмотрел, понял что такои бред я даже в пьяно обкуренном виде не напишу!:)


кстати почти решил проблему с СМСками, перетасчил все из входясчих в копм! разрешения фаила .vmr

Alvarez
28-10-2005, 09:00
Единственное, что меня тут не устраивает, так это то, что RConnectionMonitor - часть API Series 60 DP 2nd Edition, FP2.
rconnmon.h отутсвует в SDK 1.2, а SDK более высоких версий не работают для Symbian 6.1

Или как-то все-таки можно импортировать необходимое API в V6.1? Как?

Здравствуйте,
портировать необходимое API из более поздней SDK в раннюю не получится. Причина очевидна - ранние SDK используют соответственно ранние версии Symbian.
Единственное , что приходит на ум - покопайте в своём SDK ETel. Это общий интерфейс для доступа к телефонным функциям, он не должен эволюционировать вместе с Symbian. Изменяются только TSY модули, реализующие этот интерфейс.

С уважением.

Suriken
28-10-2005, 10:06
портировать необходимое 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 для уровня сигнала.
RTelServer server;
RBasicGsmPhone phone;
RTelServer::TPhoneInfo info;
TInt32 lSignal;

User::LeaveIfError(server.Connect());
User::LeaveIfError(server.LoadPhoneModule(_L("Phonetsy.tsy")));
User::LeaveIfError(server.GetPhoneInfo(0, info));
User::LeaveIfError(phone.Open(server, info.iName));

User::LeaveIfError(phone.GetSignalStrength(lSignal));
TInt SigStrength = lSignal;

phone.Close();
server.UnloadPhoneModule(_L("Phonetsy.tsy"));
server.Close();

Alvarez
28-10-2005, 10:33
Значит, TSY для Вашей модели реализует эту функцию именно описанным Вами способом.
То, что другие приложения для Symbian 6.1 получают требуемый параметр, говорит только о том, что в их случае TSY возвращает его. Symbian и ETel - это разные вещи. ETel - это телефония, и её реализация изменяется от модели девайса к модели. Symbian же, это не телефония. Поэтому, на двух разных моделях с одинаковой версией Symbian, ETel функции могут работать по разному.
Про совместимость ничего определённого говорить нельзя. В общем случае приложения, написанные для ранних OS, не будут работать в поздних, но всё зависит от используемых API, опять же. Например, в последних версиях, типа приложения APP нет в природе.
Про способы декомпиляции APP не слышал, и про методы "заглядывания" внутрь DLL тоже, кроме как с помощью ICD трейсеров (типа lauterbach), да и то они требуют специальный билд.

С уважением.

zuber
28-10-2005, 12:53
Единственное, что меня тут не устраивает, так это то, что РЦоннецтионМонитор - часть АПИ Сериес 60 ДП 2нд Едитион, ФП2.
рцоннмон.х отутсвует в СДК 1.2, а СДК более высоких версий не работают для Сымбиан 6.1

Или как-то все-таки можно импортировать необходимое АПИ в В6.1? Как?

А тебе обязательно под Сымбиан писать? Вроде, MIDP тоже умеет доставть сигнал. Тока, сам никогда не пробовал.

public class GSMReading
extends java.lang.Object
implements BeaconReading
Encapsulates a GSM reading from the native servers. This includes cell id, area id, signal strength, MNC, MCC, and network name.

Deniska
28-10-2005, 13:23
я в принципе делал доставание, и код лежит где то дома.
и помоему он выглядел почти так же как твой.

у меня один вопрос, а ты пробывал на QD своем, другую готовую прогу которая делает тоже самое. Если оне не заработает то вероятнее всего, просто образали эту функцинальность, и все,
если же заработает, тогда поищу дома винчестер, где этот код валяется.

Suriken
28-10-2005, 13:27
у меня один вопрос, а ты пробывал на QD своем, другую готовую прогу которая делает тоже самое
если же заработает, тогда поищу дома винчестер, где этот код валяется.
Пробовал. Работает. Прога называется CellTrack.
Поэтому до сих пор и долбаюсь.... Ведь как-то это у них получилось...

Suriken
28-10-2005, 13:29
А тебе обязательно под Сымбиан писать? Вроде, MIDP тоже умеет доставть сигнал. Тока, сам никогда не пробовал.

Про указанный тобой класс не слышал. Посмотрю.
Но я не нашел JSR, который бы содержал API для доступа к GSM напрямую. Реализации получения уровня сигнала на джаве (которые я находил) используют нативный интерфейс к симбиановским DLL. Кстати, именно это и указано в описании к приведенному тобой классу. Так уж лучше делать сразу на симбиане и не ограничиваться только получением уровня сигнала.

PS Класс RBasicGsmPhone корректно возвращает CellID и идентификаторы сети, запара только с уровнем сигнала.

Deniska
28-10-2005, 13:29
Око, вечером посмотрю как я это делал для телефона 7650, в далеком 2002 году :-)