source: branches/bigint/DeviceManager.pas

Last change on this file was 2, checked in by chronos, 3 months ago
File size: 2.0 KB
Line 
1unit DeviceManager;
2
3interface
4
5uses
6 Classes, SysUtils, Int, Generics.Collections, Device;
7
8type
9
10 TRegisteredDevice = class
11 Device: TDevice;
12 ReadBaseAddr: TInt;
13 WriteBaseAddr: TInt;
14 ReadCount: TInt;
15 WriteCount: TInt;
16 end;
17
18 TRegisterdDevices = TObjectList<TRegisteredDevice>;
19
20 { TDeviceManager }
21
22 TDeviceManager = class
23 Devices: TRegisterdDevices;
24 ReadHandlers: TReadEvents;
25 WriteHandlers: TWriteEvents;
26 procedure Write(Address, Data: TInt);
27 function Read(Address: TInt): TInt;
28 procedure RegisterDevice(Device: TDevice);
29 procedure UnreagisterDevice(Device: TDevice);
30 constructor Create;
31 destructor Destroy; override;
32 end;
33
34
35implementation
36
37{ TDeviceManager }
38
39procedure TDeviceManager.Write(Address, Data: TInt);
40begin
41 WriteHandlers[Address](Data);
42end;
43
44function TDeviceManager.Read(Address: TInt): TInt;
45begin
46 Result := ReadHandlers[Address];
47end;
48
49procedure TDeviceManager.RegisterDevice(Device: TDevice);
50var
51 Handlers: THandlers;
52 RegisteredDevice: TRegisteredDevice;
53 I: Integer;
54begin
55 Handlers := Device.GetHandlers;
56 RegisteredDevice := TRegisteredDevice.Create;
57 RegisteredDevice.Device := Device;
58 RegisteredDevice.ReadBaseAddr := ReadHandlers.Count;
59 RegisteredDevice.ReadCount := Handlers.ReadHandlers.Count;
60 RegisteredDevice.WriteBaseAddr := WriteHandlers.Count;
61 RegisteredDevice.WriteCount := Handlers.WriteHandlers.Count;
62 for I := 0 to Handlers.ReadHandlers.Count - 1 do begin
63 ReadHandlers.Add(Handlers.ReadHandlers[I]);
64 end;
65 for I := 0 to Handlers.WriteHandlers.Count - 1 do begin
66 WriteHandlers.Add(Handlers.WriteHandlers[I]);
67 end;
68 Devices.Add(RegisteredDevice);
69 Handlers.Free;
70end;
71
72procedure TDeviceManager.UnreagisterDevice(Device: TDevice);
73begin
74 // TODO
75end;
76
77constructor TDeviceManager.Create;
78begin
79 Devices := TRegisterdDevices.Create;
80 ReadHandlers := TReadEvents.Create;
81 WriteHandlers := TWriteEvents.Create;
82end;
83
84destructor TDeviceManager.Destroy;
85begin
86 FreeAndNil(ReadHandlers);
87 FreeAndNil(WriteHandlers);
88 FreeAndNil(Devices);
89 inherited;
90end;
91
92end.
93
Note: See TracBrowser for help on using the repository browser.