Driver for USB Ethernet Control Model devices
Copyright (C) 2008 Michael Lotz <mmlr@mlotz.ch>
Distributed under the terms of the MIT license.
*/
#ifndef _USB_ECM_DEVICE_H_
#define _USB_ECM_DEVICE_H_
#include "Driver.h"
class ECMDevice {
public:
ECMDevice(usb_device device);
~ECMDevice();
status_t InitCheck() { return fStatus; };
status_t Open();
bool IsOpen() { return fOpen; };
status_t Close();
status_t Free();
status_t Read(uint8 *buffer, size_t *numBytes);
status_t Write(const uint8 *buffer, size_t *numBytes);
status_t Control(uint32 op, void *buffer, size_t length);
void Removed();
bool IsRemoved() { return fRemoved; };
status_t CompareAndReattach(usb_device device);
private:
static void _ReadCallback(void *cookie, int32 status,
void *data, size_t actualLength);
static void _WriteCallback(void *cookie, int32 status,
void *data, size_t actualLength);
static void _NotifyCallback(void *cookie, int32 status,
void *data, size_t actualLength);
status_t _SetupDevice();
status_t _ReadMACAddress(usb_device device, uint8 *buffer);
status_t fStatus;
bool fOpen;
bool fRemoved;
int32 fInsideNotify;
usb_device fDevice;
uint16 fVendorID;
uint16 fProductID;
uint8 fControlInterfaceIndex;
uint8 fDataInterfaceIndex;
uint8 fMACAddressIndex;
uint16 fMaxSegmentSize;
usb_pipe fNotifyEndpoint;
usb_pipe fReadEndpoint;
usb_pipe fWriteEndpoint;
uint32 fActualLengthRead;
uint32 fActualLengthWrite;
int32 fStatusRead;
int32 fStatusWrite;
sem_id fNotifyReadSem;
sem_id fNotifyWriteSem;
uint8 * fNotifyBuffer;
uint32 fNotifyBufferLength;
sem_id fLinkStateChangeSem;
uint8 fMACAddress[6];
bool fHasConnection;
uint32 fDownstreamSpeed;
uint32 fUpstreamSpeed;
};
#endif