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

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

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
сообщение 24.7.2008, 8:39


Freestyler
********

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


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



Рейтинг: 4362



прочёл в одной теме
Цитата(nixel @ Сегодня, 7:57)

Поддержку выбора скинов эльфом считаю не нужной и для меня это будет сложновато, уйдет очень много времени.
*



немного развить хотел .. как считаете , может добавить в либу несколько функций
UIS_GetCurrentSkinIndex ; чтение номера активного скина
UIS_GetSkinName( UINT16 skinIndex); имя активного скина

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


Мастер
****

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

Рейтинг: 323



Dex9999,
Цитата(Dex9999 @ Вчера, 10:00)

tcc -I../SDK -o my_lib.o -bigend -apcs /interwork table.c zex.c lib.o
*


А зачем обьектный файл компилятору подсовывать?
А вот ошибки выдаются линкером.
ф-ции __call_via_r* вызывают функцию, адресс которой прописан в регистре. Могу предположить, что ты пытался вызывать ф-цию, адресс которой задается в переменной. Наверное arm компилятор не использует эти ф-ции, а подставляет регистры прямо в коде (В arm режиме доступно раза в 2 больше регистров чем в тумбе).
__rt_memclr_w - это тоже самое, что memclr. Это стандартная библиотечная ф-ция. Компилятор сам подставляет ее где нужно также, как он подставляет ф-ции деления, сравнения переменных типа long long, сдвига переменных типа long long, etc...
Register - точка входа в эльф (аналогично main). Она прописана в Lib.o (этот файл нужно подлинковать к проекту для загрузчика от Andy51).


Osta,
Я себе добавлять не буду. Мне это просто не нужно (пока?). Но если это комуто нужно добавь, заодно и Set-теры добавь.

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


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

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

Рейтинг: 680



к этим ещё пожалуй стоит добавить
void UIS_SetSkin(UINT16 skin_index);
UINT16 UIS_GetNumSkins();
UINT16 UIS_GetDefaultSkinIndex();

А получения пути вообще нет.
Папка скинов - константа(SKINSFOLDER).
Путь это SKINSFOLDER + UIS_GetSkinName( UINT16 skinIndex);

PS как удачно совпало: я буквально сегодня 4 часа назад добавил эти функции себе в SDK

Пример использования
Получение папки текущего скина.
Код
WCHAR* GetCurrentSkinFolder()
{
       WCHAR SkinFolder[256];
       UINT8 SkinID=UIS_GetCurrentSkinIndex();
       SkinFolder:=L"file://c/mobile/skins/";
       u_strcat(SkinFolder,UIS_GetSkinName(SkinID));
       return SkinFolder;
}

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


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

Группа: Пользователи
Сообщений: 87
Регистрация: 19.8.2007
Из: Барнаул
Пользователь №: 144 977
Модель телефона: L7
Прошивка: ACR_RB

Рейтинг: 67.5



