@glassly/engine 0.3.1-beta.527 → 0.3.1-beta.551

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 (69) hide show
  1. package/build/generated/releaseMetadata.js +3 -3
  2. package/build/generated/releaseMetadata.js.map +1 -1
  3. package/build/index.d.ts +1 -1
  4. package/build/index.d.ts.map +1 -1
  5. package/build/index.js +1 -1
  6. package/build/index.js.map +1 -1
  7. package/build/services/DisplayProcessor.d.ts.map +1 -1
  8. package/build/services/DisplayProcessor.js +2 -1
  9. package/build/services/DisplayProcessor.js.map +1 -1
  10. package/build/services/GlassesTouchInput.d.ts.map +1 -1
  11. package/build/services/GlassesTouchInput.js +6 -6
  12. package/build/services/GlassesTouchInput.js.map +1 -1
  13. package/build/services/effectiveCapabilities.d.ts.map +1 -1
  14. package/build/services/effectiveCapabilities.js +7 -4
  15. package/build/services/effectiveCapabilities.js.map +1 -1
  16. package/build/services/pages/pageEligibility.d.ts +6 -2
  17. package/build/services/pages/pageEligibility.d.ts.map +1 -1
  18. package/build/services/pages/pageEligibility.js +11 -4
  19. package/build/services/pages/pageEligibility.js.map +1 -1
  20. package/build/stores/settings.d.ts.map +1 -1
  21. package/build/stores/settings.js +14 -0
  22. package/build/stores/settings.js.map +1 -1
  23. package/build/types/applet.d.ts +4 -2
  24. package/build/types/applet.d.ts.map +1 -1
  25. package/build/types/applet.js.map +1 -1
  26. package/build/types/capabilities/rayneo-io.d.ts +14 -0
  27. package/build/types/capabilities/rayneo-io.d.ts.map +1 -0
  28. package/build/types/capabilities/rayneo-io.js +84 -0
  29. package/build/types/capabilities/rayneo-io.js.map +1 -0
  30. package/build/types/enums.d.ts +2 -1
  31. package/build/types/enums.d.ts.map +1 -1
  32. package/build/types/enums.js +1 -0
  33. package/build/types/enums.js.map +1 -1
  34. package/build/types/hardware.d.ts +2 -1
  35. package/build/types/hardware.d.ts.map +1 -1
  36. package/build/types/hardware.js +3 -2
  37. package/build/types/hardware.js.map +1 -1
  38. package/build/types/index.d.ts +1 -1
  39. package/build/types/index.d.ts.map +1 -1
  40. package/build/types/index.js +1 -1
  41. package/build/types/index.js.map +1 -1
  42. package/build/utils/display/index.d.ts +1 -0
  43. package/build/utils/display/index.d.ts.map +1 -1
  44. package/build/utils/display/index.js +2 -0
  45. package/build/utils/display/index.js.map +1 -1
  46. package/build/utils/display/profiles/index.d.ts +1 -0
  47. package/build/utils/display/profiles/index.d.ts.map +1 -1
  48. package/build/utils/display/profiles/index.js +2 -0
  49. package/build/utils/display/profiles/index.js.map +1 -1
  50. package/build/utils/display/profiles/rayneo-io.d.ts +2 -0
  51. package/build/utils/display/profiles/rayneo-io.d.ts.map +1 -0
  52. package/build/utils/display/profiles/rayneo-io.js +3 -0
  53. package/build/utils/display/profiles/rayneo-io.js.map +1 -0
  54. package/package.json +7 -7
  55. package/src/generated/releaseMetadata.ts +3 -3
  56. package/src/index.ts +1 -0
  57. package/src/services/DisplayProcessor.ts +2 -0
  58. package/src/services/GlassesTouchInput.ts +6 -9
  59. package/src/services/effectiveCapabilities.ts +6 -3
  60. package/src/services/pages/pageEligibility.ts +12 -3
  61. package/src/stores/settings.ts +14 -0
  62. package/src/types/applet.ts +4 -17
  63. package/src/types/capabilities/rayneo-io.ts +101 -0
  64. package/src/types/enums.ts +1 -0
  65. package/src/types/hardware.ts +3 -2
  66. package/src/types/index.ts +1 -0
  67. package/src/utils/display/index.ts +3 -0
  68. package/src/utils/display/profiles/index.ts +3 -0
  69. package/src/utils/display/profiles/rayneo-io.ts +2 -0
