Investigating USB

git-svn-id: https://spexeah.com:8443/svn/Asuro@260 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
kieron 2017-10-26 11:42:04 +00:00
parent 38a2363051
commit faf1471f32
20 changed files with 129 additions and 7 deletions

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -410,6 +410,11 @@ begin
if tmp.class_code = 3 then begin if tmp.class_code = 3 then begin
console.writestringln('-Device is DISPLAY_CONTROLLER '); console.writestringln('-Device is DISPLAY_CONTROLLER ');
end; end;
if tmp.class_code = $0C then begin
if tmp.subclass_class = $03 then begin
console.writestringln('-Device is USB Controller');
end;
end;
end; end;
//psleep(300); //psleep(300);

View File

@ -14,16 +14,93 @@ interface
uses uses
console, console,
util, util,
isr44; isr44,
lmemorymanager,
strings;
type
PMousePacket = ^TMousePacket;
TMousePacket = record
x_movement : byte;
y_movement : byte;
y_overflow : boolean;
x_overflow : boolean;
y_sign : boolean;
x_sign : boolean;
MMB_Down : Boolean;
RMB_Down : Boolean;
LMB_Down : Boolean;
end;
procedure init(); procedure init();
implementation implementation
procedure callback(packet : void); procedure callback(raw : void);
var
packet : PMousePacket;
x, y, f : byte;
r : pchar;
begin begin
packet:= PMousePacket(kalloc(sizeof(TMousePacket)));
f:= (uint32(raw) AND $FF000000) SHR 24;
x:= (uint32(raw) AND $00FF0000) SHR 16;
y:= (uint32(raw) AND $0000FF00) SHR 8;
packet^.x_movement:= x;
packet^.y_movement:= y;
packet^.y_overflow:= (f AND $80) = $80;
packet^.x_overflow:= (f AND $40) = $40;
packet^.y_sign:= (f AND $20) = $20;
packet^.x_sign:= (f AND $10) = $10;
packet^.MMB_Down:= (f AND $4) = $4;
packet^.RMB_Down:= (f AND $2) = $2;
packet^.LMB_Down:= (f AND $1) = $1;
//Do Hook here
// console.writestring('X Movement: ');
// console.writeintln(packet^.x_movement);
// console.writestring('Y Movement: ');
// console.writeintln(packet^.y_movement);
// console.writestring('Y Overflow: ');
// r:= boolToString(packet^.y_overflow, true);
// console.writestringln(r);
// kfree(void(r));
// console.writestring('X Overflow: ');
// r:= boolToString(packet^.x_overflow, true);
// console.writestringln(r);
// kfree(void(r));
// console.writestring('Y Sign: ');
// r:= boolToString(packet^.y_sign, true);
// console.writestringln(r);
// kfree(void(r));
// console.writestring('X Sign: ');
// r:= boolToString(packet^.x_sign, true);
// console.writestringln(r);
// kfree(void(r));
// console.writestring('Middle Button Down: ');
// r:= boolToString(packet^.MMB_Down, true);
// console.writestringln(r);
// kfree(void(r));
// console.writestring('Right Button Down: ');
// r:= boolToString(packet^.RMB_Down, true);
// console.writestringln(r);
// kfree(void(r));
// console.writestring('Left Button Down: ');
// r:= boolToString(packet^.LMB_Down, true);
// console.writestringln(r);
// kfree(void(r));
kfree(void(packet));
//console.writestring('Mouse Packet: '); //console.writestring('Mouse Packet: ');
//console.writehexln(DWORD(packet)); //console.writehexln(DWORD(raw));
end; end;
procedure init(); procedure init();

View File

@ -34,6 +34,7 @@ var
begin begin
//writechar('!'); // Bug traces all the way back to here - when the keyboard randomly doesn't work, this inturrupt isn't even called... //writechar('!'); // Bug traces all the way back to here - when the keyboard randomly doesn't work, this inturrupt isn't even called...
// This needs further investigation... Is there something that can go wrong when setting up the PIC? // This needs further investigation... Is there something that can go wrong when setting up the PIC?
CLI;
b:= inb($60); b:= inb($60);
//console.writehexln(b); //console.writehexln(b);
for i:=0 to MAX_HOOKS-1 do begin for i:=0 to MAX_HOOKS-1 do begin

View File

@ -25,7 +25,7 @@ implementation
var var
Hooks : Array[1..MAX_HOOKS] of pp_hook_method; Hooks : Array[1..MAX_HOOKS] of pp_hook_method;
Cycle : uint8 = 0; Cycle : uint32 = 0;
Mouse_Byte : Array[0..2] of uint8; Mouse_Byte : Array[0..2] of uint8;
Packet : uint32; Packet : uint32;
@ -65,12 +65,27 @@ end;
procedure Main(); interrupt; procedure Main(); interrupt;
var var
i : integer; i : integer;
b : byte;
begin begin
Mouse_Byte[Cycle]:= mouse_read; b:= mouse_read;
inc(Cycle); if Cycle = 0 then begin
if (b AND $08) = $08 then begin
Mouse_Byte[Cycle]:= b;
inc(Cycle);
end;
end else begin
Mouse_Byte[Cycle]:= b;
inc(Cycle);
end;
if Cycle > 2 then begin if Cycle > 2 then begin
Cycle:= 0; Cycle:= 0;
// console.writestring('Packet[0]: ');
// console.writeintln(Mouse_Byte[0]);
// console.writestring('Packet[1]: ');
// console.writeintln(Mouse_Byte[1]);
// console.writestring('Packet[2]: ');
// console.writeintln(Mouse_Byte[2]);
Packet:= (Mouse_Byte[0] SHL 24) OR (Mouse_Byte[1] SHL 16) OR (Mouse_Byte[2] SHL 8) OR ($FF); Packet:= (Mouse_Byte[0] SHL 24) OR (Mouse_Byte[1] SHL 16) OR (Mouse_Byte[2] SHL 8) OR ($FF);
for i:=0 to MAX_HOOKS-1 do begin for i:=0 to MAX_HOOKS-1 do begin
if uint32(Hooks[i]) <> 0 then Hooks[i](void(Packet)); if uint32(Hooks[i]) <> 0 then Hooks[i](void(Packet));

View File

@ -25,6 +25,7 @@ function stringConcat(str1, str2 : pchar) : pchar;
function stringContains(str : pchar; sub : pchar) : boolean; function stringContains(str : pchar; sub : pchar) : boolean;
function stringToInt(str : pchar) : uint32; function stringToInt(str : pchar) : uint32;
function intToString(i : uint32) : pchar; function intToString(i : uint32) : pchar;
function boolToString(b : boolean; ext : boolean) : pchar;
implementation implementation
@ -150,4 +151,26 @@ begin
intToString:= ' '; intToString:= ' ';
end; end;
function boolToString(b : boolean; ext : boolean) : pchar;
var
t : pchar;
f : pchar;
begin
if ext then begin
t:= stringCopy('true');
f:= stringCopy('false');
end else begin
t:= stringCopy('1');
f:= stringCopy('0');
end;
if b then begin
kfree(void(f));
boolToString:= t;
end else begin
kfree(void(t));
boolToString:= f;
end;
end;
end. end.

View File

@ -106,6 +106,7 @@ function getParam(index : uint32; params : PParamList) : pchar;
var var
result : pchar; result : pchar;
search : PParamList; search : PParamList;
i : uint32;
begin begin
result:= nil; result:= nil;
@ -182,7 +183,7 @@ end;
procedure test(params : PParamList); procedure test(params : PParamList);
begin begin
if paramCount(params) > 0 then begin if paramCount(params) > 0 then begin
console.writeintln(stringToInt(params^.next^.param)); console.writeintln(stringToInt(getParam(0, params)));
end else begin end else begin
console.writestringln('Invalid number of params'); console.writestringln('Invalid number of params');
end; end;