Samsung Omnia i900 Sensor

Benim gibi bir Omnia’nız varsa Gsensördenen gelen verilerin  nasıl okunacağını merak etmiş olabilirsiniz. Samsung bunu driver olarak sorunuyor ve ACS1 yoluyla bir driver file oluşturuyormuş.

al := CreateFile(‘ACS1:’, 0, 0, nil, OPEN_EXISTING, 0, 0); komutuyla bunu bir handle tutturuyoruz ve

DeviceIoControl(al, ACCReadValues, @inbuffer, 0, @outbuffer, sizeof(outbuffer), ref, null) komutuyla da outbuffer değişkenine bunları yazıyoruz. Bu kadar. Aşağıda bununla ilgili bir proje oluşturdum, eğer i900 varsa deneyebilirsiniz.

sensoroku
[code lang=”Delphi”]
unit SamsungGSensor;

{$DEFINE KOL_MCK}
{$IFDEF FPC}{$MODE delphi}{$ENDIF}

interface

uses
windows,kol;
const ACCOnRot = $44E;
const ACCOffRot = $44F;
const ACCReadValues = $3F7;

type
{ TSamsungGSensor }
TSamsungGSensor = class
private
Fx: integer;
Fy: integer;
Fyazi: string;
Fz: integer;
public
constructor Create;
destructor Destroy; override;
procedure Oku;
property Yazi: string read Fyazi;
property X: integer read Fx;
property Y: integer read Fy;
property Z: integer read Fz;
end;
implementation

{ TSamsungGSensor }

constructor TSamsungGSensor.Create;
begin
inherited Create;
end;

destructor TSamsungGSensor.Destroy;
begin
inherited Destroy;
end;

procedure TSamsungGSensor.Oku;
var
al: THandle;
inbuffer: array[0..0] of integer;
outbuffer: array[0..2] of integer;
ref: dword;
begin
ref := 0;
try
FillChar(outbuffer, sizeof(outbuffer), 0);
al := CreateFile(‘ACS1:’, 0, 0, nil, OPEN_EXISTING, 0, 0);
if al =INVALID_HANDLE_VALUE then
begin
ShowMessage(‘Açılamadı’);
exit;
end;

DeviceIoControl(al, ACCReadValues, @inbuffer, 0, @outbuffer, sizeof(outbuffer), ref, null);

Fyazi := Format(‘Y=%d, X=%d, Z=%d’, [outbuffer[0], outbuffer[1], outbuffer[2]]);
Fx := outbuffer[1];
Fy := outbuffer[0];
Fz := outbuffer[2];
finally
CloseHandle(al);
end;

end;

end.
[/code]

İlgili Dosyalar:
SensorOku

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir