⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controlcmdtab.cpp

📁 基于ARM的应用Source6
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*----------------------------------------------------------------------------
 *  Copyright (c) 2001 by National Semiconductor Corporation
 *  National Semiconductor Corporation
 *  2900 Semiconductor Drive
 *  Santa Clara, California 95051
 *
 *  All rights reserved
 *
 *<<<-------------------------------------------------------------------------
 * File Contents:
 *	controlCmdTab.cpp - this class defines Request test GUI tab. The request settings
 *					    are received from the user and are transfered to the ControlFunc class
 *
 *  Project: USB Demo Application
 *  Author : Yan Nosovitsky
 *  Date   : Dec 2001
 *----------------------------------------------------------------------->>>*/
// controlCmdTab.cpp : implementation file
//

#include "stdafx.h"
#include "Demo.h"
#include "controlCmdTab.h"
#include "USBDriver.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


const CString ReqString[REQUEST_NUM] = 
	{
	"GET_CONFIGURATION",
	"GET_DESCRIPTOR",
	"GET_INTERFACE"
	};

const CString DescValString[DESC_VAL_NUM] =
	{
	"DEVICE",
	"CONFIGURATION",
	"STRING"
	};

/////////////////////////////////////////////////////////////////////////////
// controlCmdTab dialog


controlCmdTab::controlCmdTab(CWnd* pParent /*=NULL*/)
	: CDialog(controlCmdTab::IDD, pParent)
{
	//{{AFX_DATA_INIT(controlCmdTab)
	//}}AFX_DATA_INIT
	controlFunc = new ControlFunc();
}


void controlCmdTab::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(controlCmdTab)
	DDX_Control(pDX, IDC_REQUEST_TREE, m_requestTree);
	DDX_Control(pDX, IDC_DESC_TYPE_STATIC, m_descTypeStatic);
	DDX_Control(pDX, IDC_GO_BUTTON, m_goButton);
	DDX_Control(pDX, IDC_DESC_TYPE_COMBO, m_descTypeCombo);
	DDX_Control(pDX, IDC_DESC_INDEX_STATIC, m_descIndexStatic);
	DDX_Control(pDX, IDC_DESC_INDEX_COMBO, m_descIndexCombo);
	DDX_Control(pDX, IDC_VALUE_COMBO, m_valueCombo);
	DDX_Control(pDX, IDC_REQUEST_COMBO, m_requestCombo);
	DDX_Control(pDX, IDC_LENGTH_COMBO, m_lengthCombo);
	DDX_Control(pDX, IDC_INDEX_COMBO, m_indexCombo);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(controlCmdTab, CDialog)
	//{{AFX_MSG_MAP(controlCmdTab)
	ON_CBN_SELENDOK(IDC_REQUEST_COMBO, OnSelendokRequestCombo)
	ON_BN_CLICKED(IDC_GO_BUTTON, OnGoButton)
	ON_CBN_SELENDOK(IDC_DESC_INDEX_COMBO, OnSelendokDescIndexCombo)
	ON_CBN_SELENDOK(IDC_DESC_TYPE_COMBO, OnSelendokDescTypeCombo)
	ON_CBN_SELENDOK(IDC_INDEX_COMBO, OnSelendokIndexCombo)
	ON_CBN_SELENDOK(IDC_LENGTH_COMBO, OnSelendokLengthCombo)
	ON_CBN_SELENDOK(IDC_VALUE_COMBO, OnSelendokValueCombo)
	ON_COMMAND(IDCANCEL, OnCancel)
	ON_COMMAND(IDOK, OnOK)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// controlCmdTab message handlers

