Example #1
0
 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;
 }
Example #2
0
        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);
        }
Example #3
0
 public void WriteDataBulk(USBPacket packet)
 {
     
 }
Example #4
0
        public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Example #5
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     return controlPacket;
 }
Example #6
0
        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;

            }
        }
Example #7
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #8
0
        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);
        }
Example #9
0
 public byte[] GetDataBulk(USBPacket packet)
 {
     return(null);
 }
Example #10
0
 public byte[] WriteInterrupt(USBPacket packet)
 {
     return(null);
 }
Example #11
0
 public void WriteDataBulk(USBPacket packet)
 {
 }
Example #12
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new USBRequestException();
 }
Example #13
0
 public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket)
 {
 }
Example #14
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     return(controlPacket);
 }
Example #15
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #16
0
        public void SetFeature(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Example #17
0
 public byte[] GetDataControl(USBPacket packet)
 {
     return(null);
 }
Example #18
0
        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;
        }
Example #19
0
 public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     return(null);
 }
Example #20
0
        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;
            }
        }
Example #21
0
        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;
            }
        }
Example #22
0
 public byte[] GetDataControl(USBPacket packet)
 {
     return controlPacket;
 }
Example #23
0
 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
 {
     // throw new NotImplementedException();
 }
Example #24
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new USBRequestException();
 }
Example #25
0
        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];
            }
        }
Example #26
0
 public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Example #27
0
 public byte[] WriteInterrupt(USBPacket packet)
 {
     lock(thisLock)
     {
         if(changeState)
         {
             buffer[5] = 0;
             changeState = false;
             return this.buffer;
         }
         else
             return null;
     }
 }
Example #28
0
        public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
        {
            var arr = new byte[2];

            return(arr);
        }
Example #29
0
        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;
            }
        }
Example #30
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #31
0
 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
 {
     //throw new NotImplementedException();
 }
Example #32
0
 public byte[] GetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #33
0
 public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Example #34
0
        public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Example #35
0
 public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Example #36
0
        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;
            }

            
        }
Example #37
0
 public void WriteDataBulk(USBPacket packet)
 {
     // throw new System.NotImplementedException();
 }
Example #38
0
 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;
         }
     }
 }
Example #39
0
 public byte[] GetDataBulk(USBPacket packet)
 {
     throw new System.NotImplementedException();
     // return
 }
Example #40
0
 public byte[] GetDataControl(USBPacket packet)
 {
     return(controlPacket);
 }
Example #41
0
 public void WriteDataControl(USBPacket packet)
 {
 }
Example #42
0
 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;
 }
Example #43
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #44
0
 public byte[] GetDataBulk(USBPacket packet)
 {
     return null;
 }
Example #45
0
 public byte[] GetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #46
0
 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;
 }
Example #47
0
 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
 {
 }
Example #48
0
        public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Example #49
0
 public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Example #50
0
        public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
        {
            var arr = new byte[2];

            return arr;
        }
Example #51
0
 public void SetFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
 }
Example #52
0
 public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Example #53
0
 public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
 }
Example #54
0
 public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Example #55
0
        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);
            }
        }
Example #56
0
 public void WriteDataControl(USBPacket packet)
 {
 }
Example #57
0
 public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }