1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using Antmicro.Renode.Peripherals.Network; 10 using System.Collections.Generic; 11 using Antmicro.Renode.Network; 12 using Antmicro.Renode.Core.Structure; 13 14 namespace Antmicro.Renode.Peripherals.USBDeprecated 15 { 16 public class USBEthernetControlModelDevice : USBEthernetControlModelDevicesSubclass, IUSBPeripheral, IMACInterface 17 { 18 public event Action <uint> SendInterrupt 19 { 20 add {} 21 remove {} 22 } 23 public event Action <uint> SendPacket 24 { 25 add {} 26 remove {} 27 } 28 USBEthernetControlModelDevice()29 public USBEthernetControlModelDevice() 30 { 31 } 32 Reset()33 public void Reset() 34 { 35 36 } 37 GetSpeed()38 public USBDeviceSpeed GetSpeed() 39 { 40 return USBDeviceSpeed.Low; 41 } 42 GetAddress()43 public uint GetAddress() 44 { 45 return 0; 46 } 47 #region IUSBDevice implementation ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)48 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket) 49 { 50 throw new System.NotImplementedException(); 51 } WriteInterrupt(USBPacket packet)52 public byte[] WriteInterrupt(USBPacket packet) 53 { 54 return null; 55 } GetDataBulk(USBPacket packet)56 public byte[] GetDataBulk(USBPacket packet) 57 { 58 return null; 59 } WriteDataBulk(USBPacket packet)60 public void WriteDataBulk(USBPacket packet) 61 { 62 63 } 64 WriteDataControl(USBPacket packet)65 public void WriteDataControl(USBPacket packet) 66 { 67 } GetTransferStatus()68 public byte GetTransferStatus() 69 { 70 return 0; 71 } GetDescriptor(USBPacket packet, USBSetupPacket setupPacket)72 public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket) 73 { 74 return null; 75 } GetDataControl(USBPacket packet)76 public byte[] GetDataControl(USBPacket packet) 77 { 78 return null; 79 } ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket)80 public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket) 81 { 82 throw new System.NotImplementedException(); 83 } 84 SetDataToggle(byte endpointNumber)85 public void SetDataToggle(byte endpointNumber) 86 { 87 throw new NotImplementedException(); 88 } 89 SetAddress(uint address)90 public void SetAddress(uint address) 91 { 92 throw new NotImplementedException(); 93 } 94 CleanDataToggle(byte endpointNumber)95 public void CleanDataToggle(byte endpointNumber) 96 { 97 throw new NotImplementedException(); 98 } 99 ToggleDataToggle(byte endpointNumber)100 public void ToggleDataToggle(byte endpointNumber) 101 { 102 throw new NotImplementedException(); 103 } 104 GetDataToggle(byte endpointNumber)105 public bool GetDataToggle(byte endpointNumber) 106 { 107 throw new NotImplementedException(); 108 } 109 ClearFeature(USBPacket packet, USBSetupPacket setupPacket)110 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket) 111 { 112 113 throw new System.NotImplementedException(); 114 } 115 GetConfiguration()116 public byte[] GetConfiguration() 117 { 118 119 throw new System.NotImplementedException(); 120 } 121 122 GetInterface(USBPacket packet, USBSetupPacket setupPacket)123 public byte[] GetInterface(USBPacket packet, USBSetupPacket setupPacket) 124 { 125 throw new System.NotImplementedException(); 126 } 127 GetStatus(USBPacket packet, USBSetupPacket setupPacket)128 public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket) 129 { 130 throw new System.NotImplementedException(); 131 } 132 SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)133 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket) 134 { 135 throw new System.NotImplementedException(); 136 } 137 SetDescriptor(USBPacket packet, USBSetupPacket setupPacket)138 public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket) 139 { 140 throw new System.NotImplementedException(); 141 } 142 SetFeature(USBPacket packet, USBSetupPacket setupPacket)143 public void SetFeature(USBPacket packet, USBSetupPacket setupPacket) 144 { 145 throw new System.NotImplementedException(); 146 } 147 SetInterface(USBPacket packet, USBSetupPacket setupPacket)148 public void SetInterface(USBPacket packet, USBSetupPacket setupPacket) 149 { 150 throw new System.NotImplementedException(); 151 } 152 SyncFrame(uint endpointId)153 public void SyncFrame(uint endpointId) 154 { 155 throw new System.NotImplementedException(); 156 } 157 WriteData(byte[] data)158 public void WriteData(byte[] data)//data from system 159 { 160 161 } 162 GetData()163 public byte[] GetData() 164 { 165 throw new System.NotImplementedException(); 166 } 167 #endregion 168 169 #region INetworkInterface implementation 170 #pragma warning disable 0067 171 public event Action<EthernetFrame> FrameReady; 172 #pragma warning restore 0067 173 public MACAddress MAC { get; set; } 174 ReceiveFrame(EthernetFrame frame)175 public void ReceiveFrame(EthernetFrame frame)//when data is send to us 176 { 177 throw new NotImplementedException(); 178 } 179 #endregion 180 181 182 #region standard USB descriptors 183 184 private EndpointUSBDescriptor[] endpointDescriptor; 185 private InterfaceUSBDescriptor[] interfaceDescriptor; 186 187 setEndpointsDescriptors()188 private void setEndpointsDescriptors() 189 { 190 endpointDescriptor = new EndpointUSBDescriptor[endpointsAmount]; 191 for(byte i=0; i<endpointsAmount; i++) 192 { 193 endpointDescriptor[i] = new EndpointUSBDescriptor(); 194 } 195 for(byte i=0; i<endpointsAmount; i++) 196 { 197 endpointDescriptor[i].EndpointNumber = i; 198 endpointDescriptor[i].MaxPacketSize = 512; 199 endpointDescriptor[i].SynchronizationType = EndpointUSBDescriptor.SynchronizationTypeEnum.Asynchronous; 200 endpointDescriptor[i].UsageType = EndpointUSBDescriptor.UsageTypeEnum.Data; 201 } 202 endpointDescriptor[2].MaxPacketSize = 16; 203 204 endpointDescriptor[0].InEnpoint = true; 205 endpointDescriptor[1].InEnpoint = false; 206 endpointDescriptor[2].InEnpoint = true; 207 208 endpointDescriptor[0].TransferType = EndpointUSBDescriptor.TransferTypeEnum.Bulk; 209 endpointDescriptor[1].TransferType = EndpointUSBDescriptor.TransferTypeEnum.Bulk; 210 endpointDescriptor[2].TransferType = EndpointUSBDescriptor.TransferTypeEnum.Interrupt; 211 212 } 213 setInterfaceDescriptors()214 private void setInterfaceDescriptors() 215 { 216 interfaceDescriptor = new InterfaceUSBDescriptor[interfacesAmount]; 217 for(int i=0; i<interfacesAmount; i++) 218 { 219 interfaceDescriptor[i] = new InterfaceUSBDescriptor(); 220 } 221 222 223 } 224 #endregion 225 #region class && subclass USB descriptors 226 /* private HeaderFunctionalDescriptor headerDescriptor = new HeaderFunctionalDescriptor () 227 { 228 Subtype = DeviceSubclassCode, 229 230 231 }; 232 private UnionFunctionalDescriptor unionDescriptor = new UnionFunctionalDescriptor (subordinateInterfaceAmount) 233 { 234 }; 235 private CountrySelectionFunctionalDescriptor countryDescriptor = new CountrySelectionFunctionalDescriptor (countryCodesAmount) 236 { 237 }; 238 private EthernetNetworkingFuncionalDescriptor ethernetNetworkingDescriptor = new EthernetNetworkingFuncionalDescriptor () 239 { 240 };*/ 241 242 #endregion 243 244 #region device constans 245 private const byte interfacesAmount = 0x01; 246 private const byte endpointsAmount = 0x03; 247 private const byte interval = 0x00; 248 private const byte subordinateInterfaceAmount = 0x01; 249 private const byte countryCodesAmount = 0x01; 250 private const byte defaultNumberOfMulticastAdreses = 0x01; 251 #endregion 252 253 #region Ethernet subclass nethods 254 255 protected Dictionary <byte,byte[]> MulticastMacAdresses; 256 initializeMulticastList()257 private void initializeMulticastList() 258 { 259 for(byte i = 0; i<defaultNumberOfMulticastAdreses; i++) 260 { 261 var mac = new byte[]{0,0,0,0,0,0}; 262 MulticastMacAdresses.Add(i, mac); 263 } 264 } 265 setEthernetMulticastFilters(uint numberOfFilters, Dictionary<byte,byte[]> multicastAdresses)266 private void setEthernetMulticastFilters(uint numberOfFilters, Dictionary<byte,byte[]> multicastAdresses) 267 { 268 269 for(byte i=0; i<numberOfFilters; i++) 270 { 271 if(MulticastMacAdresses.ContainsKey(i)) 272 {//if position 273 MulticastMacAdresses[i] = multicastAdresses[i]; 274 } 275 else 276 { 277 MulticastMacAdresses.Add(i, multicastAdresses[i]); 278 } 279 } 280 } 281 282 #endregion 283 284 #region IUSBDevice implementation ProcessVendorGet(USBPacket packet, USBSetupPacket setupPacket)285 public byte[] ProcessVendorGet(USBPacket packet, USBSetupPacket setupPacket) 286 { 287 throw new NotImplementedException(); 288 } 289 ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket)290 public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket) 291 { 292 throw new NotImplementedException(); 293 } 294 #endregion 295 } 296 } 297 298