/* * PROJECT: Aura Operating System Development * CONTENT: Abstract Network Device Class * PROGRAMMERS: Valentin Charbonnier * Port of Cosmos Code. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using Cosmos.HAL.Network; namespace Cosmos.HAL { public delegate void DataReceivedHandler(byte[] packetData); public enum CardType { Ethernet, Wireless } public abstract class NetworkDevice { public static List Devices { get; private set; } public static NetworkDevice GetDeviceByName(string nameID) { foreach (var device in Devices) { if (device.NameID == nameID) { return device; } } return null; } static NetworkDevice() { Devices = new List(); } public DataReceivedHandler DataReceived; protected NetworkDevice() { //mType = DeviceType.Network; Devices.Add(this); } public abstract CardType CardType { get; } public abstract MACAddress MACAddress { get; } public string NameID { get; set; } public abstract string Name { get; } public abstract bool Ready { get; } /// /// Add bytes to the transmit buffer queue. /// /// bytes array to queue. /// TRUE on success. /// Thrown on memory error. /// Thrown if buffer length is bigger than Int32.MaxValue. public virtual bool QueueBytes(byte[] buffer) { return QueueBytes(buffer, 0, buffer.Length); } /// /// Add bytes to the transmit buffer queue. /// /// bytes array to queue. /// Offset of the data in the buffer. /// Data length. /// TRUE on success. /// Thrown on memory error. /// Thrown if length is bigger than Int32.MaxValue. public abstract bool QueueBytes(byte[] buffer, int offset, int length); public abstract bool ReceiveBytes(byte[] buffer, int offset, int max); public abstract byte[] ReceivePacket(); public abstract int BytesAvailable(); public abstract bool Enable(); public abstract bool IsSendBufferFull(); public abstract bool IsReceiveBufferFull(); } }