📄 controlcmdtab.cpp
字号:
/*----------------------------------------------------------------------------
* 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 + -