Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
08fafb2
New clearer terminology for TIR and its lower threshold
munchyk Sep 19, 2026
cd99c25
Rename TIR Lower Threshold and refine help text
munchyk Sep 24, 2026
135ee8e
Label pump-programmed boluses in History > Treatments
claude Sep 26, 2026
cde0a80
Rename BolusStored.isPumpUI to isProgrammedByPumpUI
claude Sep 26, 2026
33e1843
feat(cgm): add Syai Ultra as CGM
ETolboom Oct 8, 2026
cc8a9c0
Merge branch 'dev' into TIR-bottom-threshold
munchyk Oct 17, 2026
78288eb
Use pump icon with accessibility label for pump-UI boluses in History
claude Oct 17, 2026
ecb79e5
Merge branch 'dev' into claude/busy-babbage-x2bwzo
jwoglom Oct 17, 2026
a3c7546
Merge branch 'dev' into feat/syai
ETolboom Oct 18, 2026
b29cc88
Replace carb entry in a single transaction
ostap-korkuna Oct 19, 2026
75e44e2
Fix inverted SMB low temp rate for sub 30m zero temps
lolzivkovic Oct 19, 2026
547abe4
Fix OpenAPS golden parity test
lolzivkovic Oct 19, 2026
915881e
Close the Edit Override form when the Nightscout profile upload fails
Lamercho Oct 19, 2026
6b94bd0
Document intentional deviation from oref JS in SMB low temp
lolzivkovic Oct 20, 2026
6f086a9
Merge pull request #1651 from lolzivkovic/fix/inverted-smb-low-temp
kingst Oct 20, 2026
d78bc82
CI: Bump APP_DEV_VERSION to 1.0.2.15 [skip ci]
github-actions[bot] Oct 20, 2026
bec255f
Merge branch 'dev' into claude/busy-babbage-x2bwzo
dnzxy Oct 22, 2026
0c690f1
Update submodules to current upstream
dnzxy Oct 22, 2026
9f0a1cc
Bump LoopKit to current trio
dnzxy Oct 22, 2026
ca6187b
Merge pull request #1646 from ostap-korkuna/fix/edit-carb-entry-in-tr…
kingst Oct 22, 2026
ab11fea
CI: Bump APP_DEV_VERSION to 1.0.2.16 [skip ci]
github-actions[bot] Oct 22, 2026
c929956
chore: update syaikit submodule
ETolboom Oct 23, 2026
9db6733
Merge branch 'dev' into feat/syai
ETolboom Oct 23, 2026
2420af7
Record the CC0 licence for the alarm sounds
dnzxy Oct 23, 2026
7b7121b
Bump submodules for the 22 Oct translation round
dnzxy Oct 23, 2026
f61cefb
Bump LibreLoop to current upstream
dnzxy Oct 23, 2026
165ef16
Merge pull request #1658 from dnzxy/docs/alarm-sound-license
kingst Oct 23, 2026
3951550
CI: Bump APP_DEV_VERSION to 1.0.2.17 [skip ci]
github-actions[bot] Oct 23, 2026
0a8c258
Bump G7SensorKit for the SystemMemoryReset reconnect fix
dnzxy Oct 23, 2026
9b593b2
Show CGM sensor warnings whatever the sensor's age
dnzxy Oct 19, 2026
0c511a7
Catalog the G7 sensor lifecycle alerts
dnzxy Oct 19, 2026
2c99e1f
Merge pull request #1656 from nightscout/chore/update-submodules-1022
kingst Oct 23, 2026
3a57aef
CI: Bump APP_DEV_VERSION to 1.0.2.18 [skip ci]
github-actions[bot] Oct 23, 2026
5bcbed7
Merge branch 'dev' into fix/cgm-sensor-issue-surfacing
dnzxy Oct 23, 2026
74ee666
Merge branch 'dev' into feat/syai
ETolboom Oct 23, 2026
aec0e43
feat(alerts): add Syai entries to alert catalog
ETolboom Oct 23, 2026
457fe48
chore: update syaikit submodule
ETolboom Oct 23, 2026
0df3c74
chore: update syaikit submodule
ETolboom Oct 23, 2026
f381864
chore: update syaikit submodule
ETolboom Oct 23, 2026
b661083
chore: update syaikit submodule
ETolboom Oct 23, 2026
cc8dd5d
Merge pull request #1659 from dnzxy/fix/cgm-sensor-issue-surfacing
dnzxy Oct 23, 2026
d166b09
CI: Bump APP_DEV_VERSION to 1.0.2.19 [skip ci]
github-actions[bot] Oct 23, 2026
eb32938
Merge pull request #1558 from munchyk-loop/TIR-bottom-threshold
dnzxy Oct 24, 2026
db974e1
CI: Bump APP_DEV_VERSION to 1.0.2.20 [skip ci]
github-actions[bot] Oct 24, 2026
11f1ca3
Merge pull request #1580 from jwoglom/claude/busy-babbage-x2bwzo
dnzxy Oct 24, 2026
02fa0cf
CI: Bump APP_DEV_VERSION to 1.0.2.21 [skip ci]
github-actions[bot] Oct 24, 2026
f672737
Merge branch 'dev' into feat/syai
dnzxy Oct 24, 2026
fe95d14
Merge pull request #1652 from Lamercho/Lamercho/edit-override-save-di…
dnzxy Oct 24, 2026
979419f
CI: Bump APP_DEV_VERSION to 1.0.2.22 [skip ci]
github-actions[bot] Oct 24, 2026
3c8cf87
Bump RoundWhiteDiscKit for the SwiftFormat parse fix
dnzxy Oct 24, 2026
4405d72
Merge pull request #1618 from ETolboom/feat/syai
dnzxy Oct 24, 2026
4b42510
CI: Bump APP_DEV_VERSION to 1.0.2.23 [skip ci]
github-actions[bot] Oct 24, 2026
2b8d4ae
Rebuild glucose target profiles when the chart window passes their end
Lamercho Oct 24, 2026
25936eb
Upload pump-programmed bolus flag to Nightscout
claude Oct 24, 2026
4802537
Merge pull request #1665 from Lamercho/fix/target-glucose-line-gap
dnzxy Oct 24, 2026
938e588
CI: Bump APP_DEV_VERSION to 1.0.2.24 [skip ci]
github-actions[bot] Oct 24, 2026
2ef7645
Merge pull request #1666 from jwoglom/ccr-5a5f0336-6kkxht
dnzxy Oct 24, 2026
aff37ac
CI: Bump APP_DEV_VERSION to 1.0.2.25 [skip ci]
github-actions[bot] Oct 24, 2026
c447001
Merge pull request #1662 from nightscout/chore/update-submodules-1024
dnzxy Oct 24, 2026
4cc5e7b
CI: Bump APP_DEV_VERSION to 1.0.2.26 [skip ci]
github-actions[bot] Oct 24, 2026
804801c
sync(trio): merge upstream/dev at 4cc5e7b0e
mountrcg Oct 25, 2026
b5e9d2f
parity: Re-record determination goldens after SMB low temp fix
mountrcg Oct 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,6 @@
[submodule "LoopAlgorithm"]
path = LoopAlgorithm
url = https://github.com/loopandlearn/LoopAlgorithm.git
[submodule "SyaiKit"]
path = SyaiKit
url = https://github.com/nightscout/SyaiKit
21 changes: 19 additions & 2 deletions ACKNOWLEDGEMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,25 @@ Third-party material bundled with Trio, and the terms it is used under.

## Alarm and alert sounds

The themed alarm sets (Acoustic, Electronic) and the one-off tones were
created for Trio by a sound designer and are distributed as part of Trio.
The themed alarm sets (`acoustic_*.caf`, `electronic_*.caf`) and the one-off
tones (`glass_bell.caf`, `harp.caf`, `meow.caf`, `saw_wave.caf`,
`hard_saw_wave.caf`, `sine_wave.caf`, `open_can.caf`, `open_wrapper.caf`) were
created for Trio by **an anonymous diabetes dad and Trio user**.

- Licence: **Creative Commons Zero 1.0 Universal (CC0 1.0)** —
<https://creativecommons.org/publicdomain/zero/1.0/>
- The author states that they are the author of these files, that they hold
the right to license them, and that they contain no third-party material
they cannot license.
- CC0 requires no attribution. The credit above is given at the author's
request; they have asked to remain anonymous.
- Changes made by Trio: the one-off tones were looped by whole repeats to at
least five seconds, so that every alarm sounds for a comparable time. The
themed sets were left exactly as delivered — their length and level are
part of the design, and carry the urgency along with the timbre.

The spoken alert sounds are generated from third-party voice models and are
*not* covered by that dedication — see below.

## Voice alerts

Expand Down
2 changes: 1 addition & 1 deletion CGMBLEKit
2 changes: 1 addition & 1 deletion Config.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ TRIO_APP_GROUP_ID = group.org.nightscout.$(DEVELOPMENT_TEAM).trio.trio-app-group

// The developers set the version numbers, please leave them alone
APP_VERSION = 1.0.2
APP_DEV_VERSION = 1.0.2.14
APP_DEV_VERSION = 1.0.2.26
APP_BUILD_NUMBER = 1
COPYRIGHT_NOTICE = autoISF 3.01

Expand Down
2 changes: 1 addition & 1 deletion DanaKit
2 changes: 1 addition & 1 deletion EversenseKit
2 changes: 1 addition & 1 deletion MedtrumKit
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public extension BolusStored {

@NSManaged var amount: NSDecimalNumber?
@NSManaged var isExternal: Bool
@NSManaged var isProgrammedByPumpUI: Bool
@NSManaged var isSMB: Bool
@NSManaged var programmedAmount: NSDecimalNumber?
@NSManaged var pumpEvent: PumpEventStored?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<entity name="BolusStored" representedClassName="BolusStored" syncable="YES">
<attribute name="amount" optional="YES" attributeType="Decimal" defaultValueString="0"/>
<attribute name="isExternal" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
<attribute name="isProgrammedByPumpUI" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
<attribute name="isSMB" optional="YES" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
<attribute name="programmedAmount" optional="YES" attributeType="Decimal"/>
<relationship name="pumpEvent" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PumpEventStored" inverseName="bolus" inverseEntity="PumpEventStored"/>
Expand Down
2 changes: 1 addition & 1 deletion RoundWhiteDiscKit
1 change: 1 addition & 0 deletions SyaiKit
Submodule SyaiKit added at 816108
22 changes: 16 additions & 6 deletions Trio.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
objects = {

/* Begin PBXBuildFile section */
03B15F4B3077CD4B00DFEBE4 /* SyaiKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03B15F4A3077CD4B00DFEBE4 /* SyaiKit.framework */; };
03B15F4D3077CD5400DFEBE4 /* SyaiKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03B15F4C3077CD5400DFEBE4 /* SyaiKitUI.framework */; };
03B15F4E3077CD6100DFEBE4 /* SyaiKitUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 03B15F4C3077CD5400DFEBE4 /* SyaiKitUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
03B15F4F3077CD6100DFEBE4 /* SyaiKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 03B15F4A3077CD4B00DFEBE4 /* SyaiKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
041D1E995A6AE92E9289DC49 /* TreatmentsDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D1A7CA8C10C4403D4BBFA7 /* TreatmentsDataFlow.swift */; };
0D9A5E34A899219C5C4CDFAF /* HistoryStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9455FA2D92E77A6C4AFED8A3 /* HistoryStateModel.swift */; };
110AEDE32C5193D200615CC9 /* BolusIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110AEDE02C5193D100615CC9 /* BolusIntent.swift */; };
Expand Down Expand Up @@ -328,8 +332,6 @@
41740E936552456AAC0EDDC3 /* LoopIndicatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3919BBB515547118D684CD2 /* LoopIndicatorTests.swift */; };
41740E936552456AAC0EDCC3 /* MaxIOBSuggestionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3919BBB515547118D684CC2 /* MaxIOBSuggestionTests.swift */; };
41740E936552456AAC0EDBC3 /* DosingModeMigrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3919BBB515547118D684CB2 /* DosingModeMigrationTests.swift */; };
45252C95D220E796FDB3B022 /* ConfigEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8A87AA037BD079BA3528BA /* ConfigEditorDataFlow.swift */; };
45717281F743594AA9D87191 /* ConfigEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 920DDB21E5D0EB813197500D /* ConfigEditorRootView.swift */; };
49090A8D2E9FE8D200D0F5DB /* GarminWatchSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49090A8C2E9FE8D200D0F5DB /* GarminWatchSettings.swift */; };
491D6FBD2D56741C00C49F67 /* TempTargetStored+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D6FBC2D56741C00C49F67 /* TempTargetStored+CoreDataProperties.swift */; };
491D6FBE2D56741C00C49F67 /* TempTargetRunStored+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D6FB92D56741C00C49F67 /* TempTargetRunStored+CoreDataClass.swift */; };
Expand Down Expand Up @@ -828,6 +830,7 @@
CA01000000000000000010C6 /* CGMManagerAlertOwnership.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA01000000000000000010C5 /* CGMManagerAlertOwnership.swift */; };
CA01000000000000000010C8 /* AlertColdStartReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA01000000000000000010C7 /* AlertColdStartReplay.swift */; };
CA02000000000000000010C2 /* DeliveryLimitsSyncTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA02000000000000000010C1 /* DeliveryLimitsSyncTests.swift */; };
CA03000000000000000010C2 /* AlertCatalogRegistryOmniFaultTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA03000000000000000010C1 /* AlertCatalogRegistryOmniFaultTests.swift */; };
CA07000000000000000010C2 /* TelemetrySendGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA07000000000000000010C1 /* TelemetrySendGateTests.swift */; };
CA05000000000000000010C2 /* AlarmGramsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA05000000000000000010C1 /* AlarmGramsSection.swift */; };
CA06000000000000000010C2 /* GlucoseAlertsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA06000000000000000010C1 /* GlucoseAlertsStoreTests.swift */; };
Expand Down Expand Up @@ -933,7 +936,6 @@
DD1745292C55642100211FAD /* DosingModeOverrideNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD1745282C55642100211FAD /* DosingModeOverrideNote.swift */; };
DD17452B2C556E8100211FAC /* SettingInputHintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD17452A2C556E8100211FAC /* SettingInputHintView.swift */; };
DD17452C2C5564FF00211FA1 /* SettingsSearchHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD17452C2C5564FF00211FA2 /* SettingsSearchHighlight.swift */; };
41740E936552456AAC0EDAC3 /* SettingsSearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3919BBB515547118D684CA2 /* SettingsSearchTests.swift */; };
DD17452E2C55AE4800211FAC /* TargetBehavoirDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD17452D2C55AE4800211FAC /* TargetBehavoirDataFlow.swift */; };
DD1745302C55AE5300211FAC /* TargetBehaviorProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD17452F2C55AE5300211FAC /* TargetBehaviorProvider.swift */; };
DD1745322C55AE6000211FAC /* TargetBehavoirStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD1745312C55AE6000211FAC /* TargetBehavoirStateModel.swift */; };
Expand Down Expand Up @@ -1228,6 +1230,8 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
03B15F4E3077CD6100DFEBE4 /* SyaiKitUI.framework in Embed Frameworks */,
03B15F4F3077CD6100DFEBE4 /* SyaiKit.framework in Embed Frameworks */,
3B4BA78F2D8DC0EC0069D5B8 /* TidepoolServiceKit.framework in Embed Frameworks */,
3B4BA7732D8DBD690069D5B8 /* G7SensorKitUI.framework in Embed Frameworks */,
3B4BA76D2D8DBD690069D5B8 /* CGMBLEKitUI.framework in Embed Frameworks */,
Expand Down Expand Up @@ -1297,6 +1301,8 @@

/* Begin PBXFileReference section */
07629711A990D7666480FF41 /* ProfileSchedulerProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProfileSchedulerProvider.swift; sourceTree = "<group>"; };
03B15F4A3077CD4B00DFEBE4 /* SyaiKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SyaiKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
03B15F4C3077CD5400DFEBE4 /* SyaiKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SyaiKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0A1E8522E7684C6AA742F6E4 /* HomeStateModel+QuickPickTreatments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeStateModel+QuickPickTreatments.swift"; sourceTree = "<group>"; };
10E61A0885164081B57C357C /* NightscoutUploadSerializer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutUploadSerializer.swift; sourceTree = "<group>"; };
110AEDE02C5193D100615CC9 /* BolusIntent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BolusIntent.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2110,6 +2116,7 @@
CA01000000000000000010C5 /* CGMManagerAlertOwnership.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMManagerAlertOwnership.swift; sourceTree = "<group>"; };
CA01000000000000000010C7 /* AlertColdStartReplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertColdStartReplay.swift; sourceTree = "<group>"; };
CA02000000000000000010C1 /* DeliveryLimitsSyncTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeliveryLimitsSyncTests.swift; sourceTree = "<group>"; };
CA03000000000000000010C1 /* AlertCatalogRegistryOmniFaultTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertCatalogRegistryOmniFaultTests.swift; sourceTree = "<group>"; };
CA07000000000000000010C1 /* TelemetrySendGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelemetrySendGateTests.swift; sourceTree = "<group>"; };
CA05000000000000000010C1 /* AlarmGramsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmGramsSection.swift; sourceTree = "<group>"; };
CA06000000000000000010C1 /* GlucoseAlertsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseAlertsStoreTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2212,7 +2219,6 @@
DD1745282C55642100211FAD /* DosingModeOverrideNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DosingModeOverrideNote.swift; sourceTree = "<group>"; };
DD17452A2C556E8100211FAC /* SettingInputHintView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingInputHintView.swift; sourceTree = "<group>"; };
DD17452C2C5564FF00211FA2 /* SettingsSearchHighlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchHighlight.swift; sourceTree = "<group>"; };
B3919BBB515547118D684CA2 /* SettingsSearchTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsSearchTests.swift; sourceTree = "<group>"; };
DD17452D2C55AE4800211FAC /* TargetBehavoirDataFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetBehavoirDataFlow.swift; sourceTree = "<group>"; };
DD17452F2C55AE5300211FAC /* TargetBehaviorProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetBehaviorProvider.swift; sourceTree = "<group>"; };
DD1745312C55AE6000211FAC /* TargetBehavoirStateModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetBehavoirStateModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2464,6 +2470,8 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
03B15F4D3077CD5400DFEBE4 /* SyaiKitUI.framework in Frameworks */,
03B15F4B3077CD4B00DFEBE4 /* SyaiKit.framework in Frameworks */,
CE95BF632BA771BE00DC3DE3 /* LoopTestingKit.framework in Frameworks */,
3B4BA7722D8DBD690069D5B8 /* G7SensorKitUI.framework in Frameworks */,
3B4BA7742D8DBD690069D5B8 /* LibreTransmitter.framework in Frameworks */,
Expand Down Expand Up @@ -2502,7 +2510,6 @@
CE95BF5F2BA7715800DC3DE3 /* MockKit.framework in Frameworks */,
DD17A0292E3FE0BD008E1BF0 /* SwiftJWT in Frameworks */,
3BD9687F2D8DDD8800899469 /* CryptoSwift in Frameworks */,
3B4BA7842D8DBD690069D5B8 /* RileyLinkKit.framework in Frameworks */,
CE95BF612BA7715900DC3DE3 /* MockKitUI.framework in Frameworks */,
E0CC2C5C275B9F0F00A7BC71 /* HealthKit.framework in Frameworks */,
CE95BF5D2BA770C300DC3DE3 /* LoopKitUI.framework in Frameworks */,
Expand Down Expand Up @@ -3182,6 +3189,8 @@
3818AA48274C267000843DB3 /* Frameworks */ = {
isa = PBXGroup;
children = (
03B15F4C3077CD5400DFEBE4 /* SyaiKitUI.framework */,
03B15F4A3077CD4B00DFEBE4 /* SyaiKit.framework */,
3E5308A43002BC970075629E /* AccuChekKit.framework */,
B6E925122EB3932A0076D719 /* OmnipodKit.framework */,
3E54EF2B2E476DA40006F54D /* MedtrumKit.framework */,
Expand Down Expand Up @@ -3660,6 +3669,7 @@
38FCF3F125E9028E0078B0D1 /* Info.plist */,
CEE9A65D2BBC9F6500EB5194 /* CalibrationsTests.swift */,
CA02000000000000000010C1 /* DeliveryLimitsSyncTests.swift */,
CA03000000000000000010C1 /* AlertCatalogRegistryOmniFaultTests.swift */,
CA07000000000000000010C1 /* TelemetrySendGateTests.swift */,
3BAAE60B2DE776630049589B /* DynamicISFEnableTests.swift */,
38FCF3F825E902C20078B0D1 /* FileStorageTests.swift */,
Expand Down Expand Up @@ -6889,8 +6899,8 @@
DDDD0FFD2F4E22C000F9C645 /* GlucoseNativeConversionTests.swift in Sources */,
DDDD10A12F4E22C000F9C645 /* CarbsNativeConversionTests.swift in Sources */,
DDDD10B12F4E22C000F9C645 /* PumpHistoryNativeConversionTests.swift in Sources */,
CEE9A65E2BBC9F6500EB5194 /* CalibrationsTests.swift in Sources */,
CA02000000000000000010C2 /* DeliveryLimitsSyncTests.swift in Sources */,
CA03000000000000000010C2 /* AlertCatalogRegistryOmniFaultTests.swift in Sources */,
CA07000000000000000010C2 /* TelemetrySendGateTests.swift in Sources */,
BD8FC0622D6619E600B95AED /* OverrideStorageTests.swift in Sources */,
BD8FC0592D66189700B95AED /* TestAssembly.swift in Sources */,
Expand Down
5 changes: 4 additions & 1 deletion Trio.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions Trio/Sources/APS/CGM/PluginSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import LibreLoop
import LibreTransmitter
import LoopKit
import LoopKitUI
import SyaiKit

final class PluginSource: GlucoseSource {
private let processQueue = DispatchQueue(label: "CGMPluginSource.processQueue")
Expand Down Expand Up @@ -308,6 +309,10 @@ extension PluginSource: CGMManagerDelegate {
sensorActivatedAt = cgmTransmitterManager.state.activatedAt
sensorStartDate = cgmTransmitterManager.state.activatedAt
sensorTransmitterID = cgmTransmitterManager.state.bleNameString
} else if let cgmTransmitterManager = cgmManager as? SyaiCGMManager {
sensorActivatedAt = cgmTransmitterManager.state.activatedAt
sensorStartDate = cgmTransmitterManager.state.activatedAt
sensorTransmitterID = cgmTransmitterManager.state.mac
}

// isDisplayOnly means "shifted for visual consistency after calibration"
Expand Down
11 changes: 11 additions & 0 deletions Trio/Sources/APS/Devices/DeviceCatalog.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import MockKit
import MockKitUI
import ObjectiveC
import OmnipodKit
import SyaiKit
import SyaiKitUI
import UIKit

/// Single source of truth for every CGM and pump Trio can pair with.
Expand All @@ -45,6 +47,7 @@ enum DeviceManufacturer: CaseIterable {
case roche
case senseonics
case sooil
case syai
case otherSources
case simulator

Expand All @@ -59,6 +62,7 @@ enum DeviceManufacturer: CaseIterable {
case .roche: return "Roche"
case .senseonics: return "Senseonics"
case .sooil: return "SOOIL"
case .syai: return "Syai"
case .otherSources: return String(localized: "Other Sources", comment: "Device picker section for data relays")
case .simulator: return String(localized: "Simulator", comment: "Device picker section for simulated devices")
}
Expand Down Expand Up @@ -389,6 +393,13 @@ extension DeviceCatalog {
icon: .managerBundle(asset: "transmitter")
),

CGMCatalogEntry(
.managed(SyaiCGMManager.self),
manufacturer: .syai,
name: "Syai Ultra",
icon: .uiBundle(identifier: "org.loopkit.SyaiKitUI", asset: "sensor")
),

CGMCatalogEntry(.native(.nightscout), manufacturer: .otherSources, icon: .trio(asset: "owl")),
CGMCatalogEntry(.native(.xdrip), manufacturer: .otherSources),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -860,7 +860,10 @@ enum DosingEngine {
durationRequired = min(60, max(0, durationRequired))
} else {
// Note: we're using the fully adjusted basal here
smbLowTempRequired = (basal * durationRequired / 30).jsRounded(scale: 2)
// Intentional deviation from oref JS (basal * durationReq / 30) as that formula is,
// inverted, so a longer required suspension gets a higher rate instead of a lower one.
// See https://github.com/nightscout/Trio/issues/1359
smbLowTempRequired = (basal * (30 - durationRequired) / 30).jsRounded(scale: 2)
durationRequired = 30
}

Expand Down
Loading
Loading