From 03124c57c379303995daf21dd4b0c52e23ab2e45 Mon Sep 17 00:00:00 2001 From: keeramis Date: Fri, 12 Jul 2024 11:22:13 -0700 Subject: [PATCH] Add api to get device id --- src/device.js | 20 ++++++++++++++++++++ src/device.test.js | 8 ++++++++ src/request.js | 5 +++++ 3 files changed, 33 insertions(+) diff --git a/src/device.js b/src/device.js index a15f85e..c3af1c8 100644 --- a/src/device.js +++ b/src/device.js @@ -183,6 +183,26 @@ class Device extends DeviceBase { return r.serial; } + /** + * Get the device's id. + * + * Supported platforms: + * - Gen 3 (since Device OS 0.9.0) + * - Gen 2 (since Device OS 1.5.0) + * + * @param {Object} [options] Options. + * @param {Number} [options.timeout] Timeout (milliseconds). + * @return {Promise} + */ + async getDeviceId({ timeout = globalOptions.requestTimeout } = {}) { + const r = await this.sendProtobufRequest( + 'GetDeviceIdRequest', + null, + { timeout } + ); + return r.id; + } + /** * Perform the system reset. * diff --git a/src/device.test.js b/src/device.test.js index 9e43b0e..cb2bdbd 100644 --- a/src/device.test.js +++ b/src/device.test.js @@ -13,6 +13,7 @@ const { RequestError, StateError } = require('./error'); describe('Device', () => { const exampleSerialNumber = 'P046AF1450000FC'; + const exampleIdNumber = '0123456789abcdef'; let usbDevice, p2Platform, device; beforeEach(async () => { usbDevice = new UsbDevice({}); @@ -30,6 +31,13 @@ describe('Device', () => { expect(result).to.eql(exampleSerialNumber); }); + it('provides getDeviceId()', async () => { + sinon.stub(device, 'sendProtobufRequest').resolves({ id: exampleIdNumber }); + const result = await device.getDeviceId(); + expect(device.sendProtobufRequest).to.have.property('callCount', 1); + expect(result).to.eql(exampleIdNumber); + }); + it('provides enterListeningMode()', async () => { sinon.stub(device, 'sendProtobufRequest'); device.sendProtobufRequest.onCall(0).resolves({}); diff --git a/src/request.js b/src/request.js index 5679ce5..00ed9c8 100644 --- a/src/request.js +++ b/src/request.js @@ -2,6 +2,11 @@ const { definitions: proto } = require('@particle/device-os-protobuf'); // Mapping of request types to Protobuf messages const Request = { + GET_DEVICE_ID: { + id: 20, + request: proto.GetDeviceIdRequest, + reply: proto.GetDeviceIdReply + }, GET_SERIAL_NUMBER: { id: 21, request: proto.GetSerialNumberRequest,