edge-impulse-linux 1.9.6 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/build/cli/linux/camera-debug.js +1 -1
  2. package/build/cli/linux/camera-debug.js.map +1 -1
  3. package/build/cli/linux/linux-device.d.ts +42 -0
  4. package/build/cli/linux/linux-device.js +298 -0
  5. package/build/cli/linux/linux-device.js.map +1 -0
  6. package/build/cli/linux/linux.js +29 -363
  7. package/build/cli/linux/linux.js.map +1 -1
  8. package/build/cli/linux/runner-downloader.d.ts +14 -3
  9. package/build/cli/linux/runner-downloader.js +59 -8
  10. package/build/cli/linux/runner-downloader.js.map +1 -1
  11. package/build/cli/linux/runner-utils.d.ts +9 -0
  12. package/build/cli/linux/runner-utils.js +283 -0
  13. package/build/cli/linux/runner-utils.js.map +1 -0
  14. package/build/cli/linux/runner.js +96 -499
  15. package/build/cli/linux/runner.js.map +1 -1
  16. package/build/cli-common/aws-iotcore-connector.js.map +1 -0
  17. package/build/cli-common/aws-sm-utils.js.map +1 -0
  18. package/build/cli-common/check-new-version.js.map +1 -0
  19. package/build/cli-common/config.js.map +1 -0
  20. package/build/cli-common/get-ips.js.map +1 -0
  21. package/build/cli-common/init-cli-app.js.map +1 -0
  22. package/build/{cli → cli-common}/iwebsocket.js.map +1 -1
  23. package/build/cli-common/make-image.js.map +1 -0
  24. package/build/{cli/linux → cli-common}/model-monitor.d.ts +4 -4
  25. package/build/{cli/linux → cli-common}/model-monitor.js +4 -0
  26. package/build/cli-common/model-monitor.js.map +1 -0
  27. package/build/{shared/daemon → cli-common}/remote-mgmt-service.d.ts +16 -4
  28. package/build/{shared/daemon → cli-common}/remote-mgmt-service.js +184 -16
  29. package/build/cli-common/remote-mgmt-service.js.map +1 -0
  30. package/build/library/index.d.ts +0 -5
  31. package/build/library/index.js +1 -6
  32. package/build/library/index.js.map +1 -1
  33. package/build/library/sensors/sensors-helper.d.ts +12 -0
  34. package/build/library/sensors/sensors-helper.js +101 -0
  35. package/build/library/sensors/sensors-helper.js.map +1 -0
  36. package/build/sdk/studio/sdk/api/projectsApi.d.ts +5 -1
  37. package/build/sdk/studio/sdk/api/projectsApi.js +5 -1
  38. package/build/sdk/studio/sdk/api/projectsApi.js.map +1 -1
  39. package/build/sdk/studio/sdk/api/rawDataApi.d.ts +2 -2
  40. package/build/sdk/studio/sdk/api/rawDataApi.js +2 -2
  41. package/build/sdk/studio/sdk/api/rawDataApi.js.map +1 -1
  42. package/build/sdk/studio/sdk/model/aIAction.d.ts +4 -0
  43. package/build/sdk/studio/sdk/model/aIAction.js +5 -0
  44. package/build/sdk/studio/sdk/model/aIAction.js.map +1 -1
  45. package/build/sdk/studio/sdk/model/createPreviewAIActionsJobRequest.d.ts +4 -0
  46. package/build/sdk/studio/sdk/model/createPreviewAIActionsJobRequest.js +5 -0
  47. package/build/sdk/studio/sdk/model/createPreviewAIActionsJobRequest.js.map +1 -1
  48. package/build/sdk/studio/sdk/model/download.d.ts +4 -3
  49. package/build/sdk/studio/sdk/model/download.js +5 -0
  50. package/build/sdk/studio/sdk/model/download.js.map +1 -1
  51. package/build/sdk/studio/sdk/model/models.d.ts +1 -0
  52. package/build/sdk/studio/sdk/model/models.js +3 -0
  53. package/build/sdk/studio/sdk/model/models.js.map +1 -1
  54. package/build/sdk/studio/sdk/model/projectInfoResponseAllOfAcquisitionSettings.d.ts +4 -0
  55. package/build/sdk/studio/sdk/model/projectInfoResponseAllOfAcquisitionSettings.js +5 -0
  56. package/build/sdk/studio/sdk/model/projectInfoResponseAllOfAcquisitionSettings.js.map +1 -1
  57. package/build/sdk/studio/sdk/model/sample.d.ts +2 -0
  58. package/build/sdk/studio/sdk/model/sample.js +5 -0
  59. package/build/sdk/studio/sdk/model/sample.js.map +1 -1
  60. package/build/sdk/studio/sdk/model/sampleImageDimensions.d.ts +26 -0
  61. package/build/sdk/studio/sdk/model/sampleImageDimensions.js +34 -0
  62. package/build/sdk/studio/sdk/model/sampleImageDimensions.js.map +1 -0
  63. package/build/sdk/studio/sdk/model/updateProjectRequest.d.ts +4 -0
  64. package/build/sdk/studio/sdk/model/updateProjectRequest.js +5 -0
  65. package/build/sdk/studio/sdk/model/updateProjectRequest.js.map +1 -1
  66. package/build/shared/MgmtInterfaceTypes.d.ts +1 -1
  67. package/build/shared/bounding-box-file-types.js +9 -0
  68. package/build/shared/bounding-box-file-types.js.map +1 -1
  69. package/examples/js/collect-custom.js +3 -2
  70. package/examples/ts/classify-camera-webserver.ts +2 -2
  71. package/examples/ts/collect-custom.ts +3 -2
  72. package/package.json +1 -1
  73. package/build/cli/aws-iotcore-connector.js.map +0 -1
  74. package/build/cli/aws-sm-utils.js.map +0 -1
  75. package/build/cli/check-new-version.js.map +0 -1
  76. package/build/cli/config.js.map +0 -1
  77. package/build/cli/get-ips.js.map +0 -1
  78. package/build/cli/init-cli-app.js.map +0 -1
  79. package/build/cli/linux/model-monitor.js.map +0 -1
  80. package/build/cli/linux/remote-mgmt-service.d.ts +0 -99
  81. package/build/cli/linux/remote-mgmt-service.js +0 -343
  82. package/build/cli/linux/remote-mgmt-service.js.map +0 -1
  83. package/build/cli/make-image.js.map +0 -1
  84. package/build/library/get-ips.d.ts +0 -5
  85. package/build/library/get-ips.js +0 -31
  86. package/build/library/get-ips.js.map +0 -1
  87. package/build/shared/daemon/remote-mgmt-service.js.map +0 -1
  88. /package/build/{cli → cli-common}/aws-iotcore-connector.d.ts +0 -0
  89. /package/build/{cli → cli-common}/aws-iotcore-connector.js +0 -0
  90. /package/build/{cli → cli-common}/aws-sm-utils.d.ts +0 -0
  91. /package/build/{cli → cli-common}/aws-sm-utils.js +0 -0
  92. /package/build/{cli → cli-common}/check-new-version.d.ts +0 -0
  93. /package/build/{cli → cli-common}/check-new-version.js +0 -0
  94. /package/build/{cli → cli-common}/config.d.ts +0 -0
  95. /package/build/{cli → cli-common}/config.js +0 -0
  96. /package/build/{cli → cli-common}/get-ips.d.ts +0 -0
  97. /package/build/{cli → cli-common}/get-ips.js +0 -0
  98. /package/build/{cli → cli-common}/init-cli-app.d.ts +0 -0
  99. /package/build/{cli → cli-common}/init-cli-app.js +0 -0
  100. /package/build/{cli → cli-common}/iwebsocket.d.ts +0 -0
  101. /package/build/{cli → cli-common}/iwebsocket.js +0 -0
  102. /package/build/{cli → cli-common}/make-image.d.ts +0 -0
  103. /package/build/{cli → cli-common}/make-image.js +0 -0
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const imagesnap_1 = require("../../library/sensors/imagesnap");
8
8
  const inquirer_1 = __importDefault(require("inquirer"));
9
9
  const gstreamer_1 = require("../../library/sensors/gstreamer");
10
- const get_ips_1 = require("../../library/get-ips");
10
+ const get_ips_1 = require("../../cli-common/get-ips");
11
11
  const commander_1 = __importDefault(require("commander"));
12
12
  const path_1 = __importDefault(require("path"));
13
13
  const fs_1 = __importDefault(require("fs"));
@@ -1 +1 @@
1
- {"version":3,"file":"camera-debug.js","sourceRoot":"","sources":["../../../cli/linux/camera-debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera-debug.js","sourceRoot":"","sources":["../../../cli/linux/camera-debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /// <reference types="node" />
2
+ import TypedEmitter from 'typed-emitter';
3
+ import { MgmtInterfaceSampleRequestSample, ClientConnectionType } from "../../shared/MgmtInterfaceTypes";
4
+ import { RemoteMgmtDevice, RemoteMgmtDeviceSampleEmitter } from "../../cli-common/remote-mgmt-service";
5
+ import { EdgeImpulseConfig } from "../../cli-common/config";
6
+ import { ICamera } from "../../library/sensors/icamera";
7
+ declare const LinuxDevice_base: new () => TypedEmitter<{
8
+ snapshot: (buffer: Buffer, filename: string) => void;
9
+ }>;
10
+ export declare class LinuxDevice extends LinuxDevice_base implements RemoteMgmtDevice {
11
+ private _camera;
12
+ private _config;
13
+ private _devKeys;
14
+ private _snapshotStreaming;
15
+ private _lastSnapshot;
16
+ private _snapshotMutex;
17
+ private _snapshotId;
18
+ private _snapshotStreamingResolution;
19
+ private _microphoneDisabled;
20
+ private _enableVideo;
21
+ private _sensorVerboseOutput;
22
+ private _audioDeviceName;
23
+ constructor(config: EdgeImpulseConfig, devKeys: {
24
+ apiKey: string;
25
+ hmacKey: string;
26
+ }, noMicrophone: boolean, enableVideo: boolean, sensorVerboseOutput: boolean);
27
+ registerCameraSnapshotHandler(cameraInstance: ICamera): void;
28
+ connected(): boolean;
29
+ getDeviceId(): Promise<string>;
30
+ getDeviceType(): "RASPBERRY_PI" | "NVIDIA_JETSON_NANO" | "EDGE_IMPULSE_LINUX";
31
+ getSensors(): any;
32
+ getConnectionType(): ClientConnectionType;
33
+ supportsSnapshotStreaming(): boolean;
34
+ supportsSnapshotStreamingWhileCapturing(): boolean;
35
+ beforeConnect(): Promise<void>;
36
+ startSnapshotStreaming(resolution: 'high' | 'low'): Promise<void>;
37
+ stopSnapshotStreaming(): Promise<void>;
38
+ sampleRequest(data: MgmtInterfaceSampleRequestSample, ee: RemoteMgmtDeviceSampleEmitter): Promise<void>;
39
+ setAudioDeviceName(deviceName: string): void;
40
+ private buildWavFileBuffer;
41
+ }
42
+ export {};
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LinuxDevice = void 0;
7
+ const video_recorder_1 = require("../../library/sensors/video-recorder");
8
+ const get_ips_1 = require("../../cli-common/get-ips");
9
+ const tsee_1 = require("tsee");
10
+ const async_mutex_1 = require("async-mutex");
11
+ const sharp_1 = __importDefault(require("sharp"));
12
+ const recorder_1 = require("../../library/sensors/recorder");
13
+ const make_image_1 = require("../../cli-common/make-image");
14
+ const SERIAL_PREFIX = '\x1b[33m[SER]\x1b[0m';
15
+ class LinuxDevice extends tsee_1.EventEmitter {
16
+ constructor(config, devKeys, noMicrophone, enableVideo, sensorVerboseOutput) {
17
+ // eslint-disable-next-line constructor-super
18
+ super();
19
+ this._snapshotStreaming = false;
20
+ this._lastSnapshot = new Date(0);
21
+ this._snapshotMutex = new async_mutex_1.Mutex();
22
+ this._snapshotId = 0;
23
+ this._snapshotStreamingResolution = 'low';
24
+ this._config = config;
25
+ this._devKeys = devKeys;
26
+ this._microphoneDisabled = noMicrophone;
27
+ this._enableVideo = enableVideo;
28
+ this._sensorVerboseOutput = sensorVerboseOutput;
29
+ }
30
+ registerCameraSnapshotHandler(cameraInstance) {
31
+ this._camera = cameraInstance;
32
+ this._camera.on('snapshot', async (buffer, filename) => {
33
+ const id = ++this._snapshotId;
34
+ const release = await this._snapshotMutex.acquire();
35
+ let timeBetweenFrames = this._snapshotStreamingResolution === 'low' ?
36
+ 100 : 0;
37
+ // limit to 10 frames a second & no new frames should have come in...
38
+ try {
39
+ if (this._snapshotStreaming &&
40
+ Date.now() - +this._lastSnapshot >= timeBetweenFrames &&
41
+ id === this._snapshotId) {
42
+ if (this._snapshotStreamingResolution === 'low') {
43
+ const jpg = (0, sharp_1.default)(buffer);
44
+ const resized = await jpg.resize(undefined, 96, {
45
+ fastShrinkOnLoad: false
46
+ }).jpeg().toBuffer();
47
+ this.emit('snapshot', resized, filename);
48
+ }
49
+ else {
50
+ this.emit('snapshot', buffer, filename);
51
+ }
52
+ this._lastSnapshot = new Date();
53
+ }
54
+ }
55
+ catch (ex) {
56
+ console.warn('Failed to handle snapshot', ex);
57
+ }
58
+ finally {
59
+ release();
60
+ }
61
+ });
62
+ }
63
+ connected() {
64
+ return true;
65
+ }
66
+ async getDeviceId() {
67
+ return get_ips_1.ips.length > 0 ? get_ips_1.ips[0].mac : '00:00:00:00:00:00';
68
+ }
69
+ getDeviceType() {
70
+ let id = (get_ips_1.ips.length > 0 ? get_ips_1.ips[0].mac : '00:00:00:00:00:00').toLowerCase();
71
+ if (id.startsWith('dc:a6:32') || id.startsWith('b8:27:eb')) {
72
+ return 'RASPBERRY_PI';
73
+ }
74
+ if (id.startsWith('00:04:4b') || id.startsWith('48:b0:2d')) {
75
+ return 'NVIDIA_JETSON_NANO';
76
+ }
77
+ return 'EDGE_IMPULSE_LINUX';
78
+ }
79
+ getSensors() {
80
+ /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
81
+ let sensors = [];
82
+ if (!this._microphoneDisabled) {
83
+ sensors.push({
84
+ name: 'Microphone',
85
+ frequencies: [16000],
86
+ maxSampleLengthS: 3600
87
+ });
88
+ }
89
+ if (this._camera) {
90
+ const opts = this._camera.getLastOptions();
91
+ const dimensions = opts === null || opts === void 0 ? void 0 : opts.dimensions;
92
+ const str = dimensions ? `(${dimensions.width}x${dimensions.height})` : `640x480`;
93
+ sensors.push({
94
+ name: `Camera (${str})`,
95
+ frequencies: [],
96
+ maxSampleLengthS: 60000
97
+ });
98
+ if (this._enableVideo) {
99
+ sensors.push({
100
+ name: 'Video (1280x720)',
101
+ frequencies: [],
102
+ maxSampleLengthS: 60000
103
+ });
104
+ }
105
+ }
106
+ /* eslint-enable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
107
+ return sensors;
108
+ }
109
+ getConnectionType() {
110
+ return 'ip';
111
+ }
112
+ supportsSnapshotStreaming() {
113
+ return true;
114
+ }
115
+ supportsSnapshotStreamingWhileCapturing() {
116
+ return true;
117
+ }
118
+ beforeConnect() {
119
+ return Promise.resolve();
120
+ }
121
+ async startSnapshotStreaming(resolution) {
122
+ this._snapshotStreaming = true;
123
+ this._snapshotStreamingResolution = resolution;
124
+ }
125
+ async stopSnapshotStreaming() {
126
+ this._snapshotStreaming = false;
127
+ }
128
+ async sampleRequest(data, ee) {
129
+ var _a, _b;
130
+ if ((_a = data.sensor) === null || _a === void 0 ? void 0 : _a.startsWith('Camera')) {
131
+ if (!this._camera) {
132
+ throw new Error('Linux daemon was started with --no-camera');
133
+ }
134
+ ee.emit('started');
135
+ let jpg = await new Promise((resolve, reject) => {
136
+ if (!this._camera) {
137
+ return reject('No camera');
138
+ }
139
+ setTimeout(() => {
140
+ reject('Timeout');
141
+ }, 3000);
142
+ this._camera.once('snapshot', buffer => {
143
+ resolve(buffer);
144
+ });
145
+ });
146
+ console.log(SERIAL_PREFIX, 'Uploading sample to', this._config.endpoints.internal.ingestion + data.path + '...');
147
+ ee.emit('uploading');
148
+ await (0, make_image_1.upload)({
149
+ apiKey: this._devKeys.apiKey,
150
+ filename: data.label + '.jpg',
151
+ buffer: jpg,
152
+ allowDuplicates: false,
153
+ category: data.path.indexOf('/training') > -1 ? 'training' : 'testing',
154
+ config: this._config,
155
+ label: { label: data.label, type: 'label' },
156
+ boundingBoxes: undefined,
157
+ metadata: {},
158
+ addDateId: true,
159
+ });
160
+ console.log(SERIAL_PREFIX, 'Sampling finished');
161
+ }
162
+ else if ((_b = data.sensor) === null || _b === void 0 ? void 0 : _b.startsWith('Video')) {
163
+ if (!this._camera) {
164
+ throw new Error('Linux daemon was started with --no-camera');
165
+ }
166
+ console.log(SERIAL_PREFIX, 'Waiting 2 seconds');
167
+ await new Promise((resolve) => setTimeout(resolve, 2000));
168
+ ee.emit('started');
169
+ // give some time to emit...
170
+ await await new Promise((resolve) => setTimeout(resolve, 10));
171
+ let video = new video_recorder_1.VideoRecorder(this._camera, this._sensorVerboseOutput);
172
+ let videoEe = await video.record(data.length);
173
+ videoEe.on('processing', () => ee.emit('processing'));
174
+ let mp4 = await new Promise((resolve, reject) => {
175
+ if (!this._camera) {
176
+ return reject('No camera');
177
+ }
178
+ videoEe.on('error', err => {
179
+ reject(err);
180
+ });
181
+ videoEe.on('done', buffer => {
182
+ resolve(buffer);
183
+ });
184
+ });
185
+ console.log(SERIAL_PREFIX, 'Uploading sample to', this._config.endpoints.internal.ingestion + data.path + '...');
186
+ ee.emit('uploading');
187
+ await (0, make_image_1.upload)({
188
+ apiKey: this._devKeys.apiKey,
189
+ filename: data.label + '.mp4',
190
+ buffer: mp4,
191
+ allowDuplicates: false,
192
+ category: data.path.indexOf('/training') > -1 ? 'training' : 'testing',
193
+ config: this._config,
194
+ label: { label: data.label, type: 'label' },
195
+ boundingBoxes: undefined,
196
+ metadata: {},
197
+ addDateId: true,
198
+ });
199
+ console.log(SERIAL_PREFIX, 'Sampling finished');
200
+ }
201
+ else if (data.sensor === 'Microphone') {
202
+ if (this._microphoneDisabled) {
203
+ throw new Error('Linux daemon was started with --no-microphone');
204
+ }
205
+ let now = Date.now();
206
+ const recorder = new recorder_1.AudioRecorder({
207
+ sampleRate: Math.round(1000 / data.interval),
208
+ channels: 1,
209
+ asRaw: true,
210
+ verbose: this._sensorVerboseOutput,
211
+ });
212
+ console.log(SERIAL_PREFIX, 'Waiting 2 seconds');
213
+ const audio = await recorder.start(this._audioDeviceName || '');
214
+ // sleep 2 seconds before starting...
215
+ await new Promise((resolve) => {
216
+ let time = 2000 - (Date.now() - now);
217
+ if (time > 0) {
218
+ setTimeout(resolve, time);
219
+ }
220
+ else {
221
+ resolve();
222
+ }
223
+ });
224
+ console.log(SERIAL_PREFIX, 'Recording audio...');
225
+ ee.emit('started');
226
+ const audioBuffer = await new Promise((resolve) => {
227
+ let audioBuffers = [];
228
+ let totalAudioLength = 0;
229
+ let bytesNeeded = (Math.round(1000 / data.interval) * (data.length / 1000)) * 2;
230
+ const onData = (b) => {
231
+ audioBuffers.push(b);
232
+ totalAudioLength += b.length;
233
+ if (totalAudioLength > bytesNeeded) {
234
+ resolve(Buffer.concat(audioBuffers).slice(0, bytesNeeded));
235
+ audio.ee.off('data', onData);
236
+ }
237
+ };
238
+ audio.ee.on('data', onData);
239
+ });
240
+ await audio.stop();
241
+ ee.emit('processing');
242
+ let wavFile = this.buildWavFileBuffer(audioBuffer, data.interval);
243
+ console.log(SERIAL_PREFIX, 'Uploading sample to', this._config.endpoints.internal.ingestion + data.path + '...');
244
+ ee.emit('uploading');
245
+ await (0, make_image_1.upload)({
246
+ apiKey: this._devKeys.apiKey,
247
+ filename: data.label + '.wav',
248
+ buffer: wavFile,
249
+ allowDuplicates: false,
250
+ category: data.path.indexOf('/training') > -1 ? 'training' : 'testing',
251
+ config: this._config,
252
+ label: { label: data.label, type: 'label' },
253
+ boundingBoxes: undefined,
254
+ metadata: {},
255
+ addDateId: true,
256
+ });
257
+ console.log(SERIAL_PREFIX, 'Sampling finished');
258
+ }
259
+ else {
260
+ throw new Error('Invalid sensor: ' + data.sensor);
261
+ }
262
+ }
263
+ setAudioDeviceName(deviceName) {
264
+ this._audioDeviceName = deviceName;
265
+ }
266
+ buildWavFileBuffer(data, intervalMs) {
267
+ // let's build a WAV file!
268
+ let wavFreq = 1 / intervalMs * 1000;
269
+ let fileSize = 44 + (data.length);
270
+ let dataSize = (data.length);
271
+ let srBpsC8 = (wavFreq * 16 * 1) / 8;
272
+ let headerArr = new Uint8Array(44);
273
+ let h = [
274
+ 0x52, 0x49, 0x46, 0x46,
275
+ // eslint-disable-next-line no-bitwise
276
+ fileSize & 0xff, (fileSize >> 8) & 0xff, (fileSize >> 16) & 0xff, (fileSize >> 24) & 0xff,
277
+ 0x57, 0x41, 0x56, 0x45,
278
+ 0x66, 0x6d, 0x74, 0x20,
279
+ 0x10, 0x00, 0x00, 0x00,
280
+ 0x01, 0x00,
281
+ 0x01, 0x00,
282
+ // eslint-disable-next-line no-bitwise
283
+ wavFreq & 0xff, (wavFreq >> 8) & 0xff, (wavFreq >> 16) & 0xff, (wavFreq >> 24) & 0xff,
284
+ // eslint-disable-next-line no-bitwise
285
+ srBpsC8 & 0xff, (srBpsC8 >> 8) & 0xff, (srBpsC8 >> 16) & 0xff, (srBpsC8 >> 24) & 0xff,
286
+ 0x02, 0x00, 0x10, 0x00,
287
+ 0x64, 0x61, 0x74, 0x61,
288
+ // eslint-disable-next-line no-bitwise
289
+ dataSize & 0xff, (dataSize >> 8) & 0xff, (dataSize >> 16) & 0xff, (dataSize >> 24) & 0xff,
290
+ ];
291
+ for (let hx = 0; hx < 44; hx++) {
292
+ headerArr[hx] = h[hx];
293
+ }
294
+ return Buffer.concat([Buffer.from(headerArr), data]);
295
+ }
296
+ }
297
+ exports.LinuxDevice = LinuxDevice;
298
+ //# sourceMappingURL=linux-device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-device.js","sourceRoot":"","sources":["../../../cli/linux/linux-device.ts"],"names":[],"mappings":"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"}