Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по uC/GUI + TouchScreen
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > uC/OS-II
Harvester
Создаю экранную форму ввода данных (набор кнопок + поле EDIT) и столкнулся со следующими граблями:
1. Не возникает события WM_NOTIFY_PARENT с кодом WM_NOTIFICATION_RELEASED (в примерах обработка нажатий производится именно по этому коду). Ладно, пробую использовать код WM_NOTIFICATION_CLICKED - появляется другая проблема:
2. При повторных нажатиях на кнопку, имеющую фокус, событие WM_NOTIFICATION_CLICKED не формируется! Приглядевшись, обратил внимание,
что после нажатия на кнопку она остается в нажатом состоянии wacko.gif

Прошу знатоков подсказать, что я не так делаю. В чем проблема - неправильное использование GUI или неправильный драйвер TouchScreen?

Код драйвера TouchScreen (4-выводной резистивный экран + SPI-АЦП):
CODE
void GUI_TOUCH_Exec(void)
{
int_fast8_t i;
tRawDataArray raw_data_x, raw_data_y;
GUI_PID_STATE state;
uint16_t x, y;
int16_t xMin, xMax;
int16_t yMin, yMax;


xMin = xyMinMax[GUI_COORD_X].Min;
xMax = xyMinMax[GUI_COORD_X].Max;
yMin = xyMinMax[GUI_COORD_Y].Min;
yMax = xyMinMax[GUI_COORD_Y].Max;

GUI_TOUCH_GetState(&state);

if (BSP_IS_TS_PRESSED() == true)
{
for (i = 0; i < 7; i++) // Take 7 readings of y-coord
{
raw_data_y[i] = Ssi_SerializeTsc(TSC_CHAN_YPOS | TSC_MODE_12BIT | TSC_REF_DF | TSC_INTREF_ON | TSC_PENIRQ_DISABLED) >> 8;
}
for (i = 0; i < 7; i++) // Take 7 readings of x-coord
{
raw_data_x[i] = Ssi_SerializeTsc(TSC_CHAN_XPOS | TSC_MODE_12BIT | TSC_REF_DF | TSC_INTREF_ON | TSC_PENIRQ_DISABLED) >> 8;
}
Ssi_SerializeTsc(TSC_CHAN_XPOS | TSC_MODE_8BIT | TSC_REF_DF | TSC_INTREF_OFF | TSC_PENIRQ_ENABLED); // Enable PEN IRQ


yPhys = _MAVF(raw_data_y); // Averaging (simplified median filter)
xPhys = _MAVF(raw_data_x); // Averaging (simplified median filter)


// Convert adc values into logical values
#if !GUI_TOUCH_SWAP_XY // Is X/Y swapped ?
x = xPhys;
y = yPhys;
#else
x = yPhys;
y = xPhys;
#endif
if ((x >= xMin) && (x <= xMax) && (y >= yMin) && (y <= yMax))
{
// Correct coordinates, storing them and set Pressed flag
state.x = _AD2X(x);
state.y = _AD2Y(y);
state.Pressed = 1;
}
}
else {
state.Pressed = 0;
}

GUI_TOUCH_StoreStateEx(&state);
}

AlexandrY
Вам нужны телепаты однако.
Все сигналы идут в GUI_X где юзер своими процедурами должен сам их разруливать под своей операционкой.
Harvester
Цитата(AlexandrY @ Jan 27 2011, 21:06) *
Все сигналы идут в GUI_X где юзер своими процедурами должен сам их разруливать под своей операционкой.

Причем здесь операционка? У меня вообще ее нет - WM_Exec() выполняется в бесконечном цикле.
Согласно документации для использования TouchScreen необходимо написать свою функцию GUI_TOUCH_Exec(), которая будет передавать состояние экрана, вызывая GUI_PID_StoreState(). Эта функция написана (см. пред. пост) и вызывается в прерывании с периодом 10 мс.
Проблема в том, что стандартный обработчик кнопок почему-то не отрабатывает отжатие.
Может надо еще что-то сделать? Буду признателен за любые предложения

Update:
Попробовал в своем драйвере не напрямую вызывать GUI_TOUCH_StoreStateEx, а через функцию _StoreUnstable() от стандартного драйвера аналогового экрана. Теперь кнопки работают нормально. Так что дело было в драйвере - буду изучать
AlexandrY
Цитата(Harvester @ Jan 28 2011, 08:13) *
Причем здесь операционка? У меня вообще ее нет - WM_Exec() выполняется в бесконечном цикле.
Согласно документации для использования TouchScreen необходимо написать свою функцию GUI_TOUCH_Exec(), ...


Ну так бы и сказали что работает с какой-то древней версией GUI.
В нынешней GUI функция GUI_TOUCH_Exec уже написана.


Harvester
Цитата(AlexandrY @ Jan 28 2011, 16:20) *
Ну так бы и сказали что работает с какой-то древней версией GUI.

Ну, не знаю насколько древней - 3.98. Последняя, исходники которой смог найти. Если подскажете, где найти более свежие исходники - буду весьма признателен.
Цитата(AlexandrY @ Jan 28 2011, 16:20) *
В нынешней GUI функция GUI_TOUCH_Exec уже написана.

В моей версии она тоже имеется, просто ее надо было доработать для использования драйвера тачскрина tsc2046
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.