Кто мне сможет подсказать в чем проблема? 3 день уже не могу реализовать аналог простейшей функции a=char(x) - символьной переменной а присваивается символ с кодом x ASCII
Изображение
Код
CLK_TIME_T Time(char *buf_time)
{
    WCHAR s[]= { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    CLK_TIME_T time;
    UINT32 h, m;
  
    DL_ClkGetTime( &time);
    h=time.hour;
    m=time.minute;

    strcpy(buf_time, "");

    if (h <= 9)
     {
       strcat(buf_time, s[0]);
      }

    strcat(buf_time, s[h]);
    strcat(buf_time, ":");

    if (m <= 9)
     {
        strcat(buf_time, s[0]);
      }

    strcat(buf_time, s[m]);
          
    return time;
}


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


Опытный
***

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

Рейтинг: 174.5



Цитата(nixel @ Сегодня, 20:29)

strcat(buf_time, s[h]);
*



Помойму тут у тебя ошибка, ты с помощью strcat пытаешься слить ascii строку и unicode символ. И естественно из этого не выйдет ничего, т.к. unicode символы двухбайтные, и в начале каждого символа идёт ноль (например для цифры 1 ascii код будет 31h, а в unicode это 00h 31h). Т.к. с-строки оканчиваются нулём, то у тебя ничего не сливается. Тебе надо обьявить s[] как
Код
char s[]= { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

Помойму так smile.gif

Сообщение отредактировал Chik_v - 28.7.2008, 17:56
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
nixel
сообщение 28.7.2008, 18:02


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

Группа: Пользователи
Сообщений: 87
Регистрация: 19.8.2007
Из: Барнаул
Пользователь №: 144 977
Модель телефона: L7
Прошивка: ACR_RB

Рейтинг: 67.5



Chik_v, исправил, ошибки те же самые smile.gif Буду делать обходным путем, а ведь хотел этим методом немного код оптимизировать.

PS фигово писать на языке, который не знаешь... (с)


[om2804]
Может тогда стоит изучить? Я не понял, что требуется, но грубые ошибки на лицо. Да, и ещё в Си нет типа Строка. Строка - это всего лишь массив кодов символов, заканчивающийся нулём


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


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

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

Рейтинг: 1650



Вот так

Код
CLK_TIME_T Time(char *buf_time)
{
    CLK_TIME_T   time;
    UINT32          h, m;

             // Получаем время
    DL_ClkGetTime( &time);
    h=time.hour;
    m=time.minute;

            buf_time[0] = 0;

    if (h <= 9)
    {
       strcat(buf_time, "0"); // добавляем 0 если меньше 9
    }

            _itoa(h,  buf_time+strlen(buf_time), 10); // преобразуем число в строку
            strcat(buf_time, ":");


    if (m <= 9)
    {
         strcat(buf_time, "0");
    }

    _itoa(m,  buf_time+strlen(buf_time), 10);
          
    return time;
}


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


Мастер
****

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

Рейтинг: 100



разбираюсь с сдк, там есть функция
Код
/* Создаёт диалог-запрос */
UIS_DIALOG_T UIS_CreateConfirmation( SU_PORT_T *port,  CONTENT_T *content );

пробую делать так. что я неправильно делаю?
Код
UINT32 HandleKeypress( EVENT_STACK_T *ev_st,  void *app )
{
    EVENT_T     *event = AFW_GetEv(ev_st);
    APPLICATION_T           *papp = (APPLICATION_T*) app;
    SU_PORT_T               port = papp->port;
    CONTENT_T content;
    UtilLogStringData(" *** ELF *** HelloWorld: key pressed 0x%X", event->data.key_pressed);
    
    if(event->data.key_pressed == 0) DAL_DisableDisplay( 0 );
    if(event->data.key_pressed==1) DAL_EnableDisplay( 0 );
    if(event->data.key_pressed==2) UIS_CreateConfirmation( &port,  &content );

    return RESULT_OK;
}

и что за типы такие UINT32, ....
я чуток знаю с++, там с такими не встречался. в эльфах есть int, AnsiString, char?


[om2804]
Забыл создать content, который передаёшь диалогу. Делается это с помощью функции UIS_MakeContentFromString.
UINT32 и прочие объявлены в SDK в хидере typedefs.h


И AnsiString в эльфах нет ни в каком виде, если только ты не решишься написать smile.gif A51

Сообщение отредактировал Andy51 - 30.7.2008, 17:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 31.7.2008, 9:31


0xFFFF
******

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

Рейтинг: 1224



Цитата(om2804 @ 28.7.2008, 22:36)

CLK_TIME_T Time(char *buf_time)
{
CLK_TIME_T time;
UINT32 h, m;

// Получаем время
DL_ClkGetTime( &time);
h=time.hour;
m=time.minute;

buf_time[0] = 0;

if (h <= 9)
{
strcat(buf_time, "0"); // добавляем 0 если меньше 9
}

_itoa(h, buf_time+strlen(buf_time), 10); // преобразуем число в строку
strcat(buf_time, ":");


if (m <= 9)
{
strcat(buf_time, "0");
}

_itoa(m, buf_time+strlen(buf_time), 10);

return time;
}
*



Я как оптимизатор не могу на это смотреть без слёз x_x
Предложу сразу два варианта, как сделать намного лучше.
Оптимайз по скорости:
Код
CLK_TIME_T Time(char *buf_time)
{
    CLK_TIME_T    time;
    UINT32        t, r;

    // Получаем время
    DL_ClkGetTime( &time );

    for( r='0',t=time.hour; t>9; t-=10,r++ ); // Считаем десятки и остаток для часов сразу

    // Пользуемся заранее известной длиной строки
    buf_time[0] = r;
    buf_time[1] = '0'+t; // Используем факт, что коды цифр идут последовательно
    
    buf_time[2] = ':';
    
    // То же самое, но для минут
    for( r='0',t=time.minute; t>9; t-=10,r++ );

    buf_time[3] = r;
    buf_time[4] = '0'+t;
          
    return time;
}


И оптимайз по спейсу smile.gif
Код
CLK_TIME_T Time(char *buf_time)
{
    CLK_TIME_T    time;

    // Получаем время
    DL_ClkGetTime( &time );
    
    // Получаем нужную строку
    sprintf(buf_time, "%.2i:%.2i", time.hour, time.minute);
          
    return time;
}
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 2.8.2008, 16:39


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

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

Рейтинг: 680



Дорогие друзья, с подачи Andy51 мною был найден способ написания эльфа который может работать и в фоновом режиме и в режиме работы с ГУИ.
Для этого надо:
1. Вызывать функцию:
Код
    APP_ChangeRoutingStack( app,
                            ev_st,
                            (void *)EventsMonitor,
                            (isShow ? 1 : 0),
                            0,
                            1,
                            2);

при каждом изменении состояния(фон/нефон) приложения.

2. Должна быть объявлена функция
Код
UINT32 EventsMonitor( EVENT_STACK_T *ev_st, APPLICATION_T *app, APP_ID_T app_id, REG_ID_T reg_id )
{
    EVENT_T     *event;
    UINT32 i;

    if(event->code == EV_KEY_PRESS)
    {
        HandleKeypress( ev_st, app );
     HandleEventX( ev_st, app, app_id, reg_id );
        return RESULT_OK;
    }

    HandleEventX( ev_st, app, app_id, reg_id );
    return RESULT_OK;
}

это собственный обработчик событий. для примера написал ивент EV_KEY_PRESS.
нужен потому что я не знаю как делать иначе (=

3. Должна быть объявлена функция
Код
UINT32 HandleEventX( EVENT_STACK_T *ev_st, APPLICATION_T *app, APP_ID_T app_id, REG_ID_T reg_id )
{
    if(isShow)APP_HandleEvent( ev_st, app, app_id, reg_id );
    else APP_HandleEventPrepost( ev_st, app, app_id, reg_id );
    return RESULT_OK;
}

это переключатель стандартных обработчиков событий. нужен чтобы передавайть события дальше прошивке.

4. В функции startApp должно быть
Код
        app = (APP_HELLOWORLD_T*)APP_InitAppData( (void *)EventsMonitor,
                                                  sizeof(APP_HELLOWORLD_T),
                                                  reg_id,
                                                  0, 1,
                                                  1,
                                                  2, (isShow ? 1 : 0), 0 );


* isShow - TRUE если в режиме ГУИ, FALSE если в режиме фоновой работы

Вот и все!!! Всем удачи!
Саму функцию смотрим тут
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 2.8.2008, 20:16


Мастер
****

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

Рейтинг: 100



что означает
Цитата
UtilLogStringData(" *** ELF *** HelloWorld: MainStateEnter");

из helloworld.c.

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


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

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

Рейтинг: 680



Nur87,
вывести строку " *** ELF *** HelloWorld: MainStateEnter" в p2kDataLogger
Используется для отладки

Сообщение отредактировал DmT - 3.8.2008, 15:31
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 3.8.2008, 15:02


Мастер
****

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

Рейтинг: 100



1.
Код
UINT32 UIS_MakeContentFromString( char *format,  CONTENT_T *dst,  ... );

из SDK.
первые два параметра понятны. а что значит следуюшие ......

2. хочу сделать вот такое. при запуске эльфа появляется окно, как в motocmd, при входе в пункт О программе. но все никак не разберусь. может кто помочь, написать код с коментариями.

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


Мастер
****

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

Рейтинг: 323



Не в мидвей, а в p2kDataLogger. Только
1) Отладка должна быть включена в заблокированном симе. Разблокировка патчем.
2) Все логи прошивки выводятся туда же. Потом приходится выбирать свое.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 3.8.2008, 19:09


Мастер
****

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

Рейтинг: 100



Цитата(Nur87 @ Сегодня, 19:02)

2. хочу сделать вот такое. при запуске эльфа появляется окно, как в motocmd, при входе в пункт О программе. но все никак не разберусь. может кто помочь, написать код с коментариями.
*


пробую вот так. эльф компилится. запускаю на телефоне, ребут.

Я конечно всё понимаю, но меру знать надо! Нельзя в посте такие большие куски кода вставлять! Прикрепи файлом. A51
прикрепил. smile.gif

Сообщение отредактировал Nur87 - 3.8.2008, 19:25
Прикрепленный файл list.zip   ( 3.04 килобайт ) Кол-во скачиваний: 94
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 3.8.2008, 19:15


0xFFFF
******

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

Рейтинг: 1224



Nur87, ну вот в сдк пример написан "MCq0p1"
вот и передаёшь параметры согласно этой строке
Код
MakeContentFromString("MCq0p1", &content, L"Hello World", 0x12000010);

В основном параметры представляют собой ресурсы.

Сообщение отредактировал Andy51 - 3.8.2008, 19:20
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 3.8.2008, 19:19


Мастер
****

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

Рейтинг: 100



Andy51
а моя
Код
UIS_MakeContentFromString("CTq0", &dst, L"О программе");
неправильная?

Вроде правильная. A51

Добавлено позже (3.8.2008, 23:22):
ладно. исправил
Код
UIS_MakeContentFromString("CTq0", &dst, L"О программе");

на
Код
UIS_MakeContentFromString("MCq0p1", &dst,"Hello World", 0x12000010);

все равно ребут.

Сообщение отредактировал Andy51 - 3.8.2008, 19:20
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 3.8.2008, 19:25


0xFFFF
******

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

Рейтинг: 1224



Nur87, без неё всё работает? И какой телефон? Ты проверяешь, создаётся ли контент?

Сообщение отредактировал Andy51 - 3.8.2008, 19:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 3.8.2008, 19:27


Мастер
****

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

Рейтинг: 100



Цитата(Andy51 @ Сегодня, 23:25)

Nur87, без неё всё работает? И какой телефон?
*


без неё также ребут.
телефон 398, прошивка чистая 49R
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 4.8.2008, 7:24


Freestyler
********

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


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



Рейтинг: 4362



Цитата(Nur87 @ Вчера, 21:27)

без неё также ребут.
*


мм.. так может ошибки в другом ?
а вообще возьми исходники om2804
и пример \ToneDBKiller\src\ELF.c
Код
    APPLICATION_T           *papp = (APPLICATION_T*) app;
    SU_PORT_T               port = papp->port;
    CONTENT_T               content;
    UIS_DIALOG_T            dialog = 0;
    WCHAR msg[64];
    u_atou( "Запуск плейлиста ?\nStart playlist ?",  msg );
    if(type!=ENTER_STATE_ENTER) return RESULT_OK;    
    UIS_MakeContentFromString("MCq0", &content, msg); //Создаём контент из строки    
    dialog = UIS_CreateConfirmation( &port, &content);    
    if(dialog == 0) return RESULT_FAIL;
    papp->dialog = dialog;
    return RESULT_OK;
}
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 4.8.2008, 18:09


Мастер
****

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

Рейтинг: 100



опять я со своим эльфом. (мне надо создать окно с заголвком.)
пробую вот так.
Код
UINT32 MainStateEnter( EVENT_STACK_T *ev_st,  void *app,  ENTER_STATE_TYPE_T type )
{
    APPLICATION_T           *papp = (APPLICATION_T*) app;
    SU_PORT_T                  port = papp->port;
    CONTENT_T                  content;
    ACTIONS_T                  actions;
    UIS_DIALOG_T            dialog = 0;
    WCHAR msg[64];
    u_atou( "Удалить ToneDB ?",  msg );
    if(type!=ENTER_STATE_ENTER) return RESULT_OK;
    UIS_MakeContentFromString("MCq0", &content, msg); //Создаём контент из строки
    /* Добавим к нашим имеющимся по умолчанию действиям одно новое */    
151    actions->action[0].operation = ACTION_OP_ADD;
    /* Так как у нас в таблице обработчиков стол STATE_HANDLERS_RESERVED, то мы должны получить реальное значение ивенткода */
153   actions->action[0].event = .....; /* вот здесь можно ли прописать функцию     DAL_DisableDisplay( 0 );
или подскажите что нибудь простое.
как я понял это вызываемое действие при нажатии на этот пункт? */
154    actions->action[0].action_res = &content; // Ресурс, описывающий действие. это правильно я сделал?
/* Мы добавили только одно действие */
157    actions->count = 1;
    dialog = UIS_CreateViewer( &port, &content, &actions);
    if(dialog == 0) return RESULT_FAIL;
   papp->dialog = dialog;
    return RESULT_OK;
}

при компиляции выскакивает вот такое:
Код
'ELF.c", line 151:   Serious error: C2947E: Illegal types for operands: '->'
'ELF.c", line 153:   Serious error: C2947E: Illegal types for operands: '->'
'ELF.c1', line 154:   Serious error: C2947E: Illegal types for operands: '->'
'ELF.c1', line 157:   Serious error: C2947E: Illegal types for operands: '->'
LF.c: 0 warnings,   0 errors, 5 serious errors
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 4.8.2008, 18:19


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

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

Рейтинг: 680



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

ACTIONS_T actions;
*


у тебя тут локальная переменная, а не указатель.
Для локальных переменных пишется через ".", а для указателей через "->"
Цитата(Nur87 @ Сегодня, 0:09)

actions->action
*


actions.action
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 4.8.2008, 19:00


Мастер
****

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

Рейтинг: 100



DmT, спасибо.

вот так получилось создать окно с заголовком.
Код
UINT32 MainStateEnter( EVENT_STACK_T *ev_st,  void *app,  ENTER_STATE_TYPE_T type )
{
    APPLICATION_T           *papp = (APPLICATION_T*) app;
    SU_PORT_T               port = papp->port;
    CONTENT_T               content;
    ACTIONS_T       actions;
    //RESOURCE_ID       CaptionEditor;
    //CaptionEditor = 0001;
    UIS_DIALOG_T            dialog = 0;
    WCHAR msg[64];
    u_atou( "Удалить ToneDB ?",  msg );
    if(type!=ENTER_STATE_ENTER) return RESULT_OK;
    
    UIS_MakeContentFromString("MCq0", &content, msg); //Создаём контент из строки
        /* Добавим к нашим имеющимся по умолчанию действиям одно новое */    
    actions.action[0].operation = ACTION_OP_ADD;
    /* Так как у нас в таблице обработчиков стол STATE_HANDLERS_RESERVED, то мы должны получить реальное значение ивенткода */
   actions.action[0].event = 0404; // Какой ивент будет создан при выборе действия
    actions.action[0].action_res = 0x010001CB; // Ресурс, описывающий действие

    /* Мы добавили только одно действие */
    actions.count = 1;

    dialog = UIS_CreateViewer( &port, &content, &actions);
        
    if(dialog == 0) return RESULT_FAIL;

    papp->dialog = dialog;

    return RESULT_OK;
}

но список в нём пуст. как добавить текст внутрь? или я не тот диалог использую.
скрин 1 - как получилось.
скрин 2 - как хочу получить.


Сообщение отредактировал Nur87 - 4.8.2008, 19:26
Прикрепленное изображение Прикрепленное изображение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 4.8.2008, 21:28


0xFFFF
******

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

Рейтинг: 1224



Nur87, не уверен, но попробуй многострочный content - 'N'.
И u_atou( "Удалить ToneDB ?", msg ); использовать для кириллицы нельзя - получишь крякозябры.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 5.8.2008, 7:13


Мастер
****

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

Рейтинг: 100



Цитата(Andy51 @ Сегодня, 1:28)

не уверен, но попробуй многострочный content - 'N'.
*


да получилось. сделал вот так
Код
    WCHAR msg[64];
    WCHAR msg1[64];
    u_atou( "Del ToneDB ?",  msg );
    u_atou( "Del ToneDB ?1111",  msg1 );
             UIS_MakeContentFromString("MCq0Nq1", &content, msg, msg1); //Создаём контент из строки


Цитата(Andy51 @ Сегодня, 1:28)

И u_atou( "Удалить ToneDB ?", msg ); использовать для кириллицы нельзя - получишь крякозябры.
*


а что лучше мне использовать?
пробовал и так
Код
    WCHAR msg1[64] =L"Удалить";

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


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

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

Рейтинг: 680



Nur87,
Ты ленг уже правил?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 5.8.2008, 7:44


Freestyler
********

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


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



Рейтинг: 4362



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

а что лучше мне использовать?
*


01000866

UIS_MakeContentFromString("MCs0Nq1", &content, 0x01000866, msg1);




а кто в чём пишет код ? я в проге EditPlus 2 , может есть получше что ?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 5.8.2008, 8:31


Мастер
****

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

Рейтинг: 100



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

Ты ленг уже правил?
*


нет. из-за этого наверное? все руки не доходят

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

а кто в чём пишет код ? я в проге EditPlus 2 , может есть получше что ?
*


я в Notepad++. выделение синтаксиса в зависимости от языка програмирования. справа список функции. вроде удобно. посмотрел EditPlus 2. мне моя больше понравилась. smile.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 5.8.2008, 8:39


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

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

Рейтинг: 680



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

а кто в чём пишет код ? я в проге EditPlus 2 , может есть получше что ?
*


В плагине к тоталкомандеру synplus(lister-плагин)
Andy51 советует Source Insight
Но он перегруженный помоему.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chik_v
сообщение 5.8.2008, 8:39


Опытный
***

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

Рейтинг: 174.5



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

а кто в чём пишет код ? я в проге EditPlus 2 , может есть получше что ?
*



А я пользую CodeBlocks IDE. Я его настроил на работу с компилером для M*Core. Есть подсветка синтаксиса, автодополнение и прочее
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 5.8.2008, 8:54


Мастер
****

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

Рейтинг: 100



пробую теперь создать диалог-список

Код
RESOURCE_ID       CaptionEditor;
CaptionEditor = 0x010001CB;//это у меня правильно?         
dialog = UIS_CreateList( &port,
                             0,
                             1,//ENTRIES_NUM кол-во пунктов меню
                             0,
                             1,// starting_num
                             0,
                             2,
                             &actions,
174                             CaptionEditor);//заголовок списка

возникает ошибка
Код
'ELF.с",   line  174:   Error:   C3029E:   <argument  5  to   'UIS_CreateList'>:   implicit   casе  of  non-0  int  to  pointer
ELF.c:   0  warnings,   1  error,   Ш serious  errors


что за параметр RESOURCE_ID CaptionEditor;.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 5.8.2008, 13:32


0xFFFF
******

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

Рейтинг: 1224



Nur87, он тебе говорит, что в пятом параметре требуется указатель, а не число.
Пятый параметр - это
Код
1,// starting_num
Так что тебе нужно сделать так:
Код
starting_num = 1;
dialog = UIS_CreateList( &port,
                             0,
                             1,//ENTRIES_NUM кол-во пунктов меню
                             0,
                             &starting_num,
                             0,
                             2,
                             &actions,
                             CaptionEditor);//заголовок списка

Ну вот, наконец-то кому-то эта тема помогает smile.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 5.8.2008, 14:24


Мастер
****

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

Рейтинг: 100



Andy51, спасибо. почему то ссылка на строку была на последний параметр. и я думал что в ней ошибка. сделал как ты сказал, теперь вроде работает.

если я правильно понял:
UIS_CreateViewer - создает диалог сразу при запуске эльфа?
UIS_CreateList - создает окно с диалогом при нажатии на кнопку меню?
потому что у меня они именно так работают.

когда я использую UIS_CreateList то заголовок и пункт меню пустые. может я их неправильно задаю.
Код
    RESOURCE_ID       CaptionEditor;
    CaptionEditor = 0x010001CB;       // это заголовок. а как суда свой текст вписать? тут тип типа int

