Комбинированное звуковое USB-устройство с функциями автономного MP3-плеера и поддержкой Bluetooth
Обзор мультимедиа-устройств с поддержкой USB и Bluetooth. Разработка структурной и функциональной схем устройства. Возможности его аппаратной модернизации. Разработка печатной платы устройства. Расчет схемы подключения питания и USB входа к AT91SAM7SE.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 18.06.2010 |
Размер файла | 749,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
if ( NT_SUCCESS(Params.LastError()) )
{#if DBG
ULONG bBreakOnEntry = FALSE;
Params.QueryValue(L"BreakOnEntry", &bBreakOnEntry);// Read "BreakOnEntry" value from registry
if (bBreakOnEntry) DbgBreakPoint();// If requested, break into debugger
#endif
LoadRegistryParameters(Params);// Load driver data members from the registry}
m_Unit = 0;
return STATUS_SUCCESS;}
void AT91UsbMassStorage::LoadRegistryParameters(KRegistryKey &Params){
m_bBreakOnEntry = FALSE;
Params.QueryValue(L"BreakOnEntry", &m_bBreakOnEntry);
t << "m_bBreakOnEntry loaded from registry, resulting value: [" << m_bBreakOnEntry << "]\n";}
// End INIT section
#pragma code_seg()
NTSTATUS AT91UsbMassStorage::AddDevice(PDEVICE_OBJECT Pdo){
t << "AddDevice called\n";
AT91UsbMassStorageDevice * pDevice = new (
static_cast<PCWSTR>(KUnitizedName(L"AT91UsbMassStorageDevice", m_Unit)),
FILE_DEVICE_UNKNOWN,
NULL,
0,
DO_DIRECT_IO)
AT91UsbMassStorageDevice(Pdo, m_Unit);
if (pDevice == NULL){
t << "Error creating device AT91UsbMassStorageDevice"
<< (ULONG) m_Unit << EOL;
return STATUS_INSUFFICIENT_RESOURCES;}
NTSTATUS status = pDevice->ConstructorStatus();
if ( !NT_SUCCESS(status) ){
t << "Error constructing device AT91UsbMassStorageDevice"
<< (ULONG) m_Unit << " status " << (ULONG) status << EOL;
delete pDevice;}
else{m_Unit++;}
return status;}
AT91UsbMassStorage.h
// AT91UsbMassStorage.h // Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)
// Requires Compuware's DriverWorks classes
#ifndef __AT91UsbMassStorage_h__
#define __AT91UsbMassStorage_h__
#define EOL "\n"
extern Trace t; // Global driver trace object
class AT91UsbMassStorage : public KDriver{
SAFE_DESTRUCTORS
public:
virtual NTSTATUS DriverEntry(PUNICODE_STRING RegistryPath);
virtual NTSTATUS AddDevice(PDEVICE_OBJECT Pdo);
void LoadRegistryParameters(KRegistryKey &Params);
int m_Unit;
// The following data members are loaded from the registry during DriverEntry
ULONG m_bBreakOnEntry;};
#endif // __AT91UsbMassStorage_h__
AT91UsbMassStorageDevice.cpp
// AT91UsbMassStorageDevice.cpp // Implementation of AT91UsbMassStorageDevice device class
// Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)
// Requires Compuware's DriverWorks classes
#pragma warning(disable:4065) // Allow switch statement with no cases
#include <vdw.h>
#include <kusb.h>
#include "..\AT91UsbMassStorageDeviceinterface.h"
#include "AT91UsbMassStorage.h"
#include "AT91UsbMassStorageDevice.h"
#pragma hdrstop("AT91UsbMassStorage.pch")
extern KTrace t; // Global driver trace object
GUID AT91UsbMassStorageDevice_Guid = AT91UsbMassStorageDevice_CLASS_GUID;
AT91UsbMassStorageDevice::AT91UsbMassStorageDevice(PDEVICE_OBJECT Pdo, ULONG Unit) :
KPnpDevice(Pdo, &AT91UsbMassStorageDevice_Guid){
t << "Entering AT91UsbMassStorageDevice::AT91UsbMassStorageDevice (constructor)\n";
// Check constructor status
if ( ! NT_SUCCESS(m_ConstructorStatus) ){return;}
m_Unit = Unit;// Remember our unit number
m_Lower.Initialize(this, Pdo);// Initialize the lower device
m_Interface.Initialize(
m_Lower, //KUsbLowerDevice
0, //InterfaceNumber
1, //ConfigurationValue
0 //Initial Interface Alternate Setting);
SetLowerDevice(&m_Lower);
SetPnpPolicy();}
AT91UsbMassStorageDevice::~AT91UsbMassStorageDevice()
{t << "Entering AT91UsbMassStorageDevice::~AT91UsbMassStorageDevice() (destructor)\n";}
char *PNPMinorFunctionName(ULONG mn){
static char* minors[] = {
"IRP_MN_START_DEVICE",
"IRP_MN_QUERY_REMOVE_DEVICE",
"IRP_MN_REMOVE_DEVICE",
"IRP_MN_CANCEL_REMOVE_DEVICE",
"IRP_MN_STOP_DEVICE",
"IRP_MN_QUERY_STOP_DEVICE",
"IRP_MN_CANCEL_STOP_DEVICE",
"IRP_MN_QUERY_DEVICE_RELATIONS",
"IRP_MN_QUERY_INTERFACE",
"IRP_MN_QUERY_CAPABILITIES",
"IRP_MN_QUERY_RESOURCES",
"IRP_MN_QUERY_RESOURCE_REQUIREMENTS",
"IRP_MN_QUERY_DEVICE_TEXT",
"IRP_MN_FILTER_RESOURCE_REQUIREMENTS",
"<unknown minor function>",
"IRP_MN_READ_CONFIG",
"IRP_MN_WRITE_CONFIG",
"IRP_MN_EJECT",
"IRP_MN_SET_LOCK",
"IRP_MN_QUERY_ID",
"IRP_MN_QUERY_PNP_DEVICE_STATE",
"IRP_MN_QUERY_BUS_INFORMATION",
"IRP_MN_DEVICE_USAGE_NOTIFICATION",
"IRP_MN_SURPRISE_REMOVAL"};
if (mn > IRP_MN_SURPRISE_REMOVAL)return "<unknown minor function>";
else return minors[mn];}
NTSTATUS AT91UsbMassStorageDevice::DefaultPnp(KIrp I){
t << "Entering AT91UsbMassStorageDevice::DefaultPnp with IRP minor function="
<< PNPMinorFunctionName(I.MinorFunction()) << EOL;
I.ForceReuseOfCurrentStackLocationInCalldown();
return m_Lower.PnpCall(this, I);}
NTSTATUS AT91UsbMassStorageDevice::DefaultPower(KIrp I){
t << "Entering AT91UsbMassStorageDevice::DefaultPower\n";
I.IndicatePowerIrpProcessed();
I.CopyParametersDown();
return m_Lower.PnpPowerCall(this, I);}
NTSTATUS AT91UsbMassStorageDevice::SystemControl(KIrp I){
t << "Entering AT91UsbMassStorageDevice::SystemControl\n";
I.ForceReuseOfCurrentStackLocationInCalldown();
return m_Lower.PnpCall(this, I);}
NTSTATUS AT91UsbMassStorageDevice::OnStartDevice(KIrp I){
t << "Entering AT91UsbMassStorageDevice::OnStartDevice\n";
NTSTATUS status = STATUS_UNSUCCESSFUL;
AC_STATUS acStatus = AC_SUCCESS;
I.Information() = 0;
acStatus = m_Lower.ActivateConfiguration(1);// ConfigurationValue 1 (the first configuration)
switch (acStatus){
case AC_SUCCESS:t << "USB Configuration OK\n";
status = STATUS_SUCCESS;break;
case AC_COULD_NOT_LOCATE_INTERFACE:t << "Could not locate interface\n";break;
case AC_COULD_NOT_PRECONFIGURE_INTERFACE:
t << "Could not get configuration descriptor\n";break;
case AC_CONFIGURATION_REQUEST_FAILED:
t << "Board did not accept configuration URB\n";break;
case AC_FAILED_TO_INITIALIZE_INTERFACE_OBJECT:
t << "Failed to initialize interface object\n";break;
case AC_FAILED_TO_GET_DESCRIPTOR:t << "Failed to get device descriptor\n";break;
case AC_FAILED_TO_OPEN_PIPE_OBJECT:status = STATUS_SUCCESS;
t << "Failed to open pipe object\n";break;
default:t << "Unexpected error activating USB configuration\n";break;}
return status; // base class completes the IRP}
NTSTATUS AT91UsbMassStorageDevice::OnStopDevice(KIrp I){
NTSTATUS status = STATUS_SUCCESS;
t << "Entering AT91UsbMassStorageDevice::OnStopDevice\n";
m_Lower.DeActivateConfiguration();
return status;
UNREFERENCED_PARAMETER(I);}
NTSTATUS AT91UsbMassStorageDevice::OnRemoveDevice(KIrp I){
t << "Entering AT91UsbMassStorageDevice::OnRemoveDevice\n";
// Device removed, release the system resources used by the USB lower device.
m_Lower.ReleaseResources();
return STATUS_SUCCESS;
UNREFERENCED_PARAMETER(I);}
NTSTATUS AT91UsbMassStorageDevice::Create(KIrp I){
NTSTATUS status;
t << "Entering AT91UsbMassStorageDevice::Create, " << I << EOL;
status = I.PnpComplete(this, STATUS_SUCCESS, IO_NO_INCREMENT);
t << "AT91UsbMassStorageDevice::Create Status " << (ULONG)status << EOL;
return status;}
NTSTATUS AT91UsbMassStorageDevice::Close(KIrp I){
NTSTATUS status;
t << "Entering AT91UsbMassStorageDevice::Close, " << I << EOL;
status = I.PnpComplete(this, STATUS_SUCCESS, IO_NO_INCREMENT);
t << "AT91UsbMassStorageDevice::Close Status " << (ULONG)status << EOL;
return status;}
NTSTATUS AT91UsbMassStorageDevice::CleanUp(KIrp I){
t << "Entering CleanUp, " << I << EOL;
return I.PnpComplete(this, STATUS_SUCCESS);}
NTSTATUS AT91UsbMassStorageDevice::Read(KIrp I){
t << "Entering AT91UsbMassStorageDevice::Read, " << I << EOL;
if (FALSE) // If (Request is invalid)
{I.Information() = 0;// Invalid parameter in the Read request
return I.PnpComplete(this, STATUS_INVALID_PARAMETER);}
if (I.ReadSize() == 0)// Always ok to read 0 elements.
{I.Information() = 0;
return I.PnpComplete(this, STATUS_SUCCESS);}
NTSTATUS status = STATUS_SUCCESS;
KMemory Mem(I.Mdl()); // Declare a memory object
// Use the memory object to create a pointer to the caller's buffer
PUCHAR pBuffer = (PUCHAR) Mem.VirtualAddress();
ULONG dwTotalSize = I.ReadSize(CURRENT); // Requested read size
ULONG dwBytesRead = 0; // Count of bytes read
I.Information() = dwBytesRead;
return I.PnpComplete(this, status);}
NTSTATUS AT91UsbMassStorageDevice::Write(KIrp I){
t << "Entering AT91UsbMassStorageDevice::Write, " << I << EOL;
if (FALSE){
// Invalid parameter in the Write request
I.Information() = 0;
return I.PnpComplete(this, STATUS_INVALID_PARAMETER);}
// Always ok to write 0 elements.
if (I.WriteSize() == 0){
I.Information() = 0;
return I.PnpComplete(this, STATUS_SUCCESS);}
NTSTATUS status = STATUS_SUCCESS;
KMemory Mem(I.Mdl()); // Declare a memory object
// Use the memory object to create a pointer to the caller's buffer
PUCHAR pBuffer = (PUCHAR) Mem.VirtualAddress();
ULONG dwTotalSize = I.WriteSize(CURRENT);
ULONG dwBytesSent = 0;
I.Information() = dwBytesSent;
return I.PnpComplete(this, status);}
NTSTATUS AT91UsbMassStorageDevice::DeviceControl(KIrp I){
NTSTATUS status;
t << "Entering AT91UsbMassStorageDevice::Device Control, " << I << EOL;
switch (I.IoctlCode()){
default:
// Unrecognized IOCTL request
status = STATUS_INVALID_PARAMETER;
break;}
if (status == STATUS_PENDING){return status;}
else{return I.PnpComplete(this, status);}}
AT91UsbMassStorageDevice.h
// AT91UsbMassStorageDevice.h
// Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)
// Requires Compuware's DriverWorks classes
#ifndef __AT91UsbMassStorageDevice_h__
#define __AT91UsbMassStorageDevice_h__
class AT91UsbMassStorageDevice : public KPnpDevice
{// Constructors
public:
SAFE_DESTRUCTORS;
AT91UsbMassStorageDevice(PDEVICE_OBJECT Pdo, ULONG Unit);
~AT91UsbMassStorageDevice();
// Member Functions
public:
DEVMEMBER_DISPATCHERS
virtual NTSTATUS OnStartDevice(KIrp I);
virtual NTSTATUS OnStopDevice(KIrp I);
virtual NTSTATUS OnRemoveDevice(KIrp I);
virtual NTSTATUS DefaultPnp(KIrp I);
virtual NTSTATUS DefaultPower(KIrp I);
#ifdef _COMMENT_ONLY
virtual NTSTATUS CleanUp(KIrp I); // COMMENT_ONLY
virtual NTSTATUS Create(KIrp I); // COMMENT_ONLY
virtual NTSTATUS Close(KIrp I); // COMMENT_ONLY
virtual NTSTATUS DeviceControl(KIrp I); // COMMENT_ONLY
virtual NTSTATUS SystemControl(KIrp I); // COMMENT_ONLY
virtual NTSTATUS Read(KIrp I); // COMMENT_ONLY
virtual NTSTATUS Write(KIrp I); // COMMENT_ONLY
#endif
// Member Data
protected:
ULONG m_Unit;
KUsbLowerDevice m_Lower;
KUsbInterface m_Interface;};
#endif
interface.h
// interface.h - device interface classes for AT91UsbMassStorage
#define AT91UsbMassStorageDevice_CLASS_GUID \
{ 0x636be6b4, 0x408c, 0x4b38, { 0x93, 0x4e, 0xac, 0xf3, 0x75, 0x71, 0xff, 0x9d } }
function.h
// function.h // This file controls which driver functions are enabled.
#ifndef __function_h__
#define __function_h__
#define DRIVER_FUNCTION_CREATE
#define DRIVER_FUNCTION_CLOSE
#define DRIVER_FUNCTION_DEVICE_CONTROL
#define DRIVER_FUNCTION_READ
#define DRIVER_FUNCTION_WRITE
#define DRIVER_FUNCTION_ADD_DEVICE
#define DRIVER_FUNCTION_PNP
#define DRIVER_FUNCTION_POWER
#define DRIVER_FUNCTION_SYSTEM_CONTROL
#define DRIVER_FUNCTION_UNLOAD
#define DRIVER_FUNCTION_CLEANUP
#endif
AT91UsbMassStorage.inf
;--------- Version Section ---------------------------------------------------
[Version]
Signature="$Windows 95$"
Provider=%ProviderName%
Class=NewDeviceClass
ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b}
; 9X Style
[ClassInstall]
Addreg=Class_AddReg
; NT Style
[ClassInstall32]
Addreg=Class_AddReg
[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-18"
;--------- DestinationDirs Section -------------------------------------------
[DestinationDirs]
AT91UsbMassStorage_Files_Driver = 10,System32\Drivers
;--------- Manufacturer and Models Sections ----------------------------------
[Manufacturer]
%MfgName%=Mfg0
[Mfg0]
%DeviceDesc%=AT91UsbMassStorage_DDI, USB\VID_FFF2&PID_FFF1
;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------
; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98
[AT91UsbMassStorage_DDI]
CopyFiles=AT91UsbMassStorage_Files_Driver
AddReg=AT91UsbMassStorage_9X_AddReg
[AT91UsbMassStorage_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,AT91UsbMassStorage.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0
; --------- Windows NT -----------------
[AT91UsbMassStorage_DDI.NT]
CopyFiles=AT91UsbMassStorage_Files_Driver
AddReg=AT91UsbMassStorage_NT_AddReg
[AT91UsbMassStorage_DDI.NT.Services]
Addservice = AT91UsbMassStorage, 0x00000002, AT91UsbMassStorage_AddService
[AT91UsbMassStorage_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\AT91UsbMassStorage.sys
[AT91UsbMassStorage_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\AT91UsbMassStorage\Parameters",\
"BreakOnEntry", 0x00010001, 0
; --------- Files (common) -------------
[AT91UsbMassStorage_Files_Driver]
AT91UsbMassStorage.sys
;--------- Strings Section ---------------------------------------------------
[Strings]
ProviderName="Your Company Name here"
MfgName="Name of HW Manufacturer here"
DeviceDesc="Description of Device here"
DeviceClassName="Description of Device class here"
SvcDesc="Description of NT service here"
Подобные документы
Новые сетевые технологии мобильных устройств на примере планшетов. Пути общения между людьми. Связь с помощью мобильного устройства на примере планшета. Основные сетевые технологии и схемы подключения. Сравнительные характеристики Bluetooth и NFC.
реферат [1,7 M], добавлен 03.10.2014Разработка структурной и функциональной схем устройства, в основе которой лежит аналого-цифровой преобразователь. Выбор и обоснование элементной базы для реализации устройства, разработка конструкции. Расчеты, подтверждающие работоспособность схемы.
курсовая работа [656,0 K], добавлен 05.12.2012Классификация и основные определения периферийных устройств. Устройства ввода и вывода информации, памяти, мультимедиа, связи, защиты электропитания. Интерфейсы подключения периферийных устройств. Рекомендации и правила эксплуатации компьютерной техники.
курсовая работа [582,1 K], добавлен 06.09.2014Разработка структурной и принципиальной схемы. Блок-схема основной программы и подпрограмм обработки прерываний. Имена переменных, используемых в них. Результаты моделирования работы устройства в программе ISIS пакета Рroteus. Разработка печатной платы.
курсовая работа [1,5 M], добавлен 13.11.2016Bluetooth - производственная спецификация беспроводных персональных сетей: принцип действия, устойчивость к широкополосным помехам, схемы кодирования. Технология обмена информацией между ПК и мобильными телефонами на доступной частоте для ближней связи.
лекция [183,6 K], добавлен 15.04.2014Разработка структурной схемы устройства управления учебным роботом. Выбор двигателя, микроконтроллера, микросхемы, интерфейса связи и стабилизатора. Расчет схемы электрической принципиальной. Разработка сборочного чертежа устройства и алгоритма программы.
курсовая работа [577,8 K], добавлен 24.06.2013Наименование разрабатываемого устройства. Назначение разрабатываемого устройства в городском транспорте. Обзорный анализ найденных аналогов. Обоснование актуальности разработки устройства. Разработка функциональной схемы разрабатываемого устройства.
курсовая работа [175,6 K], добавлен 04.07.2008Анализ выбора цифрового сигнального процессора и структурной схемы устройства обработки информации. Расчет надежности устройства и производительности обмена данных, разработка ленточного графика. Обзор особенностей радиального и межмодульного интерфейса.
дипломная работа [1,8 M], добавлен 20.05.2012Беспроводный метод передачи данных bluetooth, выделение его основных свойств, преимуществ и принципов работы. Технические аспекты и набор базовых протоколов технологии bluetooth, основные направления применения технологии и характеристика конкурентов.
реферат [1,3 M], добавлен 19.11.2014Сравнительный анализ существующих приборов. Разработка функциональной схемы устройства. Выбор и статистический расчет элементов, входящих в систему: датчика, источник тока, усилителя, микроконтроллера, блок питания. Блок-схема управляющей программы.
курсовая работа [769,9 K], добавлен 12.01.2015