Files
T

381 lines
46 KiB
HTML

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" charset="UTF-8">
<title>FirmwareFileHandler</title>
<link href="../../../../images/logo-icon.svg" rel="icon" type="image/svg"><script>var pathToRoot = "../../../../";</script>
<script>document.documentElement.classList.replace("no-js", "js");</script>
<script>const storage = localStorage.getItem("dokka-dark-mode")
if (storage == null) {
const osDarkSchemePreferred = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
if (osDarkSchemePreferred === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
} else {
const savedDarkMode = JSON.parse(storage)
if (savedDarkMode === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
}
</script>
<script type="text/javascript" src="../../../../scripts/sourceset_dependencies.js" async></script>
<link href="../../../../styles/style.css" rel="Stylesheet">
<link href="../../../../styles/main.css" rel="Stylesheet">
<link href="../../../../styles/prism.css" rel="Stylesheet">
<link href="../../../../styles/logo-styles.css" rel="Stylesheet">
<link href="../../../../ui-kit/ui-kit.min.css" rel="Stylesheet">
<script type="text/javascript" src="../../../../scripts/safe-local-storage_blocking.js"></script>
<script type="text/javascript" src="../../../../scripts/navigation-loader.js" async></script>
<script type="text/javascript" src="../../../../scripts/platform-content-handler.js" async></script>
<script type="text/javascript" src="../../../../scripts/main.js" defer></script>
<script type="text/javascript" src="../../../../scripts/prism.js" async></script>
<script type="text/javascript" src="../../../../ui-kit/ui-kit.min.js" defer></script></head>
<body>
<div class="root">
<header class="navigation theme-dark" id="navigation-wrapper" role="banner">
<a class="library-name--link" href="../../../../index.html" tabindex="1">
Meshtastic App
</a> <button class="navigation-controls--btn navigation-controls--btn_toc ui-kit_mobile-only" id="toc-toggle" type="button">Toggle table of contents
</button>
<div class="navigation-controls--break ui-kit_mobile-only"></div>
<div class="library-version" id="library-version">
</div>
<div class="navigation-controls">
<ul class="filter-section filter-section_loading" id="filter-section" aria-label="Target filter">
<button class="platform-tag platform-selector common-like" data-active="" aria-pressed="true" data-filter=":feature:firmware/commonMain">common</button>
<div class="dropdown filter-section--dropdown" data-role="dropdown" id="filter-section-dropdown">
<button class="button button_dropdown filter-section--dropdown-toggle" role="combobox" data-role="dropdown-toggle" aria-controls="platform-tags-listbox" aria-haspopup="listbox" aria-expanded="false" aria-label="Toggle source sets"></button>
<ul role="listbox" id="platform-tags-listbox" class="dropdown--list" data-role="dropdown-listbox" aria-label="Target filter">
<div class="dropdown--header"><span>Target filter</span>
<button class="button" data-role="dropdown-toggle" aria-label="Close target filter">
<i class="ui-kit-icon ui-kit-icon_cross"></i>
</button>
</div>
<li role="option" class="dropdown--option platform-selector-option common-like" tabindex="0">
<label class="checkbox">
<input type="checkbox" class="checkbox--input" id=":feature:firmware/commonMain" data-filter=":feature:firmware/commonMain">
<span class="checkbox--icon"></span>
common
</label>
</li>
</ul>
<div class="dropdown--overlay"></div>
</div>
</ul>
<button class="navigation-controls--btn navigation-controls--btn_theme" id="theme-toggle-button" type="button">Switch theme
</button>
<div class="navigation-controls--btn navigation-controls--btn_search" id="searchBar" role="button">Search in
API
</div>
</div>
</header>
<div id="container">
<nav id="leftColumn" class="sidebar" data-item-type="SECTION" data-item-config="{&quot;defaultSize&quot;: 280, &quot;minSize&quot;: 200, &quot;maxSize&quot;: 400}">
<a class="toc--skip-link" href="#main">Skip to content</a>
<div class="dropdown theme-dark_mobile" data-role="dropdown" id="toc-dropdown">
<ul role="listbox" id="toc-listbox" class="dropdown--list dropdown--list_toc-list" data-role="dropdown-listbox" aria-label="Table of contents">
<div class="dropdown--header">
<span>
Meshtastic App
</span>
<button class="button" data-role="dropdown-toggle" aria-label="Close table of contents">
<i class="ui-kit-icon ui-kit-icon_cross"></i>
</button>
</div>
<div class="sidebar--inner" id="sideMenu"></div>
</ul>
<div class="dropdown--overlay"></div>
</div>
</nav>
<div id="resizer" class="resizer" data-item-type="BAR"></div>
<div id="main" data-item-type="SECTION" role="main">
<div class="main-content" data-page-type="classlike" id="content" pageids="feature-firmware::org.meshtastic.feature.firmware/FirmwareFileHandler///PointingToDeclaration//-803617142">
<div class="breadcrumbs"><a href="../../index.html">feature-firmware</a><span class="delimiter">/</span><a href="../index.html">org.meshtastic.feature.firmware</a><span class="delimiter">/</span><span class="current">FirmwareFileHandler</span></div>
<div class="cover ">
<h1 class="cover"><span>Firmware</span><wbr><span>File</span><wbr><span><span>Handler</span></span></h1>
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">interface </span><a href="index.html">FirmwareFileHandler</a><span class="source-link-wrapper"><span class="source-link" data-element-type="source-link">(<a href="https://github.com/meshtastic/Meshtastic-Android/blob/main/feature/firmware/src/commonMain/kotlin/org/meshtastic/feature/firmware/FirmwareFileHandler.kt#L27">source</a>)</span></span></div><p class="paragraph">Abstraction over platform file and network I/O required by the firmware update pipeline. Implementations live in <code class="lang-kotlin">androidMain</code> and <code class="lang-kotlin">jvmMain</code>.</p><h4 class="tableheader">Inheritors</h4><div class="table"><div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain"><div class="main-subrow keyValue "><div class=""><span class="inline-flex"><div><a href="../../../../feature/firmware/org.meshtastic.feature.firmware/-android-firmware-file-handler/index.html">AndroidFirmwareFileHandler</a></div></span></div><div></div></div></div><div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain"><div class="main-subrow keyValue "><div class=""><span class="inline-flex"><div><a href="../../../../feature/firmware/org.meshtastic.feature.firmware/-jvm-firmware-file-handler/index.html">JvmFirmwareFileHandler</a></div></span></div><div></div></div></div></div></div></div>
</div>
<div class="tabbedcontent">
<div class="tabs-section" tabs-section="tabs-section"><button class="section-tab" data-active="" data-togglable="CONSTRUCTOR,TYPE,PROPERTY,FUNCTION">Members</button></div>
<div class="tabs-section-body">
<div data-togglable="FUNCTION">
<h2 class="tableheader">Functions</h2>
<div class="table"><a data-name="-1313007565%2FFunctions%2F-803617142" anchor-label="checkUrlExists" id="-1313007565%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="check-url-exists.html"><span>check</span><wbr><span>Url</span><wbr><span><span>Exists</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1313007565%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="check-url-exists.html"><span class="token function">checkUrlExists</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">url<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html">Boolean</a></div><div class="brief "><p class="paragraph">Return <code class="lang-kotlin">true</code> if <a href="check-url-exists.html">url</a> is reachable (HTTP HEAD check).</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1003436497%2FFunctions%2F-803617142" anchor-label="cleanupAllTemporaryFiles" id="1003436497%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="cleanup-all-temporary-files.html"><span>cleanup</span><wbr><span>All</span><wbr><span>Temporary</span><wbr><span><span>Files</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1003436497%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">fun </span><a href="cleanup-all-temporary-files.html"><span class="token function">cleanupAllTemporaryFiles</span></a><span class="token punctuation">(</span><span class="token punctuation">)</span></div><div class="brief "><p class="paragraph">Remove all temporary firmware files created during previous update sessions.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1978831944%2FFunctions%2F-803617142" anchor-label="copyToUri" id="-1978831944%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="copy-to-uri.html"><span>copy</span><wbr><span>To</span><wbr><span><span>Uri</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1978831944%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="copy-to-uri.html"><span class="token function">copyToUri</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">source<span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a><span class="token punctuation">, </span></span><span class="parameter ">destinationUri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html">Long</a></div><div class="brief "><p class="paragraph">Copy <a href="copy-to-uri.html">source</a> to the platform URI <a href="copy-to-uri.html">destinationUri</a>, returning the number of bytes written.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-894364018%2FFunctions%2F-803617142" anchor-label="createDocumentInTree" id="-894364018%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="create-document-in-tree.html"><span>create</span><wbr><span>Document</span><wbr><span>In</span><wbr><span><span>Tree</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-894364018%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="create-document-in-tree.html"><span class="token function">createDocumentInTree</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">treeUri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a><span class="token punctuation">, </span></span><span class="parameter ">fileName<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span></span><span class="parameter ">mimeType<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Creates <a href="create-document-in-tree.html">fileName</a> inside <a href="create-document-in-tree.html">treeUri</a> and returns a URI to write to, or <code class="lang-kotlin">null</code> on failure.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1077426444%2FFunctions%2F-803617142" anchor-label="deleteFile" id="-1077426444%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="delete-file.html"><span>delete</span><wbr><span><span>File</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1077426444%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="delete-file.html"><span class="token function">deleteFile</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">file<span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a></span></span><span class="token punctuation">)</span></div><div class="brief "><p class="paragraph">Delete a single firmware <a href="delete-file.html">file</a> from local storage.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-2133381172%2FFunctions%2F-803617142" anchor-label="downloadFile" id="-2133381172%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="download-file.html"><span>download</span><wbr><span><span>File</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-2133381172%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="download-file.html"><span class="token function">downloadFile</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">url<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span></span><span class="parameter ">fileName<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span></span><span class="parameter ">onProgress<span class="token operator">: </span><span class="token punctuation">(</span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html">Float</a><span class="token punctuation">)</span><span class="token operator"> -&gt; </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html">Unit</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Download a file from <a href="download-file.html">url</a>, saving it as <a href="download-file.html">fileName</a> in a temporary directory.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1519994641%2FFunctions%2F-803617142" anchor-label="extractFirmware" id="1519994641%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="extract-firmware.html"><span>extract</span><wbr><span><span>Firmware</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1519994641%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="extract-firmware.html"><span class="token function">extractFirmware</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">uri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a><span class="token punctuation">, </span></span><span class="parameter ">hardware<span class="token operator">: </span><a href="../../../../core/model/org.meshtastic.core.model/-device-hardware/index.html">DeviceHardware</a><span class="token punctuation">, </span></span><span class="parameter ">fileExtension<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span></span><span class="parameter ">preferredFilename<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token operator">?</span><span class="token operator"> = </span>null</span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Extract a matching firmware binary from a platform URI (e.g. content:// or file://) zip archive.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="694856797%2FFunctions%2F-803617142" anchor-label="extractFirmwareFromZip" id="694856797%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="extract-firmware-from-zip.html"><span>extract</span><wbr><span>Firmware</span><wbr><span>From</span><wbr><span><span>Zip</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="694856797%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="extract-firmware-from-zip.html"><span class="token function">extractFirmwareFromZip</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">zipFile<span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a><span class="token punctuation">, </span></span><span class="parameter ">hardware<span class="token operator">: </span><a href="../../../../core/model/org.meshtastic.core.model/-device-hardware/index.html">DeviceHardware</a><span class="token punctuation">, </span></span><span class="parameter ">fileExtension<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span></span><span class="parameter ">preferredFilename<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token operator">?</span><span class="token operator"> = </span>null</span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Extract a matching firmware binary from a previously-downloaded zip <a href="../-firmware-artifact/index.html">FirmwareArtifact</a>.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-923333955%2FFunctions%2F-803617142" anchor-label="extractZipEntries" id="-923333955%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="extract-zip-entries.html"><span>extract</span><wbr><span>Zip</span><wbr><span><span>Entries</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-923333955%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="extract-zip-entries.html"><span class="token function">extractZipEntries</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">artifact<span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html">Map</a><span class="token operator">&lt;</span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token punctuation">, </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html">ByteArray</a><span class="token operator">&gt;</span></div><div class="brief "><p class="paragraph">Extract all entries from a zip <a href="extract-zip-entries.html">artifact</a> into a <code class="lang-kotlin">Map&lt;entryName, bytes&gt;</code>. Used by the DFU handler to parse Nordic DFU packages.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1085816069%2FFunctions%2F-803617142" anchor-label="fetchText" id="1085816069%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="fetch-text.html"><span>fetch</span><wbr><span><span>Text</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1085816069%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="fetch-text.html"><span class="token function">fetchText</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">url<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Fetch the UTF-8 text body of <a href="fetch-text.html">url</a>, returning <code class="lang-kotlin">null</code> on any HTTP or network error.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1258028505%2FFunctions%2F-803617142" anchor-label="getDisplayName" id="-1258028505%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="get-display-name.html"><span>get</span><wbr><span>Display</span><wbr><span><span>Name</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1258028505%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="get-display-name.html"><span class="token function">getDisplayName</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">uri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Resolve a user-visible display filename for <a href="get-display-name.html">uri</a>, or <code class="lang-kotlin">null</code> when the provider does not expose one.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="611811674%2FFunctions%2F-803617142" anchor-label="getFileSize" id="611811674%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="get-file-size.html"><span>get</span><wbr><span>File</span><wbr><span><span>Size</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="611811674%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="get-file-size.html"><span class="token function">getFileSize</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">file<span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html">Long</a></div><div class="brief "><p class="paragraph">Return the size in bytes of the given firmware <a href="get-file-size.html">file</a>.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1288893549%2FFunctions%2F-803617142" anchor-label="importFromUri" id="-1288893549%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="import-from-uri.html"><span>import</span><wbr><span>From</span><wbr><span><span>Uri</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1288893549%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="import-from-uri.html"><span class="token function">importFromUri</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">uri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Copy a platform URI into a temporary <a href="../-firmware-artifact/index.html">FirmwareArtifact</a> so it can be read with <a href="read-bytes.html">readBytes</a>. Returns <code class="lang-kotlin">null</code> when the URI cannot be resolved.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1477667492%2FFunctions%2F-803617142" anchor-label="isDestinationReadable" id="-1477667492%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="is-destination-readable.html"><span>is</span><wbr><span>Destination</span><wbr><span><span>Readable</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1477667492%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="is-destination-readable.html"><span class="token function">isDestinationReadable</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">destinationUri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html">Boolean</a></div><div class="brief "><p class="paragraph">True when <a href="is-destination-readable.html">destinationUri</a> can still be opened for reading.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1503839839%2FFunctions%2F-803617142" anchor-label="isRemovableDestination" id="-1503839839%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="is-removable-destination.html"><span>is</span><wbr><span>Removable</span><wbr><span><span>Destination</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1503839839%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="is-removable-destination.html"><span class="token function">isRemovableDestination</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">destinationUri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html">Boolean</a></div><div class="brief "><p class="paragraph">Best-effort check that <a href="is-removable-destination.html">destinationUri</a> names a location on removable storage — i.e. plausibly a mounted UF2 bootloader drive rather than internal storage.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-1280118152%2FFunctions%2F-803617142" anchor-label="readBytes" id="-1280118152%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="read-bytes.html"><span>read</span><wbr><span><span>Bytes</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1280118152%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="read-bytes.html"><span class="token function">readBytes</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">artifact<span class="token operator">: </span><a href="../-firmware-artifact/index.html">FirmwareArtifact</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html">ByteArray</a></div><div class="brief "><p class="paragraph">Read the raw bytes of a <a href="../-firmware-artifact/index.html">FirmwareArtifact</a>.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="369846748%2FFunctions%2F-803617142" anchor-label="readSiblingText" id="369846748%2FFunctions%2F-803617142" data-filterable-set=":feature:firmware/commonMain"></a>
<div class="table-row table-row_content" data-filterable-current=":feature:firmware/commonMain" data-filterable-set=":feature:firmware/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="read-sibling-text.html"><span>read</span><wbr><span>Sibling</span><wbr><span><span>Text</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="369846748%2FFunctions%2F-803617142"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":feature:firmware/commonMain"><div class="symbol monospace"><span class="token keyword">abstract </span><span class="token keyword">suspend </span><span class="token keyword">fun </span><a href="read-sibling-text.html"><span class="token function">readSiblingText</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">treeUri<span class="token operator">: </span><a href="../../../../core/common/org.meshtastic.core.common.util/-common-uri/index.html">CommonUri</a><span class="token punctuation">, </span></span><span class="parameter ">fileName<span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html">String</a><span class="token operator">?</span></div><div class="brief "><p class="paragraph">Reads a file sitting alongside the documents in <a href="read-sibling-text.html">treeUri</a>, or <code class="lang-kotlin">null</code> when it is absent or unreadable.</p></div></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="footer--container">
<a href="#content" id="go-to-top-link" class="footer--button footer--button_go-to-top"></a>
<div class="footer--content">
<div>
<span>Generated by </span>
<a class="footer--link footer--link_external" href="https://github.com/Kotlin/dokka">
Dokka
</a>
<div>© 2026 Copyright</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>