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

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

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


Гуру
******

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

Рейтинг: 681



Как нет. Я же эту функцию в сдк нарыл (в canvas.h).
COLOR_T UIS_CanvasGetForegroundColor(void);
Или полчучается она просто возвращает текущий установленный цвет для для линий, прямоугольников, текста....., а не цвет конкретного нарисованнога объекта?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 28.5.2009, 6:59


Мастер
****

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

Рейтинг: 435



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

просто возвращает текущий установленный цвет
*


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


Гуру
******

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

Рейтинг: 681



Ну понятно, жаль. Придется массив делать и держать в нем цвет каждого пикселя.

С картинкой разобрался все получилось. Только надо подумать куда вставлять очистку ресурса. А то он картинку не только на раб столе, а везде выводит (это кстати, можно наверно с пользой использовать). Спасибо за помощь, пока вопросы вроде закончились. Теперь можно попробовать будет соединить информер с инфографом и может (именно может, если сил хватит и терпения) сделать наконец-то погоду с картинками вместо надписей smile.gif

Сообщение отредактировал Alesha_Pl - 28.5.2009, 7:10
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
poofеg
сообщение 5.6.2009, 13:39


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 16.4.2008
Пользователь №: 169 638
Модель телефона: Motorola E398
Прошивка: R373_G_0E.30.79R

Рейтинг: 11



А кто занимается обновлением SDK и где брать свежий?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 5.6.2009, 14:25


Freestyler
********

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


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



Рейтинг: 4362



Цитата(poofеg @ Сегодня, 15:39)

и где брать свежий?
*


первый пост ELFs by om2804 читаем до конца
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
poofеg
сообщение 5.6.2009, 14:27


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 16.4.2008
Пользователь №: 169 638
Модель телефона: Motorola E398
Прошивка: R373_G_0E.30.79R

Рейтинг: 11



То есть можно om2804 считать ответственным за SDK?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 5.6.2009, 17:51


Мастер
****

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

Рейтинг: 435



poofеg,
нет, просто у него наиболее актуальный.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
logotoy73
сообщение 7.6.2009, 6:27


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

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


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



Рейтинг: 220



Можно и мне вопрос? Есть такая функция UINT32 UIS_CanvasDrawColorBitmap( void* picture_bytes, // первый байт - ширина, второй байт высота
// остальное 8-bpp(RGB332) или 16-bpp(RGB565)
GRAPHIC_POINT_T ulc_anchor_point,
UIS_DIALOG_T handle );. Можно ли с её помощью рисовать BMP? Т.е. создаем массив, 2 байта на ширину и высоту, дальше будет карта битов из BMP. Вот тут мне не понятно, ведь BMP little endian. Что делать? Так и оставлять или нужно конвертировать в big endian. Есть ли для этого функции в прошивке, или надо писать свои? И если можно пример подобной функции.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 7.6.2009, 8:28


Eve
******

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

Рейтинг: 650



logotoy73,
я думаю что в канвасе все это предусмотрено. Ведь станартный просмотрщик картинок показывает.
Я так думаю что тебе достаточно слепит картинку формата 8-bpp(RGB332) или 16-bpp(RGB565) с этими двумя байтами и спокойно рисовать.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
logotoy73
сообщение 7.6.2009, 9:20


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

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


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



Рейтинг: 220



Слепить? Вот с этим то и проблема, как правильно это сделать. Я хочу работать с BMP. С 8-bpp вроде понятно, один байт - один пиксель. А вот с 16-bpp? Тут уже 2 байта на пиксель. Ну и как тут быть?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 7.6.2009, 14:22


Мастер
****

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

Рейтинг: 435



Цитата(logotoy73 @ Сегодня, 12:27)

нужно конвертировать в big endian
*


да, причем в общем случае в растре BMP-файла строки выравнены на 4 байта и
это придется учитывать.

Цитата(logotoy73 @ Сегодня, 12:27)

Есть ли для этого функции в прошивке
*


есть. либо юзай UIS_CanvasDrawImage - сразу рисует из файла/памяти/дрм.
либо ренд-ерь файл в буфер памяти, а его уже рисовать через CanvasDrawColorBitmap.
рендерится с помощью UIS_CanvasRenderImageToBuffer.
у этого способа 2 преимущества:
1) можно срендерить заранее и потом рисовать бысрее
2) можно выставить прозрачность
кстати, этот способ используется у ома (см. сорцы)

---
прошу поправить если не прав =)

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


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

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

Рейтинг: 1650



UIS_CanvasDrawImage рисует gif и должна рисовать bmp, но тут надо попробовать
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
poofеg
сообщение 7.6.2009, 18:13


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 16.4.2008
Пользователь №: 169 638
Модель телефона: Motorola E398
Прошивка: R373_G_0E.30.79R

Рейтинг: 11



Товарищи, есть вопрос, который вроде обсуждался. А какие типы данных мы можем использовать? Если быть точным, то меня в основном интересует тип float, double и __int64.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 7.6.2009, 20:18


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



poofеg, не стоит их(нецелочисленные типы и длинные вещественные) вообще использовать, даже если реализовать через плавающую точку(дробные), очеееень тормозить будет!!! чем тебе INT32 и UINT32 не хватает то? храни тогда кождый из разрядов своего оч длинного числа в массиве char(UINT8) и сделай функцию которая будет выполнять операции, над таким числом в массиве...

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


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

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

Рейтинг: 1650



64 битный тип есть, насчёт double и float кто-то вроде когда-то копал(Может быть DmT). ADS вроде против
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 7.6.2009, 20:42


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



om2804, DmT копал, Мачо копал, я покал... тормоза лишние... и геморой... тех типов которые есть вполне достаточно...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 7.6.2009, 22:52


Eve
******

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

Рейтинг: 650



Double и float пашут нормально. Для этого надо кучу функций для этих типов использовать. Либо специальную либу сделать
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
poofеg
сообщение 7.6.2009, 23:33


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 16.4.2008
Пользователь №: 169 638
Модель телефона: Motorola E398
Прошивка: R373_G_0E.30.79R

Рейтинг: 11



Как приятно что ответило сразу 3 человека с зелеными никами...)

По большому счету у нас есть все таки вещественные числа, но нет math.h?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 8.6.2009, 3:42


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

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

Рейтинг: 680



poofеg,
А зачем тебе math.h ?

Теперь о том как я неиспользовал вещественные типы, несмотря на то что они были мне нужны:
Мне было достаточно точности в 16 дробных бит, и все вычеследния влазили в 16 целых бит.
Я представил все дробные как целые со смещением влево на 16 бит.
Т.е. 32битный int использовал как
|16_бит_целая_часть_числа|16_бит_дробная_часть_числа|

отсюда sin:
Код
const UINT32 sin_t[] = {
    0,     1144,  2287,  3430,  4572,
    5712,  6850,  7986,  9120,  10252,
    11380, 12504, 13625, 14742, 15854,
    16961, 18064, 19160, 20251, 21336,
    22414, 23486, 24550, 25606, 26655,
    27696, 28729, 29752, 30767, 31772,
    32767, 33753, 34728, 35693, 36647,
    37589, 38521, 39440, 40347, 41243,
    42125, 42995, 43852, 44695, 45525,
    46340, 47142, 47929, 48702, 49460,
    50203, 50931, 51643, 52339, 53019,
    53683, 54331, 54963, 55577, 56175,
    56755, 57319, 57864, 58393, 58903,
    59395, 59870, 60326, 60763, 61183,
    61583, 61965, 62328, 62672, 62997,
    63302, 63589, 63856, 64103, 64331,
    64540, 64729, 64898, 65047, 65176,
    65286, 65376, 65446, 65496, 65526,
    65536 };

INT32 quick_sin(INT32 a)
{
    INT32 sign = 1;

    a%=360;
    
    if(a<0) a+=360;
    if(a>270)
    {
        a=360-a;
        sign=-1;
    }
    if(a>180)
    {
        a-=180;
        sign=-1;
    }
    if(a>90) a=180-a;

    return sign * sin_t[a];
}

значениt 0 соответствует 0 >> 16 = 0
Значение 65536 соответствует 65536 >> 16 = 1

Про большие типы: INT64 может быть описана как структура из двух INT32 соответственно старшие 32 бита и младшие. Почти все функции для работы с этим типом уже занесены в либу. (я кажется Мачо просил даже деление какое-то добавить)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
poofеg
сообщение 8.6.2009, 4:33


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 16.4.2008
Пользователь №: 169 638
Модель телефона: Motorola E398
Прошивка: R373_G_0E.30.79R

Рейтинг: 11



DmT,
Спасибо за развернутый ответ. Из этого следует ответ, что вещественных типов все таки нет?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 8.6.2009, 4:45


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

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

Рейтинг: 680



poofеg,
Есть, только надо подключать RTL к ADS.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Dex9999
сообщение 8.6.2009, 5:21


Интересующийся
**

Группа: Пользователи
Сообщений: 67
Регистрация: 18.6.2005
Пользователь №: 44 478
Модель телефона: V500
Прошивка: V500->V620->E1 (R373_G_0E.30.45R)

Рейтинг: 14



Цитата(tim apple @ 7.6.2009, 18:22) *

да, причем в общем случае в растре BMP-файла строки выравнены на 4 байта и
это придется учитывать.
есть. либо юзай UIS_CanvasDrawImage - сразу рисует из файла/памяти/дрм.
либо ренд-ерь файл в буфер памяти, а его уже рисовать через CanvasDrawColorBitmap.
рендерится с помощью UIS_CanvasRenderImageToBuffer.
у этого способа 2 преимущества:
1) можно срендерить заранее и потом рисовать бысрее
2) можно выставить прозрачность
кстати, этот способ используется у ома (см. сорцы)
---
прошу поправить если не прав =)

Позволю себе вернуть обсуждение немного назад, к выводу на канвас области памяти.
После просмотра исходников ома мне так видится, что UIS_CanvasRenderImageToBuffer рендерит не в буфер(возможно имелся ввиду буфер экрана?), а непосредственно выводит на экран, без использования UIS_CanvasDrawColorBitmap. Вообще не нашел в исходниках ома вывод через UIS_CanvasDrawColorBitmap.
Собственно к чему это я.
Есть у меня необходимость реализовать бек-буфер. Ну и по таймеру выводить его на канвас. Таймер как положено тикает, в нем делаю:
Spoiler:
Код

COLOR_T                 colorx;
GRAPHIC_REGION_T        region;
GRAPHIC_POINT_T anchor_point;
char *scr=0;

//тестовый код
scr=(char*)malloc((176*220)*sizeof(char)+2);
memset(scr,0,(176*220)*sizeof(char)+2);
scr[0]=176;
scr[1]=220;
anchor_point.x = 0;
anchor_point.y = 0;
UIS_CanvasDrawColorBitmap((void*)scr,anchor_point, dialog);
mfree(scr);

//цветовая индикация срабатывания перерисовки экрана
if(COLOUR==0xFF000000) COLOUR=0x00FF0000;
else COLOUR=0xFF000000;
    colorx.red = (COLOUR & 0xFF000000) >> 24;
    colorx.green = (COLOUR & 0x00FF0000) >> 16;
    colorx.blue = (COLOUR & 0x0000FF00) >> 8;
    colorx.transparent = COLOUR & 0x000000FF;
    UIS_CanvasSetFillColor(colorx);
    
    region.ulc.x = 0;
    region.ulc.y = bufd.h-5;
    region.lrc.x = bufd.w;
    region.lrc.y = bufd.h;
    UIS_CanvasFillRect(region, dialog);
[close]

однако ожидаемого черного экрана не получается, экран содержит предыдущую информацию, выведенную через UIS_CanvasDrawColorText + моргает цветом прямоугольник снизу. Смотрел на scr через ddbg(scr,20); - вроде всё ок, 1 байт ширина, 1 байт высота, дальше нули. Что я делаю не так? Делать через UIS_*Image(...) считаю неудобным, мне удобней работать с массивом цветов.
P.S. memcpy непосредственно в буфер экрана приводит к ребуту, так что, совсем нельзя?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Kasper2021
сообщение 8.6.2009, 20:52


Интересующийся
**

Группа: Пользователи
Сообщений: 38
Регистрация: 7.9.2007
Пользователь №: 147 014
Модель телефона: E770v

Рейтинг: 0



у меня вопрос чем компилить эльфы на е770?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 9.6.2009, 12:12


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

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

Рейтинг: 1650



ADS. А эльф пак на него портирован?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Kasper2021
сообщение 9.6.2009, 12:16


Интересующийся
**

Группа: Пользователи
Сообщений: 38
Регистрация: 7.9.2007
Пользователь №: 147 014
Модель телефона: E770v

Рейтинг: 0



Цитата
ADS. А эльф пак на него портирован?
Можешь дать ссыль на ADS?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 9.6.2009, 12:17


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

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

Рейтинг: 1650



http://om2804.webaltera.ru/downloads.php?url=files/elfs/ads
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 9.6.2009, 12:37


Eve
******

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

Рейтинг: 650



e770 это вроде mcore.
Спроси тут Rainbow POG PortKit & SDK
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Campanula
сообщение 10.6.2009, 4:06


Мастер
****

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

Рейтинг: 123.5



DL_DbFeatureGetCurrentState( 1652, &result )
Seem: 004A
offset: F2
49R:offset+0x582
LTE2:offset+0x5C4
79R:offset+????
????=0x???

Can someone tell me?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 10.6.2009, 4:54


Гуру
******

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

Рейтинг: 681



Campanula, may be


UINT8 result;
UINT32 drop;
drop=*BEGIN_4A__IN_DB+242; // 242(dec)=F2(hex)
DL_DbFeatureGetCurrentState( drop, &result );


In result there will be a value from offset F2 seem 4A

Наверно так надо читать из сима. Если нет поправьте.

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


Мастер
****

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

Рейтинг: 123.5



QUOTE(Alesha_Pl @ 10.6.2009, 12:54) *

Campanula, may be
UINT8 result;
UINT32 drop;
drop=*BEGIN_4A__IN_DB+242; // 242(dec)=F2(hex)
DL_DbFeatureGetCurrentState( drop, &result );
In result there will be a value from offset F2 seem 4A

Наверно так надо читать из сима. Если нет поправьте.



Thanks smile.gif

Let me try
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
R.U.S.H.A.N.
сообщение 15.6.2009, 9:16


Интересующийся
**

Группа: Разработчики
Сообщений: 95
Регистрация: 13.4.2009
Из: home://russia/ufa/
Пользователь №: 197 674
Модель телефона: Е398, Milestone, XT912
Прошивка: DaR_v2.15

Рейтинг: 231



Есть вопрос: а как на эльфах записать данные не в конец текстовога файла, а в середину.
вот функция которую надо подправить
и исхоники эльфа.

INT32 EditData( EVENT_STACK_T *ev_st, void *app )
{
EVENT_T *event = AFW_GetEv(ev_st);
FILE f;
char buf[64];
//char Buf[64];
UINT32 written;// i;//, position;

dbg("EditData", NULL);
if (event->attachment != 0)
{
UCS2toCP1251( event->attachment, buf);

// запись в файл
f = DL_FsOpenFile(ini_file, FILE_WRITE_PLUS_MODE, 0); // с таким параметром надо открывать вайл?
if (f != FILE_HANDLE_INVALID ) {
dbg("EditData buf: %s", buf);
//DL_FsFSeekFile( f, 0, SEEK_WHENCE_SET );
//u_utoa(item[i-1].Value,Buf);
//position = (UINT32)strstr(bufR, Buf);
//dbg("%s",position);
fSize = DL_FsGetFileSize(f);
//DL_FsFSeekFile( f, 2/*strtol(position,0,10)*/, SEEK_WHENCE_SET );
DL_FsWriteFile( buf, fSize, 1, f, &written);
DL_FsCloseFile(f);
}
}
dbg("EditData: END", NULL);

APP_UtilChangeState( HW_STATE_MAIN, ev_st, app );

return RESULT_OK;

}


Сообщение отредактировал R.U.S.H.A.N. - 15.6.2009, 9:22
Прикрепленный файл initool.zip   ( 12.68 килобайт ) Кол-во скачиваний: 69
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 15.6.2009, 9:30


Eve
******

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

Рейтинг: 650



Цитата
с таким параметром надо открывать вайл?

нет. файл просто удалится и создастся новый

Код
FILE_READ_PLUS_MODE

вот это попробуй. Открыть для чтения и записи. Или просто

Цитата
FILE_WRITE_MODE

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


0xFFFF
******

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

Рейтинг: 1224



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

FILE_WRITE_MODE
*

Должен по идее тоже покилять содержимое файла. По всем мануалам так, хотя как на моторе - я не уверен.
R.U.S.H.A.N., если тебе нужно именно вставить новые данные в середину старого файла, чтоб все старые данные сохранились, то это делается только вручную. Если же нужно перезаписать данные в середине файла, то попробуй FILE_APPEND_MODE (или FILE_READ_PLUS_MODE, или FILE_APPEND_PLUS_MODE) с последующим вызовом DL_FsFSeekFile.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 15.6.2009, 13:45


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

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

Рейтинг: 1650



Открывать с параметром FILE_WRITE_MODE, перед записью в файл делать seek на нужный оффсет DL_FsFSeekFile( f, offset, SEEK_WHENCE_SET );
После DL_FsWriteFile данные в файле будут переписаны

Если seek не делать, то тогда файл будет переписан полностью

PS: Не будет работать на диске /c/, так же как и дозапись в файл на этом диске. Глюки прошивки

Сообщение отредактировал om2804 - 15.6.2009, 13:49
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
croccio
сообщение 19.6.2009, 9:47


Мастер
****

Группа: Пользователи
Сообщений: 254
Регистрация: 27.1.2008
Пользователь №: 161 521
Модель телефона: L7 Slvr, c350

Рейтинг: 11



excuse me i've a question:

"How to load a gif image and render it on homescreen of mobile through ELFs..???"
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Dex9999
сообщение 19.6.2009, 11:51


Интересующийся
**

Группа: Пользователи
Сообщений: 67
Регистрация: 18.6.2005
Пользователь №: 44 478
Модель телефона: V500
Прошивка: V500->V620->E1 (R373_G_0E.30.45R)

Рейтинг: 14



Господа, кто добавлял в SDK а конкретнее в canvas.h UIS_CanvasDrawColorBitmap()? Мне _очень_ хочется научиться выводить буфер данных формата RGB на канвас. Может кто-нибудь просветить по поводу использования данной функции. А то я уже испробовал все варианты, теперь мне мне кажется что описание для нее было составлено неверно. Я уже лично полез в прошивку и наблюдаю там, что передаваемый ей буфер должен начинаться с 0x43 0x46 а не с "первый байт - ширина, второй байт высота остальное 8-bpp(RGB332)..."
Spoiler:
Код
UIS:107A4BB8                 STMFD   SP!, {R0-R2,R4-R11,LR}
UIS:107A4BBC                 SUB     SP, SP, #0x18
UIS:107A4BC0                 MOV     R4, R0
UIS:107A4BC4                 MOV     R1, #0
UIS:107A4BC8                 STR     R1, [SP,#0x48+var_34]
UIS:107A4BCC                 MOV     R0, R2         ; R2 = UIS_DIALOG_T  handle
UIS:107A4BD0                 BL      uis_get_dialog_ptr
UIS:107A4BD4                 MOVS    R5, R0
UIS:107A4BD8                 BEQ     loc_107A4BF0   ; если указатель на dialog не верен то выход
UIS:107A4BDC                 LDRB    R0, [R4]       ; буфер картинки?
UIS:107A4BE0                 CMP     R0, #0x43      ; 1ый байт д.б.=0х43
UIS:107A4BE4                 LDREQB  R0, [R4,#1]
UIS:107A4BE8                 CMPEQ   R0, #0x46      ; 2ой д.б.=0х46
UIS:107A4BEC                 BEQ     loc_107A4C00   ; переходим дальше иначе выход
UIS:107A4BF0
UIS:107A4BF0 loc_107A4BF0                           ; CODE XREF: UIS_CanvasDrawColorBitmap+20j
UIS:107A4BF0                 MOV     R0, #1
UIS:107A4BF4
UIS:107A4BF4 loc_107A4BF4                           ; CODE XREF: sub_107A4D50+11Cj
UIS:107A4BF4                 ADD     SP, SP, #0x24
UIS:107A4BF8                 LDMFD   SP!, {R4-R11,LR}
UIS:107A4BFC                 BX      LR
UIS:107A4C00; ---------------------------------------------------------------------------
UIS:107A4C00
UIS:107A4C00 loc_107A4C00                           ; CODE XREF: UIS_CanvasDrawColorBitmap+34j
UIS:107A4C00                 LDRB    R1, [R4,#2]
....
комментарии в дизасме мои. Если что не так - поправьте меня.
[close]

Либо поделитесь сакральными знаниями как работать с экраном через Ati... функции (может исходники matrix.elf дадут просветление?)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 19.6.2009, 11:55


Гуру
******

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

Рейтинг: 681



croccio, почитай сообщения начиная с #290, может поможет.

Меня учили там когда-то на рабочем столе рисовать картинку.


Вот:

Код

unsigned char PIC[551] = {
    0x47, 0x49, 0x46, ....... ...this is GIF image converted to C code by WinHEX("Edit->Copy block-  >C Source"), change this to your image

};

UINT32 Draw( const char * pic_data, int pic_size, UINT16 x, UINT16 y )
{
    GRAPHIC_REGION_T    region;
    RESOURCE_ID        pic_res;
    
    region.ulc.x = x;
    region.ulc.y = y;
    region.lrc.x = region.ulc.x + width of image;
    region.lrc.y = region.ulc.y + height of image;
    
    DRM_CreateResource( &pic_res, RES_TYPE_ANIMATION, (void*)pic_data , pic_size );
    utility_draw_image( pic_res, region, NULL, NULL );
    return RESULT_OK;
}

x=50;
y=70;
Draw( (char*)PIC, 551, x, y );




Но еще нужно добавить какие-то условия, что бы картинка не рисовалась везде, а была только на рабочем столе и еще чистить ресурс при выходе из эльфа DRM_ClearResource( pic_res );



Dex9999, попробуй к baatу обратись. Он через ати читалку делал. Может поможет. Только не говори, что я посоветовал его спросить smile.gif

Сообщение отредактировал Alesha_Pl - 19.6.2009, 12:44
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Dex9999
сообщение 19.6.2009, 12:02


Интересующийся
**

Группа: Пользователи
Сообщений: 67
Регистрация: 18.6.2005
Пользователь №: 44 478
Модель телефона: V500
Прошивка: V500->V620->E1 (R373_G_0E.30.45R)

Рейтинг: 14



Цитата(croccio @ 19.6.2009, 13:47) *

excuse me i've a question:

"How to load a gif image and render it on homescreen of mobile through ELFs..???"


Try this code:
Код

unsigned char PIC[1262] = {
    0x47, 0x49, 0x46, 0x38, 0x39, 0x61,....}; //this is GIF image converted to C code by WinHEX("Edit->Copy block->C Source"), change this to your image

    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;
    picture_data.PointerValue.imageSize = 1262; //size of PIC[]

    anchor_point.x = 0;
    anchor_point.y = 0;
// draw GIF picture                    
    UIS_CanvasDrawImage(STORED_IN_MEMORY_TYPE,            
                        picture_data,
                        anchor_point,
                        ANCHOR_TOP,
                        Copy,
                        dialog);

You can aslo read any GIF image to PIC[] buffer using DL_FsReadFile() procedure
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Alesha_Pl
сообщение 19.6.2009, 12:38


Гуру
******

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

Рейтинг: 681



Dex9999, UIS_CanvasDrawImage вроде не рисует на хомскрине, только на канве. А товарищу нужно именно on homescreen.

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


Интересующийся
**

Группа: Пользователи
Сообщений: 67
Регистрация: 18.6.2005
Пользователь №: 44 478
Модель телефона: V500
Прошивка: V500->V620->E1 (R373_G_0E.30.45R)

Рейтинг: 14



Цитата(Alesha_Pl @ 19.6.2009, 16:38) *

Dex9999, UIS_CanvasDrawImage вроде не рисует на хомскрине, только на канве.

Тут я да, что-то я не учёл что он на рабочем столе хочет рисовать. Хотя когда рисуешь на канвасе снизу остается раб.стол, вопрос в том как будет обновляться раб. стол, проверки тоже нужно ставить чтоб не всегда рисовал. Тут не буду советовать, не пробовал.
croccio, my code for drawing on canvas, not for homescreen. Sorry.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Учимся писать эльфов вместе, Обсуждение процесса кодинга · Эльфы, их разработка и портирование · Forum
 

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

 



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

Форум живёт: