Комбинированное звуковое 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.2016

  • Bluetooth - производственная спецификация беспроводных персональных сетей: принцип действия, устойчивость к широкополосным помехам, схемы кодирования. Технология обмена информацией между ПК и мобильными телефонами на доступной частоте для ближней связи.

    лекция [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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.