Socket
Book a DemoInstallSign in
Socket

node-opcua-data-value

Package Overview
Dependencies
Maintainers
1
Versions
212
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-opcua-data-value - npm Package Compare versions

Comparing version

to
2.6.0-alpha.0

20

dist/datavalue.d.ts

@@ -28,9 +28,2 @@ import { BinaryStream, OutputBinaryStream } from "node-opcua-binary-stream";

serverPicoseconds: UInt16;
/**
*
* @class DataValue
* @constructor
* @extends BaseUAObject
* @param options {Object}
*/
constructor(options?: DataValueOptions);

@@ -46,8 +39,2 @@ encode(stream: OutputBinaryStream): void;

export declare function apply_timestamps(dataValue: DataValue, timestampsToReturn: TimestampsToReturn, attributeId: AttributeIds): DataValue;
/**
* return a deep copy of the dataValue by applying indexRange if necessary on Array/Matrix
* @param dataValue {DataValue}
* @param indexRange {NumericalRange}
* @return {DataValue}
*/
export declare function extractRange(dataValue: DataValue, indexRange: NumericalRange): DataValue;

@@ -58,9 +45,2 @@ export declare function sourceTimestampHasChanged(dataValue1: DataValue, dataValue2: DataValue): boolean;

export declare function sameStatusCode(statusCode1: StatusCode, statusCode2: StatusCode): boolean;
/**
* @method sameDataValue
* @param v1 {DataValue}
* @param v2 {DataValue}
* @param [timestampsToReturn {TimestampsToReturn}]
* @return {boolean} true if data values are identical
*/
export declare function sameDataValue(v1: DataValue, v2: DataValue, timestampsToReturn?: TimestampsToReturn): boolean;

@@ -67,0 +47,0 @@ export interface DataValueT<T, DT extends DataType> extends DataValue {

268

dist/datavalue.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @module node-opcua-data-value
*/
exports.sameDataValue = exports.sameStatusCode = exports.timestampHasChanged = exports.serverTimestampHasChanged = exports.sourceTimestampHasChanged = exports.extractRange = exports.apply_timestamps = exports.DataValue = exports.decodeDataValue = exports.encodeDataValue = void 0;
const node_opcua_assert_1 = require("node-opcua-assert");

@@ -16,3 +14,2 @@ const node_opcua_date_time_1 = require("node-opcua-date-time");

const node_opcua_data_model_1 = require("node-opcua-data-model");
// tslint:disable:no-bitwise
function getDataValue_EncodingByte(dataValue) {

@@ -23,3 +20,2 @@ let encodingMask = 0;

}
// if (dataValue.statusCode !== null ) {
if (_.isObject(dataValue.statusCode) && dataValue.statusCode.value !== 0) {

@@ -31,5 +27,2 @@ encodingMask |= DataValueEncodingByte_enum_1.DataValueEncodingByte.StatusCode;

}
// the number of picoseconds that can be encoded are
// 100 nano * 10000;
// above this the value contains the excess in pico second to make the sourceTimestamp more accurate
if (dataValue.sourcePicoseconds ? dataValue.sourcePicoseconds % 100000 : false) {

@@ -49,5 +42,3 @@ encodingMask |= DataValueEncodingByte_enum_1.DataValueEncodingByte.SourcePicoseconds;

node_opcua_assert_1.assert(_.isFinite(encodingMask) && encodingMask >= 0 && encodingMask <= 0x3F);
// write encoding byte
node_opcua_basic_types_1.encodeUInt8(encodingMask, stream);
// write value as Variant
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.Value) {

@@ -58,3 +49,2 @@ if (!dataValue.value) {

if (!dataValue.value.encode) {
// tslint:disable-next-line:no-console
console.log(" CANNOT FIND ENCODE METHOD ON VARIANT !!! HELP", JSON.stringify(dataValue, null, " "));

@@ -64,11 +54,8 @@ }

}
// write statusCode
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.StatusCode) {
node_opcua_basic_types_1.encodeStatusCode(dataValue.statusCode, stream);
}
// write sourceTimestamp
if ((encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.SourceTimestamp) && (dataValue.sourceTimestamp !== null)) {
node_opcua_basic_types_1.encodeHighAccuracyDateTime(dataValue.sourceTimestamp, dataValue.sourcePicoseconds, stream);
}
// write sourcePicoseconds
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.SourcePicoseconds) {

@@ -79,10 +66,8 @@ node_opcua_assert_1.assert(dataValue.sourcePicoseconds !== null);

}
// write serverTimestamp
if ((encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.ServerTimestamp) && dataValue.serverTimestamp !== null) {
node_opcua_basic_types_1.encodeHighAccuracyDateTime(dataValue.serverTimestamp, dataValue.serverPicoseconds, stream);
}
// write serverPicoseconds
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.ServerPicoseconds) {
node_opcua_assert_1.assert(dataValue.serverPicoseconds !== null);
const serverPicoseconds = Math.floor((dataValue.serverPicoseconds % 100000) / 10); // we encode 10-pios
const serverPicoseconds = Math.floor((dataValue.serverPicoseconds % 100000) / 10);
node_opcua_basic_types_1.encodeUInt16(serverPicoseconds, stream);

@@ -103,3 +88,2 @@ }

}
// read statusCode
cur = stream.length;

@@ -110,3 +94,2 @@ if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.StatusCode) {

}
// read sourceTimestamp
cur = stream.length;

@@ -118,3 +101,2 @@ if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.SourceTimestamp) {

}
// read sourcePicoseconds
cur = stream.length;

@@ -127,3 +109,2 @@ dataValue.sourcePicoseconds = 0;

}
// read serverTimestamp
cur = stream.length;

@@ -136,3 +117,2 @@ dataValue.serverPicoseconds = 0;

}
// read serverPicoseconds
cur = stream.length;

@@ -151,3 +131,2 @@ if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.ServerPicoseconds) {

}
// read statusCode
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.StatusCode) {

@@ -160,3 +139,2 @@ dataValue.statusCode = node_opcua_basic_types_1.decodeStatusCode(stream);

dataValue.sourcePicoseconds = 0;
// read sourceTimestamp
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.SourceTimestamp) {

@@ -166,7 +144,5 @@ dataValue.sourceTimestamp = node_opcua_basic_types_1.decodeHighAccuracyDateTime(stream);

}
// read sourcePicoseconds
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.SourcePicoseconds) {
dataValue.sourcePicoseconds += node_opcua_basic_types_1.decodeUInt16(stream) * 10;
}
// read serverTimestamp
dataValue.serverPicoseconds = 0;

@@ -177,3 +153,2 @@ if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.ServerTimestamp) {

}
// read serverPicoseconds
if (encodingMask & DataValueEncodingByte_enum_1.DataValueEncodingByte.ServerPicoseconds) {

@@ -196,3 +171,2 @@ dataValue.serverPicoseconds += node_opcua_basic_types_1.decodeUInt16(stream) * 10;

node_opcua_assert_1.assert(!self.value);
// in this case StatusCode shall not be Good
node_opcua_assert_1.assert(self.statusCode !== node_opcua_status_code_1.StatusCodes.Good);

@@ -202,3 +176,2 @@ }

}
// OPC-UA part 4 - $7.7
const schemaDataValue = node_opcua_factory_1.buildStructuredType({

@@ -216,124 +189,88 @@ baseType: "BaseUAObject",

});
class DataValue extends node_opcua_factory_1.BaseUAObject {
/**
*
* @class DataValue
* @constructor
* @extends BaseUAObject
* @param options {Object}
*/
constructor(options) {
super();
const schema = schemaDataValue;
options = options || {};
/* istanbul ignore next */
if (node_opcua_factory_1.parameters.debugSchemaHelper) {
node_opcua_factory_1.check_options_correctness_against_schema(this, schema, options);
let DataValue = (() => {
class DataValue extends node_opcua_factory_1.BaseUAObject {
constructor(options) {
super();
const schema = schemaDataValue;
options = options || {};
if (node_opcua_factory_1.parameters.debugSchemaHelper) {
node_opcua_factory_1.check_options_correctness_against_schema(this, schema, options);
}
if (options === null) {
this.value = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Null });
}
if (options.value === undefined || options.value === null) {
this.value = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Null });
}
else {
this.value = (options.value) ? new node_opcua_variant_1.Variant(options.value) : new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Null });
}
this.statusCode = node_opcua_factory_1.initialize_field(schema.fields[1], options.statusCode);
this.sourceTimestamp = node_opcua_factory_1.initialize_field(schema.fields[2], options.sourceTimestamp);
this.sourcePicoseconds = node_opcua_factory_1.initialize_field(schema.fields[3], options.sourcePicoseconds);
this.serverTimestamp = node_opcua_factory_1.initialize_field(schema.fields[4], options.serverTimestamp);
this.serverPicoseconds = node_opcua_factory_1.initialize_field(schema.fields[5], options.serverPicoseconds);
}
if (options === null) {
this.value = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Null });
encode(stream) {
encodeDataValue(this, stream);
}
/**
* @property value
* @type {Variant}
* @default null
*/
if (options.value === undefined || options.value === null) {
this.value = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Null });
decode(stream) {
decodeDataValueInternal(this, stream);
}
else {
this.value = (options.value) ? new node_opcua_variant_1.Variant(options.value) : new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Null });
decodeDebug(stream, options) {
decodeDebugDataValue(this, stream, options);
}
/**
* @property statusCode
* @type {StatusCode}
* @default Good (0x00000)
*/
this.statusCode = node_opcua_factory_1.initialize_field(schema.fields[1], options.statusCode);
/**
* @property sourceTimestamp
* @type {DateTime}
* @default null
*/
this.sourceTimestamp = node_opcua_factory_1.initialize_field(schema.fields[2], options.sourceTimestamp);
/**
* @property sourcePicoseconds
* @type {UInt16}
* @default 0
*/
this.sourcePicoseconds = node_opcua_factory_1.initialize_field(schema.fields[3], options.sourcePicoseconds);
/**
* @property serverTimestamp
* @type {DateTime}
* @default null
*/
this.serverTimestamp = node_opcua_factory_1.initialize_field(schema.fields[4], options.serverTimestamp);
/**
* @property serverPicoseconds
* @type {UInt16}
* @default 0
*/
this.serverPicoseconds = node_opcua_factory_1.initialize_field(schema.fields[5], options.serverPicoseconds);
}
encode(stream) {
encodeDataValue(this, stream);
}
decode(stream) {
decodeDataValueInternal(this, stream);
}
decodeDebug(stream, options) {
decodeDebugDataValue(this, stream, options);
}
isValid() {
return isValidDataValue(this);
}
toString() {
function toMicroNanoPico(picoseconds) {
return ""
+ w((picoseconds / 1000000) >> 0)
+ "."
+ w(((picoseconds % 1000000) / 1000) >> 0)
+ "."
+ w((picoseconds % 1000) >> 0);
// + " (" + picoseconds+ ")";
isValid() {
return isValidDataValue(this);
}
function d(timestamp, picoseconds) {
return (timestamp ? timestamp.toISOString()
+ " $ " + toMicroNanoPico(picoseconds)
: "null"); // + " " + (this.serverTimestamp ? this.serverTimestamp.getTime() :"-");
toString() {
function toMicroNanoPico(picoseconds) {
return ""
+ w((picoseconds / 1000000) >> 0)
+ "."
+ w(((picoseconds % 1000000) / 1000) >> 0)
+ "."
+ w((picoseconds % 1000) >> 0);
}
function d(timestamp, picoseconds) {
return (timestamp ? timestamp.toISOString()
+ " $ " + toMicroNanoPico(picoseconds)
: "null");
}
let str = "{ /* DataValue */";
if (this.value) {
str += "\n" + " value: " + node_opcua_variant_1.Variant.prototype.toString.apply(this.value);
}
else {
str += "\n" + " value: <null>";
}
str += "\n" + " statusCode: " + (this.statusCode ? this.statusCode.toString() : "null");
str += "\n" + " serverTimestamp: " + d(this.serverTimestamp, this.serverPicoseconds);
str += "\n" + " sourceTimestamp: " + d(this.sourceTimestamp, this.sourcePicoseconds);
str += "\n" + "}";
return str;
}
let str = "{ /* DataValue */";
if (this.value) {
str += "\n" + " value: " + node_opcua_variant_1.Variant.prototype.toString.apply(this.value); // this.value.toString();
clone() {
return new DataValue({
serverPicoseconds: this.serverPicoseconds,
serverTimestamp: this.serverTimestamp,
sourcePicoseconds: this.sourcePicoseconds,
sourceTimestamp: this.sourceTimestamp,
statusCode: this.statusCode,
value: this.value ? this.value.clone() : undefined
});
}
else {
str += "\n" + " value: <null>";
}
str += "\n" + " statusCode: " + (this.statusCode ? this.statusCode.toString() : "null");
str += "\n" + " serverTimestamp: " + d(this.serverTimestamp, this.serverPicoseconds);
str += "\n" + " sourceTimestamp: " + d(this.sourceTimestamp, this.sourcePicoseconds);
str += "\n" + "}";
return str;
}
clone() {
return new DataValue({
serverPicoseconds: this.serverPicoseconds,
serverTimestamp: this.serverTimestamp,
sourcePicoseconds: this.sourcePicoseconds,
sourceTimestamp: this.sourceTimestamp,
statusCode: this.statusCode,
value: this.value ? this.value.clone() : undefined
});
}
}
DataValue.possibleFields = [
"value",
"statusCode",
"sourceTimestamp",
"sourcePicoseconds",
"serverTimestamp",
"serverPicoseconds"
];
DataValue.schema = schemaDataValue;
return DataValue;
})();
exports.DataValue = DataValue;
DataValue.possibleFields = [
"value",
"statusCode",
"sourceTimestamp",
"sourcePicoseconds",
"serverTimestamp",
"serverPicoseconds"
];
DataValue.schema = schemaDataValue;
DataValue.prototype.schema = DataValue.schema;

@@ -356,3 +293,2 @@ node_opcua_factory_1.registerSpecialVariantEncoder(DataValue);

let now = null;
// apply timestamps
switch (timestampsToReturn) {

@@ -366,7 +302,5 @@ case TimestampsToReturn_enum_1.TimestampsToReturn.Neither:

cloneDataValue.serverPicoseconds = dataValue.serverPicoseconds;
// xx if (!cloneDataValue.serverTimestamp) {
now = now || node_opcua_date_time_1.getCurrentClock();
cloneDataValue.serverTimestamp = now.timestamp;
cloneDataValue.serverPicoseconds = now.picoseconds;
// xx }
break;

@@ -384,7 +318,5 @@ case TimestampsToReturn_enum_1.TimestampsToReturn.Source:

cloneDataValue.serverPicoseconds = dataValue.serverPicoseconds;
//xx if (!cloneDataValue.serverTimestamp) {
now = now || node_opcua_date_time_1.getCurrentClock();
cloneDataValue.serverTimestamp = now.timestamp;
cloneDataValue.serverPicoseconds = now.picoseconds;
//xx }
cloneDataValue.sourceTimestamp = dataValue.sourceTimestamp;

@@ -394,3 +326,2 @@ cloneDataValue.sourcePicoseconds = dataValue.sourcePicoseconds;

}
// unset sourceTimestamp unless AttributeId is Value
if (attributeId !== node_opcua_data_model_1.AttributeIds.Value) {

@@ -410,3 +341,2 @@ cloneDataValue.sourceTimestamp = null;

const now = node_opcua_date_time_1.getCurrentClock();
// apply timestamps
switch (timestampsToReturn) {

@@ -432,3 +362,2 @@ case TimestampsToReturn_enum_1.TimestampsToReturn.Server:

}
// unset sourceTimestamp unless AttributeId is Value
if (attributeId !== node_opcua_data_model_1.AttributeIds.Value) {

@@ -439,10 +368,2 @@ cloneDataValue.sourceTimestamp = null;

}
/*
* @method _clone_with_array_replacement
* @param dataValue
* @param result
* @return {DataValue}
* @private
* @static
*/
function _clone_with_array_replacement(dataValue, result) {

@@ -472,8 +393,2 @@ const statusCode = result.statusCode === node_opcua_status_code_1.StatusCodes.Good ? dataValue.statusCode : result.statusCode;

}
/**
* return a deep copy of the dataValue by applying indexRange if necessary on Array/Matrix
* @param dataValue {DataValue}
* @param indexRange {NumericalRange}
* @return {DataValue}
*/
function extractRange(dataValue, indexRange) {

@@ -485,3 +400,2 @@ const variant = dataValue.value;

}
// let's extract an array of elements corresponding to the indexRange
const result = indexRange.extract_values(variant.value, variant.dimensions);

@@ -491,3 +405,2 @@ dataValue = _clone_with_array_replacement(dataValue, result);

else {
// clone the whole data Value
dataValue = dataValue.clone();

@@ -524,5 +437,4 @@ }

function timestampHasChanged(dataValue1, dataValue2, timestampsToReturn) {
// TODO: timestampsToReturn = timestampsToReturn || { key: "Neither"};
if (timestampsToReturn === undefined) {
return sourceTimestampHasChanged(dataValue1, dataValue2); // || serverTimestampHasChanged(dataValue1, dataValue2);
return sourceTimestampHasChanged(dataValue1, dataValue2);
}

@@ -547,9 +459,2 @@ switch (timestampsToReturn) {

exports.sameStatusCode = sameStatusCode;
/**
* @method sameDataValue
* @param v1 {DataValue}
* @param v2 {DataValue}
* @param [timestampsToReturn {TimestampsToReturn}]
* @return {boolean} true if data values are identical
*/
function sameDataValue(v1, v2, timestampsToReturn) {

@@ -568,15 +473,2 @@ if (v1 === v2) {

}
/*
//
// For performance reason, sourceTimestamp is
// used to determine if a dataValue has changed.
// if sourceTimestamp and sourcePicoseconds are identical
// then we make the assumption that Variant value is identical too.
// This will prevent us to deep compare potential large arrays.
// but before this is possible, we need to implement a mechanism
// that ensure that date() is always strictly increasing
if ((v1.sourceTimestamp && v2.sourceTimestamp) && !sourceTimestampHasChanged(v1, v2)) {
return true;
}
*/
if (timestampHasChanged(v1, v2, timestampsToReturn)) {

@@ -583,0 +475,0 @@ return false;

@@ -1,4 +0,1 @@

/**
* @module node-opcua-data-value
*/
import { Enum } from "node-opcua-enum";

@@ -5,0 +2,0 @@ export declare enum DataValueEncodingByte {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports._enumerationDataValueEncodingByte = exports.schemaDataValueEncodingByte = exports.DataValueEncodingByte = void 0;
const node_opcua_factory_1 = require("node-opcua-factory");

@@ -4,0 +5,0 @@ var DataValueEncodingByte;

@@ -1,5 +0,2 @@

/**
* @module node-opcua-data-value
*/
export * from "./datavalue";
export * from "./TimestampsToReturn_enum";
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
}
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @module node-opcua-data-value
*/
__export(require("./datavalue"));
__export(require("./TimestampsToReturn_enum"));
__exportStar(require("./datavalue"), exports);
__exportStar(require("./TimestampsToReturn_enum"), exports);
//# sourceMappingURL=index.js.map

@@ -1,4 +0,1 @@

/**
* @module node-opcua-data-value
*/
import { BinaryStream, OutputBinaryStream } from "node-opcua-binary-stream";

@@ -5,0 +2,0 @@ export declare enum TimestampsToReturn {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports._enumerationTimestampsToReturn = exports.decodeTimestampsToReturn = exports.encodeTimestampsToReturn = exports.schemaTimestampsToReturn = exports.TimestampsToReturn = void 0;
const node_opcua_factory_1 = require("node-opcua-factory");

@@ -4,0 +5,0 @@ var TimestampsToReturn;

@@ -5,3 +5,3 @@ {

"types": "./dist/index.d.ts",
"version": "2.5.10",
"version": "2.6.0-alpha.0",
"description": "pure nodejs OPCUA SDK - module -data-value",

@@ -15,19 +15,19 @@ "scripts": {

"node-opcua-assert": "2.5.8",
"node-opcua-basic-types": "^2.5.9",
"node-opcua-binary-stream": "^2.5.9",
"node-opcua-data-model": "^2.5.10",
"node-opcua-date-time": "^2.5.9",
"node-opcua-enum": "^2.5.9",
"node-opcua-extension-object": "^2.5.10",
"node-opcua-factory": "^2.5.10",
"node-opcua-nodeid": "^2.5.9",
"node-opcua-status-code": "^2.5.9",
"node-opcua-utils": "^2.5.9",
"node-opcua-variant": "^2.5.10",
"node-opcua-basic-types": "^2.6.0-alpha.0",
"node-opcua-binary-stream": "^2.6.0-alpha.0",
"node-opcua-data-model": "^2.6.0-alpha.0",
"node-opcua-date-time": "^2.6.0-alpha.0",
"node-opcua-enum": "^2.6.0-alpha.0",
"node-opcua-extension-object": "^2.6.0-alpha.0",
"node-opcua-factory": "^2.6.0-alpha.0",
"node-opcua-nodeid": "^2.6.0-alpha.0",
"node-opcua-status-code": "^2.6.0-alpha.0",
"node-opcua-utils": "^2.6.0-alpha.0",
"node-opcua-variant": "^2.6.0-alpha.0",
"underscore": "^1.10.2"
},
"devDependencies": {
"node-opcua-generator": "^2.5.10",
"node-opcua-numeric-range": "^2.5.10",
"node-opcua-packet-analyzer": "^2.5.10",
"node-opcua-generator": "^2.6.0-alpha.0",
"node-opcua-numeric-range": "^2.6.0-alpha.0",
"node-opcua-packet-analyzer": "^2.6.0-alpha.0",
"should": "^13.2.3"

@@ -50,3 +50,3 @@ },

"homepage": "http://node-opcua.github.io/",
"gitHead": "f83ada4e88fdeedc0710c5a3b75bbd4b44d9ff76"
"gitHead": "b4e0776f042c4a1e5c801f38a249f6da46b5057d"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.