diff --git a/package.json b/package.json index 779e384..f1a0a85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arduino-create-agent-js-client", - "version": "2.4.9", + "version": "2.5.0", "description": "JS module providing discovery of the Arduino Create Plugin and communication with it", "main": "lib/index.js", "module": "es/index.js", diff --git a/src/firmware-updater.js b/src/firmware-updater.js index 299e643..dad34a1 100644 --- a/src/firmware-updater.js +++ b/src/firmware-updater.js @@ -16,10 +16,17 @@ const FWUToolStatusEnum = Object.freeze({ }); /* The signatures needed to run the commands to use the Firmware Updater Tool */ -let signaturesEnum = fwupdaterSignatures; +let signatures = fwupdaterSignatures; let updaterBinaryName = 'FirmwareUploader'; +function programmerFor(boardId) { + if (boardId === 'uno2018') return ['{runtime.tools.avrdude}/bin/avrdude', signatures.UPLOAD_FIRMWARE_AVRDUDE]; + if (boardId === 'nanorp2040connect') return [`{runtime.tools.rp2040tools.path}/rp2040load`, signatures.UPLOAD_FIRMWARE_RP2040]; + + return [`{runtime.tools.bossac}/bossac`, signatures.UPLOAD_FIRMWARE_BOSSAC]; +} + export default class FirmwareUpdater { constructor(Daemon) { this.updateStatusEnum = Object.freeze({ @@ -57,7 +64,7 @@ export default class FirmwareUpdater { setToolVersion(version) { this.toolVersion = version; if (semverCompare(version, '0.1.2') < 0) { - signaturesEnum = oldFwupdaterSignatures; + signatures = oldFwupdaterSignatures; updaterBinaryName = 'updater'; } } @@ -119,7 +126,7 @@ export default class FirmwareUpdater { board: boardId, port, commandline: `"{runtime.tools.fwupdater.path}/${updaterBinaryName}" -get_available_for {network.password}`, - signature: signaturesEnum.GET_FIRMWARE_INFO, + signature: signatures.GET_FIRMWARE_INFO, extra: { auth: { password: boardId @@ -196,8 +203,7 @@ export default class FirmwareUpdater { } }); - const isUsingAvrdude = boardId === 'uno2018'; - const programmer = isUsingAvrdude ? '{runtime.tools.avrdude}/bin/avrdude' : '{runtime.tools.bossac}/bossac'; + const [programmer, signature] = programmerFor(boardId); if (!this.loaderPath) { this.updating.next({ status: this.updateStatusEnum.ERROR, err: `Can't update Firmware: 'loaderPath' is empty or 'null'` }); @@ -214,7 +220,7 @@ export default class FirmwareUpdater { password: `"${this.loaderPath}" -firmware "${this.firmwareVersionData.Path}" ${addresses}`, }, }, - signature: isUsingAvrdude ? signaturesEnum.UPLOAD_FIRMWARE_AVRDUDE : signaturesEnum.UPLOAD_FIRMWARE_BOSSAC, + signature, filename: 'CheckFirmwareVersion.bin', }; @@ -237,4 +243,4 @@ export default class FirmwareUpdater { this.getFirmwareInfo(boardId, port, firmwareVersion); }); } -} +} \ No newline at end of file diff --git a/src/signatures.js b/src/signatures.js index 3109991..f674b32 100644 --- a/src/signatures.js +++ b/src/signatures.js @@ -3,6 +3,7 @@ export const fwupdaterSignatures = Object.freeze({ GET_FIRMWARE_INFO: '5aae0c2b9cfa783ab6d791491b6ebcb7ffb69644dcc8984def2a5f69029a46701dc8c95fc38a60efebb78c2802b6d172d7f38852b44ae1d2697c0211b6ac389f574c4ff85593ccae55e7c8c415f8d07f932fc64aec620ddb925dbd97b77cf395b9929911b6d4c40b8d3d5a4720a0613fe301344a45f505a430c956a527831896b42fddd0f737d630a3dc3714ce421bd30e9229b2ed503667a915bfc696b6221759640ff492e37356ef025ba9802d578227b8f15fd0f647c395bf73a84adf7a57281c31bc743ca92c09f8eec64d428acd25ced8f8420fdbf989db3625662970d3f16693fec44a418e8c7b12e9f4e94d353e4d6f6876bd74fc543eaeba20a09dc6', UPLOAD_FIRMWARE_BOSSAC: 'a965a14ec42c35a67f8d2f3f5235aaacbcc1b998b367d07a02d12992ec691f1723d00f0c3c1c64566e10823cca4947d7dd91e9ba4b28dffc112953f4ccf230adca274133f14ab3a13697c932c6c19ba05b4cd6d93141a31977ce7a53b253d761e2a503f55599a03605264d32e31c938966041709a824e64ddb0a2371e68c8d298dcd93cc8d451b8df1a7c1244e30b310fb10ec13448df3238bd0db5be0d1ec938b82b7c4f81262155c75b805700d0ff20b0404e27142014a2d74c3db677f32854dcda9052ccad9028e16cfb5151c09763e93a3a285be226dac849c519d79301962488c92723781d6a2063ee0021fa9f2c8d2dfcb7a6f01bcb4dbcd6b9f0d6322', UPLOAD_FIRMWARE_AVRDUDE: '67e99fc73b0c9359219d30c11851d728a5e5559426c0151518aa947b48af3f58de4d0997143cad18bc1a2f6ae22863baab2e8b0de6fff549185f3dc82cbcce44690e0c50a92cebf0bd4377ae85f3961330c5fda40f3a567242eb74fe3d937b1abfe8be77a9fd658eed1a765bbc264702577fdd63da8d3073dd36dcdd37dc5762b162e18c284715012c1f303c77475703a5c8ef8bfc685e1650eb26058016d771bd4f53929a51666aef70126aabda80431671eb2ba9b729ee166079abac806567b9ae63ce2801f88964250596b8450fda112ac43b868634b91cb59d91d13c286d3ec19eb4a840d3af89413d24b198e2da616cb2bbff45cc58645aa1b1d52f71bf', + UPLOAD_FIRMWARE_RP2040: '422df04bfb4fc0eea4df716b3d9b075558c6094a2953795cf0f9cfdc58e97f9df80f51f8981d11e23a17fe1c220a164a87e24e1b10442cb6e06bda96737f1c30d7ef5928f4d926428a36ff4ea7d6cd379d2d755cda76f1fc9884628da519197007f9db1233401af387a6684f2a74855168f878d8c67239d99fdf7597379650cd9df6a56c430dc09ccc14fec3ceba56b9a0ab1e7b0a71cb9c9016ee3595a7d914e14d9f333a388aca31093ec77f347ceb0ed3f1d57861c7304bf53e45188ce3a976d294afd1e919496856b760dc708cb2db5cde585c44e8f023ad3ef2353edee5d172c2da936e321bbf11dec51779447534465df9c275eb391f1ada2c089ecb15', });