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

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

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
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 6.8.2008, 7:10


Мастер
****

Группа: Пользователи
Сообщений: 298
Регистрация: 17.10.2005
Из: Татарстан
Пользователь №: 54 836
Модель телефона: E398

Рейтинг: 100



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

под plist память кто будет выделять?
*


вот это имеешь ввиду?

Код
plist = (LIST_ENTRY_T*) suAllocMem( sizeof(LIST_ENTRY_T)*num, NULL ); // malloc

она есть.

в 136 посте я показал только что именно изменил.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 6.8.2008, 8:30


Мастер
****

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

Рейтинг: 323



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

Добавлено позже (6.8.2008, 11:34):
А проще всего накидать после каждой строки отладочных сообщений и определить где вышел ребут

Добавлено позже (6.8.2008, 11:37):
Доберусь до компа, укажу на грубые ошибки.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 6.8.2008, 9:04


Мастер
****

Группа: Пользователи
Сообщений: 298
Регистрация: 17.10.2005
Из: Татарстан
Пользователь №: 54 836
Модель телефона: E398

Рейтинг: 100



G-XaD,
вроде нашёл ошибку. у меня объявлено 4 элемента в списке.
Код
#define ENTRIES_NUM 4        // Разумеется, здесь это для примера

а описал я только одну:
Код
plist[0].editable = FALSE;            // Поле нередактируемо
        plist[0].content.static_entry.unk6 = 1;
        UIS_MakeContentFromString( "Cq0", &(plist[0].content.static_entry.text), msg);
....  

добавил ещё
Код
plist[1].editable = FALSE;            // Поле нередактируемо
....
plist[2].editable = FALSE;            // Поле нередактируемо
......
plist[3].editable = FALSE;            // Поле нередактируемо

ребутов нет.

теперь у меня такой вопрос. создал я окно с диалогом.
Код
dialog = UIS_CreateViewer( &port, &content, &action);

что такое action? это список действйии на софт кнопках?

вот как у меня эльф сейчас. как мне повесить на софт кнопки свои действия:
например чтоб при нажатии на левую выполнялось действие1, на кнопку меню действие2, прав софт - действие3.

Сообщение отредактировал Nur87 - 6.8.2008, 10:16
Прикрепленное изображение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 6.8.2008, 9:53


Мастер
****

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

Рейтинг: 323



На сколько я помню ENTRIES_NUM кол-во элементов в диалоге-списке. Список(List) и список действий(action_list) это разные вещи. Каждый диалог имеет список действий. Список действий - это список под кнопкой Меню а также 2 действия на софт кнопках.

Добавлено позже (6.8.2008, 13:03):
Чтобы обрабатывать нажатия кнопок нужно ловить ивент EV_KEY_PRESS

Добавлено позже (6.8.2008, 13:11):
При нажатии любой кнопки ОСь создает событие EV_KEY_PRESS. Сначала это событие обрабатывают приложения, далее, если оно не удалено, то его обрабатывает верхний диалог.

Добавлено позже (6.8.2008, 13:16):
action - список действий. В описании ф-ции указан же тип параметра.

Сообщение отредактировал G-XaD - 10.8.2008, 5:46
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 6.8.2008, 10:25


Мастер
****

Группа: Пользователи
Сообщений: 298
Регистрация: 17.10.2005
Из: Татарстан
Пользователь №: 54 836
Модель телефона: E398

Рейтинг: 100



G-XaD,
поправил свой предыдущий пост. опечатка была. не
Код
action_list->action[0].operation = ACTION_OP_ADD;

а
Код
plist[1].editable = FALSE;            // Поле нередактируемо



Добавлено позже (6.8.2008, 14:29):
Цитата(G-XaD @ Сегодня, 13:53)

Чтобы обрабатывать нажатия кнопок нужно ловить ивент EV_KEY_PRESS
*


в том же ListTest. там же нет никаких EV_KEY_PRESS. но однако при запуске создается список, и при нажатии МЕНЮ пояаляется второй список со списком действии..

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


Мастер
****

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

Рейтинг: 323



В примере нажатие кнопки МЕНЮ обработал диалог-список и открыл список действий, который указал ему программист
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 12.9.2008, 7:59


Гуру
******

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

Рейтинг: 681



Пожалуйста, помогите разобраться с чтением данных из сима.
Надо прочитать значение из сима 004A_0001 офсет 4E (там 0 или 1 бывает) и присвоить его переменной для дальнейшего использования.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 12.9.2008, 8:12


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

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

Рейтинг: 680



самый простой вариант
BYTE data[SEEM_SIZE];
SEEM_FDI_OUTSIDE_SEEM_ACCESS_read(SEEM_NAME,1,&data,SEEM_SIZE);
T = data[4E];
в T будет твое значение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 12.9.2008, 8:58


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

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

Рейтинг: 1650



Зачем читать весь сим, когда нужен один оффсет?


Код

SEEM_ELEMENT_DATA_CONTROL_T  data_seem;
UINT8  data;

// заполним структуру
data_seem.seem_element_id = 0x004A;
data_seem.seem_record_number = 0x0001;
data_seem.seem_offset = 0x4E;
data_seem.seem_size = 1; // нужно прочитать один байт

SEEM_ELEMENT_DATA_read ( &data_seem,  &data,  TRUE );


В data будет значение

Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 12.9.2008, 9:41


Гуру
******

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

Рейтинг: 681



Спасибо! Все получилось.

Сообщение отредактировал Alesha_Pl - 13.9.2008, 6:57
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 13.9.2008, 9:09


Freestyler
********

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


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



Рейтинг: 4362




Цитата(DmT @ Вчера, 10:12)

самый простой вариант
*


Цитата(om2804 @ Вчера, 10:58)

В data будет значение
*


а нафига мы вводили в либу BEGIN_4A__IN_DB ???

Цитата(Alesha_Pl @ Вчера, 9:59)

Надо прочитать значение из сима 004A_0001 офсет 4E
*



UINT8 feature_state;
UINT32 drop;
drop=*BEGIN_4A__IN_DB+78;
DL_DbFeatureGetCurrentState( drop, &feature_state);

в feature_state будет значение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 13.9.2008, 9:51


Гуру
******

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

Рейтинг: 681



Расскажите тогда принципиальную разницу между использованием

Цитата(om2804 @ Вчера, 12:58)

SEEM_ELEMENT_DATA_CONTROL_T data_seem;
UINT8 data;

// заполним структуру
data_seem.seem_element_id = 0x004A;
data_seem.seem_record_number = 0x0001;
data_seem.seem_offset = 0x4E;
data_seem.seem_size = 1; // нужно прочитать один байт

SEEM_ELEMENT_DATA_read ( &data_seem, &data, TRUE );
*



и


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

UINT8 feature_state;
UINT32 drop;
drop=*BEGIN_4A__IN_DB+78;
DL_DbFeatureGetCurrentState( drop, &feature_state);
*



Если мне надо считать всего один офсет. Эти два метода чем отличаются в конечном итоге? Скорость? Размер конечного файла?



G-XaD, спасибо за разъяснение!


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


Мастер
****

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

Рейтинг: 323



Alesha_Pl,

SEEM_ELEMENT_DATA_read - API для работы с симами.
DL_Db* - API для работы с базой данных, а база данных сделана на симах. (DL=Device Layer, Db = DataBase) Прослойка между симами и программами, где под каждую "особенность" (eng: Feature), характеристику выделен бит из сима.
Сам посуди, неудобно же каждый раз читать номер байта и номер бита в этом байте. А для обращения к DL_Db* функциям достаточно указать уникальный номер характеристики, который просто обьявляется через enum.
Еще удобство - если вдруг захочется заменить симы реестром, то достаточно будет изменить функции DL_Db* и на работе программ это никак не отразится.
Если нужно будет изменить номер сима достаточно будет подправить функции DL_Db*, хотя и это врятли.

Если тебе нужно работать с симами, используй SEEM_ELEMENT_DATA_*, если с конкретной характеристикой, номер которой известен и между платформами не изменяется, используй DL_Db*

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


Гуру
******

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

Рейтинг: 681



Снова я. В общем начну по порядку.
переделываю я инфограф1.6. Добавил отображение включенного блютуза. Все отображалось, но позиция БТ была связана с позицией текстовой инфы о дисках. Все прекрасно работало. Но вот я решил выдать БТ отдельную позицию в конфиге. Вынес его в отдельную функцию UINT8 BT(char *buf_con). Добавил все как надо в конфиг. Позиция считывается. НО. Первый раз она выводится в нужную позицию, а потом с позиции на которой остановился в предыдущий раз. Т.е получается не выкл, а выкл выкл выкл и т.д. Ну понятно изъясняюсь. Гляньте исходники пожалуйса. Почему он БТ выводит в позицию из конфига только в первый раз, а потом лепит рядом.





tim apple, спасибо!!!


Сообщение отредактировал Alesha_Pl - 23.9.2008, 4:10
Прикрепленный файл src.zip   ( 19.1 килобайт ) Кол-во скачиваний: 91
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 22.9.2008, 18:12


Мастер
****

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

Рейтинг: 435



а буфер строки кто будет очищать ?

Код
UINT8 BT(char *buf_con)

{
   UINT8       data;

  dbg("Load BT", NULL);    

   // заполним структуру
      data_seem.seem_element_id = 0x004A;
      data_seem.seem_record_number = 0x0001;
      data_seem.seem_offset = 0x4E;
      data_seem.seem_size = 1; // нужно прочитать один байт

      SEEM_ELEMENT_DATA_read ( &data_seem,  &data,  TRUE );
      
      /// strcat(buf_con, " ");       /// тут был баг
      strcpy(buf_con, " ");          /// баг-фикс
      if (data == 1 || data == 2) {strcat(buf_con, "(");} else {strcat(buf_con, ")");}


    
return data;
}


Сообщение отредактировал tim apple - 22.9.2008, 18:14
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
MIG~
сообщение 22.9.2008, 19:10


Мастер
****

Группа: Пользователи
Сообщений: 169
Регистрация: 10.4.2007
Пользователь №: 130 619
Модель телефона: V3I,E770,SE K800i
Победитель конкурса 2008

Рейтинг: 245



Подскажите пожалуйста имена функций которые отвечают за выключение дисплея ? Переделывал эльфы для запуска функций на подобе DAL_DisableDisplay , но они выключают дисплей на короткое время . На mCore есть эльфы для запуска функций с адреса прошивки это SwitchToBoot , есть эльфы запуска функций загруженых в оперативку это flesh . Подскажите структуру какого эльфа можно взять за образец чтобы выключать дисплей или эмулировать закрытие флипа ( прошивки с V3X у E770 почти одинаковые ) ... Проблема в том что на E770 дисплей у меня светится постоянно , ночью от зарядки , днём от jimm .... ПС такой эльф как flesh работает даже в яве ( по заданой комбинации кнопок ) , может его можно переделать ?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chik_v
сообщение 22.9.2008, 20:03


Опытный
***

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

Рейтинг: 174.5



Поройся в эльфе Light, и попробуй UIS_SetBacklightWithIntensity
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Campanula
сообщение 5.10.2008, 7:18


Мастер
****

Группа: Пользователи
Сообщений: 287
Регистрация: 10.7.2008
Пользователь №: 176 749
Модель телефона: E398

Рейтинг: 123.5



Andy51

What's the ralationship between EVENTs and functions?

What's the ralationship between EVENTs and functions?Can we find which function will run after an event was send?How can I find the function which to be patched on when I want to change something of the phone?
Thanks for your reading.forgive me of my poor english



Will anyone share your MP MAP?

If you had renamed your function name in your IDA pro,why not share it with us?Then we should not find it again.
You can export your map file,Then I will turn it into IDC file by map2IDC.Everyone can import it !

After you tranformed the map file into idc file,you should add"#include <idc.idc>"in front of the file
QUOTE
#include <idc.idc>
Прикрепленный файл map2idc.zip   ( 334.3 килобайт ) Кол-во скачиваний: 137


Сообщение отредактировал Campanula - 5.10.2008, 7:50
Прикрепленный файл map2idc.zip   ( 334.3 килобайт ) Кол-во скачиваний: 137
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 6.10.2008, 18:22


0xFFFF
******

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

Рейтинг: 1224



Цитата(Campanula @ Вчера, 11:18)

What's the ralationship between EVENTs and functions?
*

Event tables, the same as you write in the elfs. So you need to search for this in the firmware.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Campanula
сообщение 7.10.2008, 6:10


Мастер
****

Группа: Пользователи
Сообщений: 287
Регистрация: 10.7.2008
Пользователь №: 176 749
Модель телефона: E398

Рейтинг: 123.5



QUOTE(Andy51 @ 6.10.2008, 18:22) *

Event tables, the same as you write in the elfs. So you need to search for this in the firmware.

Can you give me any infomation of the event table?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 7.10.2008, 10:04


Гуру
******

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

Рейтинг: 681



Подскажите, пожалуйста, функцию выключения подсветки дисплея. И чтобы она не включалась пока кнопку какую-нибудь не нажмешь.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 7.10.2008, 10:14


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

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

Рейтинг: 680



Alesha_Pl,
имхо лучше ивент найти на выключение, нежели строить функцию с проверкой на нажатие клавиши.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 7.10.2008, 11:05


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

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

Рейтинг: 1116



Alesha_Pl,
DAL_DisableDisplay();
DAL_DisplayPanelPowerDown();
должно помочь wink.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 7.10.2008, 11:32


Гуру
******

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

Рейтинг: 681



Vilko, DmT, спасибо конечно.
DAL_DisableDisplay(); - вообще вырубает дисплей (а мне надо только подсветку)
DAL_DisplayPanelPowerDown(); - нету в сдк

Оказывается надо было просто яркость экрана на 0 сбрасывать, что бы подсветка полностью погасла.



Появился другой вопрос: как заставить эльф отлавливать момент разблокировки кнопок? Чтобы сразу после разблокировки заставить его выполнить какое-нибудь действие.

Сообщение отредактировал Alesha_Pl - 11.10.2008, 9:48
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 11.10.2008, 13:11


Опытный
***

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

Рейтинг: 40



Вот что происходит при достижения времени заданного в конфиге ChangeRStyle:
Код
UINT32 Timer( EVENT_STACK_T *ev_st,  void *app )
{
        
    if (((DL_TIMER_DATA_T*)(AFW_GetEv(ev_st)->attachment))->ID == 1)
    {        
        p2=&ccc[0];
        DL_ClkGetDate(&da1);
if(da1.year!=da.year || da1.month!=da.month || da1.day!=da.day)
           {
               da.year=da1.year;
               da.month=da1.month;
               da.day=da1.day;
                xqx=Dayofweek(da.year,da.month,da.day);
              if (xqx==0){xqx=7;}
            }
        DL_ClkGetTime(p2);        
        hour=ccc[0];
        minute=ccc[1];
if (xqx>=xqsN1 && xqx<=xqzN1 && jh1==107)
        {
  if ( hour == hourN1 && minute == minuteN1)

        {
    APP_UtilStopTimer( app );
    DL_DbFeatureStoreState(2038, ringStyleN1);
    DL_DbFeatureStoreState(1420, ringStyleN1);
   AFW_CreateInternalQueuedEvAux(1955, 100, 0, NULL);
   APP_UtilStartCyclicalTimer( 30000,  1,  app );
    }
}

Собственно вопросы:
1. Что означают значения 2038, 1420, 1955, 100, 0 и null?
2. Как меняется стиль (через Internal (внутренний) ивент)?
3. Получится ли у меня таким же путем реализовать выкл\вкл подсветки клавы по времени? Если нет, то подскажите как по-другому.

Помогите пожалуйста! sad.gif

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


Freestyler
********

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


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



Рейтинг: 4362



Цитата(AKAmasol @ Вчера, 15:11)

Что означают значения 2038, 1420, 1955, 100, 0 и null?
*


2038 и 1420 - это номера байтов в симе 004а
куда этот эльф прописывает значения номеров стилей
очень неуниверсальная методика записи !! Эльф становится тупо работоспособным
только на одной модели телефона (возможно даже только на 1 прошивке)
Это нужно переделать однозначно , если хочешь чтобы эльф работал и на других моделях
Цитата(AKAmasol @ Вчера, 15:11)

Как меняется стиль (через Internal (внутренний) ивент)?
*


верно и этот ивент прописан у автора здесь
(1955, 100, 0, NULL);
что также делает эльф НЕуниверсальным ! нужно переписывать по-правильному,
а не явным указанием числового значения ивента с одного телефона
Цитата(AKAmasol @ Вчера, 15:11)

Получится ли у меня таким же путем реализовать выкл\вкл подсветки клавы по времени?
*


ну конечно ! просто добавь после AFW_CreateInternalQueuedEvAux(1955, 100, 0, NULL);
эту строку :
DL_KeyUpdateKeypadBacklight( 0x00 );
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 13.10.2008, 16:06


Опытный
***

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

Рейтинг: 40



Цитата(Osta @ 12.10.2008, 17:38) *

2038 и 1420 - это номера байтов в симе 004а
куда этот эльф прописывает значения номеров стилей
очень неуниверсальная методика записи !! Эльф становится тупо работоспособным
только на одной модели телефона (возможно даже только на 1 прошивке)

Цитата(Osta @ 13.9.2008, 13:09) *

Код
UINT8 feature_state;
UINT32 drop;
drop=*BEGIN_4A__IN_DB+5;
DL_DbFeatureGetCurrentState( drop,  &feature_state);

в feature_state будет значение

Вот эта, кажись, универсальная. Только здесь чтение, подскажи пожалуйста как запись будет выглядеть.
Цитата(Osta @ 12.10.2008, 17:38) *

AFW_CreateInternalQueuedEvAux(1955, 100, 0, NULL);

1955 - ивент-"пустышка", который отлавливает эльф?
100 (FREE_BUF_FLAG_T free_buf), 0 (UINT32 att_size), NULL (void* att_data) - за что отвечают эти значения?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 13.10.2008, 16:12


Freestyler
********

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


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



Рейтинг: 4362



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

подскажи пожалуйста как запись будет выглядеть.
*


DL_DbFeatureStoreState вместо DL_DbFeatureGetCurrentState
Цитата(AKAmasol @ Сегодня, 18:06)

1955 - ивент-"пустышка", который отлавливает эльф?
*


нЭэт , это запуск ивента 7A3 , на е398 это смена стиля
Цитата(AKAmasol @ Сегодня, 18:06)

100 (FREE_BUF_FLAG_T free_buf), 0 (UINT32 att_size), NULL (void* att_data) - за что отвечают эти значения?
*


это значения для запуска ивента , они всегда такие , так что не заморачивайся
ну иногда вместо 100 (hex 64) пишут 65 в hex , но .. не заморачивайся
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 13.10.2008, 16:47


Опытный
***

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

Рейтинг: 40



Теперь проблема с компиляцией: нет файлов ChangeRStyle.о и Lib.o, куча ошибок в коде(?), но моих нет или Очень мало.
Строку AFW_CreateInternalQueuedEvAux(1955, 100, 0, NULL); вообще удалил (ивента на вкл.\выкл. подсветки клавы же нет).
Вот исходники правленные мной
Прикрепленный файл ChangeRStyle.zip   ( 3.97 килобайт ) Кол-во скачиваний: 109

Пошёл доклянчивать исходники у Campanula.

Сообщение отредактировал AKAmasol - 13.10.2008, 17:03
Прикрепленный файл ChangeRStyle.zip   ( 3.97 килобайт ) Кол-во скачиваний: 109
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 14.10.2008, 4:17


Гуру
******

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

Рейтинг: 681



Цитата(AKAmasol @ Вчера, 20:47)

Теперь проблема с компиляцией: нет файлов ChangeRStyle.о и Lib.o, куча ошибок в коде(?), но моих нет или Очень мало.
*




Lib.o создается вместе с эльфлоадер.либ в портките. ChangeRStyle.о создается во время компиляции эльфа и потом автоматически удаляется (по окончании компиляции) - вообще наверно физически и не создается, так в оперативке (тонкостей не знаю). И именно из-за кучи ошибок в коде он не создается и не открывается.


Вопрос (просьба) к специалистам: Научите, пожалуйста, как этой функцией рисовать картинку на рабочем столе. Пример какой-нибудь дайте глянуть, или словами расскажите. Вот допустим в папке с эльфом лежит картинка, имя ее могу определить, а как нарисовать? Куда сообщить координаты и имя картинки?

UINT32 utility_draw_image( RESOURCE_ID res_id,
GRAPHIC_REGION_T region,
void * p_attr, // = NULL
void * drawBuf ); // = NULL

Сообщение отредактировал Alesha_Pl - 14.10.2008, 6:39
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 14.10.2008, 6:57


Freestyler
********

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


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



Рейтинг: 4362



Цитата(AKAmasol @ Вчера, 18:47)

Вот исходники правленные мной
*


а что это ты написал
drop=*BEGIN_4A__IN_DB+5;
DL_DbFeatureStoreState( drop, value1);
DL_KeyUpdateKeypadBacklight( value1 );
??
во-первых, нужно обозначить drop как UINT32 drop;
во-вторых, что это за value1 ?
функция DL_KeyUpdateKeypadBacklight должна писаться явно
включить подсветку DL_KeyUpdateKeypadBacklight( 0x01 );
выключить DL_KeyUpdateKeypadBacklight( 0x00 );

Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 14.10.2008, 7:17


Опытный
***

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

Рейтинг: 40



Цитата(Osta @ 14.10.2008, 10:57) *

drop=*BEGIN_4A__IN_DB+5;
DL_DbFeatureStoreState( drop, value1);
DL_KeyUpdateKeypadBacklight( value1 );
во-первых, нужно обозначить drop как UINT32 drop;

То есть должно выглядеть так:
Код
UINT32 drop=*BEGIN_4A__IN_DB+5;
DL_DbFeatureStoreState( drop,  value1);
DL_KeyUpdateKeypadBacklight( value1 );

Цитата(Osta @ 14.10.2008, 10:57) *

что это за value1 ?

Значение из конфига (1 или 0).
Цитата(Osta @ 14.10.2008, 10:57) *

функция DL_KeyUpdateKeypadBacklight должна писаться явно
включить подсветку DL_KeyUpdateKeypadBacklight( 0x01 );
выключить DL_KeyUpdateKeypadBacklight( 0x00 );

Ну мы же не знаем, что пользователь поставит в конфиге - 1 или 0.
Если по моему нельзя, то надо как-то по другому.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 14.10.2008, 8:13


Гуру
******

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

Рейтинг: 681



AKAmasol,

UINT8 value1;



UINT32 drop;
drop=*BEGIN_4A__IN_DB+5;
DL_DbFeatureStoreState( drop, value1);
DL_KeyUpdateKeypadBacklight( value1 );


Может так?


Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 14.10.2008, 8:20


Freestyler
********

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


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



Рейтинг: 4362



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

AKAmasol,
UINT8 value1;
*


в исходнике уже определены эти переменные вверху
"UINT8 value1;
UINT8 value2;
UINT8 value3;
UINT8 value4;
UINT8 value5;
UINT8 value6;"
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 14.10.2008, 9:10


Опытный
***

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

Рейтинг: 40



Вот так будет работать:
Код
if (xqx>=xqsN2 && xqx<=xqzN2 && jh2==107)
{
  if ( hour == hourN2 && minute == minuteN2)

        {
    APP_UtilStopTimer( app );
   UINT32 drop;
   drop=*BEGIN_4A__IN_DB+5;
   DL_DbFeatureStoreState( drop,  value2);
   if (value1 != 1)
   {
   DL_KeyUpdateKeypadBacklight( 0x01 );
   } else {
   DL_KeyUpdateKeypadBacklight( 0x00 );
   }
   APP_UtilStartCyclicalTimer( 30000,  1,  app );
    }
}

?

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


Freestyler
********

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


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



Рейтинг: 4362



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

Вот так будет работать:
*


это вопрос или утверждение ?
Цитата(AKAmasol @ Сегодня, 11:10)

UINT32 drop;
*


такие обьявления пишутся вверху процедуры , в твоём случае вот сюда

UINT32 Timer( EVENT_STACK_T *ev_st, void *app )
{ UINT32 drop;
.....
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 14.10.2008, 12:14


Опытный
***

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

Рейтинг: 40



Цитата(Osta @ 14.10.2008, 13:27) *

это вопрос или утверждение ?

Это был вопрос.

Что значит строка:
extern const UINT32 *BEGIN_4A__IN_DB;
?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 14.10.2008, 12:49


Freestyler
********

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


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



Рейтинг: 4362



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

extern const UINT32 *BEGIN_4A__IN_DB;
*


внешняя константа (из либы)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 15.10.2008, 4:29


Мастер
****

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

Рейтинг: 435



Цитата(Alesha_Pl @ Вчера, 10:17)

Вопрос (просьба) к специалистам: Научите, пожалуйста, как этой функцией рисовать картинку на рабочем столе. Пример какой-нибудь дайте глянуть, или словами расскажите. Вот допустим в папке с эльфом лежит картинка, имя ее могу определить, а как нарисовать? Куда сообщить координаты и имя картинки?

UINT32 utility_draw_image( RESOURCE_ID res_id,
GRAPHIC_REGION_T region,
void * p_attr, // = NULL
void * drawBuf ); // = NULL
*




рекомендую посмотреть эти функции:

Informer (старых версий) от Ома:
LoadFont() - тут пример создания ресурса из буфера (см. также DrawDrmImage)
DrawStrWT() - тут пример рисования через utility_draw_image

graphics.c
DrawDrmImage - создание буфера из файла-картинки
DrawPathImage - рисование файла-картинки сразу на канву

т.е. тебе будет удобнее воспользоваться ф-цией UIS_CanvasDrawImage (пример в DrawPathImage)

извини если что непонятно =)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 15.10.2008, 7:49


Гуру
******

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

Рейтинг: 681



Цитата(tim apple @ Сегодня, 8:29)

Informer (старых версий) от Ома:
LoadFont() - тут пример создания ресурса из буфера (см. также DrawDrmImage)
DrawStrWT() - тут пример рисования через utility_draw_image
*



Дело в том, что там у Ома сделано в LoadFont() сопоставление картинки с символами. И потом идет использование этих картинок как символов. И это же использовано в инфографе - буквы заменены картинками батарейки и пр., и идет вывод картинки как символа (буквы). При этом как мне кажется (и наверно я прав) становится не возможным использование для вывода надписей системных фонтов. И мне моих познаний не хватает, чтобы разобраться с выводом картинок не как символов, а именно как картинок, чтобы задал имя, позицию и нарисовал. Может у кого найдется немного времени для написания эльфика выводящего на рабочий стол картинки из папки с эльфом, для примера.

[om2804]
Точнее символы выводит как картинки, а не наоборот. В новом информере русуется на канвасе. Так что можно рисовать как обычно делается на канвасе. Пример можно в Tunes посмотреть


Сообщение отредактировал om2804 - 15.10.2008, 10:21
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Учимся писать эльфов вместе, Обсуждение процесса кодинга · Эльфы, их разработка и портирование · Forum
 

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

 



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

Форум живёт: