motofan logo
16 страниц V « < 4 5 6 7 8 > »         
> 

Учимся писать эльфов вместе, Обсуждение процесса кодинга

Andy51
сообщение 29.10.2007, 20:13 Закрепленное сообщение!


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255

Рейтинг: 1224



Вот и долгожданное обновление SDK до v0.2

Основные новшества с прошлой версии:
+ Добавлено множество функций в SDK
+ Добавлено два новых примера - на этот раз GUI

Что внутри:
Папка SDK - ну, и так ясно, заголовочные файлы. За описаниями функций заглядываем в эту папку.

helloworld_snd - первый пример эльфа. Несколько нестандартный HelloWorld, заменяет озвучку цифровой клавиатуры системными звуками. Предназначен в основном для изучения структуры приложения (Application), ну и как пример приложения, работающего в фоне.

helloworld_gui - классический HelloWorld эльф, на этот раз с использованием GUI. Выводит сообщение с помощью диалога Notice. Предназначен для изучения структуры простейшего GUI-приложения.

ListTest - пример использования диалога List. Значительно более сложный пример, предназначен для изучения возможностей и принципов управления диалогами.

make_*.bat - батники для сборки эльфов-примеров. Эльфы расчитаны на компиляцию с комплектом ADS. Из-за правил форума, я не могу включить его в SDK, однако оставляю ссылки
http://ifolder.ru/3937671
http://slil.ru/25060171
http://rapidshare.com/files/67580866/ads.7z.html

Lib.o - для функционирования эльфа под моим загрузчиком, необходимо подлинковать этот файл к проекту (в make.bat уже прописан).
Внимание! Этот файл не зависит от конкретной версии прошивки, под которую собирается эльф, но, тем не менее, зависит от версии библиотеки!
В этом SDK уже включен Lib.o для библиотеки v071218 (оч. старый - не забудьте обновить, если понадобятся новые функции)

Пара слов об т.н. Application.
В телефонах motorola есть система AFW, которая позволяет, не затрачивая лишних ресурсов процессора на обеспечение "полноценной" многозадачности, достаточно полноценно работать нескольким приложениям, ориентированным на диалог с пользователем. Как это работает: приложения представляют собой, фактически, набор обработчиков событий(ивентов, events) + структура данных приложения. Откликаясь на те или иные события, приложения поочерёдно обрабатывают списки накопившихся ивентов. Таким образом, мы фактически имеем невытесняющую многозадачность.
Есть теоретическая возможность писать и эльфы, выделенные в отдельный процесс(task), но эта часть всё ещё в разработке.

Книги по Си
  1. Руководство полного идиота по программированию (на языке Си) - Не смотря на такое название все азы разжёваны. Если вы вообще никогда не видели Си, начните с этой книги
  2. Герберт Шилдт, "Полный справочник по С (4-е издание)"
    Прикрепленный файл Spr_po_C.rar   ( 934.62 килобайт ) Кол-во скачиваний: 1154
  3. "Язык программирования C"
    Прикрепленный файл C_book.zip   ( 220.86 килобайт ) Кол-во скачиваний: 898
Исходники эльфов
  1. SRC by om2804
  2. SRC by G-XaD
SDK
  1. SDK by om2804
  2. SDK by G-XaD
Эльфостроение на motoWiki

Компилятор + исходники от om2804 для EP1 скачать

Сообщение отредактировал om2804 - 3.5.2011, 13:59
Прикрепленный файл SDKv02.rar   ( 24.88 килобайт ) Кол-во скачиваний: 2172
Прикрепленный файл C_book.zip   ( 220.86 килобайт ) Кол-во скачиваний: 898
Прикрепленный файл Spr_po_C.rar   ( 934.62 килобайт ) Кол-во скачиваний: 1154
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 30.10.2008, 18:33


Опытный
***

Группа: Пользователи
Сообщений: 117
Регистрация: 15.2.2008
Из: Казань
Пользователь №: 163 680
Модель телефона: E398
Прошивка: DaRII [test15] Mod

Рейтинг: 40



Цитата(Sany_Angel @ 29.10.2008, 22:44) *

Просто я очень хочу научиться писать эльфы самому

Если очень сильное желание можешь начать учить язык, но многие на полпути бросают это занятие и получается ни себе, ни людям.
Советую начать с модов и багфиксов, для этого достаточно знать Паскаль (хотя бы на троечку).
Моды сэкономят твоё драгоценное время и удовлетворят желания творчества.
Также ещё придётся познавать функции прошивки Synerj (это даже важнее Си). Их можно найти на этом форуме, например Паттерны и описания функций.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 1.11.2008, 19:08


Опытный
***

Группа: Пользователи
Сообщений: 117
Регистрация: 15.2.2008
Из: Казань
Пользователь №: 163 680
Модель телефона: E398
Прошивка: DaRII [test15] Mod

Рейтинг: 40



Вот что получилось с гарнитурой:
глобальная переменная UINT8 GARNITURA=0;
в массиве прописал ивенты, на которые сработают процедуры
EVENT_HANDLER_ENTRY_T shell_any_state_handlers[] =
{ 0x0822F4, Pause},
{ 0x0822F3, Stop},

при вызовах ивента
Код
UINT32 Stop(EVENT_STACK_T *ev_st,  void *app)
{
    UINT32              Error=1;
    APP_SHELL_T         *papp = ( APP_SHELL_T* ) app;
    EVENT_T             *event = AFW_GetEv(ev_st );
    
    if (event->code == 0x0822F3)
    {
      if (DL_AccIsHeadsetAvailable( ) == TRUE)
     {
      GARNITURA=1;
     }
    }
    else
    {
     if (papp->mme_media_file != 0)
       {
        Error = MME_GC_playback_stop(papp->mme_media_file); // стоп
        dbg( "Error_Stop = %d", Error );
       }
    
    // если всё хорошо, меняем состояние
     if (Error == 0)
       {
        State_Player = STOP;
        ShowiTunesState();
        timePosition = 0;
        //paint();
        paint_stateicons(ev_st, app);
        paint_clear_time(ev_st,app);
        paint_progressbar(ev_st, app);
       }
    }
    
    return RESULT_OK;
}

UINT32 Pause(EVENT_STACK_T *ev_st,  void *app)
{
    UINT32              Error=1;
    APP_SHELL_T         *papp = ( APP_SHELL_T* ) app;
    EVENT_T             *event = AFW_GetEv(ev_st );
    
    if (event->code == 0x0822F4)
    {
    if (GARNITURA==1 && DL_AccIsHeadsetAvailable( ) == NULL)
     {
    GARNITURA=0;
    if (papp->mme_media_file != 0)
       {
        Error = MME_GC_playback_pause(papp->mme_media_file); // пауза
        dbg( "Error_Pause = %d", Error );
       }
    
    // если всё хорошо, меняем состояние
    if (Error == 0)    
       {
        MME_GC_playback_get_attribute(papp->mme_media_file, DURATION, &timeDuraction);
        timeDuraction = timeDuraction;
        MME_GC_playback_get_attribute(papp->mme_media_file, POSITION, &timePosition);

        StopTimer( 0, app );

        State_Player = PAUSE;
        ShowiTunesState();
        //paint();
        
        repaint(ev_st, app);
        //paint_stateicons(ev_st, app);
        //paint_progressbar(ev_st, app);
       }
     }
    }
    else
    {
    if (papp->mme_media_file != 0)
       {
        Error = MME_GC_playback_pause(papp->mme_media_file); // пауза
        dbg( "Error_Pause = %d", Error );
       }
    
    // если всё хорошо, меняем состояние
    if (Error == 0)    
       {
        State_Player = PAUSE;
        ShowiTunesState();
        //paint();
        
        paint_stateicons(ev_st, app);
        paint_clear_time(ev_st,app);
        paint_progressbar(ev_st, app);
       }
    }

    return RESULT_OK;
}
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 2.11.2008, 15:02


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



Для облегчения разработки приложений с GUI сделал шаблон приложения и шаблоны некоторых диалогов, в идеале хотелось бы по шаблону на каждый далог.

Шаблон приложения без главного диалога: http://motoelfs.googlecode.com/svn/trunk/_template/uis_app/
Шаблоны далогов: http://motoelfs.googlecode.com/svn/trunk/_...te/uis_dialogs/
В шаблонах, в коментах помечено "TODO:" в местах, где нужно дописывать нужный вам код. Также название структуры приложения и макрос желательно изменять под название эльфа.

Примеры использования шаблонов:
http://motoelfs.googlecode.com/svn/trunk/test_uis/ - "полигон" для тестирования различных далогов, некоторые файлы без изменений из шаблонов.
http://motoelfs.googlecode.com/svn/trunk/icq/ - шаблоны написал позже, но очень похоже.
http://motoelfs.googlecode.com/svn/trunk/motocmd2/ - тут точно на шаблонах.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 3.11.2008, 12:09


Опытный
***

Группа: Пользователи
Сообщений: 117
Регистрация: 15.2.2008
Из: Казань
Пользователь №: 163 680
Модель телефона: E398
Прошивка: DaRII [test15] Mod

Рейтинг: 40



Хочу сделать так, чтобы Light в Tunes не выключал активность дисплея. Как можно определить, что Тюнс запущен? Можно конечно взять глобальную переменную State_Player и часть кода из Тюнса, но это существенно увеличит размер эльфа.

Сообщение отредактировал AKAmasol - 10.11.2008, 10:41
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 3.11.2008, 12:13


Freestyler
********

Группа: Легенды MotoFan.Ru
Сообщений: 10 329
Регистрация: 20.7.2004
Пользователь №: 8 235
Модель телефона: Moto
Прошивка: *#9999#


Настроение:
Все невыспавшиеся в следующей жизни будут котами



Рейтинг: 4362



Цитата(AKAmasol @ Сегодня, 14:09)

Как можно определить, что Тюнс запущен?
*


при запуске Тюнса писать 01 в seem 004a
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 3.11.2008, 13:05


Опытный
***

Группа: Пользователи
Сообщений: 117
Регистрация: 15.2.2008
Из: Казань
Пользователь №: 163 680
Модель телефона: E398
Прошивка: DaRII [test15] Mod

Рейтинг: 40



Цитата(Osta @ 3.11.2008, 16:13) *

при запуске Тюнса писать 01 в seem 004a

А подскажите тогда ненужный оффсет.

Сообщение отредактировал AKAmasol - 10.11.2008, 10:41
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 3.11.2008, 13:17


Freestyler
********

Группа: Легенды MotoFan.Ru
Сообщений: 10 329
Регистрация: 20.7.2004
Пользователь №: 8 235
Модель телефона: Moto
Прошивка: *#9999#


Настроение:
Все невыспавшиеся в следующей жизни будут котами



Рейтинг: 4362



Цитата(AKAmasol @ Сегодня, 15:05)

А подскажите тогда ненужный оффсет.
*


SEEM 004A_0001, Смещ-е 00C8h/200d (Абс.бит 1600): GAMES_FN_STARTING_LEVEL
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
xBaguMx
сообщение 10.11.2008, 19:55


Новичок
*

Группа: Пользователи
Сообщений: 10
Регистрация: 20.2.2007
Пользователь №: 123 350
Модель телефона: Motorola Roker E1

Рейтинг: 0



Выложите плиз исходник эльфа чтобы моргали боковые светодиоды синим каждые 5 секунд пожалуйста. Ничего не получается.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 11.11.2008, 7:54


Гуру
******

Группа: Почётные мотофаны
Сообщений: 986
Регистрация: 19.5.2005
Из: Россия, г.Петрозаводск
Пользователь №: 42 716
Модель телефона: e398
Прошивка: 49R+EP1+EP2

Рейтинг: 681



А вот такой у меня назрел вопрос.
Как описывать переменные для работы с дробными числами (в слысле с вещественными, типа float)? А то все UINT да UINT. В итоге непонятно как быть с дробными (не целыми) числами. Извращаться чтоли пергоняя в два целых (до запятой одно, после запятой второе)?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 11.11.2008, 9:02


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 435



Alesha_Pl,
а ты проверь и сообщи результаты. по идее компилер должен эмулировать команды с плавающей точкой, если нет аппаратной поддержки (по крайней мере в паскале так было)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 11.11.2008, 9:23


Гуру
******

Группа: Почётные мотофаны
Сообщений: 986
Регистрация: 19.5.2005
Из: Россия, г.Петрозаводск
Пользователь №: 42 716
Модель телефона: e398
Прошивка: 49R+EP1+EP2

Рейтинг: 681



tim apple, дак чего проверять и как? В с++ есть такой тип FLOAT вот он описывает вещественные числа. Как это делаеть в эльфах не понятно. На FLOAT в эльфе компилятор ругается. В sdk в файле stdarg.h есть такое упоминание float: If parmN is a narrow type (char, short, float) an error is given in.

Сообщение отредактировал Alesha_Pl - 11.11.2008, 9:23
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 11.11.2008, 10:21


МотоКодер
******

Группа: Разработчики
Сообщений: 786
Регистрация: 14.8.2006
Из: Архангельск
Пользователь №: 95 055
Модель телефона: E398
Прошивка: DaR
Победитель конкурса 2008

Рейтинг: 1650



У меня прекрасно компилит double и float. А вот работу не проверял. Может у тебя компилятор старенький
Код

float  f;

f=0.3;
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 11.11.2008, 10:23


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 435



Цитата(Alesha_Pl @ 11.11.2008, 14:23) *

...есть такой тип FLOAT ...


а просто float ?

Om2004 успел ответить.

проверь типа так:
Код

float f = 1.4;
f += 1.5;

PFprintf("f = %.2f\n", f);


заодно %f проверится

Сообщение отредактировал tim apple - 11.11.2008, 10:27
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 11.11.2008, 10:32


Гуру
******

Группа: Почётные мотофаны
Сообщений: 986
Регистрация: 19.5.2005
Из: Россия, г.Петрозаводск
Пользователь №: 42 716
Модель телефона: e398
Прошивка: 49R+EP1+EP2

Рейтинг: 681



Только что втыкнул это в эльф везер (до этого компилировался без ошибок)

Цитата(om2804 @ Сегодня, 13:21)

float f;
.......
f=0.3;
*




Получил type disagreement for "f" ну и разумеется эррор и фатал эррор


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

Спасибо за помощь!

Сообщение отредактировал Alesha_Pl - 11.11.2008, 10:42
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 11.11.2008, 12:58


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



om2804,

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

tim apple,
Alesha_Pl,
Если процессор не умеет делить, естественно что он не умеет работать с плавающей точкой. Но можно программно реализовать эти функции. К примеру для выполнения кода:
Код
float g_float;

int main( void )
{
    g_float = 0.1;
    g_float += 0.2;
    g_float /= 2;
    
    return 0;
}


требуются функции _d2f, _fmul. Если таких нет в прошивке, то лучше забудьте про плавающую точку.
В дополнение почитайте как компьютер это делает: http://ru.wikipedia.org/wiki/Математический_сопроцессор

В заключение: если точность (кол-во цифр после запятой) известна, то можно и на целых числах это реализовать.
К примеру, если нужно разделить переменные var1 на var2 и вывести 2 цифры после запятой, то сначала умножим var1 на 1000 (если на 100, то возможна погрешность в сотых), разделим на var2 и на 10 чтобы отбросить тысячные доли. Далее целая часть это результат при делении на 100, дробная - остаток от результата при делении на 100.
Код
int main( void )
{
    int var1, var2;
    int res;
    
    res = ((1000 * var1) / var2) / 10;
    PFprintf("res = %d.%02d\n", res/100, res%100);
    
    return 0;
}


Сообщение отредактировал G-XaD - 11.11.2008, 13:20
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 11.11.2008, 13:03


Freestyler
********

Группа: Легенды MotoFan.Ru
Сообщений: 10 329
Регистрация: 20.7.2004
Пользователь №: 8 235
Модель телефона: Moto
Прошивка: *#9999#


Настроение:
Все невыспавшиеся в следующей жизни будут котами



Рейтинг: 4362



Цитата(G-XaD @ Сегодня, 14:58)

требуются функции _d2f, _fmul. Если таких нет в прошивке, то лучше забудьте про плавающую точку.
*


_fmul есть
_d2f есть
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 11.11.2008, 13:09


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



на LTE телефонах все функции float есть в прошивке. практически все находятся сигнатурками иды для арм стандартными
для LTE2 функции float сидят в irom. аналогично смотрим его дамп идой и находим нужные адреса. либо смотрим обращения к irom в эльфах прошивок )
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 11.11.2008, 13:28


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Когда писал аналоговые часы нужна функция поворота стрелки => нужны тригонометрические функции и операции с ними. Ну синус я написал тупо - для каждого градуса написал значение. Но суть в том что мне не надо было выводить само значение, а просто посчитать число, причем результирующее число могло быть в целых(точность большая не нужна). Тогда я просто сдвинул запятую влево на 16 бит, посчитал все в целых, сдвинул обратно, в результате получил искомое число с приемлемой для той функции точностью.
Чем этот метод отличается от GXого:
Цитата(G-XaD @ Сегодня, 18:58)

res = ((1000 * var1) / var2) / 10;
*


Операции деления в процессоре нет, поэтому она выполняется програмно, а это потери в скорости.
Зато процессор умеет сдвигать число, поэтому это сработает быстрее.
(но это актуально только там где важна скорость вычесления)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 11.11.2008, 18:14


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



DmT,
открою страшную тайну. любой процессор делит числа логическими сдвигами )
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 11.11.2008, 18:24


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Vilko,
Да ты чё 0_о? Вот я дурак всю жизнь думал что процессор перебором делит, а он оказывается сдвигом!
А если серьезно: Чтоб на 1000 поделить сколько сдвигов надо сделать? а сколько чтоб поделить на 2^n?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 11.11.2008, 21:01


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



DmT,
http://radiomagazine.ru/content/view/472/33/
вот так вот проц выполняет деление. насколько я знаю иных способов не придумано.
а вот практическая реализация:
R0 - делимое, R1 - делитель
DIVide
MOV r2,r1 ; сохранить делитель
Div1
LSL r1,#0x01 ; делитель*2
CMP r1,r0 ;
BCC Div1 ; если делитель*2 меньше делимого - опять удвоить
;
MOV r3,#0x00 ;
Div3
LSL r3,#0x01 ;
CMP r0,r1 ;
BCC Div2 ;
;
SUB r0,r1 ;
ADD r3,#0x01 ;
;
Div2
LSR r1,#0x01 ;
CMP r1,r2 ;
BHS Div3 ;
Результат
R0 - частное, R1 - остаток

PS: кол-во итераций для деления х на 1000 думаю можешь легко сам прикинуть.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
logotoy73
сообщение 18.11.2008, 5:05


Ветеран
*****

Группа: Пользователи
Сообщений: 362
Регистрация: 10.1.2007
Из: Подмосковье
Пользователь №: 116 014
Модель телефона: RAZR MAXX, V3i, Defy+
Прошивка: VZV-16, 03.03R, 231


Настроение:
в процессе...



Рейтинг: 220



Не знаю нужно это или нет. Но может кому пригодится.

Сообщение отредактировал logotoy73 - 18.11.2008, 9:30
Прикрепленный файл ADS_Introductory_Tutorial.zip   ( 293.53 килобайт ) Кол-во скачиваний: 111
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 18.11.2008, 16:23


Eve
******

Группа: Разработчики
Сообщений: 1 014
Регистрация: 31.1.2006
Из: Новокузнецк
Пользователь №: 68 287
Модель телефона: L9 ATRIX 4G iPhone SE E1

Рейтинг: 650



Кто знает, напишите пожалуйста небольшой пример кода коротый загружает эльф в память и присваевает ему определенный ивент.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 18.11.2008, 16:58


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



lavmen,
Эльф сам должен реагировать на ивенты. А грузить его функцией
UINT32 LdrLoadELF( WCHAR *uri, WCHAR *params );
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 19.11.2008, 3:57


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 435



lavmen, и другим новичкам посвящается.

как известно, весь обмен информацией и команды в моторе реализуются с помощью событий AFW - ивентов (EVENT). Я бы условно разделил их на несколько типов. Для нас важнейшими являются:
1) ивенты, на котоые регистрируется апп (через reg_table в APP_Register)
2) ивенты, на которые подписывается апп (см. code в EVENT_HANDLER_ENTRY_T)
Очень важно понимать разницу между ними!

Первый тип:
реакцией на них будет вызов стартовой функции апп (start_fn в APP_Register). Т.е. для этого не обязательно эльф должен быть запущен, достаточно зарегистрировать.
как следствие - нужно отслеживать повторный запуск (см. AFW_InquireRoutingStackByRegId)
Когда нужно применять этот тип:
1) для запуска апп. обязательно нужно зарегистрировать хотя бы один ивент. в дальнейшем можно про него забыть (если запуск нужен только через браузеры или авторан, то берем из reserve, т.к. желательно избегать конкретных значений - объяснение ниже)
2) если эльф выполняет какое-то действие и потом не нужен. Т.к. для реакции на этот тип не требуется запущенной инстанции апп, то можно либо не запускать эльф вовсе (как SC2ELF) или спокойно его завершать (см. APP_Exit). не путать с выгрузкой эльфа (LdrUnloadELF)!
3) ВАЖНО, т.к. в прошивке нет функции отмены регистрации (еще ;-)), то вызов ивента, на которое зарегистрирован выгруженный из памяти эльф, приведет к рибуту!

Второй тип:
реакцией на них будет вызов функции hfunc из соответствующего EVENT_HANDLER_ENTRY_T. Т.е. для этого апп должно быть запущено и иметь необходимое состояние (state). Подписка на ивенты безопасна и применяется для реакции на различного рода события как системы так и самого приложения (нажатие клавиш, входящий вызов, потеря фокуса апп, запрос данных от списка и пр.)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 22.11.2008, 8:39


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 435



Baat,
для канвы надо реагировать на EV_INK_KEY_PRESS
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 22.11.2008, 8:43


МотоКодер
******

Группа: Разработчики
Сообщений: 786
Регистрация: 14.8.2006
Из: Архангельск
Пользователь №: 95 055
Модель телефона: E398
Прошивка: DaR
Победитель конкурса 2008

Рейтинг: 1650



в диалоге Canvas другие ивенты нажания на клавиши

Код

// для определения нажатия на клавиши ловим эти ивенты
#define EV_INK_KEY_PRESS                   0x2034 //  EVENT_DATA_T
#define EV_INK_KEY_RELEASE                  0x2035 //  EVENT_DATA_T


т.е. в коде нужно изменить ивент в таблице

Код

const EVENT_HANDLER_ENTRY_T main_state_handlers[] =
{
    { EV_INK_KEY_PRESS,     HandleKeypress },
    { EV_TIMER_EXPIRED,                Timer                },
    { STATE_HANDLERS_END,           NULL                 },
};


Сообщение отредактировал om2804 - 22.11.2008, 8:44
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 22.11.2008, 13:59


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 435



Baat,

в самом начале действительно сложно разобраться. особенно мешает непонимание того, как работает AFW. самая близкая аналогия - Windows (так же на событиях)

попробуй придерживаться несложных правил:
1) возьми за основу работающий простой пример (примеры из SDK, исходники наших разработчиков)
2) скомпиль, запусти, потыкай. Цель: понять что для чего.
3) начни изменять. НО! делай небольшие изменения и сразу проверяй как это сказалось. не надо в азарте переделывать всё сразу. чаще всего потом приходится сидеть и "втыкать" в чем дело.
4) как только почувствуеш себя более-менее уверенно в своем творении - начни разбирать сложные исходники - инфограф, тюнс и др.
5) применяй и снова проверяй...

есстественно будут возникать вопросы - пиши сюда.

а со временем и сам будеш создавать что-то новое и учить других =)

Сообщение отредактировал tim apple - 22.11.2008, 14:00
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 4.12.2008, 18:44


Eve
******

Группа: Разработчики
Сообщений: 1 014
Регистрация: 31.1.2006
Из: Новокузнецк
Пользователь №: 68 287
Модель телефона: L9 ATRIX 4G iPhone SE E1

Рейтинг: 650



Помогите пожалуйста, как нужные элементы списка выделять галочкой, из исходников тюнса как это сделать я так и не понял.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 4.12.2008, 18:56


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 435



lavmen,
знаю два способа:
1) наиболее гибкий - создавать элемент списка из строки и графики
Код

if (SELECTED)
    UIS_MakeContentFromString( "Mq0Sp1", &(plist[index].content.static_entry.text), RES_STRING , RES_GRAPHIC);
else  
    UIS_MakeContentFromString( "Mq0", &(plist[index].content.static_entry.text), RES_STRING );

2) использовать стандартные возможности UIS - marks. но пока никто не использовал =)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 11.12.2008, 3:41


Eve
******

Группа: Разработчики
Сообщений: 1 014
Регистрация: 31.1.2006
Из: Новокузнецк
Пользователь №: 68 287
Модель телефона: L9 ATRIX 4G iPhone SE E1

Рейтинг: 650



Есть такой вопрос. Как надо задать search_string для поиска чтоб функция нашла все фалы в одной папке.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 12.1.2009, 17:00


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Ну общая концепция(Для эльфпака первого).
Существует некий сборник заголовочных файлов, описывающих каждую из используемых функций - SDK(по сути написаны только имена функций, тип возвращаемого значения и принимаемые параметры). Все файлы в ней имеют расширение .h (от слова Header - заголовок).
SDK один под все проекты. Т.к. нет централизованной системы, SDK у всех разработчиков разные(с разным количеством описанных функций).
Далее идут проекты. Я например каждый проект держу в отдельной папке. Проект состоит из файлов .c и .h. Все файлы .c должны быть скомпилированны компилятором. Все .h должны быть присоединены(#include) к главному.
... недописанно(устал xD) ...

Сообщение отредактировал om2804 - 12.1.2009, 17:11
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chik_v
сообщение 13.1.2009, 17:31


Опытный
***

Группа: Разработчики
Сообщений: 107
Регистрация: 13.1.2007
Из: Херсон
Пользователь №: 116 653
Модель телефона: Samsung i5700
Прошивка: i570EXXJH7
Победитель конкурса 2008

Рейтинг: 174.5



Подскажите как программно сбросить входящий вызов, вариант с
Код
DL_KeyInjectKeyPress(0x11,0,0);
DL_KeyInjectKeyPress(0x11,1,0);

не подходит, т.к. успевает вылезти диалог о входящем вызове.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 13.1.2009, 19:50


МотоКодер
******

Группа: Разработчики
Сообщений: 786
Регистрация: 14.8.2006
Из: Архангельск
Пользователь №: 95 055
Модель телефона: E398
Прошивка: DaR
Победитель конкурса 2008

Рейтинг: 1650



Делать APP_ConsumeEv в обработчике ивента
Код
// входящий звонок
extern const UINT32 *CALL_ALERT;  // в аттаче номер телефона
#define EV_CALL_ALERT            *CALL_ALERT
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chik_v
сообщение 13.1.2009, 21:34


Опытный
***

Группа: Разработчики
Сообщений: 107
Регистрация: 13.1.2007
Из: Херсон
Пользователь №: 116 653
Модель телефона: Samsung i5700
Прошивка: i570EXXJH7
Победитель конкурса 2008

Рейтинг: 174.5



чйорт, вариант с APP_ConsumeEv() тоже не подходитsmile.gif
Мне надо сбросить звонок вне обработчика EV_CALL_ALERT


[om2804]
А зачем? какая разница?



Сообщение отредактировал om2804 - 13.1.2009, 22:53
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chik_v
сообщение 16.1.2009, 22:56


Опытный
***

Группа: Разработчики
Сообщений: 107
Регистрация: 13.1.2007
Из: Херсон
Пользователь №: 116 653
Модель телефона: Samsung i5700
Прошивка: i570EXXJH7
Победитель конкурса 2008

Рейтинг: 174.5



Хм, в общем суть проблемы такова:
Я делаю эльф блэклист для V3x/e770
Чтоб проверить в какой группе номер я использую DL_DbPhoneBookFindRecordByTelno(), которая отправляет EV_PHONEBOOK_READ_RECORD, который я успешно ловлю и обрабатываю.
И мне надо сбросить вызов именно в обработчике ивента EV_PHONEBOOK_READ_RECORD, т.к. только так я могу узнать группу к которой номер принадлежит(может другой способ есть?).
Копание в прошивке на предмет ф-ции которая сбросит вызов ни к чему не привело по причине недостатка знанийsmile.gif
Ну om2804 подсказал несколько вариантов реализации, но мне они не очень нравятся, например читать справочник только раз при старте эльфа и сохранение нужных мне номеров (при добавлении в справочник нового номера прийдётся перечитывать по новой, к тому же проблемы с автозагрузкой эльфа по причине того, что справочник доступен не сразу.)
посоветуйте как решить данную проблему.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 29.1.2009, 21:33


Freestyler
********

Группа: Легенды MotoFan.Ru
Сообщений: 10 329
Регистрация: 20.7.2004
Пользователь №: 8 235
Модель телефона: Moto
Прошивка: *#9999#


Настроение:
Все невыспавшиеся в следующей жизни будут котами



Рейтинг: 4362



я сделал блеклист для п2к но он на моём компе
остался (я сейчас в больнице)
я сбрасывал вызов запуском ивента запрета вызовов
он один для п2к
также сбрасывались и смс

у Умки он есть правда с другим функционалом но там есть
и блеклист настроенный на 1 номер
номер можно поменять на 4 ноля тогда любой скрытый номер будет
сбрасываться .. ну и тот который имеет в номере 4 ноля тоже :-)
если Умка его выложит то гляньте в иде
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 30.1.2009, 12:50


Eve
******

Группа: Разработчики
Сообщений: 1 014
Регистрация: 31.1.2006
Из: Новокузнецк
Пользователь №: 68 287
Модель телефона: L9 ATRIX 4G iPhone SE E1

Рейтинг: 650



Народ кто знает, помогите. Надо убрать из экшенов диалога viewer "копировать". UIS_ClearAndSetActionList не помогает
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Umka85
сообщение 30.1.2009, 16:20


Гуру
******

Группа: Пользователи
Сообщений: 712
Регистрация: 13.7.2005
Из: Кузнецк
Пользователь №: 46 099
Модель телефона: Е398, L9, Z6, V6
Прошивка: разные
Победитель конкурса 2008

Рейтинг: 283



Да, этот эльф давно уже лежит в нашей сборке эльфов для L9 в закреплении https://forum.motofan.ru/lofiversion/index.php/t144468.html
называеться остабокс.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 31.1.2009, 5:51


Eve
******

Группа: Разработчики
Сообщений: 1 014
Регистрация: 31.1.2006
Из: Новокузнецк
Пользователь №: 68 287
Модель телефона: L9 ATRIX 4G iPhone SE E1

Рейтинг: 650



Уже и помочь некому sad.gif sad.gif sad.gif

Добавлено позже (31.1.2009, 9:18):
Да кстати, объясните кто нибудь еще разницу между DL_FsFileExist и DL_FsFFileExist
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Учимся писать эльфов вместе, Обсуждение процесса кодинга · Эльфы, их разработка и портирование · Forum
 

16 страниц V « < 4 5 6 7 8 > » 
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20.7.2025, 5:01

Форум живёт: