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