Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 25. WoodmanUSB. Часть 3

Дмитрий Иванов, 09 Декабря 2013

Файлы к статье скачать
Имя: KA025.zip (ZIP архив)
Размер: 546 КБ

После того как мы освоили принципы работы с портом POPRTA модуля WoodmanUSB на примерах консольных программ, помоему, будет интересным написать программу под Windows с графическими элементами. Будем использовать MFC от Microsoft. Программу оформим в виде диалогового окна.

Создаем новый MFC проект в Microsoft Visual C++ 6.0, выбирая в меню пункт File -> New. В открывшемся окне указываем тип проекта MFC AppWizard(exe). В поле Location выберете место расположения проекта. В поле Project Name введите имя проекта, например TestWin. Нажимаем Ok.

программа для управления USB устройством

Запускается мастер построения приложения. На первом шаге на вопрос о типе приложения выбирете пункт Dialog Based. Нажимаем книпку Next.

На данном шаге все оставляем по умолчанию. Нажимаем книпку Next.

Здесь рекомендую поставить копку As a statically linked library. Поясню. Если Вы оставите все по умолчанию, то приложение будет использовать динамическое подключение библиотек MFC. Все бы хорошо, но если Вы перенесете такое приложение на компьютер где не установлены эти библиотеки (или Visual Studio) - оно не будет работать. Статическое подключение увеличивает размер exe файла, но теперь программа может быть запущена на любом компьютере, даже если на нем не уситановлены библиотека MFC. Нажимаем книпку Finish.

Давайте определимся, какие элементы управления нам будут необходимы. Во-первых, нам будет нужно открыть доступ к устройству. Поэтому добавим кнопку для открытия доступа к WoodmanUSB. Далее нам нужно установить маску воода-вывода. Соответственно, добавим окошко ввода для значения маски и кнопку для установки. Мы хотим проводить две операции с данным портом - записывать и читать данные. Значит, нужны еще два окошка ввода. В одно из них мы будем помещать данные для записи, в другое программа сама поместит результат чтения порта. И наконец, добавим еще две кнопки - одна для начала записи данных, другая для чтения.

Добавляем на форму необходимые элементы управления. Внешне окно оформленной программы может выглядеть например вот так:

Петерь зададим идентификаторы для окошек ввода-вывода. Нажимаем правую кнопку мыши над edit окном для маски ввода-вывода и в выпадающием списке выбираем пункт Propertis. Указываем ID например : IDC_IOMASK. Аналогично добавляем идентификаторы IDC_WRITE и IDC_READ для оставшихся окошек соответственно.

Далее нам необходимо создать переменные для улементов управления. Для этого выбирайте в главном меню пункт View - > ClassWizard. В открывшемся окне перейдите на вкладку Member Variables. В списке просмотра Control IDs показаны все идентификаторы для элементов управления использующихся в нашем диалоге. Будем создавать переменные только для окон редактирования. Для этого выбирайте нужный идентификатор и нажимайте кнопку Add Variable. Добавим перемнную для окошка IOMask.

Аналогично добавляем и для остальных edit-окошек. В результате должно получиться примерно вот так. Нажимаем Ok.

Продолжаем. Добавим обработчик для конопки открытия устройства. Дважды щелкаем на соответствующию кнопку на форме. Указываем имя функции, например вот так. Нажимаем Ok.

программа для управления USB устройством

Мы попадаем к заготовке функции. Добавляем в не следующих код:

void CTestWinDlg::OnOpen() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);

	int status = WUSB_Open();
	if(status == WUSB_ERROR)
	{		
		MessageBox("ERROR! Can`t open WodmanUSB device", "Info", MB_ICONERROR);		
	}
	else
	{
		MessageBox("Open OK", "Info", MB_ICONINFORMATION);		
	}
}

Незабудем вверху файла подключить заголовочный файл с описанием библиотеки:

........
static char THIS_FILE[] = __FILE__;
#endif

#include "WUSBdrv.h"  // Добавим заголовочный файл для библиотеки WUSBdrv

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
.......

Давайте рассмотрим этот код. Сначала вызывается стандартная функция UpdateData() с параметром true. Врезультате, данные размещенные в окошках воода будут помещены в ассоциированные с ними переменные. Далее вызывается известная нам функция WUSB_Open(). Затем анализируется результат работы функции и выводится соответствующее информационное сообщение.

Далее добавим обработчик на установку маски воода-вывода для порта PORTA. Рассмотрим код данной функции. Он довольно прост. Анализируем верность введенных данных и если все в порядке вызываем функцию WUSB_SetupPortA().

void CTestWinDlg::OnSetup() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);

	if(m_iomask < 0 || m_iomask > 255)
	{
		MessageBox("Bad IO_Mask value", "Info", MB_ICONERROR);
		return;
	}

	WUSB_SetupPortA(m_iomask);	
	MessageBox("IOMask was sucsesfully set", "Info", MB_ICONINFORMATION);	
}

Теперь напишем обработчик записи данных. Назовем функцию OnWrite(). Код также не сложен. Анализируем верность введенных данных и если все в порядке записываем данные порт с помощью функции WUSB_WritePortA().

void CWinWUSBDlg::OnWrite() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);

	if(m_write < 0 || m_write > 255)
	{
		MessageBox("Bad Write Data value", "Info", MB_ICONERROR);
		return;
	}

	WUSB_WritePortA(m_write);	
}

Ну и последний обработчик - обработчик чтения данных. Назовем его OnRead(): читаем данные из порта PORTA с помощью функции WUSB_ReadPortA() и помещаем прочтенный результат в соответствующее edit-окошко с помощью функции UpdateData() спараметром false.

void CWinWUSBDlg::OnRead() 
{
	// TODO: Add your control notification handler code here

	unsigned char byte = 0; 
	WUSB_ReadPortA(&byte);

	m_read = byte;
	UpdateData(false);	
}

Компилируем и запускаем. Подключаем модуль к шине USB. Нажимаем на нашем приложении кнопку Open WoodmanUSB. Надеюсь, что все в порядке и доступ к устройству был успешно выполнен.

Давайте потестируем запись данных. Подключите к порту PORTA необходимые светодиоды, чтобы можно было визуально наблюдать факт записи тех или иных данных. Устанавливаем необходимую маску ввода-вывода: если мы хотим все выводы порта настроить на выход указываем число 255. В окошко ввода для записи данных помещаем какое-либо число и нажимаем кнопку Write. При этом загоряться соответствующие светодиоды. Например, запишите число 255 - должны загореться все светодиоды.

Далее можно протестировать чтение данных из порта. Для этого например, соберите схему с одними только ключами, т.е. все линии порта будут использоваться как входные. Устанавливаем необходимую маску ввода-вывода: 0. Теперь нажимаем кнопку Read. При этом прочтенное число поместиться в соответствующее окошко ввода.


© Дмитрий Иванов
09 Декабря 2013 года
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2017