Пример #1
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;
 }
Пример #2
0
        public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Пример #3
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;
         }
     }
 }
Пример #4
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];
            }
        }
Пример #5
0
 public byte[] GetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Пример #6
0
        public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Пример #7
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     byte[] returnValue; 
     //MessageRecipient recipient = (MessageRecipient)(setupPacket.requestType & 0x3);
     ushort index = setupPacket.index;
     byte request = setupPacket.request;
     //ushort value = setupPacket.value;
     returnValue = new byte[4];
     switch((HUBRequestCode)request)
     {
     case HUBRequestCode.GetStatus:
         if(index == 0)
         {
             returnValue[0] = 0;
             returnValue[1] = 0;
             returnValue[2] = 0;
             returnValue[3] = 0;
             controlPacket = returnValue;
             return controlPacket;
         }
         else
         {
             if(index - 1 < NumberOfPorts)
             {
                 returnValue[0] = (byte)ports[index - 1];
                 returnValue[1] = (byte)(ports[index - 1] >> 8);
                 returnValue[2] = (byte)(ports[index - 1] >> 16);
                 returnValue[3] = (byte)(ports[index - 1] >> 24);
             }
             else
             {
                 return null;
             }
             controlPacket = returnValue;
             return controlPacket;
         }
     case HUBRequestCode.GetHubDescriptor:
         controlPacket = hubDescriptor.ToArray();
         return controlPacket;
     default:
         controlPacket = new byte[0];
         this.Log(LogLevel.Warning, "Unsupported HUB ProcessClassGet request!!!");
         return controlPacket;
     }
 }
Пример #8
0
        public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
        {
            var arr = new byte[2];

            return(arr);
        }
Пример #9
0
 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
 {
 }
Пример #10
0
 public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Пример #11
0
 public void SetFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
         public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     return null;
 }
 public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException ();
 }
Пример #14
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;
            }
        }
Пример #15
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     return controlPacket;
 }
Пример #16
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     return(controlPacket);
 }
Пример #17
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new USBRequestException();
 }
Пример #18
0
 public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket)
 {
 }
Пример #19
0
 public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #20
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #21
0
 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
 {
     // throw new NotImplementedException();
 }
Пример #22
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new USBRequestException();
 }
Пример #23
0
 public void ClearFeature(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Пример #24
0
 public void SetConfiguration(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #25
0
        public void SetFeature(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Пример #26
0
 public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #27
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;
        }
Пример #28
0
 public void SetInterface(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #29
0
 public byte[] ProcessClassGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Пример #30
0
 public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #31
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;
 }
Пример #32
0
 public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     return(null);
 }
Пример #33
0
        public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket)
        {

        }
Пример #34
0
 public void ProcessClassSet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }
Пример #35
0
        public byte[] GetStatus(USBPacket packet, USBSetupPacket setupPacket)
        {
            var arr = new byte[2];

            return arr;
        }
Пример #36
0
 public byte[] GetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     var type = (DescriptorType)((setupPacket.value & 0xff00) >> 8);
     switch(type)
     {
     case DescriptorType.Device:
         controlPacket = deviceDescriptor.ToArray();
         break;
     case DescriptorType.Configuration:
         controlPacket = configurationDescriptor.ToArray();
         break;
     case DescriptorType.DeviceQualifier:
         controlPacket = deviceQualifierDescriptor.ToArray();
         break;
     case DescriptorType.InterfacePower:
         throw new NotImplementedException("Interface Power Descriptor is not yet implemented. Please contact AntMicro for further support.");
     case DescriptorType.OtherSpeedConfiguration:
         controlPacket = otherConfigurationDescriptor.ToArray();
         break;
     case DescriptorType.String:
         uint index = (uint)(setupPacket.value & 0xff);
         if(index == 0)
         {
             stringDescriptor = new StringUSBDescriptor(1);
             stringDescriptor.LangId[0] = EnglishLangId;
         }
         else
         {
             stringDescriptor = new StringUSBDescriptor(stringValues[setupPacket.index][index]);
         }
         controlPacket = stringDescriptor.ToArray();
         break;
     default:
         this.Log(LogLevel.Warning, "Unsupported descriptor");
         return null;
     }
     return controlPacket;
 }
Пример #37
0
 public void SetDescriptor(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #38
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;
            }
        }
Пример #39
0
 public void ProcessVendorSet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new NotImplementedException();
 }
Пример #40
0
 public byte[] ProcessVendorGet(USBPacket packet, USBSetupPacket setupPacket)
 {
     throw new System.NotImplementedException();
 }