You can integrate this library in your project using the npm package:
$ npm install @microbit/microbit-fs
Initialise a filesystem with a MicroPython Intel Hex string using MicropythonFsHex class.
import { MicropythonFsHex } from "@microbit/microbit-fs";
// Create a new FileSystem instance passing the MicroPython Intel Hex string
let micropythonFs = new MicropythonFsHex(intelHexStr);
// There are some options available in the constructor
micropythonFs = new MicropythonFsHex(intelHexStr, { maxFsSize: 20 * 1024});
Import files from a different MicroPython hex file with filesystem using importFilesFromIntelHex.
let addedFilenames = micropythonFs.importFilesFromIntelHex(uploadedHexWithUserFiles);
addedFilenames = micropythonFs.importFilesFromIntelHex(uploadedHexWithUserFiles, {overwrite: false, formatFirst: false});
File operations are on the MicropythonFsHex class.
micropythonFs.create('filename.txt', 'Error thrown if file already exists.');
micropythonFs.write('filename.txt', 'Create or overwrite a file.');
micropythonFs.append('filename.txt', 'Add additional content.');
const fileContent = micropythonFs.read('filename.txt');
const fileContentByteArray = micropythonFs.readBytes('filename.txt');
if (micropythonFs.exists('filename.txt')) {
micropythonFs.remove('filename.txt');
}
const fileSizeInBytes = micropythonFs.size('filename.txt');
const fileList = micropythonFs.ls();
MicropythonFsHex can query storage usage:
// Filesystem size information
const fsSize = micropythonFs.getStorageSize();
const fsAvailableSize = micropythonFs.getStorageUsed();
const fsUsedSize = micropythonFs.getStorageRemaining();
// You can also provide an artificial storage size
micropythonFs.setStorageSize(20 * 1024);
// Generate a new hex string or Uint8Array with MicroPython and the files
const intelHexStrWithFs = micropythonFs.getIntelHex();
const intelHexBytesWithFs = micropythonFs.getIntelHexBytes();
You can create a Universal Hex by passing a hex for each board version to the MicropythonFsHex constructor:
import { MicropythonFsHex, microbitBoardId } from "@microbit/microbit-fs";
// Create a new FileSystem instance passing the MicroPython Intel Hex string
const micropythonFs = new MicropythonFsHex([
{ hex: uPy1HexFile, boardId: microbitBoardId.V1 },
{ hex: uPy2HexFile, boardId: microbitBoardId.V2 },
]);;
// Import files from a different MicroPython Intel hex file with filesystem
let addedFilenames = micropythonFs.importFilesFromIntelHex(uploadedHexWithUserFiles);
addedFilenames = micropythonFs.importFilesFromIntelHex(uploadedHexWithUserFiles, {overwrite: false, formatFirst: false});
// Generate a new Intel hex string or Uint8Array with MicroPython and the files
const uPy1IntelHexStrWithFs = micropythonFs.getIntelHex(microbitBoardId.V1);
const uPy1IntelHexBytesWithFs = micropythonFs.getIntelHexBytes(microbitBoardId.V1);
const uPy2IntelHexStrWithFs = micropythonFs.getIntelHex(microbitBoardId.V2);
const uPy2IntelHexBytesWithFs = micropythonFs.getIntelHexBytes(microbitBoardId.V2);
// Generate a new Universal hex string with all MicroPython+files data
const universalHexStrWithFs = micropythonFs.getUniversalHex();
To add and remove the Python code use addIntelHexAppendedScript:
import { isAppendedScriptPresent, getIntelHexAppendedScript, addIntelHexAppendedScript } from "@microbit/microbit-fs";
const finalHexStr = addIntelHexAppendedScript(originalIntelHexStr, 'print("hello world!")');
if (isAppendedScriptPresent(finalHexStr)) {
const pythonCode = getIntelHexAppendedScript(finalHexStr);
}
To read device memory information use getIntelHexDeviceMemInfo:
import {getIntelHexDeviceMemInfo} from "@microbit/microbit-fs";
const deviceMemInfoData = getIntelHexDeviceMemInfo(intelHexStr);
console.log('Flash Page Size:' + deviceMemInfoData.flashPageSize);
console.log('Flash Size:' + deviceMemInfoData.flashSize);
console.log('Flash Start Address:' + deviceMemInfoData.flashStartAddress);
console.log('Flash End Address:' + deviceMemInfoData.flashEndAddress);
console.log('Runtime Start Address:' + deviceMemInfoData.runtimeStartAddress);
console.log('Runtime End Address:' + deviceMemInfoData.runtimeEndAddress);
console.log('Filesystem Start Address:' + deviceMemInfoData.fsStartAddress);
console.log('Filesystem End Address:' + deviceMemInfoData.fsEndAddress);
console.log('MicroPython Version:' + deviceMemInfoData.uPyVersion);
console.log('Device Version: ' + deviceMemInfoData.deviceVersion);