forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_jsr256 - Работа с сенсорами телефона (http://forum.boolean.name/showthread.php?t=9692)

odd 02.11.2009 16:56

Lib_jsr256 - Работа с сенсорами телефона
 
Вложений: 1
Библиотека немного доработана. Теперь можно обращаться к любым сенсорам.

Для начала неплохо бы вызвать функцию get_version, которая вернет вам установленную на телефоне версию JSR256 или строку "null" если данный JSR там не установлен. Собственно, если вернется "null", то вызов других функций библиотеки может привести к зависанию приложения.

Следующим шагом неплохо бы получить весь список сенсоров, которые есть в телефоне. Для этого служит функция get_list, которая вернет результат в виде строки, разделенной символом "|" в формате:
имя_датчика|имя_сенсора|контекст|....

Мой телефон, к примеру, выдал такой список:

PHP код:

axis_x|acceleration|user
axis_y
|acceleration|user
axis_z
|acceleration|user
handsfree_presence
|com.sonyericsson.io.sensor.handsfree_presence|user
network_field_intensity
|network_field_intensity|device
battery_charge
|battery_charge|device
charger_state
|battery_charge|device
steps_per_minute
|com.sonyericsson.io.sensor.steps_per_minute|user
step_count
|step_count|user
keylock_status
|com.sonyericsson.io.sensor.keylock_changed|user 

Теперь давайте разбираться в списке.
Датчики axis_x, axis_y, axis_z принадлежат к сенсору acceleration,
а в сенсоре battery_charge содержится два датчика: battery_charge и charger_state.
Также есть счетчик шагов, датчик наличия гарнитуры и другие, но сейчас они меня мало интересуют.

Теперь, если я хочу получать данные от какого либо сенсора (не датчика!)
я вызываю функцию Init, которая принимает 3 параметра: имя сенсора, контекст сенсора и количество датчиков в сенсоре.

К примеру, мне нужно прослушать датчики сенсора акселерометра.
Тогда вызывать нужно так: Init('acceleration', 'user', 3); а для прослушивания датчика состояния батареи нужно вызывать: Init('battery_charge', 'device', 2);

Ну и конечно получить данные от датчика сенсора можно функцией get_value, которая принимает только номер датчика.

Таким образом, пример программы для прослушивания, к примеру, состояния батареи:

PHP код:

Program JSR256test;
Uses jsr256;
Var     
sString;
        
iinteger;
Begin
    s
:=get_list;
    
ShowForm;
    
i:=FormAddString(s); // Показ списка датчиков
    
Delay(100000); // 100 секунд я думаю хватит
    
ShowCanvas;
    
Init('battery_charge''device'2); // Подписываемся на прослушивание датчика заряда батареи
    
repeat
        SetColor
(255255255);
        
FillRect(00GetWidthGetHeight);
        
SetColor(000);
        
DrawText(''+get_value(0), 55);
        
DrawText(''+get_value(1), 525);
        
Repaint;
        
Delay(100);
    
until false;
End

Действительно, при запуске получим столбик из двух чисел: заряд батареи в процентах и 0 или 1 если подключено или отключено зарядное устройство.

Вот другой пример, черный шарик, который катается по экрану в зависимости от наклона аппарата:

PHP код:

Program JSR256test;
Uses jsr256;
Var 
xyxsysxayarreal;
Begin
    Init
('acceleration''user'3); // Опрашиваем 3 датчика
    
    
xs:=0ys:=0// Начальная скорость мячика
    
r:=30// Радиус шарика
    
x:=0y:=0// Начальные кординаты
    
    
repeat    // бесконечный цикл
    
        
xa := -get_value(0)*1.0 10000.0// запрашиваем данные у акселерометра
        
ya := get_value(1)*1.0 10000.0;
    
        
SetColor(255255255);
        
FillRect(00GetWidthGetHeight); // Очистка экрана
        
SetColor(000);
        
        
ys := ys ya 9.82;
        
xs := xs xa 9.82// 9.82 - притяжение
        
ys := ys ys 0.01;
        
xs := xs xs 0.01// Немного матана
        
        
if(ys 0.0then
        begin
            ys 
:= -(ys ys 0.15); // 0.15 - это коэффициэнт упругости мячика
            
:= 0.0;
        
end
        
else
        if(
ys GetHeight rthen
        begin
            ys 
:= -(ys ys 0.15);
            
:= GetHeight r;
        
end
        
else := y+ys;
        
        if(
xs 0.0then
        begin
            xs 
:= -(xs xs 0.15);
            
:= 0.0;
        
end
        
else
        if(
xs >= GetWidth rthen
        begin
            xs 
:= -(xs xs 0.15);
            
:= GetWidth r;
        
end
        
else := x+xs;
        
        
FillEllipse(Trunc(x), Trunc(y), Trunc(r), Trunc(r)); // Рисуем мячик
        
Repaint// Перерисовка экрана
    
until false;
End

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

DIMMON4IK 02.11.2009 17:09

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Идём к iPhone играм :)
_________________
Sony ericsson W710 - есть акселерометр (о Idou и говорить не хочу)

Bruteo 02.11.2009 19:27

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Спасибо большое, odd!
На Nokia 5800 пока не удалось заставить работать тестовый пример. Пытаюсь докопаться до истины.
Установка плагина для поддержки JSR256 не помогла: http://www.forum.nokia.com/info/sw.n...r_s60_5_0.html

Upd. Всё работает. Осталось выяснить, работало ли до установки плагина =)

С нетерпением жду либы с возможностью обращения к другим устройствам. Ещё раз спасибо! =)

А возможно ли реализовать обработку случая, когда нет поддержки акселерометра, чтобы приложение не вылетало?
Nokia E61, например, ругается на необработанное исключение.

<-TzX-> 12.11.2009 11:38

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Nokia N82 пример не завелся, пишет "Необработаное исключение". Просьба Bruteo выложить пример, который завелся на 5800

Bruteo 12.11.2009 14:40

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Например, так.
Код:

Program JSR256test;
Uses accelerator;
Var x, y, z: real;
Begin
    init;
    repeat    // бесконечный цикл
    setColor(255,255,255);
    FillRect(0, 0, getWidth, getHeight);
    setColor(0,0,0);
        x := get_value(0); // запрашиваем данные у акселерометра
        y := get_value(1);
        z := get_value(2);
DrawText('x '+x,0,0);
DrawText('y'+y,0,50);
DrawText('z'+z,0,100);
delay(100);
        Repaint; // Перерисовка экрана
    until false;
End.


<-TzX-> 12.11.2009 15:04

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Пример даже не скомпилился. Переделал так:
Код:

Program JSR256test;
Uses jsr256;
Var x, y, z: real;
Begin
    init('acceleration', 'user', 3);
    repeat    // бесконечный цикл
    setColor(255,255,255);
    FillRect(0, 0, getWidth, getHeight);
    setColor(0,0,0);
        x := get_value(0); // запрашиваем данные у акселерометра
        y := get_value(1);
        z := get_value(2);
DrawText('x '+x,0,0);
DrawText('y'+y,0,50);
DrawText('z'+z,0,100);
delay(100);
        Repaint; // Перерисовка экрана
    until false;
End.

Все равно не пошло

odd 12.11.2009 19:16

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Попробуй перед запуском Init и остальным выяснить версию jsr256.
Если там возвращается null, то нечего и соваться делать всё остальное.

Trazzy 13.11.2009 11:08

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i

<-TzX-> 13.11.2009 16:34

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от ArtikZ (Сообщение 124707)
Возможно ли узнать соостояние заряда батареи на обычном телефоне? Например: 6233i

Если после запроса сансоров, он там будет, то думаю да

Trazzy 14.11.2009 17:16

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)

odd 14.11.2009 17:30

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Сообщение от ArtikZ (Сообщение 125060)
Пробовал получить список на нок6233i и симС65.. Виснет прога в начале... (и get_version не помогает)

Думаю на этих телефонах нет поддержки сенсоров.

Trazzy 14.11.2009 17:47

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Цитата:

Думаю на этих телефонах нет поддержки сенсоров.
Вот поэтому и спрашивал, возможно ли узнать заряд батареи на таких телефонах?!

<-TzX-> 16.11.2009 03:17

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Следовательно нет. Да и вообще предложение отписываться о моделях телефонов, на которых либа смогла получить информацию о сенсорах.

IDOL 1234 25.11.2009 18:33

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
program g;
uses jsr256;
var a:string;
begin
a:=get_version;
drawtext(a,1,1);
repaint;
delay(3000)
end .
- не запускается. Cannot create class in system package.
Остальные ф-ции - аналогично.

odd 26.11.2009 18:50

Ответ: Lib_jsr256 - Работа с сенсорами телефона
 
Мда. Как показывает практика, лучше не вызывать даже get_version, иначе такая проверка может быть фатальной для телефонов, с отсутсвием сенсоров.

Лучше проверять вручную с помощью вызова
PHP код:

sensor_version := GetProperty('"microedition.sensor.version'); 

Ну а потом уже в зависимости от того, какую версию получим уже делать выводы,
стоит ли дальше делать инициализацию библиотеки или совсем не стоит.


Часовой пояс GMT +4, время: 15:58.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot