Мегаобучалка Главная | О нас | Обратная связь


Экологичность проекта. Утилизация отходов, возникающих при изготовлении печатных плат



2020-03-17 204 Обсуждений (0)
Экологичность проекта. Утилизация отходов, возникающих при изготовлении печатных плат 0.00 из 5.00 0 оценок




 

Эксплуатация разработанного устройства не оказывает отрицательного воздействия на окружающую среду. А вот процесс изготовления устройства включает в себя несколько стадий, представляющих опасность экологии, например, изготовление печатной платы и корпуса устройства. Утилизация устройства, как и любой бытовой техники, также представляет собой крайне трудоемкий процесс.

Изготовление печатной платы представляет собой создание токопроводящего покрытия на изоляционном основании в соответствии с рисунком печатного монтажа и склеивание отдельных слоев печатного монтажа.

Наиболее распространены следующие способы изготовления токопроводящих покрытий:

электрохимический: наносят тонкий слоя металла при помощи химического осаждения и наращивают его в электролитической ванне до нужной толщины;

фольгирование: лист медной фольги приклеивают к изоляционному основанию с одной или двух сторон.

Рисунок печатного монтажа может быть получен путем химического травления, фотохимическим способом или трафаретной печати. Травление происходит при помощи водного раствора технического хлорного железа. Процесс травления заканчивается промывкой платы в проточной воде.

Сточная вода предприятия-изготовителя печатных плат представляет опасность и должна подвергаться очистке. Для этого применяются отстойники и очистные установки различных конструкций. Также очистку можно проводить химическим методом – переводом растворимых солей железа и меди в нерастворимые и последующей фильтрацией.

Для очистки гальваностоков предприятия можно использовать очистные установки, предназначенные для очистки промывных вод и регенерации отработанных травильных растворов и электролитов. Данные установки способны выполнять очистку вод, загрязненных хромом, никелем, медью, цинком, оловом, железом и различными оксидами этих металлов.

Установка состоит из 4 узлов:

узел очистки промывных вод;

узел регенерации растворов электролитных ванн;

узел регенерации отработанных травильных растворов;

узел регенерации моющих и обезжиривающих растворов.

Промывные воды после предварительной механической очистки (фильтрации) поступают в мембранный модуль, где происходит концентрирование солей тяжелых металлов. После этого очищенная вода возвращается для повторного использования. Концентрат (концентрированный раствор солей тяжелых металлов) нейтрализуется химическим способом. Полученные гидрооксиды выпариваются и таким образом получают сульфиды и хлориды, которые утилизируются, и шлам, из которого получают лом цветных металлов.

Регенерированные рабочие электролиты идут на повторное использование, а отработанные моющие и обезжиривающие растворы подвергаются ультразвуковой очистке.

 

Выводы

 

Как видно из полученных результатов, для создания в помещении условий, наиболее благоприятных для максимальной производительности труда, требуется наличие кондиционера, который мог бы обеспечивать 30 м3/ час на одного человека.

В данном разделе были рассмотрены основные понятия вредных и опасных факторов влияющих на состояние здоровья оператора персонального компьютера. Так же были приведены меры и рекомендации по обеспечению безопасности на рабочем месте, и был произведен расчет вентиляции рабочего помещения.

Самым опасным инструментом оператора персонального компьютера является монитор, именно из-за несоблюдения правил установки оборудования и правил пользования мониторами, большая часть операторов страдает утомляемостью зрительных органов, что со временем очень часто приводит к ухудшению зрения.

 


Заключение

 

Результатом выполнения дипломного проекта является звуковое USB-устройство с поддержкой Bluetooth. Были рассмотрены современные микроконтроллеры с поддержкой USB и Bluetooth и интерфейсы, применяемые в микроконтроллерных и микропроцессорных системах. Детально рассмотрены микроконтроллер AT91SAM7SE256 и Bluetooth аудио модуль F2M03MLA, их возможности и сферы применения. Разработаны 2 шаблона драйвера для данного устройства.

Также были рассмотрены современные средства разработки компании Atmel, популярный проводной интерфейс USB и популярный беспроводной интерфейс Bluetooth.

Разработанное устройство отличается функциональностью и широкими возможностями по расширению этой функциональности, заложенными на начальном этапе проектирования и поддерживаемыми широкими аппаратными возможностями устройства. Тем самым заложена возможность дальнейшего развития проекта. Возможна модификация программной составляющей проекта, так и некоторая доработка аппаратной части, например поддержка MMC, SD или micro SD карт памяти.


Литература

 

1. Агуров П. В. Интерфейсы USB. Практика использования и программирования. – СПб.: БХВ-Петербург, 2004 г.

2. Агуров П. В. Последовательные интерфейсы ПК. Практика программирования. – СПб.: БХВ-Петербург, 2004 г.

3. Ан П. Сопряжение ПК с внешними устройствами. – Пер. с англ. – М.: ДМК Пресс, 2001 г.

4. Гребнев В. В. Микроконтроллеры семейства AVR фирмы Atmel. – М.: ИП РадиоСофт, 2002 г.

5. Стешенко В. Б. P-CAD. Технология проектирования печатных плат. – СПб.: БХВ-Петербург, 2003 г.

6. Фрунзе А. В. Микроконтроллеры? Это же просто! Т. 1. – М.: ООО “ИД Скимен”, 2002 г.

7. Фрунзе А. В. Микроконтроллеры? Это же просто! Т. 2. – М.: ООО “ИД Скимен”, 2002 г.

8. Фрунзе А. В. Микроконтроллеры? Это же просто! Т. 3. – М.: ООО “ИД Скимен”, 2003 г.

9. Lennart Yseboodt, Michael De Nil. EFSL - Embedded Filesystems Library - 0.3. 2005 г.

10. Олег Вальпа. Устройство флеш-памяти с USB интерфейсом. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2006 г, № 5, с. 56-59.

11. Олег Пушкарёв. Применение MMC-карт в микроконтроллерных системах. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2006 г, № 1, с. 46-49.

12. Дмитрий Тумайкин. Реализация интерфейса USB в микроконтроллерных устройствах. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2007 г, № 2, с. 34-37.

13. Дмитрий Чекунов. Практикум программиста USB-устройств. Часть 1. EZ-USB FX2LP – универсальное USB-решение. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2005 г, № 4, с. 70-77.

14. Дмитрий Чекунов. Практикум программиста USB-устройств. Часть 2. Разработка аппаратно-программного ядра USB-устройства. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2005 г, № 5, с. 66-73.

15. Дмитрий Чекунов. Практикум программиста USB-устройств. Часть 2. Разработка аппаратно-программного ядра USB-устройства. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2005 г, № 6, с. 66-74.

16. Дмитрий Чекунов. Практикум программиста USB-устройств. Часть 3. Расширение функций ядра USB-устройства. //СОВРЕМЕННАЯ ЭЛЕКТРОНИКА. – 2006 г, № 2, с. 70-77.

17. ГОСТ 2.104 – 68 Единая система конструкторской документации. Основные надписи. Введ. 01.01.71. – 9с. – Группа Т52.

18. ГОСТ 2.316-68 Единая система конструкторской документации. Правила нанесения на чертежах надписей, технических требований и таблиц. Введ. 01.01.71. – 7с. – Группа Т52.

19. ГОСТ 2.702-75 Единая система конструкторской документации. Правила выполнения электрических схем. Введ. 01.07.77. – 22с. – Группа Т52.

20. ГОСТ 2.605-68 Единая система конструкторской документации. Плакаты учебно-технические. Введ. 01.01.71. – 10с. – Группа Т52.

21. ГОСТ 2.759-82 Единая система конструкторской документации. Обозначения условные графические в схемах. Элементы аналоговой техники. Введ. 01.07.83. – 13с. – Группа Т52.

22. ГОСТ 12.0.004 – 90 ССБТ. Организация обучения безопасности труда. Введ. 01.07.91 – 14с. – Группа Т58.

23. ГОСТ 12.1.005 – 88 ССБТ. Общие санитарно-гигиенические требования к воздуху рабочей зоны. Введ. 01.01.89. – 49с. – Группа Т58.

24. СНиП 2.04.05-91 Строительные нормы и правила. Отопление, вентиляция и кондиционирование. Введ. 01.01.92. – 71с.

25. www.atmel.com.

26. www.bluetooth.org.

27. www.elcp.ru.

28. www.f2move.com.

29. www.maxim-ic.com.

30. www.micronas.com.

31. www.national.com.

32. www.samsung.com.

33. www.st.com.

34. www.vlsi.fi.

 


Приложение A

 

Текст программы

AT91UsbSounCard.cpp

// AT91UsbSounCard.cpp // Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)

// Requires Compuware's DriverWorks classes

#define VDW_MAIN

#include <vdw.h>

#include <kusb.h>

#include "AT91UsbSounCard.h"

#include "AT91UsbSounCardDevice.h"

#pragma hdrstop("AT91UsbSounCard.pch")

POOLTAG DefaultPoolTag('19TA');

KTrace t("AT91UsbSounCard");

#pragma code_seg("INIT")

DECLARE_DRIVER_CLASS(AT91UsbSounCard, NULL)

NTSTATUS AT91UsbSounCard::DriverEntry(PUNICODE_STRING RegistryPath){

t << "In DriverEntry\n";

KRegistryKey Params(RegistryPath, L"Parameters");// Open the "Parameters" key under the driver

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 AT91UsbSounCard::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 AT91UsbSounCard::AddDevice(PDEVICE_OBJECT Pdo){

t << "AddDevice called\n";

AT91UsbSounCardDevice * pDevice = new (

static_cast<PCWSTR>(KUnitizedName(L"AT91UsbSounCardDevice", m_Unit)),

FILE_DEVICE_UNKNOWN, NULL, 0, DO_DIRECT_IO | DO_POWER_PAGABLE )

AT91UsbSounCardDevice(Pdo, m_Unit);

if (pDevice == NULL){

t << "Error creating device AT91UsbSounCardDevice"<< (ULONG) m_Unit << EOL;

return STATUS_INSUFFICIENT_RESOURCES;}

NTSTATUS status = pDevice->ConstructorStatus();

if ( !NT_SUCCESS(status) ){

t << "Error constructing device AT91UsbSounCardDevice"

<< (ULONG) m_Unit << " status " << (ULONG) status << EOL;

delete pDevice;}

else{

m_Unit++;

pDevice->ReportNewDevicePowerState(PowerDeviceD0);}

return status;}

AT91UsbSounCard.h

// AT91UsbSounCard.h // Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)

// Requires Compuware's DriverWorks classes

#ifndef __AT91UsbSounCard_h__

#define __AT91UsbSounCard_h__

#define EOL "\n"

extern    KTrace  t;

class AT91UsbSounCard : 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 // __AT91UsbSounCard_h__

AT91UsbSounCardDevice.cpp

// AT91UsbSounCardDevice.cpp Implementation of AT91UsbSounCardDevice 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 "AT91UsbSounCardDeviceinterface.h"

#include "AT91UsbSounCard.h"

#include "AT91UsbSounCardDevice.h"

#pragma hdrstop("AT91UsbSounCard.pch")

extern KTrace t;// Global driver trace object

GUID AT91UsbSounCardDevice_Guid = AT91UsbSounCardDevice_CLASS_GUID;

AT91UsbSounCardDevice::AT91UsbSounCardDevice(PDEVICE_OBJECT Pdo, ULONG Unit) :

KPnpDevice(Pdo, &AT91UsbSounCardDevice_Guid){

t << "Entering AT91UsbSounCardDevice::AT91UsbSounCardDevice (constructor)\n";

if ( ! NT_SUCCESS(m_ConstructorStatus) )// Check constructor status

{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

);// Initialize each Pipe object

SetLowerDevice(&m_Lower);// Inform the base class of the lower edge device object

SetPnpPolicy();// Initialize the PnP Policy settings to the "standard" policy

SetPowerPolicy();// Initialize the Power Policy settings to the "standard" policy}

AT91UsbSounCardDevice::~AT91UsbSounCardDevice()

{t << "Entering AT91UsbSounCardDevice::~AT91UsbSounCardDevice() (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 AT91UsbSounCardDevice::DefaultPnp(KIrp I){

t << "Entering AT91UsbSounCardDevice::DefaultPnp with IRP minor function="

<< PNPMinorFunctionName(I.MinorFunction()) << EOL;

I.ForceReuseOfCurrentStackLocationInCalldown();

return m_Lower.PnpCall(this, I);}

NTSTATUS AT91UsbSounCardDevice::DefaultPower(KIrp I) {

t << "Entering AT91UsbSounCardDevice::DefaultPower\n";

I.IndicatePowerIrpProcessed();

I.CopyParametersDown();

return m_Lower.PnpPowerCall(this, I);}

NTSTATUS AT91UsbSounCardDevice::SystemControl(KIrp I){

t << "Entering AT91UsbSounCardDevice::SystemControl\n";

I.ForceReuseOfCurrentStackLocationInCalldown();

return m_Lower.PnpCall(this, I);}

NTSTATUS AT91UsbSounCardDevice::OnStartDevice(KIrp I){

t << "Entering AT91UsbSounCardDevice::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 AT91UsbSounCardDevice::OnStopDevice(KIrp I){

NTSTATUS status = STATUS_SUCCESS;

t << "Entering AT91UsbSounCardDevice::OnStopDevice\n";

m_Lower.DeActivateConfiguration();

return status;

UNREFERENCED_PARAMETER(I);}

NTSTATUS AT91UsbSounCardDevice::OnRemoveDevice(KIrp I){

t << "Entering AT91UsbSounCardDevice::OnRemoveDevice\n";

m_Lower.ReleaseResources();

return STATUS_SUCCESS;

UNREFERENCED_PARAMETER(I);}

NTSTATUS AT91UsbSounCardDevice::OnDevicePowerUp(KIrp I){

NTSTATUS status = STATUS_SUCCESS;

t << "Entering AT91UsbSounCardDevice::OnDevicePowerUp\n";

return status;

UNREFERENCED_PARAMETER(I);}

NTSTATUS AT91UsbSounCardDevice::OnDeviceSleep(KIrp I){

NTSTATUS status = STATUS_SUCCESS;

t << "Entering AT91UsbSounCardDevice::OnDeviceSleep\n";

return status;

UNREFERENCED_PARAMETER(I);}

NTSTATUS AT91UsbSounCardDevice::Create(KIrp I){

NTSTATUS status;

t << "Entering AT91UsbSounCardDevice::Create, " << I << EOL;

status = I.PnpComplete(this, STATUS_SUCCESS, IO_NO_INCREMENT);

t << "AT91UsbSounCardDevice::Create Status " << (ULONG)status << EOL;

return status;}

NTSTATUS AT91UsbSounCardDevice::Close(KIrp I){

NTSTATUS status;

t << "Entering AT91UsbSounCardDevice::Close, " << I << EOL;

status = I.PnpComplete(this, STATUS_SUCCESS, IO_NO_INCREMENT);

t << "AT91UsbSounCardDevice::Close Status " << (ULONG)status << EOL;

return status;}

NTSTATUS AT91UsbSounCardDevice::CleanUp(KIrp I){

t << "Entering CleanUp, " << I << EOL;

return I.PnpComplete(this, STATUS_SUCCESS);}

NTSTATUS AT91UsbSounCardDevice::Read(KIrp I){

t << "Entering AT91UsbSounCardDevice::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

PUCHAR pBuffer = (PUCHAR) Mem.VirtualAddress();// Use the memory object to create a pointer to the caller's buffer

ULONG dwTotalSize = I.ReadSize(CURRENT);   // Requested read size

ULONG dwBytesRead = 0; // Count of bytes read

I.Information() = dwBytesRead;

return I.PnpComplete(this, status);}

NTSTATUS AT91UsbSounCardDevice::Write(KIrp I){

t << "Entering AT91UsbSounCardDevice::Write, " << I << EOL;

if (FALSE)

{I.Information() = 0;// Invalid parameter in the Write request

return I.PnpComplete(this, STATUS_INVALID_PARAMETER);}

if (I.WriteSize() == 0)// Always ok to write 0 elements.

{I.Information() = 0;

return I.PnpComplete(this, STATUS_SUCCESS);}

NTSTATUS status            = STATUS_SUCCESS;

KMemory Mem(I.Mdl());// Declare a memory object

PUCHAR pBuffer    = (PUCHAR) Mem.VirtualAddress();// Use the memory object to create a pointer to the caller's buffer

ULONG dwTotalSize = I.WriteSize(CURRENT);

ULONG dwBytesSent = 0;

I.Information() = dwBytesSent;

return I.PnpComplete(this, status);}

NTSTATUS AT91UsbSounCardDevice::DeviceControl(KIrp I){

NTSTATUS status;

t << "Entering AT91UsbSounCardDevice::Device Control, " << I << EOL;

switch (I.IoctlCode())

{default:status = STATUS_INVALID_PARAMETER;// Unrecognized IOCTL request

break;}

if (status == STATUS_PENDING){return status;}

else{return I.PnpComplete(this, status);}}

AT91UsbSounCardDevice.h

// AT91UsbSounCardDevice.h // Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)

// Requires Compuware's DriverWorks classes

#ifndef __AT91UsbSounCardDevice_h__

#define __AT91UsbSounCardDevice_h__

class AT91UsbSounCardDevice : public KPnpDevice

{// Constructors

public:

SAFE_DESTRUCTORS;

AT91UsbSounCardDevice(PDEVICE_OBJECT Pdo, ULONG Unit);

~AT91UsbSounCardDevice();

// 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);

virtual NTSTATUS OnDevicePowerUp(KIrp I);

virtual NTSTATUS OnDeviceSleep(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:

// Unit number for this device (0-9)

ULONG                             m_Unit;

KUsbLowerDevice            m_Lower;

KUsbInterface m_Interface;};

#endif

interface.h

// interface.h - device interface classes for AT91UsbSounCard

// This GUID identifies the device interface class used by the AT91UsbSounCardDevice device

#define AT91UsbSounCardDevice_CLASS_GUID \

{ 0xb46f2426, 0x8406, 0x49bc, { 0xb6, 0xbd, 0xb4, 0x51, 0x40, 0xf1, 0xcc, 0x39 } }

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

AT91UsbSounCard.inf

[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]

AT91UsbSounCard_Files_Driver = 10,System32\Drivers

;--------- Manufacturer and Models Sections ----------------------------------

[Manufacturer]

%MfgName%=Mfg0

[Mfg0]

%DeviceDesc%=AT91UsbSounCard_DDI, USB\VID_FFF1&PID_FFF0

;---------- DDInstall Sections -----------------------------------------------

; --------- Windows 9X -----------------

; Experimentation has shown that DDInstall root names greater than 19 characters

; cause problems in Windows 98

[AT91UsbSounCard_DDI]

CopyFiles=AT91UsbSounCard_Files_Driver

AddReg=AT91UsbSounCard_9X_AddReg

[AT91UsbSounCard_9X_AddReg]

HKR,,DevLoader,,*ntkern

HKR,,NTMPDriver,,AT91UsbSounCard.sys

HKR, "Parameters", "BreakOnEntry", 0x00010001, 0

; --------- Windows NT -----------------

[AT91UsbSounCard_DDI.NT]

CopyFiles=AT91UsbSounCard_Files_Driver

AddReg=AT91UsbSounCard_NT_AddReg

[AT91UsbSounCard_DDI.NT.Services]

Addservice = AT91UsbSounCard, 0x00000002, AT91UsbSounCard_AddService

[AT91UsbSounCard_AddService]

DisplayName = %SvcDesc%

ServiceType = 1 ; SERVICE_KERNEL_DRIVER

StartType = 3 ; SERVICE_DEMAND_START

ErrorControl = 1 ; SERVICE_ERROR_NORMAL

ServiceBinary = %10%\System32\Drivers\AT91UsbSounCard.sys

[AT91UsbSounCard_NT_AddReg]

HKLM, "System\CurrentControlSet\Services\AT91UsbSounCard\Parameters",\

"BreakOnEntry", 0x00010001, 0

; --------- Files (common) -------------

[AT91UsbSounCard_Files_Driver]

AT91UsbSounCard.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"

AT91UsbMassStorage.cpp

// AT91UsbMassStorage.cpp // Generated by DriverWizard version DriverStudio 2.0.0 (Build 526)

// Requires Compuware's DriverWorks classes

#define VDW_MAIN

#include <vdw.h>

#include <kusb.h>

#include "AT91UsbMassStorage.h"

#include "AT91UsbMassStorageDevice.h"

#pragma hdrstop("AT91UsbMassStorage.pch")

POOLTAG DefaultPoolTag('19TA');

KTrace t("AT91UsbMassStorage");

// Begin INIT section

#pragma code_seg("INIT")

DECLARE_DRIVER_CLASS(AT91UsbMassStorage, NULL)

NTSTATUS AT91UsbMassStorage::DriverEntry(PUNICODE_STRING RegistryPath){

t << "In DriverEntry\n";

KRegistryKey Params(RegistryPath, L"Parameters");// Open the "Parameters" key under the driver

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"



2020-03-17 204 Обсуждений (0)
Экологичность проекта. Утилизация отходов, возникающих при изготовлении печатных плат 0.00 из 5.00 0 оценок









Обсуждение в статье: Экологичность проекта. Утилизация отходов, возникающих при изготовлении печатных плат

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (204)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.011 сек.)