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 */