@@ -742,6 +742,19 @@ export const SETTINGS: Record<string, Setting> = {
742
742
  saveOnServer: false,
743
743
  persist: true,
744
744
  },
745
+ // Debug: route the R1 ring through the glasses (advStart + RING_CONNECT_INFO,
746
+ // events forwarded by the CFW) instead of the phone link. OFF by default:
747
+ // the ring sends its touch reports to the glasses whenever it holds glasses
748
+ // targets, so the phone link only carries telemetry until those are erased.
749
+ // Synced to the Bluetooth SDK, which re-routes a connected ring on change.
750
+ // Device-local debug knob, so not saved on the server.
751
+ ring_via_glasses: {
752
+ key: "ring_via_glasses",
753
+ defaultValue: () => false,
754
+ writable: true,
755
+ saveOnServer: false,
756
+ persist: true,
757
+ },
745
758
  // Maximum rate at which display updates leave the phone for the glasses.
746
759
  // The Bluetooth SDK paces every scene frame and legacy layout to this,
747
760
  // coalescing faster updates last-wins; clears bypass it. No effect on G2
@@ -1094,6 +1107,7 @@ export const BLUETOOTH_SETTING_KEYS: string[] = [
1094
1107
  SETTINGS.cfw_scene_renderer.key,
1095
1108
  SETTINGS.cfw_fast_ble.key,
1096
1109
  SETTINGS.g2_perf_logs.key,
1110
+ SETTINGS.ring_via_glasses.key,
1097
1111
  SETTINGS.display_max_fps.key,
1098
1112
  SETTINGS.twelve_hour_time.key,
1099
1113
  SETTINGS.metric_system.key,
@@ -1,3 +1,4 @@
1
+ import type {ManifestPermissionType} from "@glassly/miniapp/manifest"
1
2
  import type {ReactNode} from "react"
2
3
  /**
3
4
  * App and miniapp types owned by @glassly/engine.
@@ -13,24 +14,10 @@ import type {CompatibilityResult} from "../utils/hardware/hardware"
13
14
  export type AppletType = "standard" | "background" | "dashboard"
14
15
 
15
16
  /**
16
- * Permission types that apps can request
17
+ * Permission types that apps can request: the manifest vocabulary from the
18
+ * SDK (the single source the CLI validator reads too) plus the host-only ALL.
17
19
  */
18
- export type AppPermissionType =
19
- | "ALL"
20
- | "MICROPHONE"
21
- | "CAMERA"
22
- | "CALENDAR"
23
- | "LOCATION"
24
- | "BACKGROUND_LOCATION"
25
- | "READ_NOTIFICATIONS"
26
- | "DISPLAY_MIRROR"
27
- | "POST_NOTIFICATIONS"
28
- | "API_KEYS"
29
- | "MEMORY"
30
- | "AI"
31
- | "SPEAKERS"
32
- | "MANAGE_MINIAPPS"
33
- | "PLATFORM_SETTINGS"
20
+ export type AppPermissionType = "ALL" | ManifestPermissionType
34
21
 
35
22
  /**
36
23
  * Permission object with type and description
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @fileoverview RayNeo iO Hardware Capabilities
3
+ *
4
+ * Capability profile for the RayNeo iO smart glasses. The stock firmware
5
+ * exposes a single-line subtitle page over a framed BLE protocol; with the
6
+ * Glassly CFW installed the glasses open a 540×180 page the phone draws into
7
+ * through the Glassly CFW record protocol (positioned text, images, rects).
8
+ */
9
+
10
+ import type {Capabilities} from "../hardware"
11
+
12
+ /**
13
+ * RayNeo iO capability profile
14
+ */
15
+ export const rayneoIO: Capabilities = {
16
+ modelName: "RayNeo iO",
17
+
18
+ // Camera capabilities - no camera
19
+ hasCamera: false,
20
+ camera: null,
21
+
22
+ // Display capabilities - single monochrome (1-bit) panel
23
+ hasDisplay: true,
24
+ display: {
25
+ count: 1,
26
+ isColor: false,
27
+ color: "green",
28
+ // Bitmaps and positioned elements need the Glassly CFW; stock firmware
29
+ // only shows text through its subtitle page.
30
+ canDisplayBitmap: true,
31
+ resolution: {width: 540, height: 180},
32
+ fieldOfView: {horizontal: 30},
33
+ maxTextLines: 5,
34
+ adjustBrightness: true,
35
+
36
+ // Scene display API — the Glassly CFW page canvas.
37
+ width: 540,
38
+ height: 180,
39
+ canPosition: true,
40
+ maxTextElements: 6,
41
+ maxImageElements: 4,
42
+ intensityLevels: 2,
43
+ partialUpdate: true,
44
+ },
45
+
46
+ // Microphone capabilities - one Opus mic stream through the voice page
47
+ hasMicrophone: true,
48
+ microphone: {
49
+ count: 1,
50
+ hasVAD: false,
51
+ },
52
+
53
+ // Speaker capabilities - no speaker channel in the protocol
54
+ hasSpeaker: false,
55
+ speaker: null,
56
+
57
+ // IMU capabilities - stock firmware exposes no IMU or head-gesture stream
58
+ hasIMU: false,
59
+ imu: null,
60
+
61
+ // Button capabilities - temple touchpad/crown plus a physical button
62
+ hasButton: true,
63
+ button: {
64
+ count: 1,
65
+ buttons: [
66
+ {
67
+ type: "swipe1d",
68
+ events: ["TAP", "DOUBLE_TAP", "PRESS_HOLD", "SWIPE_UP", "SWIPE_DOWN"],
69
+ isCapacitive: true,
70
+ },
71
+ ],
72
+ },
73
+
74
+ // Light capabilities - no lights
75
+ hasLight: false,
76
+ light: null,
77
+
78
+ // Power capabilities
79
+ power: {
80
+ hasExternalBattery: false,
81
+ },
82
+
83
+ // WiFi capabilities - no WiFi
84
+ hasWifi: false,
85
+
86
+ // OTA capabilities - RayNeo iO updates are not driven by the ASG OTA flow
87
+ hasOta: false,
88
+
89
+ // Glassly CFW is bundled for the RayNeo iO and flashed over BLE from the app
90
+ hasCustomFirmware: true,
91
+
92
+ // Dashboard - the launcher renders its own status UI; Glassly does not
93
+ // manage the dashboard settings for it
94
+ hasNativeDashboard: true,
95
+
96
+ // Navigation - no firmware nav UI
97
+ hasNativeNavigation: false,
98
+
99
+ // Firmware notification popups: the phone uploads notification content
100
+ hasNativeNotifications: true,
101
+ }
@@ -12,6 +12,7 @@ export enum DeviceTypes {
12
12
  NEX = "Mentra Display",
13
13
  NIMO = "NIMO",
14
14
  FRAME = "Brilliant Frame",
15
+ RAYNEO_IO = "RayNeo iO",
15
16
  }
16
17
 
17
18
  export enum ControllerTypes {
@@ -8,6 +8,7 @@ import {mentraDisplay} from "./capabilities/mentra-display"
8
8
  import {mentraLive} from "./capabilities/mentra-live"
9
9
  import {simulatedGlasses} from "./capabilities/simulated-glasses"
10
10
  import {nimo} from "./capabilities/nimo"
11
+ import {rayneoIO} from "./capabilities/rayneo-io"
11
12
  import {vuzixZ100} from "./capabilities/vuzix-z100"
12
13
  import {none} from "./capabilities/none"
13
14
  import {DeviceTypes} from "./enums"
@@ -230,8 +231,8 @@ export const HARDWARE_CAPABILITIES: Record<string, Capabilities> = {
230
231
  [simulatedGlasses.modelName]: simulatedGlasses,
231
232
  [vuzixZ100.modelName]: vuzixZ100,
232
233
  [nimo.modelName]: nimo,
234
+ [rayneoIO.modelName]: rayneoIO,
233
235
  [DeviceTypes.MACH1]: vuzixZ100, // Mach1 uses same Vuzix Ultralite hardware as Z100
234
- [nimo.modelName]: nimo,
235
236
  [DeviceTypes.AR99]: {
236
237
  ...evenRealitiesG1,
237
238
  modelName: DeviceTypes.AR99,
@@ -260,4 +261,4 @@ export const getModelCapabilities = (deviceType: DeviceTypes): Capabilities => {
260
261
  }
261
262
 
262
263
  // export * from "./capabilities"
263
- export {simulatedGlasses, evenRealitiesG1, evenRealitiesG2, mentraLive, vuzixZ100, mentraDisplay, nimo}
264
+ export {simulatedGlasses, evenRealitiesG1, evenRealitiesG2, mentraLive, vuzixZ100, mentraDisplay, nimo, rayneoIO}
@@ -27,6 +27,7 @@ export {
27
27
  evenRealitiesG2,
28
28
  mentraLive,
29
29
  nimo,
30
+ rayneoIO,
30
31
  vuzixZ100,
31
32
  mentraDisplay,
32
33
  } from "./hardware"
@@ -70,6 +70,9 @@ export {Z100_PROFILE, Z100_HYPHEN_WIDTH_PX, Z100_SPACE_WIDTH_PX} from "./profile
70
70
  // Mentra Nex Profile (a.k.a. Mentra Display)
71
71
  export {NEX_PROFILE, NEX_HYPHEN_WIDTH_PX, NEX_SPACE_WIDTH_PX} from "./profiles"
72
72
 
73
+ // RayNeo iO Profile (stock subtitle page)
74
+ export {RAYNEO_IO_PROFILE, RAYNEO_IO_HYPHEN_WIDTH_PX, RAYNEO_IO_SPACE_WIDTH_PX} from "./profiles"
75
+
73
76
  // =============================================================================
74
77
  // Measurer - Pixel-accurate text measurement
75
78
  // =============================================================================
@@ -26,3 +26,6 @@ export {G2_PROFILE, G2_HYPHEN_WIDTH_PX, G2_SPACE_WIDTH_PX} from "./g2"
26
26
 
27
27
  // Mentra Nex Profile (a.k.a. Mentra Display)
28
28
  export {NEX_PROFILE, NEX_HYPHEN_WIDTH_PX, NEX_SPACE_WIDTH_PX} from "./nex"
29
+
30
+ // RayNeo iO Profile (stock subtitle page)
31
+ export {RAYNEO_IO_PROFILE, RAYNEO_IO_HYPHEN_WIDTH_PX, RAYNEO_IO_SPACE_WIDTH_PX} from "./rayneo-io"
@@ -0,0 +1,2 @@
1
+ // Moved into the SDK (@glassly/miniapp/display) so miniapps lay text out the way the host measures it; this path re-exports it for the engine.
2
+ export {RAYNEO_IO_PROFILE, RAYNEO_IO_HYPHEN_WIDTH_PX, RAYNEO_IO_SPACE_WIDTH_PX} from "@glassly/miniapp/display"