From 85aa7a37b9614112948b4e9b17eb045cf5724b6d Mon Sep 17 00:00:00 2001 From: Henri Bergius Date: Wed, 27 Aug 2025 18:46:14 -0400 Subject: [PATCH] Methods for setting/removing fixed position (#802) * Method for setting fixed position * Implement removeFixedPosition * Fix formatting --- packages/core/src/meshDevice.ts | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/packages/core/src/meshDevice.ts b/packages/core/src/meshDevice.ts index 37b705c8..1ba7a13c 100755 --- a/packages/core/src/meshDevice.ts +++ b/packages/core/src/meshDevice.ts @@ -378,6 +378,53 @@ export class MeshDevice { ); } + /** + * Sets the fixed position of a device. Can be used to + * position GPS-less devices. + */ + public async setFixedPosition( + latitude: number, + longitude: number, + ): Promise { + const setPositionMessage = create(Protobuf.Admin.AdminMessageSchema, { + payloadVariant: { + case: "setFixedPosition", + value: create(Protobuf.Mesh.PositionSchema, { + latitudeI: Math.floor(latitude / 1e-7), + longitudeI: Math.floor(longitude / 1e-7), + }), + }, + }); + return await this.sendPacket( + toBinary(Protobuf.Admin.AdminMessageSchema, setPositionMessage), + Protobuf.Portnums.PortNum.ADMIN_APP, + "self", + 0, + true, + false, + ); + } + + /** + * Remove the fixed position of a device + */ + public async removeFixedPosition(): Promise { + const removePositionMessage = create(Protobuf.Admin.AdminMessageSchema, { + payloadVariant: { + case: "removeFixedPosition", + value: true, + }, + }); + return await this.sendPacket( + toBinary(Protobuf.Admin.AdminMessageSchema, removePositionMessage), + Protobuf.Portnums.PortNum.ADMIN_APP, + "self", + 0, + true, + false, + ); + } + /** * Gets specified channel information from the radio */