Easyelectronics.ru

Электроника для всех
Текущее время: 21 окт 2018, 09:01

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 1224 ]  На страницу Пред.  1 ... 45, 46, 47, 48, 49  След.
Автор Сообщение
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 24 мар 2018, 08:15 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Misaka10032 писал(а):
Ruslan-maniak писал(а):
Подскажите кто знает, как при создании окна установить фокус на конкретный виджет в этом окне? После создания, фокуса нет ни на одном виджете.

У меня работает WM_SetFocus(handle).
Если есть ID, то сначала получаем handle. То есть в итоге так: WM_SetFocus(WM_GetDialogItem(pMsg->hWin, ID));

Это я знаю. Вопрос в другом. В каком месте вызывать эту функцию? Если в инициализации диалога, то фокус не устанавливается. Если в пэйнте, то он будет вызываться каждый раз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 24 мар 2018, 09:17 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Ruslan-maniak писал(а):
В каком месте вызывать эту функцию?

Одноразовый таймер?

Ещё попробуйте что-то типа
Код:
   WM_MESSAGE msg;
   msg.MsgId = WM_TOUCH;
   WM_SendMessage ( hItem, &msg );

Т.е. послать контролу сообщение якобы в него ткнули мышей/тачем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 27 мар 2018, 18:43 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Приветствую. Пара вопросов по EDIT.
1) Можно ли используя AddKey() вводить value а не text? Пробовал устанавливать SetDecMode(), но все равно value остается неизменным, меняется только text. И из этого следующие вопросы. Использую вот так AddKey(obj, '1') .
2) Можно ли text перевести в value посредством функционала EDIT, или это все надо снаружи вручную делать?
3) Какой смысл в функции SetDecMode() имеют параметры min и max? Если отправить value не входящим в этот отрезок, оно все равно устанавливается. И в дальнейшем опять же нет возможности изменять value кроме как SetValue() но при этом эти рамки ни как не учитываются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 28 мар 2018, 10:48 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Я не пользовался контролом EDIT для ввода чисел.
Для целых чисел попробуйте контрол SpinBox. Он вроде как специализированный для этого.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 28 мар 2018, 22:26 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Кто пользуется котролом MULTIPAGE - вопрос
Как можно узнать, что пользователь переключился на какую-то вкладку? Если вкладка первая, то её оконная процедура при этом получает сообщения WM_NOTIFY_PARENT/WM_NOTIFICATION_GOT_FOCUS, всё гуд, меня это устраивает. Но мне надо это на вторую вкладку, а она вообще НИЧЕГО не получает.
Это какой-то баг или я чего-то не понимаю? В доках и примерах ничего про это не нашёл.

Повторюсь, интересует событие не в родителе, а именно во вкладке.

PS. костылить чем-то типа таймера с опросом изменилась ли видимая страница пока не пробовал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 29 мар 2018, 09:08 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2689
я уже задавался таким вопросом, буквально несколько страниц назад. У меня на вкладках мультипейджа довольно нагруженные страницы, которые обновляются по таймеру, и оказалось что они обновляются даже если эта страница не выбрана. Сейчас сделал так:
Код:
      case WM_TIMER:
      {
         WM_RestartTimer(pMsg->Data.v, 500);
         if ( !WM_IsVisible(WM_GetClientWindow(pMsg->hWin)) ) break;
         
         //обновление всех виджетов
      }

Пробовал по всякому, но этот костыль единственный заработал.
У вас корректно работает WM_NOTIFICATION_GOT_FOCUS на страницах? У меня это сообщение срабатывает только при инициализации.
upd: STemWin версии "STemWin532_CM4_OS_IAR.a"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 29 мар 2018, 12:19 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Hold писал(а):
я уже задавался таким вопросом, буквально несколько страниц назад. У меня на вкладках мультипейджа довольно нагруженные страницы, которые обновляются по таймеру, и оказалось что они обновляются даже если эта страница не выбрана. Сейчас сделал так:
Код:
      case WM_TIMER:
      {
         WM_RestartTimer(pMsg->Data.v, 500);
         if ( !WM_IsVisible(WM_GetClientWindow(pMsg->hWin)) ) break;
         
         //обновление всех виджетов
      }

Пробовал по всякому, но этот костыль единственный заработал.
У вас корректно работает WM_NOTIFICATION_GOT_FOCUS на страницах? У меня это сообщение срабатывает только при инициализации.
upd: STemWin версии "STemWin532_CM4_OS_IAR.a"


У меня 5.40. Сейчас проверил - WM_NOTIFICATION_GOT_FOCUS приходят в процесса инита, когда окно ещё не отрисовано и при закрытии окна. И всё :( Кстати, даже на первой странице ...
Что-то они там сломали. Старое окно (где оно когда-то работало) мне тоже видимо придётся проверять/переделывать.

PS.
Надо бы на буржуйском форуме emWin пошариться/спросить. Ибо в доке о событиях получаемых вкладками вообще ничего нет и фирменный пример ихний - чистая пустышка - все страницы без оконных процедур.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 29 мар 2018, 20:40 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 24 июл 2016, 00:07
Сообщения: 106
Ruslan-maniak писал(а):
Приветствую. Пара вопросов по EDIT.
1) Можно ли используя AddKey() вводить value а не text? Пробовал устанавливать SetDecMode(), но все равно value остается неизменным, меняется только text. И из этого следующие вопросы. Использую вот так AddKey(obj, '1') .
2) Можно ли text перевести в value посредством функционала EDIT, или это все надо снаружи вручную делать?
3) Какой смысл в функции SetDecMode() имеют параметры min и max? Если отправить value не входящим в этот отрезок, оно все равно устанавливается. И в дальнейшем опять же нет возможности изменять value кроме как SetValue() но при этом эти рамки ни как не учитываются.

Использовал для вывода данных EDIT буквально вчера.
1) Сейчас проверю в своей программе.
2) EDIT_GetValue не работает?
3) Странно, вроде отправлял не входящими в отрезок - устанавливалось максимальное. Как я понял, min\max нужны для подсчёта количества нулей :D
Допустим, min = 0, max = 100. Если я задаю значение 20, то выводится 020. Если max = 99, выводится уже 20.

EDIT, кстати, в десятичном режиме довольно удобно использовать и для вывода дробных значений. Допустим, задал параметр shift = 1, выдал 1000 а вывелось 100.0. И никакой арифметики с запятой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 30 мар 2018, 20:01 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Hold писал(а):
Пробовал по всякому, но этот костыль единственный заработал.


Да, у меня тоже вроде заработал. Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 02 апр 2018, 09:14 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Приветствую. По мере роста кода GUI начались вываливания в хардфолл. Например при удалении диалога. Мне кажется не хватает памяти. Но какой именно? Куча и Стек выделены линкером по 0х4000 байт. Обычной оперативы под работу билиотеки выделено 63000 байт, больше выделить не дает линкер. Жонглированием диалогами и оптимизацией в одном месте починешь, в другом начнет отваливаться. При этом большинство диалогов не существуют одновременно. А создаются иерархически: один - child от другого. При этом хардфол постоянный появился при добавлении диалога на первом уровне иерархии. То есть есть гораздо глубже диалоги но там нет хардфола. Посоветуйте что делать с этим? Или без вариантов надо увеличивать оперативу физически?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 02 апр 2018, 16:46 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Куча для простого malloc родом из компилятора вообще ни при чём, STemWin её не использует, стек, хз, может и влияет, но я не замечал.
я думаю больше влияет вот эта память: GUI_ALLOC_AssignMemory(extMem, GUI_NUMBYTES);
Может Вы слишком жирный диалог сделали? По моим наблюдениям пик расхода памяти из GUI_ALLOC_AssignMemory приходится именно на создание окна, тогда, когда окно ещё даже не прорисовалось.
Попробуйте упростить диалог. если поможет - ставьте внешний RAM. Я давно переехал на SDRAM, дал гую 3 метра, проблем пока не видел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 02 апр 2018, 21:58 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Так в том то и дело что диалоги простецкие (в частности тот с которым основные проблемы - пара кнопок и один edit). Структура такая:
Есть основной диалог, при его создании также создается дочерний диалог и приаттачивается к основному. Затем если из дочернего создать второй диалог дочерний по отношению к основному и также приаттачить его к основному, а первый дочерний в свою очередь закрыть и удалить - то далее все нормально работает на любую глубину второго дочернего диалога и из него также закрывается и удаляется основной диалог. А вот если после создания первого диалога из него взять и закрыть и удалить основной то все - хардфол. То есть все сыпется когда я пытаюсь удалить основной диалог из первого дочернего. Из второго он удаляется прекрасно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 09 апр 2018, 11:50 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Нет, дело точно не в недостатке памяти. Выделил уже под 200 КБайт. Все тоже самое. Создаю основное диалоговое окно. Если в нем создать дочернее диалоговое окно и приаттачить его к основному, то из обработчика дочернего диалога без проблем можно закрывать основной диалог - все отлично работает. Но если в дочернее окно добавить EDIT и установить на него фокус, и определить для этого EDITа кастомный обработчик нажатий кнопок EDIT_SetpfAddKeyEx(). И затем из этого обработчика отправить месседж дочернему (по отношению к основному) окну чтобы тот закрыл основное, или же прямо из обработчика попробовать закрыть основное диалоговое окно, то фукция закрытия окна выполняется, а далее когда выходим из функции откуда вызывали закрытие - происходит хардфол. Судя по трассировке в асме, это происходит при вызове функции WM_Invalidate().
Приведу мой код:
Определение диалогов (основной и дочерний соответственно)
Код:
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
  { WINDOW_CreateIndirect, "WindowSettings", ID_WINDOW_0, 0, 0, 480, 272, 0, 0, 0 },
  { TEXT_CreateIndirect,   "textMenuName",  GUI_ID_TEXT0, 20, 5, 440, 30, 0, 0, 0 },
  { TEXT_CreateIndirect,   "textEnter",     GUI_ID_TEXT1, 65, 235, 150, 30, 0, 0, 0 },
  { TEXT_CreateIndirect,   "textEsc",       GUI_ID_TEXT2, 265, 235, 150, 30, 0, 0, 0 },
};

