瀏覽代碼

spi-device node module

michael 5 年之前
父節點
當前提交
1532b6aac2
共有 1 個文件被更改,包括 89 次插入0 次删除
  1. 89 0
      packages/nodejs/nodejsspidevice.pas

+ 89 - 0
packages/nodejs/nodejsspidevice.pas

@@ -0,0 +1,89 @@
+{
+    This file is part of the Pas2JS run time library.
+    Copyright (c) 2020 by Michael Van Canneyt
+
+    NodeJS spi-dev module import.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit nodejsspidevice;
+
+{$mode objfpc}
+{$modeswitch externalclass}
+
+interface
+
+uses
+  JS,NodeJS;
+
+
+Type
+  TNJSErrorCallBack = reference to procedure (err : TJSError);
+  TSPIDeviceMessage = class external name 'Object' (TJSObject)
+    byteLength : Longint; //- number, 32-bit, the number of bytes to transfer
+    sendBuffer : TNJSBuffer; // - optional Buffer, transmit data
+    receiveBuffer : TNJSBuffer; // - optional Buffer, receive data
+    speedHz : longint; //  optional number, 32-bit, override of the device's clock frequency in Hertz
+    microSecondDelay : smallint; // - optional number, 16-bit, delay after the last bit transfer before optionally deselecting the device before the next transfer, default 0
+    bitsPerWord : byte; //  optional number, 8-bit, override of the device's wordsize
+    chipSelectChange : Boolean; // - optional boolean, true to deselect device before starting the next transfer, default false
+  end;
+
+  TSPIDeviceMessages = Array of TSPIDeviceMessage;
+
+  TNJSCompletionCallBack = reference to procedure (err : TJSError; msg : TSPIDeviceMessage);
+
+  TSPIDeviceOptions = class external name 'Object' (TJSObject)
+    mode : byte;
+    chipSelectHigh : boolean;
+    lsbFirst : boolean;
+    threeWire : boolean;
+    loopback : boolean;
+    noChipSelect : boolean;
+    ready : boolean;
+    bitsPerWord : boolean;
+    maxSpeedHz : longint;
+  end;
+  TNJSDeviceOptionsCallBack = reference to procedure (err : TJSError; opts : TSPIDeviceOptions);
+
+  TNJSSPIDevice = class external name 'Object' (TJSObject)
+    function transfer(message : TSPIDeviceMessages; callback :  TNJSCompletionCallBack) : TNJSSPIDevice;
+    function transferSync(message : TSPIDeviceMessages) : TNJSSPIDevice;
+    function getOptions(callback :  TNJSDeviceOptionsCallBack) : TNJSSPIDevice;
+    function getOptionsSync : TSPIDeviceOptions;
+    function setOptions(aOptions : TSPIDeviceOptions; callback :  TNJSErrorCallBack) : TNJSSPIDevice;
+    function setOptionsSync(aOptions : TSPIDeviceOptions) : TNJSSPIDevice;
+    procedure close(callback :  TNJSErrorCallBack);
+    procedure closeSync;
+  end;
+  TNJSSPIDeviceClass = class of TNJSSPIDevice;
+
+  TNSJSSPIdeviceModule = class external name 'Object' (TJSObject)
+  Public
+    var
+      MODE0 : byte;
+      MODE1 : byte;
+      MODE2 : byte;
+      MODE3 : byte;
+  Public
+    function open (busNumber, deviceNumber : Byte; CallBack: TNJSErrorCallBack) :  TNJSSPIDevice;
+    function open (busNumber, deviceNumber : Byte; Options : TSPIDeviceOptions; CallBack: TNJSErrorCallBack) :  TNJSSPIDevice;
+    function openSync (busNumber, deviceNumber : Byte; Options : TSPIDeviceOptions) :  TNJSSPIDevice;
+    function openSync (busNumber, deviceNumber : Byte) :  TNJSSPIDevice;
+  end;
+
+var
+  spi : TNSJSSPIdeviceModule;
+
+implementation
+
+initialization
+  spi:=TNSJSSPIdeviceModule(require('spi-device'));
+end.
+