@mentra/engine 3.2.1-dev.278 → 3.2.1-dev.282

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.
Files changed (53) hide show
  1. package/build/generated/releaseMetadata.js +5 -5
  2. package/build/generated/releaseMetadata.js.map +1 -1
  3. package/build/services/AcsMeetingService.d.ts +56 -6
  4. package/build/services/AcsMeetingService.d.ts.map +1 -1
  5. package/build/services/AcsMeetingService.js +162 -40
  6. package/build/services/AcsMeetingService.js.map +1 -1
  7. package/build/services/CallGainSweep.d.ts +97 -0
  8. package/build/services/CallGainSweep.d.ts.map +1 -0
  9. package/build/services/CallGainSweep.js +249 -0
  10. package/build/services/CallGainSweep.js.map +1 -0
  11. package/build/services/GlassesMicProbe.d.ts +2 -0
  12. package/build/services/GlassesMicProbe.d.ts.map +1 -1
  13. package/build/services/GlassesMicProbe.js +20 -19
  14. package/build/services/GlassesMicProbe.js.map +1 -1
  15. package/build/services/LocalMiniappRuntime.d.ts +18 -0
  16. package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
  17. package/build/services/LocalMiniappRuntime.js +131 -1
  18. package/build/services/LocalMiniappRuntime.js.map +1 -1
  19. package/build/services/MicSessionManager.d.ts +83 -0
  20. package/build/services/MicSessionManager.d.ts.map +1 -0
  21. package/build/services/MicSessionManager.js +201 -0
  22. package/build/services/MicSessionManager.js.map +1 -0
  23. package/build/services/MicStateCoordinator.d.ts +71 -5
  24. package/build/services/MicStateCoordinator.d.ts.map +1 -1
  25. package/build/services/MicStateCoordinator.js +161 -10
  26. package/build/services/MicStateCoordinator.js.map +1 -1
  27. package/build/services/micPolicy.d.ts +131 -0
  28. package/build/services/micPolicy.d.ts.map +1 -0
  29. package/build/services/micPolicy.js +140 -0
  30. package/build/services/micPolicy.js.map +1 -0
  31. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -1
  32. package/build/stores/bluetoothSettingKeys.js +3 -0
  33. package/build/stores/bluetoothSettingKeys.js.map +1 -1
  34. package/build/stores/settings.d.ts +5 -0
  35. package/build/stores/settings.d.ts.map +1 -1
  36. package/build/stores/settings.js +62 -0
  37. package/build/stores/settings.js.map +1 -1
  38. package/build/utils/pcm16.d.ts +20 -0
  39. package/build/utils/pcm16.d.ts.map +1 -1
  40. package/build/utils/pcm16.js +32 -1
  41. package/build/utils/pcm16.js.map +1 -1
  42. package/package.json +8 -8
  43. package/src/generated/releaseMetadata.ts +5 -5
  44. package/src/services/AcsMeetingService.ts +167 -40
  45. package/src/services/CallGainSweep.ts +318 -0
  46. package/src/services/GlassesMicProbe.ts +20 -17
  47. package/src/services/LocalMiniappRuntime.ts +152 -3
  48. package/src/services/MicSessionManager.ts +258 -0
  49. package/src/services/MicStateCoordinator.ts +153 -10
  50. package/src/services/micPolicy.ts +198 -0
  51. package/src/stores/bluetoothSettingKeys.ts +3 -0
  52. package/src/stores/settings.ts +66 -0
  53. package/src/utils/pcm16.ts +43 -1
@@ -1,10 +1,10 @@
1
1
  export const ENGINE_RELEASE_METADATA = Object.freeze({
2
2
  "schemaVersion": 1,
3
3
  "familyBaseVersion": "3.2.1",
4
- "releaseIdentity": "3.2.1-dev.278",
5
- "releaseSetId": "mentra-3.2.1-dev.278",
6
- "sourceCommit": "3fdfe01c096c79797d51fdef608ddb8ed91e14c3",
7
- "otaManifestUrl": "https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.2.1/mentra-live-ota-3.2.1-dev.278.json",
8
- "otaManifestSha256": "1ab2a29845eb5b865b15ad16e2006d34a2f9590dcade5bf085722c4aba0ca978"
4
+ "releaseIdentity": "3.2.1-dev.282",
5
+ "releaseSetId": "mentra-3.2.1-dev.282",
6
+ "sourceCommit": "53defbe045377507bdd6c188d303be138040c450",
7
+ "otaManifestUrl": "https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.2.1/mentra-live-ota-3.2.1-dev.282.json",
8
+ "otaManifestSha256": "c69e779261aac872c9b0a26abbdb2d7e6549db577ee4bf0755adf770d8f879f6"
9
9
  });
10
10
  //# sourceMappingURL=releaseMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,iIAAiI;IACnJ,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.1\",\n \"releaseIdentity\": \"3.2.1-dev.278\",\n \"releaseSetId\": \"mentra-3.2.1-dev.278\",\n \"sourceCommit\": \"3fdfe01c096c79797d51fdef608ddb8ed91e14c3\",\n \"otaManifestUrl\": \"https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.2.1/mentra-live-ota-3.2.1-dev.278.json\",\n \"otaManifestSha256\": \"1ab2a29845eb5b865b15ad16e2006d34a2f9590dcade5bf085722c4aba0ca978\"\n})\n"]}
1
+ {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,iIAAiI;IACnJ,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.1\",\n \"releaseIdentity\": \"3.2.1-dev.282\",\n \"releaseSetId\": \"mentra-3.2.1-dev.282\",\n \"sourceCommit\": \"53defbe045377507bdd6c188d303be138040c450\",\n \"otaManifestUrl\": \"https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.2.1/mentra-live-ota-3.2.1-dev.282.json\",\n \"otaManifestSha256\": \"c69e779261aac872c9b0a26abbdb2d7e6549db577ee4bf0755adf770d8f879f6\"\n})\n"]}
@@ -128,6 +128,8 @@ export declare function glassesLc3UplinkSupported(args: {
128
128
  audioSource: AcsAudioSource;
129
129
  hasPushOutgoingPcm: boolean;
130
130
  platform: string;
131
+ /** Somebody holds a glasses microphone session through MicSessionManager. */
132
+ glassesSession: boolean;
131
133
  }): boolean;
132
134
  export declare function parseMeetingParticipants(raw: unknown): MeetingParticipant[] | undefined;
133
135
  export type AcsOutgoingVideo = {
@@ -375,6 +377,17 @@ declare class AcsMeetingService {
375
377
  private callOrigin;
376
378
  private micTransport;
377
379
  private micSub;
380
+ /** Backstop lease, held only while this call is actually reading the glasses mic. */
381
+ private micSession;
382
+ private micTuningSub;
383
+ private micRmsSub;
384
+ /** Only turn telemetry off again if this call is what turned it on. */
385
+ private micRmsEnabled;
386
+ private gateSamples;
387
+ private gateClosed;
388
+ private gateElevated;
389
+ private gateClosedElevated;
390
+ private gateRmsMax;
378
391
  /** True between the pin/requirement being taken and released, so release is exactly once. */
379
392
  private micUplinkActive;
380
393
  private micFramesForwarded;
@@ -512,6 +525,12 @@ declare class AcsMeetingService {
512
525
  displayName?: string;
513
526
  video?: AcsOutgoingVideo;
514
527
  origin?: AcsCallOrigin;
528
+ /**
529
+ * Whether the caller holds a glasses microphone session. The uplink is the wearer's voice,
530
+ * so it is only taken off the glasses when somebody has actually claimed that microphone
531
+ * through MicSessionManager; this class never claims it itself.
532
+ */
533
+ glassesSession?: boolean;
515
534
  }): Promise<MeetingState>;
516
535
  leave(packageName: string): Promise<void>;
517
536
  /**
@@ -557,15 +576,46 @@ declare class AcsMeetingService {
557
576
  /**
558
577
  * Start forwarding the glasses microphone into ACS for this call.
559
578
  *
560
- * Order matters and is the whole point: pin the Bluetooth SDK to the glasses *before* asking it
561
- * for PCM, so the first frame the mic requirement produces is already from the right source and
562
- * the phone microphone is never opened even for one buffer. `generation` is captured by the
563
- * listener so a frame that lands after this call ended is dropped rather than pushed at a native
564
- * session that has left the meeting.
579
+ * This class is a sink: it never names a gain, a pin or a setting. It does take a semantic
580
+ * voice_call lease first, because reading the glasses mic without one is what put this call on
581
+ * the OS default of VAD-on a speech gate that drops the wearer's uplink whenever the GX8002
582
+ * disagrees, which during a call is most of the time the far end is talking. The lease is a
583
+ * backstop: when the miniapp already holds one this simply merges with it, and micPolicy still
584
+ * decides what voice_call means for the hardware.
585
+ *
586
+ * `generation` is captured by the listener so a frame that lands after this call ended is
587
+ * dropped rather than pushed at a native session that has left the meeting.
565
588
  */
566
589
  private startGlassesMicUplink;
567
- /** Release the microphone claims this call took. Safe to call when it never took them. */
590
+ /**
591
+ * Stop reading the glasses microphone. Safe to call when this call never started.
592
+ *
593
+ * Only this call's own backstop lease is dropped. A lease the miniapp took is its to release,
594
+ * and letting go of ours before that owner releases is what keeps a normal hang-up from looking
595
+ * like the wearer's microphone disappearing.
596
+ */
568
597
  private stopGlassesMicUplink;
598
+ /**
599
+ * Watch what the glasses are actually running for the length of the call.
600
+ *
601
+ * Two different questions, both unanswerable from this side otherwise. `mic_tuning_state` is
602
+ * the post-clamp reply, so it catches a profile the firmware rewrote rather than accepted.
603
+ * `mic_rms` carries the Barrier's own verdict per frame, which is the only way to tell a gate
604
+ * that is suppressing speaker leak from one that is suppressing the wearer.
605
+ */
606
+ private startMicGateTelemetry;
607
+ private stopMicGateTelemetry;
608
+ /** Barrier's behaviour over the window, as percentages a listening test can be checked against. */
609
+ private gateSummary;
610
+ /**
611
+ * Guarantee a voice_call session for as long as this call reads the glasses mic.
612
+ *
613
+ * The miniapp asking for one is the intended path; this covers the builds where it cannot,
614
+ * because a bundled Call that predates MIC_ACQUIRE joins anyway rather than failing. Without
615
+ * this the uplink runs under whatever the OS settings say, and the shipped default is VAD-on.
616
+ */
617
+ private acquireMicSession;
618
+ private releaseMicSession;
569
619
  /**
570
620
  * Report a call whose pinned microphone stopped delivering. There is deliberately no fallback:
571
621
  * the wearer agreed to be heard from the glasses, and quietly switching to the phone in the
@@ -1 +1 @@
1
- {"version":3,"file":"AcsMeetingService.d.ts","sourceRoot":"","sources":["../../src/services/AcsMeetingService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,EAAC,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAC/G,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAA;AAEzD,OAAO,EAAC,YAAY,EAAC,CAAA;AACrB,YAAY,EAAC,mBAAmB,EAAE,YAAY,EAAC,CAAA;AAE/C,KAAK,YAAY,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAA;AAE5F,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AACvD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEhE,6FAA6F;AAC7F,eAAO,MAAM,uBAAuB,4BAA4B,CAAA;AAEhE,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,CAAA;AAE7G,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,uBAAuB,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAiBtF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,GAAG,SAAS,CAOlG;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IACjC,iBAAiB,CAAC,EAAE,YAAY,CAAA;IAChC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAA;IAC/C,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,wFAAwF;IACxF,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,kFAAkF;IAClF,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED,oGAAoG;AACpG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,IAAI,mBAAmB,CAE3D;AA4BD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAG5C,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,WAAW,EAAE,cAAc,CAAA;IAC3B,WAAW,EAAE,cAAc,CAAA;IAC3B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CASV;AAWD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,EAAE,GAAG,SAAS,CAmBvF;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAKD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAehF;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,GAC3B;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAC,CAAA;AAE9E;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAuBhE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE5D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAEhE;AAED,KAAK,YAAY,GAAG;IAClB,YAAY,CAAC,CAAC,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACpF,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,0EAA0E;QAC1E,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,cAAc,CAAA;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;QACjC,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,KAAK,CAAC,EAAE,gBAAgB,CAAA;QACxB,MAAM,CAAC,EAAE,aAAa,CAAA;KACvB,GAAG,OAAO,CAAC,YAAY,GAAG;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IAChD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB;;;;;;;OAOG;IACH,aAAa,CAAC,CAAC,OAAO,EAAE;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC,CAAA;IAC3E;;;;;;OAMG;IACH,iBAAiB,CAAC,CAAC,OAAO,EAAE;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAC,CAAC,CAAA;IAC5E,sEAAsE;IACtE,gBAAgB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC;;;OAGG;IACH,cAAc,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IACxC,gBAAgB,CAAC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/C,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAClE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,kFAAkF;IAClF,kBAAkB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC;;;OAGG;IACH,kBAAkB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC;;;OAGG;IACH,iBAAiB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACrE,4BAA4B,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACjG,oFAAoF;IACpF,aAAa,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,kBAAkB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,uBAAuB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,+BAA+B,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACjE;;;OAGG;IACH,kBAAkB,CAAC,IAAI,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IACpE,4EAA4E;IAC5E,iBAAiB,CAAC,IAAI,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,CAAC,CAAA;IACpG;;;OAGG;IACH,4BAA4B,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC9D,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IACjC;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5E,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAC,CAAA;CACrG,CAAA;AAeD,uEAAuE;AACvE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAEtF;AAED,wFAAwF;AACxF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;CAAC,CAAA;AAC1E,KAAK,kBAAkB,GAAG;IACxB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC1E,CAAA;AAgBD,6EAA6E;AAC7E,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAErG;AA0DD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAQpD;AAED,cAAM,iBAAiB;IACrB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,OAAO,CAAoE;IACnF,+FAA+F;IAC/F,OAAO,CAAC,OAAO,CAAsB;IACrC,yEAAyE;IACzE,OAAO,CAAC,WAAW,CAA8B;IACjD;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,kBAAkB,CAAI;IAC9B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAAI;IAC7B,qFAAqF;IACrF,OAAO,CAAC,SAAS,CAAK;IACtB,uGAAuG;IACvG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IACtE,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8D;IAClG;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAAQ;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAI;IAC1B,qGAAqG;IACrG,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAoC;IAClD,6FAA6F;IAC7F,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,kBAAkB,CAAI;IAC9B,6FAA6F;IAC7F,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,gBAAgB,CAAI;IAC5B,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,YAAY,CAA+C;IACnE,iGAAiG;IACjG,OAAO,CAAC,iBAAiB,CAAO;IAEhC,eAAe,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAIlF,QAAQ,IAAI,YAAY;IAIxB,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;;OAIG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;;;;OAKG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5D,yEAAyE;IACnE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAW3C;;;OAGG;IACH,sBAAsB,IAAI,IAAI;IAO9B;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAM9C;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAgBxG;;;;;;OAMG;IACH,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAK3F,OAAO,CAAC,qBAAqB;IA6B7B,4FAA4F;IAC5F,mBAAmB,IAAI,IAAI;IAI3B;;;;;;OAMG;IACG,4BAA4B,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAM1E,yFAAyF;IACnF,+BAA+B,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAOvE,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9C;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IAMhF,mFAAmF;IAC7E,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzC;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDpF,qFAAqF;IACrF,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;IAI9B;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BvD;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxE,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,cAAc,CAAA;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,KAAK,CAAC,EAAE,gBAAgB,CAAA;QACxB,MAAM,CAAC,EAAE,aAAa,CAAA;KACvB,GACA,OAAO,CAAC,YAAY,CAAC;IAoJlB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/C;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAoB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IAsCvH,sEAAsE;IAChE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjF;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BhE,qFAAqF;IACrF,2BAA2B,IAAI,iBAAiB;IAIhD;;;;;;;;;OASG;YACW,gBAAgB;IAwB9B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAqE7B,0FAA0F;IAC1F,OAAO,CAAC,oBAAoB;IAsB5B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAOnC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,YAAY;IA0CpB,gGAAgG;IAChG,mBAAmB,IAAI;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAI7D,OAAO,CAAC,UAAU;IAaZ,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBpE,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAWrD,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAyGlB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,mBAAmB;YAMb,kBAAkB;IA2BhC;;;;OAIG;YACW,gBAAgB;YA6ChB,iBAAiB;YAqBjB,OAAO;CAOtB;AAED,QAAA,MAAM,iBAAiB,mBAA0B,CAAA;AACjD,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"AcsMeetingService.d.ts","sourceRoot":"","sources":["../../src/services/AcsMeetingService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAC,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAC/G,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAA;AAEzD,OAAO,EAAC,YAAY,EAAC,CAAA;AACrB,YAAY,EAAC,mBAAmB,EAAE,YAAY,EAAC,CAAA;AAE/C,KAAK,YAAY,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAA;AAE5F,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AACvD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEhE,6FAA6F;AAC7F,eAAO,MAAM,uBAAuB,4BAA4B,CAAA;AAEhE,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,CAAA;AAE7G,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,uBAAuB,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAiBtF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,GAAG,SAAS,CAOlG;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IACjC,iBAAiB,CAAC,EAAE,YAAY,CAAA;IAChC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAA;IAC/C,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,wFAAwF;IACxF,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,kFAAkF;IAClF,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED,oGAAoG;AACpG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,IAAI,mBAAmB,CAE3D;AA4BD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAG5C,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,WAAW,EAAE,cAAc,CAAA;IAC3B,WAAW,EAAE,cAAc,CAAA;IAC3B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,cAAc,EAAE,OAAO,CAAA;CACxB,GAAG,OAAO,CAYV;AAWD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,EAAE,GAAG,SAAS,CAmBvF;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAKD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAehF;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,GAC3B;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAC,CAAA;AAE9E;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAuBhE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE5D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAEhE;AAED,KAAK,YAAY,GAAG;IAClB,YAAY,CAAC,CAAC,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACpF,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,0EAA0E;QAC1E,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,cAAc,CAAA;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;QACjC,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,KAAK,CAAC,EAAE,gBAAgB,CAAA;QACxB,MAAM,CAAC,EAAE,aAAa,CAAA;KACvB,GAAG,OAAO,CAAC,YAAY,GAAG;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IAChD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB;;;;;;;OAOG;IACH,aAAa,CAAC,CAAC,OAAO,EAAE;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC,CAAA;IAC3E;;;;;;OAMG;IACH,iBAAiB,CAAC,CAAC,OAAO,EAAE;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAC,CAAC,CAAA;IAC5E,sEAAsE;IACtE,gBAAgB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC;;;OAGG;IACH,cAAc,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IACxC,gBAAgB,CAAC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/C,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAClE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,kFAAkF;IAClF,kBAAkB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC;;;OAGG;IACH,kBAAkB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC;;;OAGG;IACH,iBAAiB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACrE,4BAA4B,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACjG,oFAAoF;IACpF,aAAa,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,kBAAkB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,uBAAuB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,+BAA+B,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACjE;;;OAGG;IACH,kBAAkB,CAAC,IAAI,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IACpE,4EAA4E;IAC5E,iBAAiB,CAAC,IAAI,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,CAAC,CAAA;IACpG;;;OAGG;IACH,4BAA4B,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC9D,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IACjC;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5E,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAC,CAAA;CACrG,CAAA;AAeD,uEAAuE;AACvE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAEtF;AAED,wFAAwF;AACxF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;CAAC,CAAA;AAC1E,KAAK,kBAAkB,GAAG;IACxB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC1E,CAAA;AAgBD,6EAA6E;AAC7E,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAErG;AA4DD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAQpD;AAED,cAAM,iBAAiB;IACrB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,OAAO,CAAoE;IACnF,+FAA+F;IAC/F,OAAO,CAAC,OAAO,CAAsB;IACrC,yEAAyE;IACzE,OAAO,CAAC,WAAW,CAA8B;IACjD;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,kBAAkB,CAAI;IAC9B,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAAI;IAC7B,qFAAqF;IACrF,OAAO,CAAC,SAAS,CAAK;IACtB,uGAAuG;IACvG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IACtE,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8D;IAClG;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAAQ;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAI;IAC1B,qGAAqG;IACrG,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAoC;IAClD,qFAAqF;IACrF,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,SAAS,CAAoC;IACrD,uEAAuE;IACvE,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,UAAU,CAAI;IACtB,6FAA6F;IAC7F,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,kBAAkB,CAAI;IAC9B,6FAA6F;IAC7F,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,gBAAgB,CAAI;IAC5B,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,YAAY,CAA+C;IACnE,iGAAiG;IACjG,OAAO,CAAC,iBAAiB,CAAO;IAEhC,eAAe,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAIlF,QAAQ,IAAI,YAAY;IAIxB,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;;OAIG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;;;;OAKG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5D,yEAAyE;IACnE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAW3C;;;OAGG;IACH,sBAAsB,IAAI,IAAI;IAO9B;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAM9C;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAgBxG;;;;;;OAMG;IACH,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAK3F,OAAO,CAAC,qBAAqB;IA6B7B,4FAA4F;IAC5F,mBAAmB,IAAI,IAAI;IAI3B;;;;;;OAMG;IACG,4BAA4B,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAM1E,yFAAyF;IACnF,+BAA+B,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAOvE,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9C;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IAMhF,mFAAmF;IAC7E,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzC;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDpF,qFAAqF;IACrF,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;IAI9B;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BvD;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxE,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,cAAc,CAAA;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,KAAK,CAAC,EAAE,gBAAgB,CAAA;QACxB,MAAM,CAAC,EAAE,aAAa,CAAA;QACtB;;;;WAIG;QACH,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,GACA,OAAO,CAAC,YAAY,CAAC;IAqJlB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/C;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAoB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IAsCvH,sEAAsE;IAChE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjF;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BhE,qFAAqF;IACrF,2BAA2B,IAAI,iBAAiB;IAIhD;;;;;;;;;OASG;YACW,gBAAgB;IAwB9B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,qBAAqB;IAmE7B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,oBAAoB;IAW5B,mGAAmG;IACnG,OAAO,CAAC,WAAW;IAanB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,iBAAiB;IAWzB;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAOnC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,YAAY;IAoCpB,gGAAgG;IAChG,mBAAmB,IAAI;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAI7D,OAAO,CAAC,UAAU;IAaZ,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBpE,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAWrD,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAyGlB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,mBAAmB;YAMb,kBAAkB;IA2BhC;;;;OAIG;YACW,gBAAgB;YA6ChB,iBAAiB;YAqBjB,OAAO;CAOtB;AAED,QAAA,MAAM,iBAAiB,mBAA0B,CAAA;AACjD,eAAe,iBAAiB,CAAA"}
@@ -6,9 +6,12 @@
6
6
  import { Platform } from "react-native";
7
7
  import BluetoothSdk from "@mentra/bluetooth-sdk/internal";
8
8
  import audioPlaybackService from "./AudioPlaybackService";
9
+ import { getCallGainSweep } from "./CallGainSweep";
9
10
  import micStateCoordinator from "./MicStateCoordinator";
11
+ import micSessionManager from "./MicSessionManager";
12
+ import { ENGINE_OWNER_PREFIX } from "./micPolicy";
10
13
  import { SETTINGS, useSettingsStore } from "../stores/settings";
11
- import { Pcm16LevelMeter } from "../utils/pcm16";
14
+ import { Pcm16LevelMeter, pcm16WindowStats } from "../utils/pcm16";
12
15
  import { softapTrace, softapTraceFailure, softapTraceId } from "../utils/softapTrace";
13
16
  import { ACS_CALL_MIC } from "./acsAudioSource";
14
17
  export { ACS_CALL_MIC };
@@ -102,6 +105,10 @@ let softapBleLc3UplinkForTests = null;
102
105
  export function glassesLc3UplinkSupported(args) {
103
106
  if (!(softapBleLc3UplinkForTests ?? SOFTAP_BLE_LC3_UPLINK))
104
107
  return false;
108
+ // The microphone belongs to whoever leased it. Without a lease nothing has pinned the glasses
109
+ // or claimed raw PCM, so this call has no wearer audio to read off them.
110
+ if (!args.glassesSession)
111
+ return false;
105
112
  // iOS has no `setMicSourcePin` yet, so it cannot promise the phone microphone stays shut.
106
113
  if (args.platform !== "android")
107
114
  return false;
@@ -285,6 +292,8 @@ const GLASSES_MIC_SOURCE = "glasses";
285
292
  const GLASSES_MIC_GRACE_MS = 1000;
286
293
  /** Cadence of the uplink health line, matching the native P8 ladder. */
287
294
  const MIC_UPLINK_LOG_INTERVAL_MS = 5000;
295
+ /** During a gain sweep, one-second windows so each 25 s phase has enough speech samples. */
296
+ const MIC_UPLINK_SWEEP_LOG_INTERVAL_MS = 1000;
288
297
  /** A 50 ms LC3 frame arriving more than this late is a missed beat, not jitter. */
289
298
  const MIC_GAP_WARN_MS = 90;
290
299
  /**
@@ -358,6 +367,17 @@ class AcsMeetingService {
358
367
  callOrigin = "unknown";
359
368
  micTransport = "whip";
360
369
  micSub = null;
370
+ /** Backstop lease, held only while this call is actually reading the glasses mic. */
371
+ micSession = null;
372
+ micTuningSub = null;
373
+ micRmsSub = null;
374
+ /** Only turn telemetry off again if this call is what turned it on. */
375
+ micRmsEnabled = false;
376
+ gateSamples = 0;
377
+ gateClosed = 0;
378
+ gateElevated = 0;
379
+ gateClosedElevated = 0;
380
+ gateRmsMax = 0;
361
381
  /** True between the pin/requirement being taken and released, so release is exactly once. */
362
382
  micUplinkActive = false;
363
383
  micFramesForwarded = 0;
@@ -721,6 +741,7 @@ class AcsMeetingService {
721
741
  audioSource: resolved.source,
722
742
  hasPushOutgoingPcm: typeof native.pushOutgoingPcm === "function",
723
743
  platform: Platform.OS,
744
+ glassesSession: args.glassesSession ?? false,
724
745
  });
725
746
  this.micTransport = lc3Uplink ? "ble-lc3" : resolved.source === "phone" ? "phone" : "whip";
726
747
  this.bindNative(native, packageName);
@@ -1017,11 +1038,15 @@ class AcsMeetingService {
1017
1038
  /**
1018
1039
  * Start forwarding the glasses microphone into ACS for this call.
1019
1040
  *
1020
- * Order matters and is the whole point: pin the Bluetooth SDK to the glasses *before* asking it
1021
- * for PCM, so the first frame the mic requirement produces is already from the right source and
1022
- * the phone microphone is never opened even for one buffer. `generation` is captured by the
1023
- * listener so a frame that lands after this call ended is dropped rather than pushed at a native
1024
- * session that has left the meeting.
1041
+ * This class is a sink: it never names a gain, a pin or a setting. It does take a semantic
1042
+ * voice_call lease first, because reading the glasses mic without one is what put this call on
1043
+ * the OS default of VAD-on a speech gate that drops the wearer's uplink whenever the GX8002
1044
+ * disagrees, which during a call is most of the time the far end is talking. The lease is a
1045
+ * backstop: when the miniapp already holds one this simply merges with it, and micPolicy still
1046
+ * decides what voice_call means for the hardware.
1047
+ *
1048
+ * `generation` is captured by the listener so a frame that lands after this call ended is
1049
+ * dropped rather than pushed at a native session that has left the meeting.
1025
1050
  */
1026
1051
  startGlassesMicUplink(generation) {
1027
1052
  if (this.micTransport !== "ble-lc3")
@@ -1042,11 +1067,9 @@ class AcsMeetingService {
1042
1067
  this.micLevel.take();
1043
1068
  this.lastMicLevel = null;
1044
1069
  try {
1045
- void Promise.resolve(BluetoothSdk.setMicSourcePin?.(GLASSES_MIC_SOURCE)).catch((error) => {
1046
- console.warn("[AcsMeeting] pinning the glasses microphone failed", error);
1047
- });
1070
+ this.acquireMicSession();
1071
+ this.startMicGateTelemetry();
1048
1072
  this.micUplinkActive = true;
1049
- micStateCoordinator.setCallRequirement(true);
1050
1073
  this.micSub = BluetoothSdk.addListener("mic_pcm", (event) => {
1051
1074
  if (generation !== this.callGeneration) {
1052
1075
  this.micDropsStale += 1;
@@ -1096,28 +1119,132 @@ class AcsMeetingService {
1096
1119
  this.markMicTransportNone();
1097
1120
  }
1098
1121
  }
1099
- /** Release the microphone claims this call took. Safe to call when it never took them. */
1122
+ /**
1123
+ * Stop reading the glasses microphone. Safe to call when this call never started.
1124
+ *
1125
+ * Only this call's own backstop lease is dropped. A lease the miniapp took is its to release,
1126
+ * and letting go of ours before that owner releases is what keeps a normal hang-up from looking
1127
+ * like the wearer's microphone disappearing.
1128
+ */
1100
1129
  stopGlassesMicUplink() {
1101
1130
  this.micSub?.remove();
1102
1131
  this.micSub = null;
1132
+ this.releaseMicSession();
1103
1133
  if (this.micUplinkActive) {
1104
1134
  this.micUplinkActive = false;
1105
- micStateCoordinator.setCallRequirement(false);
1106
- // Last, and unconditionally: while the pin is set no other consumer can pick a microphone,
1107
- // so leaving it behind would leave captions and the cloud uplink stuck on the glasses.
1108
- void Promise.resolve(BluetoothSdk.setMicSourcePin?.(null)).catch((error) => {
1109
- console.warn("[AcsMeeting] releasing the glasses microphone pin failed", error);
1110
- });
1111
1135
  console.log("[AcsMeeting] phase=glasses-mic-uplink-stop", {
1112
1136
  frames: this.micFramesForwarded,
1113
1137
  dropsStale: this.micDropsStale,
1114
1138
  dropsNonGlasses: this.micDropsNonGlasses,
1115
1139
  gaps: this.micGaps,
1116
1140
  gapMsMax: this.micGapMsMax,
1141
+ ...this.gateSummary(),
1117
1142
  });
1118
1143
  }
1144
+ this.stopMicGateTelemetry();
1119
1145
  this.micTransport = "whip";
1120
1146
  }
1147
+ /**
1148
+ * Watch what the glasses are actually running for the length of the call.
1149
+ *
1150
+ * Two different questions, both unanswerable from this side otherwise. `mic_tuning_state` is
1151
+ * the post-clamp reply, so it catches a profile the firmware rewrote rather than accepted.
1152
+ * `mic_rms` carries the Barrier's own verdict per frame, which is the only way to tell a gate
1153
+ * that is suppressing speaker leak from one that is suppressing the wearer.
1154
+ */
1155
+ startMicGateTelemetry() {
1156
+ this.gateSamples = 0;
1157
+ this.gateClosed = 0;
1158
+ this.gateElevated = 0;
1159
+ this.gateClosedElevated = 0;
1160
+ this.gateRmsMax = 0;
1161
+ try {
1162
+ this.micTuningSub = BluetoothSdk.addListener("mic_tuning_state", (event) => {
1163
+ console.log("[AcsMeeting] phase=glasses-mic-tuning-applied", event);
1164
+ });
1165
+ this.micRmsSub = BluetoothSdk.addListener("mic_rms", (event) => {
1166
+ this.gateSamples += 1;
1167
+ if (event.gateOpen === false)
1168
+ this.gateClosed += 1;
1169
+ if (event.speakerElevated) {
1170
+ this.gateElevated += 1;
1171
+ if (event.gateOpen === false)
1172
+ this.gateClosedElevated += 1;
1173
+ }
1174
+ if (typeof event.rms === "number" && event.rms > this.gateRmsMax)
1175
+ this.gateRmsMax = event.rms;
1176
+ });
1177
+ void Promise.resolve(BluetoothSdk.setMicRmsTelemetry?.(true))
1178
+ .then(() => {
1179
+ this.micRmsEnabled = true;
1180
+ })
1181
+ .catch((error) => console.warn("[AcsMeeting] mic RMS telemetry unavailable", error));
1182
+ void Promise.resolve(BluetoothSdk.requestMicTuningState?.()).catch(() => { });
1183
+ }
1184
+ catch (error) {
1185
+ console.warn("[AcsMeeting] mic gate telemetry unavailable", error);
1186
+ }
1187
+ }
1188
+ stopMicGateTelemetry() {
1189
+ this.micTuningSub?.remove();
1190
+ this.micTuningSub = null;
1191
+ this.micRmsSub?.remove();
1192
+ this.micRmsSub = null;
1193
+ if (!this.micRmsEnabled)
1194
+ return;
1195
+ this.micRmsEnabled = false;
1196
+ // Super Mode may have the readout open behind this call; it re-requests on focus.
1197
+ void Promise.resolve(BluetoothSdk.setMicRmsTelemetry?.(false)).catch(() => { });
1198
+ }
1199
+ /** Barrier's behaviour over the window, as percentages a listening test can be checked against. */
1200
+ gateSummary() {
1201
+ if (this.gateSamples === 0)
1202
+ return {};
1203
+ const pct = (n, of) => (of === 0 ? 0 : Math.round((n / of) * 1000) / 10);
1204
+ return {
1205
+ gateSamples: this.gateSamples,
1206
+ gateClosedPct: pct(this.gateClosed, this.gateSamples),
1207
+ speakerElevatedPct: pct(this.gateElevated, this.gateSamples),
1208
+ // The number that matters: closed while the far end was quiet means the wearer was cut.
1209
+ gateClosedQuietPct: pct(this.gateClosed - this.gateClosedElevated, this.gateSamples - this.gateElevated),
1210
+ gateRmsMax: this.gateRmsMax,
1211
+ };
1212
+ }
1213
+ /**
1214
+ * Guarantee a voice_call session for as long as this call reads the glasses mic.
1215
+ *
1216
+ * The miniapp asking for one is the intended path; this covers the builds where it cannot,
1217
+ * because a bundled Call that predates MIC_ACQUIRE joins anyway rather than failing. Without
1218
+ * this the uplink runs under whatever the OS settings say, and the shipped default is VAD-on.
1219
+ */
1220
+ acquireMicSession() {
1221
+ if (this.micSession)
1222
+ return;
1223
+ try {
1224
+ this.micSession = micSessionManager.acquire({
1225
+ owner: `${ENGINE_OWNER_PREFIX}acs-uplink`,
1226
+ source: "glasses",
1227
+ useCase: "voice_call",
1228
+ });
1229
+ }
1230
+ catch (error) {
1231
+ // A source conflict means something else already owns the microphone. Forwarding whatever
1232
+ // it captures is still better than dropping the wearer from the call.
1233
+ console.warn("[AcsMeeting] glasses mic session unavailable", error);
1234
+ }
1235
+ }
1236
+ releaseMicSession() {
1237
+ const session = this.micSession;
1238
+ if (!session)
1239
+ return;
1240
+ this.micSession = null;
1241
+ try {
1242
+ session.release();
1243
+ }
1244
+ catch (error) {
1245
+ console.warn("[AcsMeeting] releasing the glasses mic session failed", error);
1246
+ }
1247
+ }
1121
1248
  /**
1122
1249
  * Report a call whose pinned microphone stopped delivering. There is deliberately no fallback:
1123
1250
  * the wearer agreed to be heard from the glasses, and quietly switching to the phone in the
@@ -1147,43 +1274,38 @@ class AcsMeetingService {
1147
1274
  logMicUplink() {
1148
1275
  const now = Date.now();
1149
1276
  const elapsed = now - this.lastMicUplinkLogAt;
1150
- if (elapsed < MIC_UPLINK_LOG_INTERVAL_MS)
1277
+ const sweep = getCallGainSweep();
1278
+ const interval = sweep.isActive() ? MIC_UPLINK_SWEEP_LOG_INTERVAL_MS : MIC_UPLINK_LOG_INTERVAL_MS;
1279
+ if (elapsed < interval)
1151
1280
  return;
1152
1281
  this.lastMicUplinkLogAt = now;
1153
1282
  // Level, not just cadence: a 20 Hz stream of the noise floor and a 20 Hz stream of speech
1154
1283
  // have the same framesPerSecond. Quiet room on Mentra Live LC3 is meanAbs ≈30–60.
1155
1284
  const level = this.micLevel.take();
1285
+ const stats = pcm16WindowStats(level);
1156
1286
  this.lastMicLevel = { meanAbs: level.meanAbs, peak: level.peak };
1287
+ const gain = sweep.currentGain() ?? micStateCoordinator.getSessionMicTuning()?.gain ?? null;
1288
+ if (sweep.isActive())
1289
+ sweep.ingest(level);
1157
1290
  console.log("[AcsMeeting] phase=glasses-mic-uplink", {
1158
1291
  framesPerSecond: Math.round((this.micFramesWindow * 1000) / elapsed),
1159
1292
  frames: this.micFramesForwarded,
1160
- meanAbs: level.meanAbs,
1161
- peak: level.peak,
1293
+ meanAbs: stats.meanAbs,
1294
+ peak: stats.peak,
1295
+ peakPct: stats.peakPct,
1296
+ clipped: stats.clipped,
1297
+ clipPct: stats.clipPct,
1298
+ nearClip: stats.nearClip,
1299
+ nearClipPct: stats.nearClipPct,
1300
+ gain,
1301
+ barrier: micStateCoordinator.getSessionLoudnessGate(),
1302
+ sweep: sweep.currentLabel(),
1162
1303
  dropsStale: this.micDropsStale,
1163
1304
  dropsNonGlasses: this.micDropsNonGlasses,
1164
1305
  gaps: this.micGaps,
1165
1306
  gapMsMax: this.micGapMsMax,
1307
+ ...this.gateSummary(),
1166
1308
  });
1167
- // #region agent log
1168
- fetch("http://127.0.0.1:7905/ingest/5a9713c9-45ff-4d09-9435-2adc5db5e91d", {
1169
- method: "POST",
1170
- headers: { "Content-Type": "application/json", "X-Debug-Session-Id": "828181" },
1171
- body: JSON.stringify({
1172
- sessionId: "828181",
1173
- runId: "run1",
1174
- hypothesisId: "E",
1175
- location: "AcsMeetingService.ts:logMicUplink",
1176
- message: "phone decoded glasses PCM window",
1177
- data: {
1178
- fps: Math.round((this.micFramesWindow * 1000) / elapsed),
1179
- meanAbs: level.meanAbs,
1180
- peak: level.peak,
1181
- frames: this.micFramesForwarded,
1182
- },
1183
- timestamp: Date.now(),
1184
- }),
1185
- }).catch(() => { });
1186
- // #endregion
1187
1309
  this.micFramesWindow = 0;
1188
1310
  }
1189
1311
  /** Level of the last uplink window, for tests and dev screens. `null` until a window closed. */