static const GUI_WIDGET_CREATE_INFO _aDialogCreateSettingsPasswordIn[] =
{
  { FRAMEWIN_CreateIndirect, "frame1", ID_FRAMEWIN,     60,  40, 360, 185, 0, 0, 0 },
  { TEXT_CreateIndirect,     "text1", GUI_ID_TEXT0,     0, 40, 360, 30,  0, 0, 0 },
  { BUTTON_CreateIndirect,   "button1", GUI_ID_BUTTON0, 75, 115, 100,  30,  0, 0, 0 },
  { BUTTON_CreateIndirect,   "button2", GUI_ID_BUTTON1, 185, 115, 100,  30,  0, 0, 0 },
  { EDIT_CreateIndirect,     "edit1", GUI_ID_EDIT0,     130, 75, 100, 30,  0, 6, 0 },   
};

создание и удаление основного диалогового окна
Код:
WM_HWIN WindowSettingsCreate (void)
{
    hWindow = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),
                                  _cbDialog, WM_HBKWIN, 0, 0);   
   
    hPassword = GUI_CreateDialogBox(_aDialogCreateSettingsPasswordIn,
                                    GUI_COUNTOF(_aDialogCreateSettingsPasswordIn),
                                    _cbDialogSettingsPasswordIn, WM_HBKWIN, 0, 0);
    FRAMEWIN_SetTitleVis(hPassword, 0); 
   
    WM_AttachWindow(hPassword, hWindow);
    return hWindow;
}

void WindowSettingsDelete (void)
{   
    GUI_EndDialog(hWindow, 0);
    WM_DeleteWindow(hWindow);
}


обработчик основного окна
Код:
static void _cbDialog (WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
   
    switch (pMsg->MsgId)
    {
        case WM_INIT_DIALOG:
        {
            //
            // Initialization of 'WindowSettings'
            //
            hItem = pMsg->hWin;
            WINDOW_SetBkColor(hItem, 0x0000FFFF);
            //
            // Initialization of 'textMenuName'
            //
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetText(hItem, winStateNames[0]);
            TEXT_SetFont(hItem, &GUI_FontArial22HB);
            TEXT_SetBkColor(hItem, GUI_LIGHTGRAY);
            WM_HideWindow(hItem);
            //
            // Initialization of 'textEnter'
            //
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1);
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetText(hItem, "Enter - изменить");
            TEXT_SetFont(hItem, &GUI_FontArial18HB);
            WM_HideWindow(hItem);
            //
            // Initialization of 'textEsc'
            //
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2);
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetText(hItem, "Esc - выход");
            TEXT_SetFont(hItem, &GUI_FontArial18HB);
            WM_HideWindow(hItem);
        }
        break;
        case WM_NOTIFY_PARENT:
        break;
        case WM_POST_PAINT:
        {
            if(password)
            {
                GUI_RECT rect;           
                GUI_SetColor(GUI_BLACK);   
                GUI_DrawRectEx(&rect);
                WM_GetWindowRectEx(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0), &rect);
                GUI_DrawRoundedFrame(rect.x0 - 3, rect.y0 - 3, rect.x1 + 3, rect.y1 + 3, 0, 3);           
                WM_GetWindowRectEx(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1), &rect);
                GUI_DrawRoundedFrame(rect.x0 - 3, rect.y0 - 3, rect.x1 + 3, rect.y1 + 3, 0, 3);
                WM_GetWindowRectEx(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2), &rect);
                GUI_DrawRoundedFrame(rect.x0 - 3, rect.y0 - 3, rect.x1 + 3, rect.y1 + 3, 0, 3);
            }
        }
        break;
        case MSG_SWITCH_STATE:
        {     
            uint8_t state = pMsg->Data.v;
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
            if(state == 0)
            {
                WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0));
                WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1));
                WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2));
            }
            if(state >= 6)
            {
                char str[50];
                sprintf (str, winStateNames[state], choosenOutput+1);
                TEXT_SetText(hItem, str);
            }
            else
                TEXT_SetText(hItem, winStateNames[state]);
           
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetFont(hItem, &GUI_FontArial22HB);
            TEXT_SetBkColor(hItem, GUI_LIGHTGRAY);           
        }   
        break;
        default:
        {
            WM_DefaultProc(pMsg);           
        }
        break;
    }
}

обработчик дочернего окна
Код:
static void _cbDialogSettingsPasswordIn (WM_MESSAGE * pMsg)
{
     WM_HWIN hItem;
     int     NCode;
     int     Id;     
     switch (pMsg->MsgId)
     {     
         case WM_INIT_DIALOG:
         {             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
             TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             TEXT_SetText(hItem, winItemNamesPasswordIn[0]);
             TEXT_SetFont(hItem, &GUI_FontArial22HB);
             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
             BUTTON_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             BUTTON_SetText(hItem, winItemNamesPasswordIn[1]);
             BUTTON_SetFont(hItem, &GUI_FontArial18HB);
             BUTTON_SetFocussable(hItem, 0);
             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON1);
             BUTTON_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             BUTTON_SetText(hItem, winItemNamesPasswordIn[2]);
             BUTTON_SetFont(hItem, &GUI_FontArial18HB);
             BUTTON_SetFocussable(hItem, 0);   
             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_EDIT0);
             EDIT_SetFont(hItem, &GUI_FontArial22HB);
             EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             EDIT_EnableBlink(hItem, 300, 1);   
             EDIT_SetpfAddKeyEx(hItem, _cbEditAddKeyPassword);
             WM_SetFocus(hItem);
         }
         break;
         case MSG_CHECK_PASSWORD:
         {       
                WindowSettingsDelete();
         }
         break;     
         default:
         {
             WM_DefaultProc(pMsg);           
         }
         break;
     }
}


и кастомный обработчик кнопок для edit
Код:
static void _cbEditAddKeyPassword (EDIT_Handle hObj, int Key)
{   
    EDIT_SetpfAddKeyEx(hObj, 0);
    switch (Key)
    {
        case eMatrixKeyboardKey_ENTER:
        {       
            WM_MESSAGE msg;
            msg.MsgId = MSG_CHECK_PASSWORD;
            msg.Data.v = EDIT_GetNumChars(hObj);
            WM_SendMessage(WM_GetParent(hObj),&msg); 
            return;           
        }
        break;
        case eMatrixKeyboardKey_ESC:
        {             
            WindowSettingsDelete();
            return;           
        }     
        break;
        case eMatrixKeyboardKey_1:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '1';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_2:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '2';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_3:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '3';
            EDIT_AddKey(hObj, '*');           
        }
        break;       
        case eMatrixKeyboardKey_4:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '4';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_5:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '5';
            EDIT_AddKey(hObj, '*');           
        }
        break;         
        case eMatrixKeyboardKey_6:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '6';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_7:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '7';
            EDIT_AddKey(hObj, '*');           
        }
        break;       
        case eMatrixKeyboardKey_8:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '8';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_9:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '9';
            EDIT_AddKey(hObj, '*');           
        }
        break;       
        case eMatrixKeyboardKey_0:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '0';
            EDIT_AddKey(hObj, '*');           
        }
        break;
    }
    EDIT_SetpfAddKeyEx(hObj, _cbEditAddKeyPassword);
}


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 12:59 
Здравствуйте!

Зарегистрирован: 19 апр 2018, 12:40
Сообщения: 3
Добрый день!

Прошу помощи у знатоков emWIN, нужен ликбез.

Работаю на STM32f429, freertos. Как подключить к библиотеке современный цветной ЖК экран через LTDC по демо примеру разобрался, все работает, рисуется.

А теперь хочу использовать библиотеку с старым экранчиком - монохромный PG12864, контроллер LH155BA5, работа через SPI. Самописный драйвер и простой генератор экрана есть, техническая часть рабочая.

А вот как подружить библиотеку с таким устройством? Как вообще emWin работает с последовательными экранами?

Пытался разобраться - но какой мне нужен драйвер и как его адаптировать? Или нужно полностью писать свой?

Если с функциями LCD_X_DisplayDriver и LCD_X_Config еще хоть что-то понятно, то как библиотека поймет какие функции реализованы в пользовательском драйвере?

Почитал мануал, там есть раздел касаемо SPI, но не совсем понятно как его задействовать и опять же, это касается передачи данных в дисплей, а само построение примитивов как будет работать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 14:58 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Elrandir писал(а):
А теперь хочу использовать библиотеку с старым экранчиком - монохромный PG12864, контроллер LH155BA5, работа через SPI. Самописный драйвер и простой генератор экрана есть, техническая часть рабочая.

А вот как подружить библиотеку с таким устройством? Как вообще emWin работает с последовательными экранами?

Пытался разобраться - но какой мне нужен драйвер и как его адаптировать? Или нужно полностью писать свой?

Если с функциями LCD_X_DisplayDriver и LCD_X_Config еще хоть что-то понятно, то как библиотека поймет какие функции реализованы в пользовательском драйвере?

Почитал мануал, там есть раздел касаемо SPI, но не совсем понятно как его задействовать и опять же, это касается передачи данных в дисплей, а само построение примитивов как будет работать?


За работу с SPI/параллельными дисплеями в STemWin отвечает драйвер FlexColor. Поищите в доке, поддерживает ли он Ваш дисп. Я лично его там не нашёл.
Если не найдёте, то про те функции можете смело забыть и писать свой кастомный драйвер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 15:25 
Здравствуйте!

Зарегистрирован: 19 апр 2018, 12:40
Сообщения: 3
hd44780 писал(а):
Если не найдёте, то про те функции можете смело забыть и писать свой кастомный драйвер.

Хорошо, но с чего начать написание? Я так понял там есть GUIDRV_Template.c и его вроде бы нужно адаптировать?
Но как тогда сказать библиотеке чтобы она использовала именно его? Просто добавить в проект?

И получится библиотека сможет выполнять только те функции, что есть в этом драйвере? Или она более сложные стоит на их базе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 19:54 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1739
Откуда: Донецк, ДНР
Elrandir писал(а):
Хорошо, но с чего начать написание? Я так понял там есть GUIDRV_Template.c и его вроде бы нужно адаптировать?
Но как тогда сказать библиотеке чтобы она использовала именно его? Просто добавить в проект?

И получится библиотека сможет выполнять только те функции, что есть в этом драйвере? Или она более сложные стоит на их базе?


Да, по сути на бзе GUIDRV_Template.c.
Но я приложил вам свой рабочий кастомный драйвер для SSD1963. Можете ознакомиться/передрать что-то :).
flexColor поддерживает SSD1963, но он у меня работал хреново и неустойчиво, возможно из-за плохой разводки той платы. Поэтому я написал свой. Может криво, зато пахало :)))
С ч.б дисплеями я не работал вообще, по ним не подскажу.
В моём примере сам драйвер и прослойка для STemWinа - LCDConf.c. Там есть нюанс - в функции _InitLcdController прослойки надо инитить дисплей, но я там этого не делаю, т.к. у меня он инитился раньше, ещё до запуска гуя.

Elrandir писал(а):
И получится библиотека сможет выполнять только те функции, что есть в этом драйвере? Или она более сложные стоит на их базе?

Там, по сути, только вывод точек, вертикальных/горизонтальных линий и заливка прямоугольников цветом. Остальное она вроде сама компонует.


Вложения:
Custom.zip [43.53 Кб]
Скачиваний: 16
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 23 апр 2018, 13:21 
Здравствуйте!

Зарегистрирован: 19 апр 2018, 12:40
Сообщения: 3
hd44780 писал(а):
Но я приложил вам свой рабочий кастомный драйвер для SSD1963. Можете ознакомиться/передрать что-то :).

Большое спасибо за ответ и пример, буду пробовать)). Если что - отпишусь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 09:08 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 620
При компилирование в iar8.xx выдается предупреждение iar Warning[Lt009]: Inconsistent wchar_t size. IAR изменили размер wchar_t , в версии 7.xx wchar_t был 2 байта в 8.xx стал 4 байта.
Не добавили опции изменения размера wchar_t в линковщики IAR8.xx.
Предлагаемое решение IAR отключить предупреждение на свой страх и риск или пересобрать библиотеки
Show


Вот у меня возник вопрос есть ли библиотеки для IAR8.xx от emwin?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 09:42 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1313
Откуда: Китай, Пекин
Господа, вы ерундой занимаетесь, вы в курсе?
Нормального интерфейса вы все равно не напишите, иначе придется убить кучу времени.

Пользователи уже привыкли к качественному GUI с тачскринами и проч. плюшками, будут плеваться на ваши поделки.
Обсуждалось уже неоднократно, оставьте на микроконтроллере только низкоуровневые железячно-исполнительные функции(ногодрыг, опрос датчиков и проч)
Выносите все функции мониторинга, контроля и управления через UART(via Bluetooth, WIFi, wire) на мобильники и компы.

тем более с BlackBox это стало делать очень просто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:04 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2381
Ой, да че ты понимаешь, сидя в своем Китае? Ясен пень, что китайцы готовы "за еду" написать любые плюшки для ваших малиновых смузи-интерфейсов.
Но зачастую (даже очень часто!) пользователям нахрен не нужны красявые слайд-эффекты. Вы станок с ЧПУ видали? Нах там ваши няшные плюшки, вместе с блюпупом. Няшности только отвлекают и затрудняют работу. Нет, ну есть Smart Factory, но там мобильники - только для биг-босса отчеты доставляют в виде няшных графиков о том, сколько тонн чугуна наплавил завод в закрома родины. А манагеры помельче наблюдуют со специализированных планшетов в фирмовых корпусах с резиновыми уголками и ручками по краям. Но обычный персонал трудится возле стационарных постов, на стационарных и вовсе не няшных панелях, у которых большинство кнопок - физические, а не экранные. Так что не надо свои китайские хотелки распространять на нормальных людей. Ты там в своем китае уже вконец китаяйцизировался, как еще глаза то не поускоглазили.

Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:23 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1313
Откуда: Китай, Пекин
Пользователю нужен удобный интерфейс, за который он готов платить.
Разработчику нужен удобный, легко расширяемый инструмент для создания таких интерфейсов.

Тут с клепанием формочек на JAVA под андроид с его автоматической сборкой мусора, многопоточностью и поддержкой мощнейшей IDE, бывает не все очевидно.

Писать интерфейс на Си.... мдяяя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:31 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1313
Откуда: Китай, Пекин
Цитата:
Изображение


вот, правильно! вынесли интерфейс управления на мобильное устройство.
правда старье, под виндоус мобайл помоему... и стоит около $3000

сейчас устройства на андроиде подобного уровня защиты можно купить за $500


Последний раз редактировалось cheblin 01 май 2018, 10:40, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:38 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2381
Во-первых, планшеты во многом не для управления, а для показомеров - показывать шефу как круто работает его завод. Планшеты чаще всего только собирают инфу и показуют еёйную. Во-вторых, для серьезных заводов - и $3000 - не вопрос. Если надо - значит будет.
А с китайской мобилы Ксаоми (или как ее кличут) по няшному ванильному интерфейсу запустить даже циркулярную пилу - это срань господня. а если не сработает? нет, ну ево нах! Нет, в Китае ты можешь делать как угодно - там пох, одним китайцем больше, одним меньше, всё равно. Но у нас или в Европе такой пофигизм не проканает. Кто поручится за безопасность Андроида? У него есть сертификат безопасности? А мобила Ксаоми сертифицирована для управления производственными процессами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:50 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1313
Откуда: Китай, Пекин
реально пофиг, что именно используется для отображения информации будь это PC, планшет или мобильник...
мой пойнт в том что микроконтроллеру - микроконтролево, а все остальное на вынос.
dixi


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1224 ]  На страницу Пред.  1 ... 45, 46, 47, 48, 49  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: alex_k, VladislavS


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB