Ejemplo n.º 1
0
        protected Device MatchEvent <SERVICE>(ServiceEvent serviceEvent, ServiceEventType eventType) where SERVICE : class
        {
            if (serviceEvent.ServiceEventType != eventType)
            {
                return(null);
            }

            var device = serviceEvent.Subject as Device;

            if (device == null)
            {
                return(null);
            }

            var service = device.DeviceDriver as SERVICE;

            if (service == null)
            {
                return(null);
            }

            //HAL.DebugWriteLine("BaseService:MatchEvent()-Z");
            //HAL.Pause();

            return(device);
        }
Ejemplo n.º 2
0
        private void DispatchEvents(ServiceEvent serviceEvent)
        {
            int i = 0;

            while (true)
            {
                BaseService service;

                //HAL.DebugWriteLine("ServiceManager:SendEvents():Loop-A: " + i.ToString() + "/" + services.Count.ToString());
                //HAL.Pause();

                lock (_lockServices)
                {
                    if (i >= services.Count)
                    {
                        return;
                    }

                    service = services[i];
                }

                //HAL.DebugWriteLine("ServiceManager:SendEvents():Loop-B: " + i.ToString() + "/" + services.Count.ToString());
                //HAL.Pause();

                i++;

                //HAL.DebugWriteLine("ServiceManager:SendEvents():Loop-C: " + i.ToString() + "/" + services.Count.ToString());
                //HAL.Pause();

                service.PostEvent(serviceEvent);

                //HAL.DebugWriteLine("ServiceManager:SendEvents():Post-PostEvent");
                //HAL.Pause();
            }
        }
Ejemplo n.º 3
0
        public void AddEvent(ServiceEvent serviceEvent)
        {
            lock (_eventLock)
            {
                events.Add(serviceEvent);
            }

            SendEvents();
        }
Ejemplo n.º 4
0
        public override void PostEvent(ServiceEvent serviceEvent)
        {
            //HAL.DebugWriteLine("PCIDeviceService:PostEvent()");
            //HAL.Pause();

            var device = MatchEvent <PCIDevice>(serviceEvent, ServiceEventType.Start);

            if (device == null)
            {
                return;
            }

            var pciDevice = device.DeviceDriver as PCIDevice;

            // Find the best matching driver
            PCIDeviceDriverRegistryEntry matchedDriver = null;
            int matchPriorty = 0;

            // Start ISA Drivers
            var drivers = DeviceService.GetDeviceDrivers(DeviceBusType.PCI);

            foreach (var driver in drivers)
            {
                if (!(driver is PCIDeviceDriverRegistryEntry pciDriver))
                {
                    continue;
                }

                if (!IsMatch(pciDriver, pciDevice))
                {
                    continue;
                }

                int priority = GetMatchedPriority(pciDriver, pciDevice);

                if (priority <= 0)
                {
                    continue;
                }

                if (priority < matchPriorty || matchPriorty == 0)
                {
                    matchedDriver = pciDriver;
                    matchPriorty  = priority;
                }
            }

            if (matchedDriver == null)
            {
                return;                 // no driver found
            }
            StartDevice(matchedDriver, device, pciDevice);
        }
Ejemplo n.º 5
0
        public override void PostEvent(ServiceEvent serviceEvent)
        {
            var device = MatchEvent <IPCIControllerLegacy>(serviceEvent, ServiceEventType.Start);

            if (device == null)
            {
                return;
            }

            var pciController = device.DeviceDriver as IPCIControllerLegacy;

            CreatePCIDevices(device, pciController);
        }
Ejemplo n.º 6
0
        public override void PostEvent(ServiceEvent serviceEvent)
        {
            //HAL.DebugWriteLine("PCIControllerService:PostEvent()");
            //HAL.Pause();

            var device = MatchEvent <IPCIController>(serviceEvent, ServiceEventType.Start);

            if (device == null)
            {
                return;
            }

            var pciController = device.DeviceDriver as IPCIController;

            CreatePCIDevices(device, pciController);
        }
Ejemplo n.º 7
0
        public override void PostEvent(ServiceEvent serviceEvent)
        {
            //HAL.DebugWriteLine("DiskDeviceService:PostEvent()-A");
            //HAL.Pause();

            var device = MatchEvent <IDiskControllerDevice>(serviceEvent, ServiceEventType.Start);

            if (device == null)
            {
                return;
            }

            // This mounts everything detected

            var controller = device.DeviceDriver as IDiskControllerDevice;

            var deviceService = device.DeviceService;

            for (uint drive = 0; drive < controller.MaximunDriveCount; drive++)
            {
                if (!controller.Open(drive))
                {
                    continue;
                }

                if (controller.GetTotalSectors(drive) == 0)
                {
                    continue;
                }

                // don't mount twice
                if (deviceService.CheckExists(device, drive))
                {
                    return;
                }

                var configuration = new DiskDeviceConfiguration()
                {
                    DriveNbr = drive,
                    ReadOnly = false
                };

                deviceService.Initialize(new DiskDeviceDriver(), device, true, configuration);
            }
        }
Ejemplo n.º 8
0
        public void AddEvent(ServiceEvent serviceEvent)
        {
            //HAL.DebugWriteLine("ServiceManager:AddEvent():Start");
            //HAL.Pause();

            lock (_lockEvents)
            {
                events.Add(serviceEvent);
            }

            //HAL.DebugWriteLine("ServiceManager:AddEvent():SendEvents");
            //HAL.Pause();

            SendEvents();

            //HAL.DebugWriteLine("ServiceManager:AddEvent():End");
            //HAL.Pause();
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Posts the event.
 /// </summary>
 /// <param name="serviceEvent">The service event.</param>
 public virtual void PostEvent(ServiceEvent serviceEvent)
 {
 }