void controlCmdTab::OnSelendokRequestCombo() 
{
	int i;


	ReqType req = (ReqType)m_requestCombo.GetCurSel();
	
	m_valueCombo.ResetContent();
	m_lengthCombo.ResetContent();
	m_indexCombo.ResetContent();
	m_descIndexCombo.ResetContent();
	m_descTypeCombo.ResetContent();

	switch (req)
	{
	case GET_CONF:
	case GET_INT:
		m_descIndexCombo.ShowWindow(SW_HIDE);
		m_descIndexStatic.ShowWindow(SW_HIDE);
		m_descTypeCombo.ShowWindow(SW_HIDE);
		m_descTypeStatic.ShowWindow(SW_HIDE);
	
		if (req == GET_CONF)
		{
			curRequest = GET_CONFIGURATION;
			curReqType = DEV_TO_HOST_STAND_DEV;
		}
		else
		{
			curRequest = GET_INTERFACE;
			curReqType = DEV_TO_HOST_STAND_INT;
		}

		m_valueCombo.ShowWindow(SW_SHOW);
		m_valueCombo.AddString("0");
		m_valueCombo.SetCurSel(0);
		m_valueCombo.EnableWindow(FALSE);
		curwValue = 0;
		m_indexCombo.AddString("0");
		m_indexCombo.SetCurSel(0);
		m_indexCombo.EnableWindow(FALSE);
		curwIndex = 0;
		m_lengthCombo.AddString("1");
		m_lengthCombo.SetCurSel(0);
		m_lengthCombo.EnableWindow(FALSE);
		curwLength = 1;
		m_goButton.EnableWindow(TRUE);
		break;
	case GET_DESC:
		m_goButton.EnableWindow(FALSE);
		m_descIndexCombo.ShowWindow(SW_SHOW);
		m_descIndexStatic.ShowWindow(SW_SHOW);
		m_descTypeCombo.ShowWindow(SW_SHOW);
		m_descTypeStatic.ShowWindow(SW_SHOW);
		m_valueCombo.ShowWindow(SW_HIDE);
		m_descTypeCombo.EnableWindow(TRUE);
		curRequest = GET_DESCRIPTOR;
		curReqType = DEV_TO_HOST_STAND_DEV;
		for (i = 0; i< DESC_VAL_NUM; i++)
			m_descTypeCombo.AddString(DescValString[i]);

		break;
	}

}



void controlCmdTab::OnGoButton() 
{
	BYTE *buffer;
	int dataLength;

	USBDriver *curUSBDriver = USBDriver::GetUSBDriver();
	if (curUSBDriver->IsUSBDriverHaveError())
	{
		MessageBox(curUSBDriver->GetErrorDescriptor(),"Error",MB_ICONERROR | MB_OK);
		return;
	}

	if (curUSBDriver->IsBulkOutTestRun())
	{
		/* Bulk OUT test run */
		MessageBox("Cannot process current command.\nWait until Bulk OUT test is finished.","Error",MB_ICONERROR | MB_OK);
		return;
	}

	if ((buffer = (BYTE *)malloc(curwLength)) == NULL)
	{
		MessageBox("Cannot allocate memory for input buffer","Error",MB_ICONERROR | MB_OK);
		return;
	}			

	if ((dataLength = controlFunc->ProcessStandardRequest(curReqType,curRequest,curwValue,curwIndex,curwLength,buffer))==0xffffffff)
	{
		MessageBox("Cannot process current command.\nPlease check USB connection.","Error",MB_ICONERROR | MB_OK);
		free(buffer);
		return;
	}

	m_requestTree.DeleteAllItems();
	CString field;
	HTREEITEM hDesc;
	switch (curRequest)
	{
	case GET_DESCRIPTOR:
		switch ((curwValue & 0xff00)>>8)
		{
		case DEVICE:
	//		font = m_requestTree.GetFont();
			{
			hDesc = m_requestTree.InsertItem("Device Descriptor",TVI_ROOT);
			if (dataLength < sizeof(USB_device_desc_t))
			{
				m_requestTree.InsertItem("Data size less then size of device Descriptor",hDesc);
				break;
			}
			USB_device_desc_t* deviceDesc = (USB_device_desc_t *)buffer;
			field.Format(_T("bLength.....%d"),deviceDesc->bLength);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bDescriptorType.....%d"),deviceDesc->bDescriptorType);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bcdUSB.....%d"),deviceDesc->bcdUSB);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bDeviceClass.....%d"),deviceDesc->bDeviceClass);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bDeviceSubClass.....%d"),deviceDesc->bDeviceSubClass);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bDeviceProtocol.....%d"),deviceDesc->bDeviceProtocol);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bMaxPacketSize.....%d"),deviceDesc->bMaxPacketSize);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("idVendor.....%d"),deviceDesc->idVendor);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("idProduct.....%d"),deviceDesc->idProduct);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bcdDevice.....%d"),deviceDesc->bcdDevice);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("iManufacturer.....%d"),deviceDesc->iManufacturer);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("iProduct.....%d"),deviceDesc->iProduct);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("iSerialNumber.....%d"),deviceDesc->iSerialNumber);
			m_requestTree.InsertItem(field,hDesc);
			field.Format(_T("bNumConfigs.....%d"),deviceDesc->bNumConfigs);
			m_requestTree.InsertItem(field,hDesc);
			break;
			}
		case CONFIGURATION:
			{
				/* Print Configuration Descriptor */
			hDesc = m_requestTree.InsertItem("Configuration Descriptor",TVI_ROOT);
			if (dataLength < SIZEOF_USB_CONF_DESC)
			{
				m_requestTree.InsertItem("Data length less then size of Config. Descriptor",hDesc);
				break;
			}
			USB_config_desc_t* configDesc = (USB_config_desc_t *)buffer;
			buffer += configDesc->bLength;
			dataLength -= configDesc->bLength;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -