motofan logo
16 страниц V « < 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 килобайт ) Кол-во скачиваний: 1134
  3. "Язык программирования C"
    Прикрепленный файл C_book.zip   ( 220.86 килобайт ) Кол-во скачиваний: 889
Исходники эльфов
  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 килобайт ) Кол-во скачиваний: 2156
Прикрепленный файл C_book.zip   ( 220.86 килобайт ) Кол-во скачиваний: 889
Прикрепленный файл Spr_po_C.rar   ( 934.62 килобайт ) Кол-во скачиваний: 1134
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
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 килобайт ) Кол-во скачиваний: 135


Сообщение отредактировал Campanula - 5.10.2008, 7:50
Прикрепленный файл map2idc.zip   ( 334.3 килобайт ) Кол-во скачиваний: 135
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
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
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 15.10.2008, 12:19


Мастер
****

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

Рейтинг: 435



Alesha_Pl,

вобщем, utility_draw_image в топку - она слишком низкоуровневая. всё можно и нужно делать через UIS_Canvаs* - и текст писать и картинки рисовать.
примеры в исходниках от Ома. респект ему и уважуха.

П.С. смотри "глубже", т.е. не надо копировать кусок кода и потом утверждать что он тебе не подходит, а пойми принцип использования функций, методы автора и полезные трюки. и тогда поймеш как нужно сделать в твоем случае.
[off]не подумай что критикую, просто совет[/off]

[om2804]
Вообще то идея рисования на канвасе принадлежит китайским братьям smile.gif



Сообщение отредактировал om2804 - 15.10.2008, 13:29
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 16.10.2008, 7:56


Freestyler
********

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


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



Рейтинг: 4362




Как работает в Ostabox (решил объединить свои elf-ы) вот эта процедура :

Цитата(Osta @ 8.8.2008, 16:19)

3. При подключении наушников (обычных или блютуз) эльф может запустить другое приложение,
например Tunes.elf или открыть папку музыка .. вообщем любой ивент. На подключение к компьютеру
или зарядного устройства не реагирует !
Для этого нужно прописать нужный ивент в файле ostabox.ivt в нех-формате
(в базовой поставке эльфа там прописан ивент входа в главное меню)
Если клавиатура заблокирована, то эльф её разблокирует
ps другие эльфы работающие с подключением к usb лучше отключить.
*


попытался выделить из общего кода

в самом начале после #include "zv.h" определяем переменную для указателя на файл с нашим ивентом
WCHAR FILE_IV[256];

в массиве определяется ивент, на который сработает процедура
EVENT_HANDLER_ENTRY_T any_state_handlers[] =
{ 0x822F3, OS7}, // ивент вставки кабеля в usb, одинаков для всех моделей
//------------------------------------------
в процедуре регистрации определяется указатель на файл с ивентом
UINT32 Register( char* file_uri, char* param, UINT32 reserve )
WCHAR IVFile[256];

u_atou(file_uri, IVFile);
IVFile[u_strlen(IVFile)-3] = 0;
u_strcat(IVFile, L"ivt"); // расширение ivt для файла ostabox.ivt
u_strcpy(FILE_IV, IVFile);
//------------------------------------------

UINT32 OS7( EVENT_STACK_T *ev_st, void *app ) // сработал ивент подключения кабеля в usb
FILE_HANDLE_T mafile;
UINT32 baffer=0;
UINT32 ZZZ;
{
if (DL_AccIsHeadsetAvailable( ) == TRUE) // проверка , что это наушники, а не зарядка или комп
{
AFW_CreateInternalQueuedEvAux( *EV_UNLOC_KPAD-0xE , 0x65, 0, 0 ); // разблокируем клавиатуру
if (DL_FsFFileExist( FILE_IV)) // если файл с ивентом есть
{
mafile = DL_FsOpenFile( FILE_IV, FILE_READ_MODE, 0 ); // открыли его
DL_FsReadFile(&baffer, sizeof(UINT32) , 1, mafile, &ZZZ ); // прочитали из него ивент
AFW_CreateInternalQueuedEvAux( baffer, 0x65, 0, 0 ); // запустили прочитанный ивент из файла
DL_FsCloseFile(mafile); // закрыли файл
}
}
return RESULT_OK;
}

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


Гуру
******

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

Рейтинг: 681



tim apple, om2804, давайте попробуем учиться!

Я так понял разобраться нужно с работой этой функции из тюнса
Код
UINT32 DrawImageId( UINT32 n, INT16 x, INT16 y, UINT16 anchor)
{
     PICTURE_TYPE_UNION_T picture_data;
    GRAPHIC_POINT_T anchor_point;

    CANVAS_IMAGE_HANDLE_T image_handle;
    GRAPHIC_POINT_T image_size;
    GRAPHIC_REGION_T image_region;


    picture_data.PointerValue.resourcePicturePointerValue = PIC[n];
    picture_data.PointerValue.imageSize = PIC_SIZE[n];

    anchor_point.x = x;
    anchor_point.y = y;

    image_handle = UIS_CanvasOpenImageAndGetSize(STORED_IN_MEMORY_TYPE,
                                  picture_data,
                                  &image_size);    

    UIS_CanvasSetImageAttribute(image_handle,
                                IA_OBEY_TRANSPARENCY,
                                NULL);

    UIS_CanvasRenderImageToBuffer(image_handle,
                                  image_size,
                                  anchor_point,
                                  anchor,
                                  &image_region,
                                  Copy,
                                  dialog);


    UIS_CanvasCloseImage(image_handle);
/*
    PICTURE_TYPE_UNION_T picture_data;
    GRAPHIC_POINT_T anchor_point;

    picture_data.PointerValue.resourcePicturePointerValue = PIC[n];
    picture_data.PointerValue.imageSize = PIC_SIZE[n];


    anchor_point.x = x;
    anchor_point.y = y;

    // рисует картику                    
    UIS_CanvasDrawImage(STORED_IN_MEMORY_TYPE,            
                        picture_data,
                        anchor_point,
                        anchor,
                        Copy,
                        dialog);
*/
    return RESULT_OK;
}


Ещё раз напоминаю - для оформления кода нужно использовать тег [code]


Как я понял в эту функцию передаются координаты x и y и выравнивание. Так? И еще какой-то n (за ним стоит имя файла или нет?). Поясните пожалуйста назначение остальных вызываемых функций, что они делают, для чего они? Не разберусь я сам, к сожалению. Вот как-то с воспроизведением звуков из файловой системы мне все вродебы понятно - взял имя да вызвал функцию воспроизведения. А с графикой как-то... Почему нельзя Взять имя файла (путь к нему), задать координаты, выравнивания и вызвать функцию которая с этими параметрами нарисует на рабочем столе картинку?

Вот казалосьбы функция рисования
Код
UIS_CanvasDrawImage(STORED_IN_MEMORY_TYPE,            
                        picture_data,
                        anchor_point,
                        anchor,
                        Copy,
                        dialog);

Но опять же что там за параметры?
В общем извините за длинный пост и помогите разобраться с этим всем.

Сообщение отредактировал Andy51 - 16.10.2008, 15:33
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 16.10.2008, 11:03


Опытный
***

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

Рейтинг: 40



Цитата(Osta @ 16.10.2008, 11:56) *

{ 0x822F3, OS7}

А ивент выдергивания кабеля какой?

Сообщение отредактировал AKAmasol - 16.10.2008, 11:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 16.10.2008, 16:01


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

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

Рейтинг: 1650



Alesha_Pl, n - это номер элемента массива указателей на картинки в памяти телефона smile.gif

Рассмотрим UIS_CanvasDrawImage
Код

// рисует картику                    
UINT32 UIS_CanvasDrawImage(UINT8 picture_type,            // тип. откуда будем брать картинку. DRM, файл....
                PICTURE_TYPE_UNION_T picture_data,   // данные
                GRAPHIC_POINT_T anchor_point,
                UINT16 anchor_value,
                UINT8 drawOp,
                UIS_DIALOG_T handle);    


Выстрее всего рисует из памяти и из дрм, но второе нам мало подходит (кому хочется пихать картинки в дрм)
Но для того чтобы рисовать из памяти нужно загрузить картинку, и передать UIS_CanvasDrawImage указатель на неё и размер картинки

Сообщение отредактировал om2804 - 16.10.2008, 16:09
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 16.10.2008, 18:23


Опытный
***

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

Рейтинг: 40



Эльф компилится, но выдаёт такую ошибку:
line 161: Warning: C2207W: inventing 'extern int DL_AccIsHeadsetAvailable();'
Помогите пожалуйста.
И подскажите ивент выдергивания кабеля.
Вот исходники
Прикрепленный файл helloworld_snd_Handset_.zip   ( 2.49 килобайт ) Кол-во скачиваний: 117


[om2804]
функция DL_AccIsHeadsetAvailable не описана в SDK
добавь в dl.h строку BOOL DL_AccIsHeadsetAvailable(void);



Сообщение отредактировал om2804 - 16.10.2008, 20:10
Прикрепленный файл helloworld_snd_Handset_.zip   ( 2.49 килобайт ) Кол-во скачиваний: 117
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 17.10.2008, 6:56


Freestyler
********

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


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



Рейтинг: 4362



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

И подскажите ивент выдергивания кабеля.
*


думал , что 0x822F3 + 1 , но он не только на вытаскивание шнура реагирует ..
даже не знаю .. может f4 + условий наставить ?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 17.10.2008, 12:38


Опытный
***

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

Рейтинг: 40



Цитата(Osta @ 17.10.2008, 10:56) *

может f4

0x822F4? Что кроме вытаскивания шнура на него реагирует?


__________________________
+Osta
а ты проверь , там сразу видно
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 18.10.2008, 4:33


Гуру
******

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

Рейтинг: 681



Существует ли функция (и какая), которая возвращает номер текущего стиля оповещения? Или текущий стиль на всех телефонах в симе 4A офсет 0A и можно просто через сим смотреть.

Сообщение отредактировал Alesha_Pl - 18.10.2008, 4:43
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AKAmasol
сообщение 18.10.2008, 10:49


Опытный
***

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

Рейтинг: 40



Цитата(Osta @ 17.10.2008, 10:56) *

0x822F4, но он не только на вытаскивание шнура реагирует ...

У меня только на вытаскивание шнура реагирует (по крайней мере никакое окно не выскакивает, ничего не запускается).
Цитата(Osta @ 17.10.2008, 10:56) *

может условий наставить ?

Функцию аналогичную DL_AccIsHeadsetAvailable, только для вытаскивания гарнитуры, в либе не нашел. Может есть такие для вытаскивания зарядки и кабеля?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Учимся писать эльфов вместе, Обсуждение процесса кодинга · Эльфы, их разработка и портирование · Forum
 

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

 



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

Форум живёт: