public byte[] WriteInterrupt(USBPacket packet) { if(linkUp == false) { linkUp = true; packet.data = new byte[4]; packet.data[0] = 0x00; packet.data[1] = 0x80; packet.data[2] = 0x00; packet.data[3] = 0x00; return packet.data; } else return null; }
public byte[] ProcessVendorGet(USBPacket packet, USBSetupPacket setupPacket) { ushort index = setupPacket.index; byte request = setupPacket.request; ushort value = setupPacket.value; if (request == (byte)vendorRequest.ReadRegister) { switch ((SCSR)index) { case SCSR.MACAddressLo: break; case SCSR.MACAddressHi: break; case SCSR.E2PData: if ((e2pCommand & 0x000001FF) >= 0x1 && (e2pCommand & 0x000001FF) <= 0x6) { controlPacket = new byte[1]; controlPacket[0] = MAC.Bytes[(e2pCommand & 0x000001FF) - 1]; return(controlPacket); } else { controlPacket = BitConverter.GetBytes((uint)0); return(BitConverter.GetBytes((uint)0)); } case SCSR.MACControl: controlPacket = BitConverter.GetBytes(macControlRegister); return(BitConverter.GetBytes(macControlRegister)); case SCSR.E2PCommand: controlPacket = BitConverter.GetBytes(e2pCommand); return(BitConverter.GetBytes(e2pCommand)); case SCSR.HwConfig: controlPacket = BitConverter.GetBytes(hardwareConfigurationRegister & (~0x00000008)); return(BitConverter.GetBytes(hardwareConfigurationRegister & (~0x00000008))); case SCSR.PmControl: controlPacket = BitConverter.GetBytes(powerMenagementConfigurationRegister & (~0x00000010)); return(BitConverter.GetBytes(powerMenagementConfigurationRegister & (~0x00000010))); case SCSR.MediaIndependentInterfaceData: controlPacket = BitConverter.GetBytes(miiData & (~0x8000) | 0x0004 | 0x0100); return(BitConverter.GetBytes(miiData & (~0x8000) | 0x0004 | 0x0100)); case SCSR.MediaIndependentInterfaceAddress: controlPacket = BitConverter.GetBytes(miiAddress); controlPacket[0] &= ((byte)(0xFEu)); return(controlPacket); default: this.Log(LogLevel.Warning, "Unknown register read request (request=0x{0:X}, value=0x{1:X}, index=0x{2:X})", request, value, index); break; } } var arr = new byte[] { 0 }; controlPacket = arr; return(arr); }
public void WriteDataBulk(USBPacket packet) { }
public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket) { }
public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket) { return controlPacket; }
public byte[] WriteInterrupt(USBPacket packet) { lock(thisLock) { if(queue.Count < 3) return null; byte[] data = new byte[4]; int[] datas = new int[4]; datas[0] = queue.Dequeue(); datas[1] = queue.Dequeue(); datas[2] = queue.Dequeue(); datas[3] = 0; while(queue.Count >2 && queue.Peek()==datas[0]) { if(datas[1]==127 || datas[1]==-127 || datas[2]==127 || datas[2]==-127) break; queue.Dequeue(); int x, y; x = (sbyte)queue.Dequeue(); y = (sbyte)queue.Dequeue(); if(datas[1] + x > 127) { x = 127; } else if(datas[1] + x < -127) { x = -127; } else { datas[1] += x; } if(datas[2] + y > 127) { y = 127; } else if(datas[2] + y < -127) { y = -127; } else { datas[2] += y; } } for(int i=0; i<4; i++) data[i] = (byte)datas[i]; return data; } }
public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket) { throw new System.NotImplementedException(); }
public void WriteDataBulk(USBPacket packet) { if(packet.data == null) return; byte[] packetToSend; if(packet.data[5] != 64) { packetToSend = new byte[packet.data.Length - 8]; Array.Copy(packet.data, 8, packetToSend, 0, packetToSend.Length); } else { packetToSend = new byte[packet.data.Length - 12]; Array.Copy(packet.data, 12, packetToSend, 0, packetToSend.Length); if((packetToSend[14] & 0xF0) == 0x40) //IP packet { ushort cksum; IPHeaderLength = (ushort)((packetToSend[14] & 0x0F) * 4); if(packetToSend[23] == 0x06) // TCP packet { IPpacket tcpPacket = new IPpacket(IPHeaderLength, IPpacket.PacketType.TCP); tcpPacket.ReadFromBuffer(packetToSend); cksum = tcpPacket.GetChecksum(); cksum -= 1; packetToSend[MACHeaderLegth + IPHeaderLength + 16] = (byte)((cksum >> 8) & 0xFF); packetToSend[MACHeaderLegth + IPHeaderLength + 17] = (byte)((cksum) & 0xFF); } else if(packetToSend[23] == 0x11) // UDP packet { IPpacket udpPacket = new IPpacket(IPHeaderLength, IPpacket.PacketType.UDP); udpPacket.ReadFromBuffer(packetToSend); cksum = udpPacket.GetChecksum(); cksum -= 1; packetToSend[MACHeaderLegth + IPHeaderLength + 6] = (byte)((cksum >> 8) & 0xFF); packetToSend[MACHeaderLegth + IPHeaderLength + 7] = (byte)((cksum) & 0xFF); } } } var frame = new EthernetFrame(packetToSend); Link.TransmitFrameFromInterface(frame); }
public byte[] GetDataBulk(USBPacket packet) { return(null); }
public byte[] WriteInterrupt(USBPacket packet) { return(null); }
public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket) { throw new USBRequestException(); }
public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket) { }
public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket) { return(controlPacket); }
public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket) { throw new System.NotImplementedException(); }
public void SetFeature(USBPacket packet, USBSetupPacket setupPacket) { }
public byte[] GetDataControl(USBPacket packet) { return(null); }
public byte[] ProcessVendorGet(USBPacket packet, USBSetupPacket setupPacket) { ushort index = setupPacket.index; byte request = setupPacket.request; ushort value = setupPacket.value; if(request == (byte)vendorRequest.ReadRegister) { switch((SCSR)index) { case SCSR.MACAddressLo: break; case SCSR.MACAddressHi: break; case SCSR.E2PData: if((e2pCommand & 0x000001FF) >= 0x1 && (e2pCommand & 0x000001FF) <= 0x6) { controlPacket = new byte[1]; controlPacket[0] = MAC.Bytes[(e2pCommand & 0x000001FF) - 1]; return controlPacket; } else { controlPacket = BitConverter.GetBytes((uint)0); return BitConverter.GetBytes((uint)0); } case SCSR.MACControl: controlPacket = BitConverter.GetBytes(macControlRegister); return BitConverter.GetBytes(macControlRegister); case SCSR.E2PCommand: controlPacket = BitConverter.GetBytes(e2pCommand); return BitConverter.GetBytes(e2pCommand); case SCSR.HwConfig: controlPacket = BitConverter.GetBytes(hardwareConfigurationRegister & (~0x00000008)); return (BitConverter.GetBytes(hardwareConfigurationRegister & (~0x00000008))); case SCSR.PmControl: controlPacket = BitConverter.GetBytes(powerMenagementConfigurationRegister & (~0x00000010)); return BitConverter.GetBytes(powerMenagementConfigurationRegister & (~0x00000010)); case SCSR.MediaIndependentInterfaceData: controlPacket = BitConverter.GetBytes(miiData & (~0x8000) | 0x0004 | 0x0100); return BitConverter.GetBytes(miiData & (~0x8000) | 0x0004 | 0x0100); case SCSR.MediaIndependentInterfaceAddress: controlPacket = BitConverter.GetBytes(miiAddress); controlPacket[0] &= ((byte)(0xFEu)); return controlPacket; default: this.Log(LogLevel.Warning, "Unknown register read request (request=0x{0:X}, value=0x{1:X}, index=0x{2:X})", request, value, index); break; } } var arr = new byte[] { 0 }; controlPacket = arr; return arr; }
public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket) { return(null); }
public byte[] WriteInterrupt(USBPacket packet) { lock(thisLock) { if(queue.Count == 0) return null; byte [] data = new byte[8]; data[0] = (byte)modifiers; data[1] = 0; /* data [2] = (byte)pkey; data [3] = 0; data [4] = 0; data [5] = 0; data [6] = 0; data [7] = 0;*/ for(int i=2; i<8; i++) { if(queue.Count != 0) data[i] = queue.Dequeue(); else data[i] = 0; } return data; } }
public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket) { byte request = setupPacket.request; switch((MassStorageRequestCode)request) { case MassStorageRequestCode.MassStorageReset: this.DebugLog("Mass storage reset"); break; default: this.Log(LogLevel.Warning, "Unknown Class Set Code ({0:X})", request); break; } }
public byte[] GetDataControl(USBPacket packet) { return controlPacket; }
public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket) { // throw new NotImplementedException(); }
public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket) { byte request = setupPacket.request; switch((MassStorageRequestCode)request) { case MassStorageRequestCode.GetMaxLUN: controlPacket = new [] {MaxLun}; return new [] {MaxLun}; default: controlPacket = new byte[0]; return new byte[0]; } }
public void SetInterface(USBPacket packet, USBSetupPacket setupPacket) { throw new NotImplementedException(); }
public byte[] WriteInterrupt(USBPacket packet) { lock(thisLock) { if(changeState) { buffer[5] = 0; changeState = false; return this.buffer; } else return null; } }
public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket) { var arr = new byte[2]; return(arr); }
public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket) { //MessageRecipient recipient = (MessageRecipient)(setupPacket.requestType & 0x3); ushort index = setupPacket.index; byte request = setupPacket.request; ushort value = setupPacket.value; switch ((HUBRequestCode)request) { case HUBRequestCode.ClearHubFeature: if (index > 0) { switch ((PortFeature)value) { case PortFeature.CPortSuspend: ports[index - 1] = (uint)(ports[index - 1] & (~((uint)PortStatus.CPortSuspend))); break; case PortFeature.CPortOverCurrent: ports[index - 1] = (uint)(ports[index - 1] & (~((uint)PortStatus.CPortOverCurrent))); break; case PortFeature.CPortEnable: ports[index - 1] = (uint)(ports[index - 1] & (~((uint)PortStatus.CPortEnable))); break; case PortFeature.PortEnable: ports[index - 1] = (uint)(ports[index - 1] & (uint)PortStatus.PortEnable); break; case PortFeature.PortSuspend: ports[index - 1] = (uint)(ports[index - 1] & (uint)PortStatus.PortSuspend); break; case PortFeature.CPortConnection: ports[index - 1] = (uint)(ports[index - 1] & (~((uint)PortStatus.CPortConnection))); break; case PortFeature.CPortReset: ActiveDevice(this.GetDevice((byte)(index))); ports[index - 1] = (uint)(ports[index - 1] & (~((uint)PortStatus.CPortReset))); break; default: this.Log(LogLevel.Warning, "Unsupported ClearHubFeature request!!!"); break; } } break; case HUBRequestCode.SetHubFeature: if (index > 0) { if ((PortFeature)value == PortFeature.PortReset) { IUSBPeripheral device = GetDevice((byte)(index)); ports[index - 1] |= (uint)PortStatus.CPortReset; ports[index - 1] |= (uint)PortStatus.PortEnable; if (device != null) { device.SetAddress(0); device.Reset(); } } else if ((PortFeature)value == PortFeature.PortSuspend) { ports[index - 1] |= (uint)PortStatus.PortSuspend; } } break; default: this.Log(LogLevel.Warning, "Unsupported HUB ProcessClassSet request!!!"); break; } }
public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket) { //throw new NotImplementedException(); }
public byte[] GetInterface(USBPacket packet, USBSetupPacket setupPacket) { throw new System.NotImplementedException(); }
public void SetInterface(USBPacket packet, USBSetupPacket setupPacket) { }
public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket) { throw new NotImplementedException(); }
public byte[] GetDataBulk(USBPacket packet) { lock(sync) { if(packet.bytesToTransfer > 0) if(rxPacketQueue.Count > 0) { EthernetFrame receivedFrame = rxPacketQueue.Dequeue(); //byte frameBytes []= rxFifo.Dequeue(); var size = receivedFrame.Length; uint packetSize; // var packetSize = Math.Max(64, size & ~1); //64 is the minimal length packetSize = (uint)size; packetSize += 6; packetSize += 6; if(packetSize > 1514 + 12) { //Maybe we should react to overruns. Now we just drop. return null; } byte[] currentBuffer = new byte[(uint)packetSize]; currentBuffer[2] = (byte)((packetSize - 6) & 0xff); currentBuffer[3] = (byte)((packetSize - 6) >> 8); var frameBytes = receivedFrame.Bytes; ushort cksum = 0; byte[] tmp = new byte[(uint)frameBytes.Length - 14]; Array.Copy(frameBytes, 14, tmp, 0, tmp.Length); cksum = CalculateChecksumRX(tmp); if((frameBytes[14] & 0xF0) == 0x40) //IP packet { if(frameBytes[23] == 0x06) // TCP packet { uint sa = (uint)((frameBytes[MACHeaderLegth + 12 + 3] << 24) | (frameBytes[MACHeaderLegth + 12 + 2] << 16) | (frameBytes[MACHeaderLegth + 12 + 1] << 8) | (frameBytes[MACHeaderLegth + 12 + 0] << 0)); uint da = (uint)((frameBytes[MACHeaderLegth + 16 + 3] << 24) | (frameBytes[MACHeaderLegth + 16 + 2] << 16) | (frameBytes[MACHeaderLegth + 16 + 1] << 8) | (frameBytes[MACHeaderLegth + 16 + 0] << 0)); ushort protocol = frameBytes[MACHeaderLegth + 9]; ushort IPHeaderLength = (ushort)((frameBytes[14] & 0x0F) * 4); ushort packetLength = (ushort)(System.Net.IPAddress.HostToNetworkOrder((ushort)(frameBytes.Length - (MACHeaderLegth + IPHeaderLength))) >> 16); long s = sa + da + (protocol << 8) + packetLength; s += (s >> 32); s = (s & 0xffff) + (s >> 16); s = (s & 0xffff) + (s >> 16); cksum = (ushort)~s; } } if((frameBytes[14] & 0xF0) == 0x40) //IP packet { if(frameBytes[23] == 0x01) // UDP packet { Array.Copy(frameBytes, 14, tmp, 0, tmp.Length); ushort cksumm = CalculateChecksumRX(tmp); frameBytes[36] = (byte)((cksumm >> 8) & 0xFF); frameBytes[37] = (byte)((cksumm) & 0xFF); } } for(int i=0; i< size; i++) { currentBuffer[6 + i] = frameBytes[i]; } if((frameBytes[14] & 0xF0) == 0x40) //IP packet { if(frameBytes[23] == 0x06) { currentBuffer[packetSize - 1] = (byte)(((cksum) >> 8) & 0xFF); currentBuffer[packetSize - 2] = (byte)((cksum) & 0xFF); } else if(frameBytes[23] == 0x11) { currentBuffer[packetSize - 1] = (byte)(((cksum) >> 8) & 0xFF); currentBuffer[packetSize - 2] = (byte)((cksum) & 0xFF); } } return currentBuffer; } return null; } }
public void WriteDataBulk(USBPacket packet) { // throw new System.NotImplementedException(); }
public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket) { ushort index = setupPacket.index; byte request = setupPacket.request; ushort value = setupPacket.value; if(request == (byte)vendorRequest.WriteRegister) { switch((SCSR)index) { case SCSR.HwConfig: if(packet.data != null) hardwareConfigurationRegister = BitConverter.ToUInt32(packet.data, 0); break; case SCSR.PmControl: if(packet.data != null) powerMenagementConfigurationRegister = BitConverter.ToUInt32(packet.data, 0); break; case SCSR.MACAddressLo: break; case SCSR.MACAddressHi: break; case SCSR.MACControl: if(packet.data != null) macControlRegister = BitConverter.ToUInt32(packet.data, 0); this.Log(LogLevel.Warning, "macControlRegister=0x{0:X}", macControlRegister); break; case SCSR.E2PData: break; case SCSR.E2PCommand: if(packet.data != null) e2pCommand = BitConverter.ToUInt32(packet.data, 0) & (~(0x80000000 | 0x00000400)); break; case SCSR.MediaIndependentInterfaceAddress: if(packet.data != null) miiAddress = BitConverter.ToUInt32(packet.data, 0); break; case SCSR.MediaIndependentInterfaceData: if(packet.data != null) miiData = BitConverter.ToUInt32(packet.data, 0); break; default: this.Log(LogLevel.Warning, "Unknown register write request (request=0x{0:X}, value=0x{1:X}, index=0x{2:X})", request, value, index); break; } } }
public byte[] GetDataBulk(USBPacket packet) { throw new System.NotImplementedException(); // return }
public byte[] GetDataControl(USBPacket packet) { return(controlPacket); }
public void WriteDataControl(USBPacket packet) { }
public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket) { var arr = new byte[2]; MessageRecipient recipient = (MessageRecipient)(setupPacket.requestType & 0x3); switch(recipient) { case MessageRecipient.Device: arr[0] = (byte)(((configurationDescriptor.RemoteWakeup ? 1 : 0) << 1) | (configurationDescriptor.SelfPowered ? 1 : 0)); break; case MessageRecipient.Endpoint: //TODO: endpoint halt status goto default; default: arr[0] = 0; break; } return arr; }
public byte[] GetDataBulk(USBPacket packet) { return null; }
public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket) { DescriptorType type; type = (DescriptorType)((setupPacket.value & 0xff00) >> 8); uint index = (uint)(setupPacket.value & 0xff); switch(type) { case DescriptorType.Device: controlPacket = new byte[deviceDescriptor.ToArray().Length]; deviceDescriptor.ToArray().CopyTo(controlPacket, 0); return deviceDescriptor.ToArray(); case DescriptorType.Configuration: controlPacket = new byte[configurationDescriptor.ToArray().Length]; configurationDescriptor.ToArray().CopyTo(controlPacket, 0); controlPacket = mouseConfigDescriptor; return configurationDescriptor.ToArray(); case DescriptorType.DeviceQualifier: controlPacket = new byte[deviceQualifierDescriptor.ToArray().Length]; deviceQualifierDescriptor.ToArray().CopyTo(controlPacket, 0); return deviceQualifierDescriptor.ToArray(); case DescriptorType.InterfacePower: throw new NotImplementedException("Interface Power Descriptor is not yet implemented. Please contact AntMicro for further support."); case DescriptorType.OtherSpeedConfiguration: controlPacket = new byte[otherConfigurationDescriptor.ToArray().Length]; otherConfigurationDescriptor.ToArray().CopyTo(controlPacket, 0); return otherConfigurationDescriptor.ToArray(); case DescriptorType.String: if(index == 0) { stringDescriptor = new StringUSBDescriptor(1); stringDescriptor.LangId[0] = EnglishLangId; } else { stringDescriptor = new StringUSBDescriptor(stringValues[setupPacket.index][index]); } controlPacket = new byte[stringDescriptor.ToArray().Length]; stringDescriptor.ToArray().CopyTo(controlPacket, 0); return stringDescriptor.ToArray(); case (DescriptorType)0x22: controlPacket = mouseHIDReportDescriptor; break; default: this.Log(LogLevel.Warning, "Unsupported mouse request!!!"); return null; } return null; }
public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket) { throw new System.NotImplementedException(); }
public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket) { var arr = new byte[2]; return arr; }
public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket) { throw new NotImplementedException(); }
public byte[] GetDataBulk(USBPacket packet) { lock (sync) { if (packet.bytesToTransfer > 0) { if (rxPacketQueue.Count > 0) { EthernetFrame receivedFrame = rxPacketQueue.Dequeue(); //byte frameBytes []= rxFifo.Dequeue(); var size = receivedFrame.Bytes.Length; uint packetSize; // var packetSize = Math.Max(64, size & ~1); //64 is the minimal length packetSize = (uint)size; packetSize += 6; packetSize += 6; if (packetSize > 1514 + 12) { //Maybe we should react to overruns. Now we just drop. return(null); } byte[] currentBuffer = new byte[(uint)packetSize]; currentBuffer[2] = (byte)((packetSize - 6) & 0xff); currentBuffer[3] = (byte)((packetSize - 6) >> 8); var frameBytes = receivedFrame.Bytes; ushort cksum = 0; byte[] tmp = new byte[(uint)frameBytes.Length - 14]; Array.Copy(frameBytes, 14, tmp, 0, tmp.Length); cksum = CalculateChecksumRX(tmp); if ((frameBytes[14] & 0xF0) == 0x40) //IP packet { if (frameBytes[23] == 0x06) // TCP packet { uint sa = (uint)((frameBytes[MACHeaderLegth + 12 + 3] << 24) | (frameBytes[MACHeaderLegth + 12 + 2] << 16) | (frameBytes[MACHeaderLegth + 12 + 1] << 8) | (frameBytes[MACHeaderLegth + 12 + 0] << 0)); uint da = (uint)((frameBytes[MACHeaderLegth + 16 + 3] << 24) | (frameBytes[MACHeaderLegth + 16 + 2] << 16) | (frameBytes[MACHeaderLegth + 16 + 1] << 8) | (frameBytes[MACHeaderLegth + 16 + 0] << 0)); ushort protocol = frameBytes[MACHeaderLegth + 9]; ushort IPHeaderLength = (ushort)((frameBytes[14] & 0x0F) * 4); ushort packetLength = (ushort)(System.Net.IPAddress.HostToNetworkOrder((ushort)(frameBytes.Length - (MACHeaderLegth + IPHeaderLength))) >> 16); long s = sa + da + (protocol << 8) + packetLength; s += (s >> 32); s = (s & 0xffff) + (s >> 16); s = (s & 0xffff) + (s >> 16); cksum = (ushort)~s; } } if ((frameBytes[14] & 0xF0) == 0x40) //IP packet { if (frameBytes[23] == 0x01) // UDP packet { Array.Copy(frameBytes, 14, tmp, 0, tmp.Length); ushort cksumm = CalculateChecksumRX(tmp); frameBytes[36] = (byte)((cksumm >> 8) & 0xFF); frameBytes[37] = (byte)((cksumm) & 0xFF); } } for (int i = 0; i < size; i++) { currentBuffer[6 + i] = frameBytes[i]; } if ((frameBytes[14] & 0xF0) == 0x40) //IP packet { if (frameBytes[23] == 0x06) { currentBuffer[packetSize - 1] = (byte)(((cksum) >> 8) & 0xFF); currentBuffer[packetSize - 2] = (byte)((cksum) & 0xFF); } else if (frameBytes[23] == 0x11) { currentBuffer[packetSize - 1] = (byte)(((cksum) >> 8) & 0xFF); currentBuffer[packetSize - 2] = (byte)((cksum) & 0xFF); } } return(currentBuffer); } } return(null); } }
public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket) { throw new NotImplementedException(); }