www.pudn.com > SharpUSBlib20041208.zip > SISPMDriver.cs
using System;
using ICSharpCode.USBlib;
namespace TerraD
{
public class SISPMDriver : System.IDisposable
{
public static SISPMDriver Instance;
static SISPMDriver()
{
Instance = new SISPMDriver();
}
const int VENDOR_ID = 0x04B4;
const int PRODUCT_ID = 0xFD11;
const int SET_REQUESTTYPE = 0x21;
const int GET_REQUESTTYPE = 0xA1;
const int SET_REQUEST = 0x09;
const int GET_REQUEST = 0x01;
const int BUZZER_OUTLET = 0x01;
Device device;
byte GetOutletNumber(int outlet)
{
switch (outlet) {
case 0:
return 3;
case 1:
return 6;
case 2:
return 9;
case 3:
return 0xC;
}
return 0;
}
void CheckInitialization()
{
if (!IsInitialized) {
throw new SystemException();
}
}
SISPMDriver()
{
foreach (Bus bus in Bus.Busses) {
foreach (Descriptor descriptor in bus.Descriptors) {
if (descriptor.VendorId == VENDOR_ID &&
descriptor.ProductId == PRODUCT_ID) {
device = descriptor.OpenDevice();
return;
}
}
}
}
public void Dispose()
{
if (device != null) {
device.Dispose();
device = null;
}
}
~SISPMDriver()
{
Dispose();
}
public bool IsInitialized {
get {
return device != null;
}
}
public void SetBuzzerStatus(bool buzzerOn)
{
CheckInitialization();
device.SendControlMessage(SET_REQUESTTYPE,
SET_REQUEST,
(0x03 << 8) | BUZZER_OUTLET,
new byte[] {
BUZZER_OUTLET,
(byte)(buzzerOn ? 0x01 : 0x00)
}
);
}
public void SetSwitchStatus(int outlet, bool switchOn)
{
CheckInitialization();
byte outletnr = GetOutletNumber(outlet);
device.SendControlMessage(SET_REQUESTTYPE,
SET_REQUEST,
(0x03 << 8) | outletnr,
new byte[] {
outletnr,
(byte)(switchOn ? 0x03 : 0x00)
}
);
}
public bool GetSwitchStatus(int outlet)
{
CheckInitialization();
byte outletnr = GetOutletNumber(outlet);
byte[] buffer = new byte[] {
outletnr,
0x03
};
device.SendControlMessage(GET_REQUESTTYPE,
GET_REQUEST,
(0x03 << 8) | outletnr,
buffer
);
return buffer[1] != 0;
}
}
}