@mentra/engine 3.2.0-dev.217 → 3.2.0-dev.222
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/generated/releaseMetadata.js +5 -5
- package/build/generated/releaseMetadata.js.map +1 -1
- package/build/index.d.ts +3 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/build/react/MentraLiveOtaFlow.d.ts.map +1 -1
- package/build/react/MentraLiveOtaFlow.js +19 -3
- package/build/react/MentraLiveOtaFlow.js.map +1 -1
- package/build/react/useMentraLiveOta.d.ts +12 -0
- package/build/react/useMentraLiveOta.d.ts.map +1 -1
- package/build/react/useMentraLiveOta.js +31 -5
- package/build/react/useMentraLiveOta.js.map +1 -1
- package/build/services/AcsMeetingService.d.ts +360 -10
- package/build/services/AcsMeetingService.d.ts.map +1 -1
- package/build/services/AcsMeetingService.js +836 -19
- package/build/services/AcsMeetingService.js.map +1 -1
- package/build/services/AudioPlaybackService.d.ts +6 -0
- package/build/services/AudioPlaybackService.d.ts.map +1 -1
- package/build/services/AudioPlaybackService.js +4 -3
- package/build/services/AudioPlaybackService.js.map +1 -1
- package/build/services/GlassesMicProbe.d.ts +78 -0
- package/build/services/GlassesMicProbe.d.ts.map +1 -0
- package/build/services/GlassesMicProbe.js +258 -0
- package/build/services/GlassesMicProbe.js.map +1 -0
- package/build/services/LocalMiniappRuntime.d.ts +83 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +714 -39
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- package/build/services/MentraJSLogPipeline.d.ts +39 -0
- package/build/services/MentraJSLogPipeline.d.ts.map +1 -1
- package/build/services/MentraJSLogPipeline.js +59 -3
- package/build/services/MentraJSLogPipeline.js.map +1 -1
- package/build/services/MentraJSRouter.d.ts +1 -1
- package/build/services/MentraJSRouter.d.ts.map +1 -1
- package/build/services/MentraJSRouter.js +2 -2
- package/build/services/MentraJSRouter.js.map +1 -1
- package/build/services/MicStateCoordinator.d.ts +22 -0
- package/build/services/MicStateCoordinator.d.ts.map +1 -1
- package/build/services/MicStateCoordinator.js +34 -3
- package/build/services/MicStateCoordinator.js.map +1 -1
- package/build/services/OtaErrorMapping.d.ts +25 -2
- package/build/services/OtaErrorMapping.d.ts.map +1 -1
- package/build/services/OtaErrorMapping.js +68 -23
- package/build/services/OtaErrorMapping.js.map +1 -1
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
- package/build/services/OtaInstallCoordinator.js +6 -1
- package/build/services/OtaInstallCoordinator.js.map +1 -1
- package/build/services/PhoneStreamCoordinator.d.ts +8 -0
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
- package/build/services/PhoneStreamCoordinator.js +2 -0
- package/build/services/PhoneStreamCoordinator.js.map +1 -1
- package/build/services/SoftapCallTransport.d.ts +365 -0
- package/build/services/SoftapCallTransport.d.ts.map +1 -0
- package/build/services/SoftapCallTransport.js +722 -0
- package/build/services/SoftapCallTransport.js.map +1 -0
- package/build/services/SoftapCleanupBarrier.d.ts +45 -0
- package/build/services/SoftapCleanupBarrier.d.ts.map +1 -0
- package/build/services/SoftapCleanupBarrier.js +51 -0
- package/build/services/SoftapCleanupBarrier.js.map +1 -0
- package/build/utils/pcm16.d.ts +35 -0
- package/build/utils/pcm16.d.ts.map +1 -0
- package/build/utils/pcm16.js +85 -0
- package/build/utils/pcm16.js.map +1 -0
- package/build/utils/softapTrace.d.ts +39 -0
- package/build/utils/softapTrace.d.ts.map +1 -0
- package/build/utils/softapTrace.js +124 -0
- package/build/utils/softapTrace.js.map +1 -0
- package/package.json +7 -7
- package/src/generated/releaseMetadata.ts +5 -5
- package/src/index.ts +8 -0
- package/src/react/MentraLiveOtaFlow.tsx +22 -3
- package/src/react/useMentraLiveOta.ts +44 -6
- package/src/services/AcsMeetingService.ts +956 -22
- package/src/services/AudioPlaybackService.ts +12 -3
- package/src/services/GlassesMicProbe.ts +300 -0
- package/src/services/LocalMiniappRuntime.ts +775 -42
- package/src/services/MentraJSLogPipeline.ts +70 -3
- package/src/services/MentraJSRouter.ts +2 -2
- package/src/services/MicStateCoordinator.ts +35 -3
- package/src/services/OtaErrorMapping.ts +77 -25
- package/src/services/OtaInstallCoordinator.ts +6 -1
- package/src/services/PhoneStreamCoordinator.ts +10 -0
- package/src/services/SoftapCallTransport.ts +928 -0
- package/src/services/SoftapCleanupBarrier.ts +72 -0
- package/src/utils/pcm16.ts +93 -0
- package/src/utils/softapTrace.ts +133 -0
|
@@ -12,9 +12,9 @@ export interface EngineReleaseMetadata {
|
|
|
12
12
|
export const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({
|
|
13
13
|
"schemaVersion": 1,
|
|
14
14
|
"familyBaseVersion": "3.2.0",
|
|
15
|
-
"releaseIdentity": "3.2.0-dev.
|
|
16
|
-
"releaseSetId": "mentra-3.2.0-dev.
|
|
17
|
-
"sourceCommit": "
|
|
18
|
-
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.
|
|
19
|
-
"otaManifestSha256": "
|
|
15
|
+
"releaseIdentity": "3.2.0-dev.222",
|
|
16
|
+
"releaseSetId": "mentra-3.2.0-dev.222",
|
|
17
|
+
"sourceCommit": "7865d7f192a2d9a732269857bb877a3a8a6bf4b8",
|
|
18
|
+
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.222.json",
|
|
19
|
+
"otaManifestSha256": "8c33e8beb5ba61eb0821d89b58d81fe2bbf05641d0a99b2e1972926863cc6ab7"
|
|
20
20
|
})
|
package/src/index.ts
CHANGED
|
@@ -119,7 +119,13 @@ export {
|
|
|
119
119
|
export type {OtaAutoChainAdvanceResult} from "./services/OtaAutoChain"
|
|
120
120
|
export {
|
|
121
121
|
BES_INSTALL_RESTART_MESSAGE,
|
|
122
|
+
OTA_ERROR_BES_RESTART_REQUIRED_COPY_KEY,
|
|
123
|
+
OTA_ERROR_ENGLISH_COPY,
|
|
124
|
+
OTA_ERROR_GENERIC_COPY_KEY,
|
|
125
|
+
OTA_ERROR_UNKNOWN_GLASSES_COPY_KEY,
|
|
126
|
+
OTA_GLASSES_ERROR_COPY_KEYS,
|
|
122
127
|
getOtaErrorMessage,
|
|
128
|
+
otaErrorCopyKey,
|
|
123
129
|
shouldRequireGlassesRebootForBesFailure,
|
|
124
130
|
shouldShowChangeWifiForOtaDownloadFailure,
|
|
125
131
|
} from "./services/OtaErrorMapping"
|
|
@@ -190,6 +196,8 @@ export {
|
|
|
190
196
|
} from "./utils/devMiniappSnapshot"
|
|
191
197
|
export {HardwareCompatibility, type CompatibilityResult} from "./utils/hardware"
|
|
192
198
|
export {BgTimer, throttle, debounce} from "./utils/timers"
|
|
199
|
+
export {default as glassesMicProbe, parseMicProbeParams} from "./services/GlassesMicProbe"
|
|
200
|
+
export type {MicProbeA2dpMode, MicProbeOptions, MicProbeSample} from "./services/GlassesMicProbe"
|
|
193
201
|
|
|
194
202
|
// Hardware types and capability profiles.
|
|
195
203
|
export {
|
|
@@ -14,10 +14,12 @@ import {useMarkdown, type MarkedStyles, type useMarkdownHookOptions} from "react
|
|
|
14
14
|
import {SafeAreaView} from "react-native-safe-area-context"
|
|
15
15
|
import Svg, {Path, Rect} from "react-native-svg"
|
|
16
16
|
|
|
17
|
+
import {OTA_ERROR_ENGLISH_COPY} from "../services/OtaErrorMapping"
|
|
17
18
|
import {
|
|
18
19
|
MINIMUM_OTA_BATTERY_LEVEL,
|
|
19
20
|
useMentraLiveOta,
|
|
20
21
|
type MentraLiveOtaController,
|
|
22
|
+
type MentraLiveOtaError,
|
|
21
23
|
type MentraLiveOtaFlowPage,
|
|
22
24
|
} from "./useMentraLiveOta"
|
|
23
25
|
|
|
@@ -142,6 +144,8 @@ const ENGLISH_COPY: Record<string, string> = {
|
|
|
142
144
|
"ota:versionChangeFirmwarePassComplete": "Firmware updated",
|
|
143
145
|
"ota:versionChangeFirmwarePassCompleteMessage":
|
|
144
146
|
"Your glasses restarted with new firmware. One more step: they'll now continue to the required version.",
|
|
147
|
+
"ota:updateFailed": "Update Failed",
|
|
148
|
+
...OTA_ERROR_ENGLISH_COPY,
|
|
145
149
|
}
|
|
146
150
|
|
|
147
151
|
const componentCopyKey = {
|
|
@@ -150,8 +154,17 @@ const componentCopyKey = {
|
|
|
150
154
|
bes: "ota:componentBes",
|
|
151
155
|
} as const
|
|
152
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Copy for the failed screen: the translated copy key when the failure maps to one,
|
|
159
|
+
* otherwise the engine's English message (phone-side watchdog and preflight text).
|
|
160
|
+
*/
|
|
161
|
+
function failureMessage(error: MentraLiveOtaError | null, translate: MentraLiveOtaFlowTranslate): string {
|
|
162
|
+
if (!error) return translate("ota:errorGeneric")
|
|
163
|
+
return error.copyKey ? translate(error.copyKey) : error.message
|
|
164
|
+
}
|
|
165
|
+
|
|
153
166
|
function defaultTranslate(key: string, options?: Record<string, string>): string {
|
|
154
|
-
let value = ENGLISH_COPY[key]
|
|
167
|
+
let value = Object.prototype.hasOwnProperty.call(ENGLISH_COPY, key) ? ENGLISH_COPY[key] : key
|
|
155
168
|
for (const [name, replacement] of Object.entries(options ?? {})) {
|
|
156
169
|
value = value.replaceAll(`{{${name}}}`, replacement)
|
|
157
170
|
}
|
|
@@ -559,8 +572,13 @@ function OtaFlowContent({
|
|
|
559
572
|
}
|
|
560
573
|
colors={colors}
|
|
561
574
|
icon="alert"
|
|
562
|
-
title="
|
|
563
|
-
<BodyText colors={colors}>{state.error
|
|
575
|
+
title={translate("ota:updateFailed")}>
|
|
576
|
+
<BodyText colors={colors}>{failureMessage(state.error, translate)}</BodyText>
|
|
577
|
+
{state.error?.glassesCode ? (
|
|
578
|
+
<Text style={[styles.errorCode, {color: colors.textDim}]} testID="ota-error-code">
|
|
579
|
+
{translate("ota:errorCode", {code: state.error.glassesCode})}
|
|
580
|
+
</Text>
|
|
581
|
+
) : null}
|
|
564
582
|
</FlowPage>
|
|
565
583
|
)
|
|
566
584
|
}
|
|
@@ -810,6 +828,7 @@ const styles = StyleSheet.create({
|
|
|
810
828
|
icon: {fontSize: 64, fontWeight: "500", lineHeight: 72, textAlign: "center"},
|
|
811
829
|
title: {fontSize: 20, fontWeight: "600", textAlign: "center"},
|
|
812
830
|
body: {fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: "center"},
|
|
831
|
+
errorCode: {fontSize: 12, fontVariant: ["tabular-nums"], lineHeight: 16, opacity: 0.7, textAlign: "center"},
|
|
813
832
|
percent: {fontSize: 30, fontVariant: ["tabular-nums"], fontWeight: "700"},
|
|
814
833
|
progressTrack: {borderRadius: 4, height: 8, maxWidth: 420, overflow: "hidden", width: "100%"},
|
|
815
834
|
progressFill: {borderRadius: 4, height: 8},
|
|
@@ -14,7 +14,9 @@ import {
|
|
|
14
14
|
} from "../services/OtaAutoChain"
|
|
15
15
|
import {
|
|
16
16
|
BES_INSTALL_RESTART_MESSAGE,
|
|
17
|
+
OTA_ERROR_BES_RESTART_REQUIRED_COPY_KEY,
|
|
17
18
|
getOtaErrorMessage,
|
|
19
|
+
otaErrorCopyKey,
|
|
18
20
|
shouldRequireGlassesRebootForBesFailure,
|
|
19
21
|
shouldShowChangeWifiForOtaDownloadFailure,
|
|
20
22
|
} from "../services/OtaErrorMapping"
|
|
@@ -54,7 +56,19 @@ export type MentraLiveOtaErrorCode =
|
|
|
54
56
|
|
|
55
57
|
export type MentraLiveOtaError = {
|
|
56
58
|
code: MentraLiveOtaErrorCode
|
|
59
|
+
/** English copy for hosts without localization. */
|
|
57
60
|
message: string
|
|
61
|
+
/**
|
|
62
|
+
* Copy key for `message` when the failure maps to known copy, so localized hosts can
|
|
63
|
+
* translate it. Null for phone-side watchdog and preflight messages, which are English-only.
|
|
64
|
+
* Optional so host code that builds this type by hand keeps compiling; the hook always sets it.
|
|
65
|
+
*/
|
|
66
|
+
copyKey?: string | null
|
|
67
|
+
/**
|
|
68
|
+
* Raw failure code reported by the glasses (`ota_status.error`), for support. Null when the
|
|
69
|
+
* failure originated on the phone. Optional for the same source-compatibility reason.
|
|
70
|
+
*/
|
|
71
|
+
glassesCode?: string | null
|
|
58
72
|
}
|
|
59
73
|
|
|
60
74
|
export type MentraLiveOtaTransport = "wifi" | "hotspot"
|
|
@@ -680,9 +694,16 @@ export function useMentraLiveOta(options: UseMentraLiveOtaOptions = {}): MentraL
|
|
|
680
694
|
error = {
|
|
681
695
|
code: "check_failed",
|
|
682
696
|
message: "Couldn't check for updates. Please check your connection and try again.",
|
|
697
|
+
copyKey: "ota:checkFailedMessage",
|
|
698
|
+
glassesCode: null,
|
|
683
699
|
}
|
|
684
700
|
} else if (screen === "update_info_unavailable") {
|
|
685
|
-
error = {
|
|
701
|
+
error = {
|
|
702
|
+
code: "update_info_unavailable",
|
|
703
|
+
message: "Update information for this app version is unavailable.",
|
|
704
|
+
copyKey: "ota:updateInfoUnavailableMessage",
|
|
705
|
+
glassesCode: null,
|
|
706
|
+
}
|
|
686
707
|
}
|
|
687
708
|
return {
|
|
688
709
|
screen,
|
|
@@ -745,16 +766,33 @@ export function useMentraLiveOta(options: UseMentraLiveOtaOptions = {}): MentraL
|
|
|
745
766
|
installSnapshot.otaProgress,
|
|
746
767
|
installSnapshot.errorMsg,
|
|
747
768
|
)
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
769
|
+
// The raw code the glasses attached to their failure report, kept for support even when
|
|
770
|
+
// phone-side copy outranks it. Only a failed ota_status carries a current code.
|
|
771
|
+
const glassesCode = installSnapshot.otaStatus?.status === "failed" ? installSnapshot.otaStatus.error || null : null
|
|
772
|
+
// Precedence mirrors the legacy screen: the BES restart instruction, then a phone-side
|
|
773
|
+
// watchdog/preflight message (English-only, no copy key), then the glasses code mapped to
|
|
774
|
+
// copy (unknown codes get the generic glasses-error copy rather than the raw code).
|
|
775
|
+
let displayedError: string
|
|
776
|
+
let copyKey: string | null
|
|
777
|
+
if (requiresGlassesReboot) {
|
|
778
|
+
displayedError = BES_INSTALL_RESTART_MESSAGE
|
|
779
|
+
copyKey = OTA_ERROR_BES_RESTART_REQUIRED_COPY_KEY
|
|
780
|
+
} else if (installSnapshot.errorMsg) {
|
|
781
|
+
displayedError = installSnapshot.errorMsg
|
|
782
|
+
copyKey = null
|
|
783
|
+
} else {
|
|
784
|
+
displayedError = getOtaErrorMessage(glassesCode)
|
|
785
|
+
copyKey = otaErrorCopyKey(glassesCode)
|
|
786
|
+
}
|
|
751
787
|
const progressState = progressScreen(installSnapshot)
|
|
752
788
|
const screen = progressState === "complete" && autoChainActive ? "finishing" : progressState
|
|
753
|
-
const error =
|
|
789
|
+
const error: MentraLiveOtaError | null =
|
|
754
790
|
screen === "failed"
|
|
755
791
|
? {
|
|
756
|
-
code: requiresGlassesReboot ?
|
|
792
|
+
code: requiresGlassesReboot ? "bes_restart_required" : "install_failed",
|
|
757
793
|
message: displayedError,
|
|
794
|
+
copyKey,
|
|
795
|
+
glassesCode,
|
|
758
796
|
}
|
|
759
797
|
: null
|
|
760
798
|
const totalSteps = installSnapshot.otaStatus?.totalSteps ?? null
|