Код
    ACTIONS_T       actions;
           actions.action[0].operation = ACTION_OP_ADD;
           actions.action[0].event = 0404; // Какой ивент будет создан при выборе действия
           actions.action[0].action_res = 0x010001CB; // Ресурс, описывающий действие
           actions.count = 1;

Код
        dialog1 = UIS_CreateList( &port,
                             0,
                             1,//ENTRIES_NUM кол-во пунктов меню
                             0,
                              &starting_num,
                             0,
                             2,
                             &actions,
                             CaptionEditor);


Цитата(Andy51 @ Сегодня, 17:32)

Ну вот, наконец-то кому-то эта тема помогает
*


главное что есть кому помочь. спасибо всем кто помогает. clap.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 5.8.2008, 14:54


Freestyler
********

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


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



Рейтинг: 4362



Цитата(Nur87 @ Сегодня, 16:24)

actions.action[0].action_res = 0x010001CB; // Ресурс, описывающий действие
*


это работает ? ведь Экшены вроде 0x0600хххх...
или это на софт-клавишах ...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 5.8.2008, 15:10


Мастер
****

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

Рейтинг: 100



Osta,
а как проверить? компилится все без ошибок.

кстати когда создаем диалог, на софт клавишах имеются НАЗАД и ВЫБОР. каким образом на них выставить определенные действия.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 5.8.2008, 15:22


Freestyler
********

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


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



Рейтинг: 4362



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

res = 0x010001CB; // Ресурс, описывающий действие
*



кст это 01CB | Ужин :-) есть где-то такое у тебя?

подставь что-то типа

#define RES_ID_ACTION_LIST_BACK 0x06000001
#define RES_ID_ACTION_LIST_CALL 0x06000002
#define RES_ID_ACTION_LIST_CALLBACK 0x06000003
#define RES_ID_ACTION_LIST_CANCEL 0x06000004
#define RES_ID_ACTION_LIST_CHANGE 0x06000005
#define RES_ID_ACTION_LIST_CLEANUP_ALL 0x06000006
#define RES_ID_ACTION_LIST_CNF_NEW 0x06000007
#define RES_ID_ACTION_LIST_CONFIRMATION_NO 0x06000008
#define RES_ID_ACTION_LIST_CONFIRMATION_YES 0x06000009

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


Мастер
****

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

Рейтинг: 100



практикуюсь на исходниках ListTest.
заменил код:
Код
for( index=0, i=start; (i<start+num) && (i<=ENTRIES_NUM); i++, index++)
    {
        plist[index].editable = FALSE;            // Поле нередактируемо
        plist[index].content.static_entry.unk6 = 1;

        //Возьмём для примера уже готовые строки прямо из ленга
        UIS_MakeContentFromString( "Cs0", &(plist[index].content.static_entry.text), msg );
    }

вот на такой.
Код
UINT32 SendListItems( EVENT_STACK_T *ev_st,  void *app, UINT32 start, UINT32 num)
{
    APPLICATION_T            *papp = (APPLICATION_T*) app;
    LIST_ENTRY_T            *plist; // Буффер для элементов списка
    UINT32                     status=RESULT_OK;
        WCHAR msg[64] =L"строка1";
    WCHAR msg1[64] =L"строка2";
        WCHAR msg2[64] =L"строка3";
                WCHAR msg3[64] =L"строка4";        

plist[0].editable = FALSE;            // Поле нередактируемо
        plist[0].content.static_entry.unk6 = 1;
        UIS_MakeContentFromString( "CTq0Nq1Nq2Nq3", &(plist[0].content.static_entry.text), msg, msg1, msg2,msg3);


но при запуске эльфа происходит ребут. компилится все без ошибок.

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


0xFFFF
******

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

Рейтинг: 1224



Nur87, контент для списка должен быть однострочным
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Nur87
сообщение 5.8.2008, 19:06


Мастер
****

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

Рейтинг: 100



Цитата(Andy51 @ Сегодня, 22:44)

контент для списка должен быть однострочным
*


т.е. так?
Код
UIS_MakeContentFromString( "Cq0", &(plist[0].content.static_entry.text), msg);

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


Мастер
****

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

Рейтинг: 323



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

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

 



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

Форум живёт: