diff options
26 files changed, 194 insertions, 943 deletions
diff --git a/I2C/I2C.xcodeproj/project.pbxproj b/I2C/I2C.xcodeproj/project.pbxproj deleted file mode 100644 index cbc3848..0000000 --- a/I2C/I2C.xcodeproj/project.pbxproj +++ /dev/null | |||
| @@ -1,563 +0,0 @@ | |||
| 1 | // !$*UTF8*$! | ||
| 2 | { | ||
| 3 | archiveVersion = 1; | ||
| 4 | classes = { | ||
| 5 | }; | ||
| 6 | objectVersion = 77; | ||
| 7 | objects = { | ||
| 8 | |||
| 9 | /* Begin PBXContainerItemProxy section */ | ||
| 10 | C9D669792CDF68E50085062E /* PBXContainerItemProxy */ = { | ||
| 11 | isa = PBXContainerItemProxy; | ||
| 12 | containerPortal = C9D669602CDF68E30085062E /* Project object */; | ||
| 13 | proxyType = 1; | ||
| 14 | remoteGlobalIDString = C9D669672CDF68E30085062E; | ||
| 15 | remoteInfo = I2C; | ||
| 16 | }; | ||
| 17 | C9D669832CDF68E50085062E /* PBXContainerItemProxy */ = { | ||
| 18 | isa = PBXContainerItemProxy; | ||
| 19 | containerPortal = C9D669602CDF68E30085062E /* Project object */; | ||
| 20 | proxyType = 1; | ||
| 21 | remoteGlobalIDString = C9D669672CDF68E30085062E; | ||
| 22 | remoteInfo = I2C; | ||
| 23 | }; | ||
| 24 | /* End PBXContainerItemProxy section */ | ||
| 25 | |||
| 26 | /* Begin PBXFileReference section */ | ||
| 27 | C9D669682CDF68E30085062E /* I2C.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = I2C.app; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 28 | C9D669782CDF68E50085062E /* I2CTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = I2CTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 29 | C9D669822CDF68E50085062E /* I2CUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = I2CUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
| 30 | /* End PBXFileReference section */ | ||
| 31 | |||
| 32 | /* Begin PBXFileSystemSynchronizedRootGroup section */ | ||
| 33 | C9D6696A2CDF68E30085062E /* I2C */ = { | ||
| 34 | isa = PBXFileSystemSynchronizedRootGroup; | ||
| 35 | path = I2C; | ||
| 36 | sourceTree = "<group>"; | ||
| 37 | }; | ||
| 38 | C9D6697B2CDF68E50085062E /* I2CTests */ = { | ||
| 39 | isa = PBXFileSystemSynchronizedRootGroup; | ||
| 40 | path = I2CTests; | ||
| 41 | sourceTree = "<group>"; | ||
| 42 | }; | ||
| 43 | C9D669852CDF68E50085062E /* I2CUITests */ = { | ||
| 44 | isa = PBXFileSystemSynchronizedRootGroup; | ||
| 45 | path = I2CUITests; | ||
| 46 | sourceTree = "<group>"; | ||
| 47 | }; | ||
| 48 | /* End PBXFileSystemSynchronizedRootGroup section */ | ||
| 49 | |||
| 50 | /* Begin PBXFrameworksBuildPhase section */ | ||
| 51 | C9D669652CDF68E30085062E /* Frameworks */ = { | ||
| 52 | isa = PBXFrameworksBuildPhase; | ||
| 53 | buildActionMask = 2147483647; | ||
| 54 | files = ( | ||
| 55 | ); | ||
| 56 | runOnlyForDeploymentPostprocessing = 0; | ||
| 57 | }; | ||
| 58 | C9D669752CDF68E50085062E /* Frameworks */ = { | ||
| 59 | isa = PBXFrameworksBuildPhase; | ||
| 60 | buildActionMask = 2147483647; | ||
| 61 | files = ( | ||
| 62 | ); | ||
| 63 | runOnlyForDeploymentPostprocessing = 0; | ||
| 64 | }; | ||
| 65 | C9D6697F2CDF68E50085062E /* Frameworks */ = { | ||
| 66 | isa = PBXFrameworksBuildPhase; | ||
| 67 | buildActionMask = 2147483647; | ||
| 68 | files = ( | ||
| 69 | ); | ||
| 70 | runOnlyForDeploymentPostprocessing = 0; | ||
| 71 | }; | ||
| 72 | /* End PBXFrameworksBuildPhase section */ | ||
| 73 | |||
| 74 | /* Begin PBXGroup section */ | ||
| 75 | C9D6695F2CDF68E30085062E = { | ||
| 76 | isa = PBXGroup; | ||
| 77 | children = ( | ||
| 78 | C9D6696A2CDF68E30085062E /* I2C */, | ||
| 79 | C9D6697B2CDF68E50085062E /* I2CTests */, | ||
| 80 | C9D669852CDF68E50085062E /* I2CUITests */, | ||
| 81 | C9D669692CDF68E30085062E /* Products */, | ||
| 82 | ); | ||
| 83 | sourceTree = "<group>"; | ||
| 84 | }; | ||
| 85 | C9D669692CDF68E30085062E /* Products */ = { | ||
| 86 | isa = PBXGroup; | ||
| 87 | children = ( | ||
| 88 | C9D669682CDF68E30085062E /* I2C.app */, | ||
| 89 | C9D669782CDF68E50085062E /* I2CTests.xctest */, | ||
| 90 | C9D669822CDF68E50085062E /* I2CUITests.xctest */, | ||
| 91 | ); | ||
| 92 | name = Products; | ||
| 93 | sourceTree = "<group>"; | ||
| 94 | }; | ||
| 95 | /* End PBXGroup section */ | ||
| 96 | |||
| 97 | /* Begin PBXNativeTarget section */ | ||
| 98 | C9D669672CDF68E30085062E /* I2C */ = { | ||
| 99 | isa = PBXNativeTarget; | ||
| 100 | buildConfigurationList = C9D6698C2CDF68E50085062E /* Build configuration list for PBXNativeTarget "I2C" */; | ||
| 101 | buildPhases = ( | ||
| 102 | C9D669642CDF68E30085062E /* Sources */, | ||
| 103 | C9D669652CDF68E30085062E /* Frameworks */, | ||
| 104 | C9D669662CDF68E30085062E /* Resources */, | ||
| 105 | ); | ||
| 106 | buildRules = ( | ||
| 107 | ); | ||
| 108 | dependencies = ( | ||
| 109 | ); | ||
| 110 | fileSystemSynchronizedGroups = ( | ||
| 111 | C9D6696A2CDF68E30085062E /* I2C */, | ||
| 112 | ); | ||
| 113 | name = I2C; | ||
| 114 | packageProductDependencies = ( | ||
| 115 | ); | ||
| 116 | productName = I2C; | ||
| 117 | productReference = C9D669682CDF68E30085062E /* I2C.app */; | ||
| 118 | productType = "com.apple.product-type.application"; | ||
| 119 | }; | ||
| 120 | C9D669772CDF68E50085062E /* I2CTests */ = { | ||
| 121 | isa = PBXNativeTarget; | ||
| 122 | buildConfigurationList = C9D6698F2CDF68E50085062E /* Build configuration list for PBXNativeTarget "I2CTests" */; | ||
| 123 | buildPhases = ( | ||
| 124 | C9D669742CDF68E50085062E /* Sources */, | ||
| 125 | C9D669752CDF68E50085062E /* Frameworks */, | ||
| 126 | C9D669762CDF68E50085062E /* Resources */, | ||
| 127 | ); | ||
| 128 | buildRules = ( | ||
| 129 | ); | ||
| 130 | dependencies = ( | ||
| 131 | C9D6697A2CDF68E50085062E /* PBXTargetDependency */, | ||
| 132 | ); | ||
| 133 | fileSystemSynchronizedGroups = ( | ||
| 134 | C9D6697B2CDF68E50085062E /* I2CTests */, | ||
| 135 | ); | ||
| 136 | name = I2CTests; | ||
| 137 | packageProductDependencies = ( | ||
| 138 | ); | ||
| 139 | productName = I2CTests; | ||
| 140 | productReference = C9D669782CDF68E50085062E /* I2CTests.xctest */; | ||
| 141 | productType = "com.apple.product-type.bundle.unit-test"; | ||
| 142 | }; | ||
| 143 | C9D669812CDF68E50085062E /* I2CUITests */ = { | ||
| 144 | isa = PBXNativeTarget; | ||
| 145 | buildConfigurationList = C9D669922CDF68E50085062E /* Build configuration list for PBXNativeTarget "I2CUITests" */; | ||
| 146 | buildPhases = ( | ||
| 147 | C9D6697E2CDF68E50085062E /* Sources */, | ||
| 148 | C9D6697F2CDF68E50085062E /* Frameworks */, | ||
| 149 | C9D669802CDF68E50085062E /* Resources */, | ||
| 150 | ); | ||
| 151 | buildRules = ( | ||
| 152 | ); | ||
| 153 | dependencies = ( | ||
| 154 | C9D669842CDF68E50085062E /* PBXTargetDependency */, | ||
| 155 | ); | ||
| 156 | fileSystemSynchronizedGroups = ( | ||
| 157 | C9D669852CDF68E50085062E /* I2CUITests */, | ||
| 158 | ); | ||
| 159 | name = I2CUITests; | ||
| 160 | packageProductDependencies = ( | ||
| 161 | ); | ||
| 162 | productName = I2CUITests; | ||
| 163 | productReference = C9D669822CDF68E50085062E /* I2CUITests.xctest */; | ||
| 164 | productType = "com.apple.product-type.bundle.ui-testing"; | ||
| 165 | }; | ||
| 166 | /* End PBXNativeTarget section */ | ||
| 167 | |||
| 168 | /* Begin PBXProject section */ | ||
| 169 | C9D669602CDF68E30085062E /* Project object */ = { | ||
| 170 | isa = PBXProject; | ||
| 171 | attributes = { | ||
| 172 | BuildIndependentTargetsInParallel = 1; | ||
| 173 | LastSwiftUpdateCheck = 1610; | ||
| 174 | LastUpgradeCheck = 1610; | ||
| 175 | TargetAttributes = { | ||
| 176 | C9D669672CDF68E30085062E = { | ||
| 177 | CreatedOnToolsVersion = 16.1; | ||
| 178 | }; | ||
| 179 | C9D669772CDF68E50085062E = { | ||
| 180 | CreatedOnToolsVersion = 16.1; | ||
| 181 | TestTargetID = C9D669672CDF68E30085062E; | ||
| 182 | }; | ||
| 183 | C9D669812CDF68E50085062E = { | ||
| 184 | CreatedOnToolsVersion = 16.1; | ||
| 185 | TestTargetID = C9D669672CDF68E30085062E; | ||
| 186 | }; | ||
| 187 | }; | ||
| 188 | }; | ||
| 189 | buildConfigurationList = C9D669632CDF68E30085062E /* Build configuration list for PBXProject "I2C" */; | ||
| 190 | developmentRegion = en; | ||
| 191 | hasScannedForEncodings = 0; | ||
| 192 | knownRegions = ( | ||
| 193 | en, | ||
| 194 | Base, | ||
| 195 | ); | ||
| 196 | mainGroup = C9D6695F2CDF68E30085062E; | ||
| 197 | minimizedProjectReferenceProxies = 1; | ||
| 198 | preferredProjectObjectVersion = 77; | ||
| 199 | productRefGroup = C9D669692CDF68E30085062E /* Products */; | ||
| 200 | projectDirPath = ""; | ||
| 201 | projectRoot = ""; | ||
| 202 | targets = ( | ||
| 203 | C9D669672CDF68E30085062E /* I2C */, | ||
| 204 | C9D669772CDF68E50085062E /* I2CTests */, | ||
| 205 | C9D669812CDF68E50085062E /* I2CUITests */, | ||
| 206 | ); | ||
| 207 | }; | ||
| 208 | /* End PBXProject section */ | ||
| 209 | |||
| 210 | /* Begin PBXResourcesBuildPhase section */ | ||
| 211 | C9D669662CDF68E30085062E /* Resources */ = { | ||
| 212 | isa = PBXResourcesBuildPhase; | ||
| 213 | buildActionMask = 2147483647; | ||
| 214 | files = ( | ||
| 215 | ); | ||
| 216 | runOnlyForDeploymentPostprocessing = 0; | ||
| 217 | }; | ||
| 218 | C9D669762CDF68E50085062E /* Resources */ = { | ||
| 219 | isa = PBXResourcesBuildPhase; | ||
| 220 | buildActionMask = 2147483647; | ||
| 221 | files = ( | ||
| 222 | ); | ||
| 223 | runOnlyForDeploymentPostprocessing = 0; | ||
| 224 | }; | ||
| 225 | C9D669802CDF68E50085062E /* Resources */ = { | ||
| 226 | isa = PBXResourcesBuildPhase; | ||
| 227 | buildActionMask = 2147483647; | ||
| 228 | files = ( | ||
| 229 | ); | ||
| 230 | runOnlyForDeploymentPostprocessing = 0; | ||
| 231 | }; | ||
| 232 | /* End PBXResourcesBuildPhase section */ | ||
| 233 | |||
| 234 | /* Begin PBXSourcesBuildPhase section */ | ||
| 235 | C9D669642CDF68E30085062E /* Sources */ = { | ||
| 236 | isa = PBXSourcesBuildPhase; | ||
| 237 | buildActionMask = 2147483647; | ||
| 238 | files = ( | ||
| 239 | ); | ||
| 240 | runOnlyForDeploymentPostprocessing = 0; | ||
| 241 | }; | ||
| 242 | C9D669742CDF68E50085062E /* Sources */ = { | ||
| 243 | isa = PBXSourcesBuildPhase; | ||
| 244 | buildActionMask = 2147483647; | ||
| 245 | files = ( | ||
| 246 | ); | ||
| 247 | runOnlyForDeploymentPostprocessing = 0; | ||
| 248 | }; | ||
| 249 | C9D6697E2CDF68E50085062E /* Sources */ = { | ||
| 250 | isa = PBXSourcesBuildPhase; | ||
| 251 | buildActionMask = 2147483647; | ||
| 252 | files = ( | ||
| 253 | ); | ||
| 254 | runOnlyForDeploymentPostprocessing = 0; | ||
| 255 | }; | ||
| 256 | /* End PBXSourcesBuildPhase section */ | ||
| 257 | |||
| 258 | /* Begin PBXTargetDependency section */ | ||
| 259 | C9D6697A2CDF68E50085062E /* PBXTargetDependency */ = { | ||
| 260 | isa = PBXTargetDependency; | ||
| 261 | target = C9D669672CDF68E30085062E /* I2C */; | ||
| 262 | targetProxy = C9D669792CDF68E50085062E /* PBXContainerItemProxy */; | ||
| 263 | }; | ||
| 264 | C9D669842CDF68E50085062E /* PBXTargetDependency */ = { | ||
| 265 | isa = PBXTargetDependency; | ||
| 266 | target = C9D669672CDF68E30085062E /* I2C */; | ||
| 267 | targetProxy = C9D669832CDF68E50085062E /* PBXContainerItemProxy */; | ||
| 268 | }; | ||
| 269 | /* End PBXTargetDependency section */ | ||
| 270 | |||
| 271 | /* Begin XCBuildConfiguration section */ | ||
| 272 | C9D6698A2CDF68E50085062E /* Debug */ = { | ||
| 273 | isa = XCBuildConfiguration; | ||
| 274 | buildSettings = { | ||
| 275 | ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 276 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||
| 277 | CLANG_ANALYZER_NONNULL = YES; | ||
| 278 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||
| 279 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||
| 280 | CLANG_ENABLE_MODULES = YES; | ||
| 281 | CLANG_ENABLE_OBJC_ARC = YES; | ||
| 282 | CLANG_ENABLE_OBJC_WEAK = YES; | ||
| 283 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 284 | CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 285 | CLANG_WARN_COMMA = YES; | ||
| 286 | CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 287 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 288 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 289 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||
| 290 | CLANG_WARN_EMPTY_BODY = YES; | ||
| 291 | CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 292 | CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 293 | CLANG_WARN_INT_CONVERSION = YES; | ||
| 294 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 295 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 296 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 297 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 298 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 299 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 300 | CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 301 | CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 302 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||
| 303 | CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 304 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 305 | COPY_PHASE_STRIP = NO; | ||
| 306 | DEBUG_INFORMATION_FORMAT = dwarf; | ||
| 307 | ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 308 | ENABLE_TESTABILITY = YES; | ||
| 309 | ENABLE_USER_SCRIPT_SANDBOXING = YES; | ||
| 310 | GCC_C_LANGUAGE_STANDARD = gnu17; | ||
| 311 | GCC_DYNAMIC_NO_PIC = NO; | ||
| 312 | GCC_NO_COMMON_BLOCKS = YES; | ||
| 313 | GCC_OPTIMIZATION_LEVEL = 0; | ||
| 314 | GCC_PREPROCESSOR_DEFINITIONS = ( | ||
| 315 | "DEBUG=1", | ||
| 316 | "$(inherited)", | ||
| 317 | ); | ||
| 318 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 319 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 320 | GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 321 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 322 | GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 323 | GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 324 | IPHONEOS_DEPLOYMENT_TARGET = 18.1; | ||
| 325 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||
| 326 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | ||
| 327 | MTL_FAST_MATH = YES; | ||
| 328 | ONLY_ACTIVE_ARCH = YES; | ||
| 329 | SDKROOT = iphoneos; | ||
| 330 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; | ||
| 331 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||
| 332 | }; | ||
| 333 | name = Debug; | ||
| 334 | }; | ||
| 335 | C9D6698B2CDF68E50085062E /* Release */ = { | ||
| 336 | isa = XCBuildConfiguration; | ||
| 337 | buildSettings = { | ||
| 338 | ALWAYS_SEARCH_USER_PATHS = NO; | ||
| 339 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; | ||
| 340 | CLANG_ANALYZER_NONNULL = YES; | ||
| 341 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; | ||
| 342 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; | ||
| 343 | CLANG_ENABLE_MODULES = YES; | ||
| 344 | CLANG_ENABLE_OBJC_ARC = YES; | ||
| 345 | CLANG_ENABLE_OBJC_WEAK = YES; | ||
| 346 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
| 347 | CLANG_WARN_BOOL_CONVERSION = YES; | ||
| 348 | CLANG_WARN_COMMA = YES; | ||
| 349 | CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
| 350 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
| 351 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
| 352 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; | ||
| 353 | CLANG_WARN_EMPTY_BODY = YES; | ||
| 354 | CLANG_WARN_ENUM_CONVERSION = YES; | ||
| 355 | CLANG_WARN_INFINITE_RECURSION = YES; | ||
| 356 | CLANG_WARN_INT_CONVERSION = YES; | ||
| 357 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
| 358 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
| 359 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
| 360 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
| 361 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | ||
| 362 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
| 363 | CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
| 364 | CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
| 365 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||
| 366 | CLANG_WARN_UNREACHABLE_CODE = YES; | ||
| 367 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
| 368 | COPY_PHASE_STRIP = NO; | ||
| 369 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
| 370 | ENABLE_NS_ASSERTIONS = NO; | ||
| 371 | ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
| 372 | ENABLE_USER_SCRIPT_SANDBOXING = YES; | ||
| 373 | GCC_C_LANGUAGE_STANDARD = gnu17; | ||
| 374 | GCC_NO_COMMON_BLOCKS = YES; | ||
| 375 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
| 376 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
| 377 | GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
| 378 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
| 379 | GCC_WARN_UNUSED_FUNCTION = YES; | ||
| 380 | GCC_WARN_UNUSED_VARIABLE = YES; | ||
| 381 | IPHONEOS_DEPLOYMENT_TARGET = 18.1; | ||
| 382 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; | ||
| 383 | MTL_ENABLE_DEBUG_INFO = NO; | ||
| 384 | MTL_FAST_MATH = YES; | ||
| 385 | SDKROOT = iphoneos; | ||
| 386 | SWIFT_COMPILATION_MODE = wholemodule; | ||
| 387 | VALIDATE_PRODUCT = YES; | ||
| 388 | }; | ||
| 389 | name = Release; | ||
| 390 | }; | ||
| 391 | C9D6698D2CDF68E50085062E /* Debug */ = { | ||
| 392 | isa = XCBuildConfiguration; | ||
| 393 | buildSettings = { | ||
| 394 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
| 395 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||
| 396 | CODE_SIGN_STYLE = Automatic; | ||
| 397 | CURRENT_PROJECT_VERSION = 1; | ||
| 398 | DEVELOPMENT_ASSET_PATHS = "\"I2C/Preview Content\""; | ||
| 399 | ENABLE_PREVIEWS = YES; | ||
| 400 | GENERATE_INFOPLIST_FILE = YES; | ||
| 401 | INFOPLIST_KEY_CFBundleDisplayName = "I2C Controller"; | ||
| 402 | INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; | ||
| 403 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; | ||
| 404 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; | ||
| 405 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; | ||
| 406 | INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDarkContent; | ||
| 407 | INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; | ||
| 408 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; | ||
| 409 | LD_RUNPATH_SEARCH_PATHS = ( | ||
| 410 | "$(inherited)", | ||
| 411 | "@executable_path/Frameworks", | ||
| 412 | ); | ||
| 413 | MARKETING_VERSION = 1.0; | ||
| 414 | PRODUCT_BUNDLE_IDENTIFIER = nsrddyn.I2C; | ||
| 415 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 416 | SWIFT_EMIT_LOC_STRINGS = YES; | ||
| 417 | SWIFT_VERSION = 5.0; | ||
| 418 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 419 | }; | ||
| 420 | name = Debug; | ||
| 421 | }; | ||
| 422 | C9D6698E2CDF68E50085062E /* Release */ = { | ||
| 423 | isa = XCBuildConfiguration; | ||
| 424 | buildSettings = { | ||
| 425 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
| 426 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | ||
| 427 | CODE_SIGN_STYLE = Automatic; | ||
| 428 | CURRENT_PROJECT_VERSION = 1; | ||
| 429 | DEVELOPMENT_ASSET_PATHS = "\"I2C/Preview Content\""; | ||
| 430 | ENABLE_PREVIEWS = YES; | ||
| 431 | GENERATE_INFOPLIST_FILE = YES; | ||
| 432 | INFOPLIST_KEY_CFBundleDisplayName = "I2C Controller"; | ||
| 433 | INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; | ||
| 434 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; | ||
| 435 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; | ||
| 436 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; | ||
| 437 | INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDarkContent; | ||
| 438 | INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; | ||
| 439 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; | ||
| 440 | LD_RUNPATH_SEARCH_PATHS = ( | ||
| 441 | "$(inherited)", | ||
| 442 | "@executable_path/Frameworks", | ||
| 443 | ); | ||
| 444 | MARKETING_VERSION = 1.0; | ||
| 445 | PRODUCT_BUNDLE_IDENTIFIER = nsrddyn.I2C; | ||
| 446 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 447 | SWIFT_EMIT_LOC_STRINGS = YES; | ||
| 448 | SWIFT_VERSION = 5.0; | ||
| 449 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 450 | }; | ||
| 451 | name = Release; | ||
| 452 | }; | ||
| 453 | C9D669902CDF68E50085062E /* Debug */ = { | ||
| 454 | isa = XCBuildConfiguration; | ||
| 455 | buildSettings = { | ||
| 456 | BUNDLE_LOADER = "$(TEST_HOST)"; | ||
| 457 | CODE_SIGN_STYLE = Automatic; | ||
| 458 | CURRENT_PROJECT_VERSION = 1; | ||
| 459 | GENERATE_INFOPLIST_FILE = YES; | ||
| 460 | IPHONEOS_DEPLOYMENT_TARGET = 18.1; | ||
| 461 | MARKETING_VERSION = 1.0; | ||
| 462 | PRODUCT_BUNDLE_IDENTIFIER = nsrddyn.I2CTests; | ||
| 463 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 464 | SWIFT_EMIT_LOC_STRINGS = NO; | ||
| 465 | SWIFT_VERSION = 5.0; | ||
| 466 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 467 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/I2C.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/I2C"; | ||
| 468 | }; | ||
| 469 | name = Debug; | ||
| 470 | }; | ||
| 471 | C9D669912CDF68E50085062E /* Release */ = { | ||
| 472 | isa = XCBuildConfiguration; | ||
| 473 | buildSettings = { | ||
| 474 | BUNDLE_LOADER = "$(TEST_HOST)"; | ||
| 475 | CODE_SIGN_STYLE = Automatic; | ||
| 476 | CURRENT_PROJECT_VERSION = 1; | ||
| 477 | GENERATE_INFOPLIST_FILE = YES; | ||
| 478 | IPHONEOS_DEPLOYMENT_TARGET = 18.1; | ||
| 479 | MARKETING_VERSION = 1.0; | ||
| 480 | PRODUCT_BUNDLE_IDENTIFIER = nsrddyn.I2CTests; | ||
| 481 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 482 | SWIFT_EMIT_LOC_STRINGS = NO; | ||
| 483 | SWIFT_VERSION = 5.0; | ||
| 484 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 485 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/I2C.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/I2C"; | ||
| 486 | }; | ||
| 487 | name = Release; | ||
| 488 | }; | ||
| 489 | C9D669932CDF68E50085062E /* Debug */ = { | ||
| 490 | isa = XCBuildConfiguration; | ||
| 491 | buildSettings = { | ||
| 492 | CODE_SIGN_STYLE = Automatic; | ||
| 493 | CURRENT_PROJECT_VERSION = 1; | ||
| 494 | GENERATE_INFOPLIST_FILE = YES; | ||
| 495 | MARKETING_VERSION = 1.0; | ||
| 496 | PRODUCT_BUNDLE_IDENTIFIER = nsrddyn.I2CUITests; | ||
| 497 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 498 | SWIFT_EMIT_LOC_STRINGS = NO; | ||
| 499 | SWIFT_VERSION = 5.0; | ||
| 500 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 501 | TEST_TARGET_NAME = I2C; | ||
| 502 | }; | ||
| 503 | name = Debug; | ||
| 504 | }; | ||
| 505 | C9D669942CDF68E50085062E /* Release */ = { | ||
| 506 | isa = XCBuildConfiguration; | ||
| 507 | buildSettings = { | ||
| 508 | CODE_SIGN_STYLE = Automatic; | ||
| 509 | CURRENT_PROJECT_VERSION = 1; | ||
| 510 | GENERATE_INFOPLIST_FILE = YES; | ||
| 511 | MARKETING_VERSION = 1.0; | ||
| 512 | PRODUCT_BUNDLE_IDENTIFIER = nsrddyn.I2CUITests; | ||
| 513 | PRODUCT_NAME = "$(TARGET_NAME)"; | ||
| 514 | SWIFT_EMIT_LOC_STRINGS = NO; | ||
| 515 | SWIFT_VERSION = 5.0; | ||
| 516 | TARGETED_DEVICE_FAMILY = "1,2"; | ||
| 517 | TEST_TARGET_NAME = I2C; | ||
| 518 | }; | ||
| 519 | name = Release; | ||
| 520 | }; | ||
| 521 | /* End XCBuildConfiguration section */ | ||
| 522 | |||
| 523 | /* Begin XCConfigurationList section */ | ||
| 524 | C9D669632CDF68E30085062E /* Build configuration list for PBXProject "I2C" */ = { | ||
| 525 | isa = XCConfigurationList; | ||
| 526 | buildConfigurations = ( | ||
| 527 | C9D6698A2CDF68E50085062E /* Debug */, | ||
| 528 | C9D6698B2CDF68E50085062E /* Release */, | ||
| 529 | ); | ||
| 530 | defaultConfigurationIsVisible = 0; | ||
| 531 | defaultConfigurationName = Release; | ||
| 532 | }; | ||
| 533 | C9D6698C2CDF68E50085062E /* Build configuration list for PBXNativeTarget "I2C" */ = { | ||
| 534 | isa = XCConfigurationList; | ||
| 535 | buildConfigurations = ( | ||
| 536 | C9D6698D2CDF68E50085062E /* Debug */, | ||
| 537 | C9D6698E2CDF68E50085062E /* Release */, | ||
| 538 | ); | ||
| 539 | defaultConfigurationIsVisible = 0; | ||
| 540 | defaultConfigurationName = Release; | ||
| 541 | }; | ||
| 542 | C9D6698F2CDF68E50085062E /* Build configuration list for PBXNativeTarget "I2CTests" */ = { | ||
| 543 | isa = XCConfigurationList; | ||
| 544 | buildConfigurations = ( | ||
| 545 | C9D669902CDF68E50085062E /* Debug */, | ||
| 546 | C9D669912CDF68E50085062E /* Release */, | ||
| 547 | ); | ||
| 548 | defaultConfigurationIsVisible = 0; | ||
| 549 | defaultConfigurationName = Release; | ||
| 550 | }; | ||
| 551 | C9D669922CDF68E50085062E /* Build configuration list for PBXNativeTarget "I2CUITests" */ = { | ||
| 552 | isa = XCConfigurationList; | ||
| 553 | buildConfigurations = ( | ||
| 554 | C9D669932CDF68E50085062E /* Debug */, | ||
| 555 | C9D669942CDF68E50085062E /* Release */, | ||
| 556 | ); | ||
| 557 | defaultConfigurationIsVisible = 0; | ||
| 558 | defaultConfigurationName = Release; | ||
| 559 | }; | ||
| 560 | /* End XCConfigurationList section */ | ||
| 561 | }; | ||
| 562 | rootObject = C9D669602CDF68E30085062E /* Project object */; | ||
| 563 | } | ||
diff --git a/I2C/I2C.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/I2C/I2C.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/I2C/I2C.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <Workspace | ||
| 3 | version = "1.0"> | ||
| 4 | <FileRef | ||
| 5 | location = "self:"> | ||
| 6 | </FileRef> | ||
| 7 | </Workspace> | ||
diff --git a/I2C/I2C.xcodeproj/project.xcworkspace/xcuserdata/nsrddyn.xcuserdatad/UserInterfaceState.xcuserstate b/I2C/I2C.xcodeproj/project.xcworkspace/xcuserdata/nsrddyn.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 1bc2255..0000000 --- a/I2C/I2C.xcodeproj/project.xcworkspace/xcuserdata/nsrddyn.xcuserdatad/UserInterfaceState.xcuserstate +++ /dev/null | |||
| Binary files differ | |||
diff --git a/I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index cdf9fd2..0000000 --- a/I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null | |||
| @@ -1,56 +0,0 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <Bucket | ||
| 3 | uuid = "E25B4326-8E67-45A7-85E6-44F99F067B3F" | ||
| 4 | type = "1" | ||
| 5 | version = "2.0"> | ||
| 6 | <Breakpoints> | ||
| 7 | <BreakpointProxy | ||
| 8 | BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | ||
| 9 | <BreakpointContent | ||
| 10 | uuid = "CDFF4D12-343E-452F-9711-F46A454AB787" | ||
| 11 | shouldBeEnabled = "Yes" | ||
| 12 | ignoreCount = "0" | ||
| 13 | continueAfterRunningActions = "No" | ||
| 14 | filePath = "I2C/ContentView.swift" | ||
| 15 | startingColumnNumber = "9223372036854775807" | ||
| 16 | endingColumnNumber = "9223372036854775807" | ||
| 17 | startingLineNumber = "12" | ||
| 18 | endingLineNumber = "12" | ||
| 19 | landmarkName = "body" | ||
| 20 | landmarkType = "24"> | ||
| 21 | </BreakpointContent> | ||
| 22 | </BreakpointProxy> | ||
| 23 | <BreakpointProxy | ||
| 24 | BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | ||
| 25 | <BreakpointContent | ||
| 26 | uuid = "D2C0A7B9-3CCF-4EDE-B649-263CFF06097B" | ||
| 27 | shouldBeEnabled = "Yes" | ||
| 28 | ignoreCount = "0" | ||
| 29 | continueAfterRunningActions = "No" | ||
| 30 | filePath = "I2CUITests/I2CUITests.swift" | ||
| 31 | startingColumnNumber = "9223372036854775807" | ||
| 32 | endingColumnNumber = "9223372036854775807" | ||
| 33 | startingLineNumber = "19" | ||
| 34 | endingLineNumber = "19" | ||
| 35 | landmarkName = "I2CUITests" | ||
| 36 | landmarkType = "3"> | ||
| 37 | </BreakpointContent> | ||
| 38 | </BreakpointProxy> | ||
| 39 | <BreakpointProxy | ||
| 40 | BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | ||
| 41 | <BreakpointContent | ||
| 42 | uuid = "6C3E354D-791E-455C-800E-B7B183E2E52D" | ||
| 43 | shouldBeEnabled = "Yes" | ||
| 44 | ignoreCount = "0" | ||
| 45 | continueAfterRunningActions = "No" | ||
| 46 | filePath = "I2C/I2CApp.swift" | ||
| 47 | startingColumnNumber = "9223372036854775807" | ||
| 48 | endingColumnNumber = "9223372036854775807" | ||
| 49 | startingLineNumber = "8" | ||
| 50 | endingLineNumber = "8" | ||
| 51 | landmarkName = "body" | ||
| 52 | landmarkType = "24"> | ||
| 53 | </BreakpointContent> | ||
| 54 | </BreakpointProxy> | ||
| 55 | </Breakpoints> | ||
| 56 | </Bucket> | ||
diff --git a/I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcschemes/xcschememanagement.plist b/I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index c90753b..0000000 --- a/I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | <plist version="1.0"> | ||
| 4 | <dict> | ||
| 5 | <key>SchemeUserState</key> | ||
| 6 | <dict> | ||
| 7 | <key>I2C.xcscheme_^#shared#^_</key> | ||
| 8 | <dict> | ||
| 9 | <key>orderHint</key> | ||
| 10 | <integer>0</integer> | ||
| 11 | </dict> | ||
| 12 | </dict> | ||
| 13 | </dict> | ||
| 14 | </plist> | ||
diff --git a/I2C/I2C/Assets.xcassets/AccentColor.colorset/Contents.json b/I2C/I2C/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/I2C/I2C/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | { | ||
| 2 | "colors" : [ | ||
| 3 | { | ||
| 4 | "idiom" : "universal" | ||
| 5 | } | ||
| 6 | ], | ||
| 7 | "info" : { | ||
| 8 | "author" : "xcode", | ||
| 9 | "version" : 1 | ||
| 10 | } | ||
| 11 | } | ||
diff --git a/I2C/I2C/Assets.xcassets/AppIcon.appiconset/Contents.json b/I2C/I2C/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/I2C/I2C/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null | |||
| @@ -1,35 +0,0 @@ | |||
| 1 | { | ||
| 2 | "images" : [ | ||
| 3 | { | ||
| 4 | "idiom" : "universal", | ||
| 5 | "platform" : "ios", | ||
| 6 | "size" : "1024x1024" | ||
| 7 | }, | ||
| 8 | { | ||
| 9 | "appearances" : [ | ||
| 10 | { | ||
| 11 | "appearance" : "luminosity", | ||
| 12 | "value" : "dark" | ||
| 13 | } | ||
| 14 | ], | ||
| 15 | "idiom" : "universal", | ||
| 16 | "platform" : "ios", | ||
| 17 | "size" : "1024x1024" | ||
| 18 | }, | ||
| 19 | { | ||
| 20 | "appearances" : [ | ||
| 21 | { | ||
| 22 | "appearance" : "luminosity", | ||
| 23 | "value" : "tinted" | ||
| 24 | } | ||
| 25 | ], | ||
| 26 | "idiom" : "universal", | ||
| 27 | "platform" : "ios", | ||
| 28 | "size" : "1024x1024" | ||
| 29 | } | ||
| 30 | ], | ||
| 31 | "info" : { | ||
| 32 | "author" : "xcode", | ||
| 33 | "version" : 1 | ||
| 34 | } | ||
| 35 | } | ||
diff --git a/I2C/I2C/Assets.xcassets/Contents.json b/I2C/I2C/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/I2C/I2C/Assets.xcassets/Contents.json +++ /dev/null | |||
| @@ -1,6 +0,0 @@ | |||
| 1 | { | ||
| 2 | "info" : { | ||
| 3 | "author" : "xcode", | ||
| 4 | "version" : 1 | ||
| 5 | } | ||
| 6 | } | ||
diff --git a/I2C/I2C/ContentView.swift b/I2C/I2C/ContentView.swift deleted file mode 100644 index 6d0448d..0000000 --- a/I2C/I2C/ContentView.swift +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | import SwiftUI | ||
| 2 | |||
| 3 | struct ContentView: View { | ||
| 4 | let options = ["CPU INFO", "CPU UPTIME", "SPEECH TRANSCRIBER", "NOTES"] | ||
| 5 | var body: some View { | ||
| 6 | VStack { | ||
| 7 | Button( | ||
| 8 | RoundedRectangle(cornerRadius: 25) | ||
| 9 | .fill(Color.red) | ||
| 10 | ) | ||
| 11 | } | ||
| 12 | } | ||
| 13 | } | ||
| 14 | |||
| 15 | #Preview { | ||
| 16 | ContentView() | ||
| 17 | } | ||
diff --git a/I2C/I2C/I2CApp.swift b/I2C/I2C/I2CApp.swift deleted file mode 100644 index b70050f..0000000 --- a/I2C/I2C/I2CApp.swift +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | import SwiftUI | ||
| 2 | |||
| 3 | @main | ||
| 4 | struct I2CApp: App { | ||
| 5 | var body: some Scene { | ||
| 6 | WindowGroup { | ||
| 7 | ContentView() | ||
| 8 | } | ||
| 9 | } | ||
| 10 | } | ||
diff --git a/I2C/I2C/Preview Content/Preview Assets.xcassets/Contents.json b/I2C/I2C/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/I2C/I2C/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null | |||
| @@ -1,6 +0,0 @@ | |||
| 1 | { | ||
| 2 | "info" : { | ||
| 3 | "author" : "xcode", | ||
| 4 | "version" : 1 | ||
| 5 | } | ||
| 6 | } | ||
diff --git a/I2C/I2CTests/I2CTests.swift b/I2C/I2CTests/I2CTests.swift deleted file mode 100644 index 24b0e07..0000000 --- a/I2C/I2CTests/I2CTests.swift +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | // | ||
| 2 | // I2CTests.swift | ||
| 3 | // I2CTests | ||
| 4 | // | ||
| 5 | // Created by nsrddyn on 09/11/2024. | ||
| 6 | // | ||
| 7 | |||
| 8 | import Testing | ||
| 9 | @testable import I2C | ||
| 10 | |||
| 11 | struct I2CTests { | ||
| 12 | |||
| 13 | @Test func example() async throws { | ||
| 14 | // Write your test here and use APIs like `#expect(...)` to check expected conditions. | ||
| 15 | } | ||
| 16 | |||
| 17 | } | ||
diff --git a/I2C/I2CUITests/I2CUITests.swift b/I2C/I2CUITests/I2CUITests.swift deleted file mode 100644 index a98bb08..0000000 --- a/I2C/I2CUITests/I2CUITests.swift +++ /dev/null | |||
| @@ -1,42 +0,0 @@ | |||
| 1 | // | ||
| 2 | // I2CUITests.swift | ||
| 3 | // I2CUITests | ||
| 4 | // | ||
| 5 | // Created by nsrddyn on 09/11/2024. | ||
| 6 | |||
| 7 | import XCTest | ||
| 8 | |||
| 9 | final class I2CUITests: XCTestCase { | ||
| 10 | |||
| 11 | override func setUpWithError() throws { | ||
| 12 | // Put setup code here. This method is called before the invocation of each test method in the class. | ||
| 13 | |||
| 14 | // In UI tests it is usually best to stop immediately when a failure occurs. | ||
| 15 | continueAfterFailure = false | ||
| 16 | |||
| 17 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. | ||
| 18 | } | ||
| 19 | |||
| 20 | override func tearDownWithError() throws { | ||
| 21 | // Put teardown code here. This method is called after the invocation of each test method in the class. | ||
| 22 | } | ||
| 23 | |||
| 24 | @MainActor | ||
| 25 | func testExample() throws { | ||
| 26 | // UI tests must launch the application that they test. | ||
| 27 | let app = XCUIApplication() | ||
| 28 | app.launch() | ||
| 29 | |||
| 30 | // Use XCTAssert and related functions to verify your tests produce the correct results. | ||
| 31 | } | ||
| 32 | |||
| 33 | @MainActor | ||
| 34 | func testLaunchPerformance() throws { | ||
| 35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { | ||
| 36 | // This measures how long it takes to launch your application. | ||
| 37 | measure(metrics: [XCTApplicationLaunchMetric()]) { | ||
| 38 | XCUIApplication().launch() | ||
| 39 | } | ||
| 40 | } | ||
| 41 | } | ||
| 42 | } | ||
diff --git a/I2C/I2CUITests/I2CUITestsLaunchTests.swift b/I2C/I2CUITests/I2CUITestsLaunchTests.swift deleted file mode 100644 index 71a0020..0000000 --- a/I2C/I2CUITests/I2CUITestsLaunchTests.swift +++ /dev/null | |||
| @@ -1,33 +0,0 @@ | |||
| 1 | // | ||
| 2 | // I2CUITestsLaunchTests.swift | ||
| 3 | // I2CUITests | ||
| 4 | // | ||
| 5 | // Created by nsrddyn on 09/11/2024. | ||
| 6 | // | ||
| 7 | |||
| 8 | import XCTest | ||
| 9 | |||
| 10 | final class I2CUITestsLaunchTests: XCTestCase { | ||
| 11 | |||
| 12 | override class var runsForEachTargetApplicationUIConfiguration: Bool { | ||
| 13 | true | ||
| 14 | } | ||
| 15 | |||
| 16 | override func setUpWithError() throws { | ||
| 17 | continueAfterFailure = false | ||
| 18 | } | ||
| 19 | |||
| 20 | @MainActor | ||
| 21 | func testLaunch() throws { | ||
| 22 | let app = XCUIApplication() | ||
| 23 | app.launch() | ||
| 24 | |||
| 25 | // Insert steps here to perform after app launch but before taking a screenshot, | ||
| 26 | // such as logging into a test account or navigating somewhere in the app | ||
| 27 | |||
| 28 | let attachment = XCTAttachment(screenshot: app.screenshot()) | ||
| 29 | attachment.name = "Launch Screen" | ||
| 30 | attachment.lifetime = .keepAlways | ||
| 31 | add(attachment) | ||
| 32 | } | ||
| 33 | } | ||
| @@ -2,4 +2,6 @@ | |||
| 2 | A application to control an I2C display on RPI. | 2 | A application to control an I2C display on RPI. |
| 3 | This application should represent a multi-use software with features ranging from a bus line analyser, bus delay analiser, an generative AI command line, weather reports, note's saving and much more. | 3 | This application should represent a multi-use software with features ranging from a bus line analyser, bus delay analiser, an generative AI command line, weather reports, note's saving and much more. |
| 4 | 4 | ||
| 5 | This is a starter project with the goal of expanded everything later on to let's say an e-ink display or small LCD. \ No newline at end of file | 5 | This is a starter project with the goal of expanded everything later on to let's say an e-ink display or small LCD. |
| 6 | |||
| 7 | 18/11/2024 migrating to C for the main code \ No newline at end of file | ||
diff --git a/bin/__pycache__/source.cpython-313.pyc b/bin/__pycache__/source.cpython-313.pyc deleted file mode 100644 index 79aee1d..0000000 --- a/bin/__pycache__/source.cpython-313.pyc +++ /dev/null | |||
| Binary files differ | |||
diff --git a/bin/display.c b/bin/display.c new file mode 100644 index 0000000..51a0873 --- /dev/null +++ b/bin/display.c | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | #include <gtk/gtk.h> | ||
| 2 | |||
| 3 | static void activate(GtkApplication *app, gpointer user_data) { | ||
| 4 | // Create a new application window | ||
| 5 | GtkWidget *window = gtk_application_window_new(app); | ||
| 6 | gtk_window_set_title(GTK_WINDOW(window), "I2C CONTROLLER"); | ||
| 7 | gtk_window_set_default_size(GTK_WINDOW(window), 400, 200); | ||
| 8 | |||
| 9 | // Show the window | ||
| 10 | gtk_window_present(GTK_WINDOW(window)); | ||
| 11 | } | ||
| 12 | |||
| 13 | int main(int argc, char *argv[]) { | ||
| 14 | // Create a new GtkApplication | ||
| 15 | GtkApplication *app = gtk_application_new("com.example.GTK4Test", G_APPLICATION_FLAGS_NONE); | ||
| 16 | |||
| 17 | // Connect the activate signal | ||
| 18 | g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); | ||
| 19 | |||
| 20 | // Run the application | ||
| 21 | int status = g_application_run(G_APPLICATION(app), argc, argv); | ||
| 22 | |||
| 23 | // Clean up | ||
| 24 | g_object_unref(app); | ||
| 25 | |||
| 26 | return status; | ||
| 27 | } \ No newline at end of file | ||
| @@ -1,4 +1,4 @@ | |||
| 1 | from smbus import SMBus | 1 | from smbus2 import SMBus |
| 2 | from time import sleep | 2 | from time import sleep |
| 3 | 3 | ||
| 4 | ALIGN_FUNC = {"left": "ljust", "right": "rjust", "center": "center"} | 4 | ALIGN_FUNC = {"left": "ljust", "right": "rjust", "center": "center"} |
| @@ -63,3 +63,6 @@ class LCD(object): | |||
| 63 | 63 | ||
| 64 | def clear(self): | 64 | def clear(self): |
| 65 | self.write(CLEAR_DISPLAY) | 65 | self.write(CLEAR_DISPLAY) |
| 66 | |||
| 67 | def read(self): | ||
| 68 | self._read_i2c_block_data | ||
diff --git a/bin/main.py b/bin/main.py index 2231547..921082f 100644 --- a/bin/main.py +++ b/bin/main.py | |||
| @@ -1,9 +1,106 @@ | |||
| 1 | import tk | 1 | import time |
| 2 | import source as main | 2 | import os |
| 3 | import speech_recognition as speech | ||
| 4 | import sounddevice | ||
| 5 | import i2c as LCD | ||
| 6 | from gpiozero import CPUTemperature | ||
| 3 | 7 | ||
| 4 | source = main() | 8 | ERROR_BAD_REQUEST = "400 Bad Request" |
| 9 | ERROR_UNAUTHORIZED = "401 Unauthorized" | ||
| 10 | ERROR_NOT_FOUND = "404 Not Found" | ||
| 11 | ERROR_TIMEOUT = "408 Request Timeout" | ||
| 5 | 12 | ||
| 6 | display = tk.Tk() | 13 | lcd = LCD |
| 7 | display.title("Kasper") | 14 | cpu_temp = CPUTemperature() |
| 15 | recognizer = speech.Recognizer() | ||
| 16 | microphone = speech.Microphone() | ||
| 8 | 17 | ||
| 9 | display.mainloop() \ No newline at end of file | 18 | |
| 19 | def display_cpu_info(): | ||
| 20 | lcd.clear() | ||
| 21 | while True: | ||
| 22 | load = os.getloadavg()[0] | ||
| 23 | temperature = cpu_temp.temperature | ||
| 24 | lcd.clear() | ||
| 25 | lcd.display_text(f"CPU Load:i {load}", 1) | ||
| 26 | lcd.display_text(f"Temp: {temperature:}C", 2) | ||
| 27 | time.sleep(5) | ||
| 28 | |||
| 29 | |||
| 30 | def display_uptime(): | ||
| 31 | lcd.clear() | ||
| 32 | with open("/proc/uptime") as f: | ||
| 33 | uptime_seconds = float(f.readline().split()[0]) | ||
| 34 | uptime_str = time.strftime("%H:%M:%S", time.gmtime(uptime_seconds)) | ||
| 35 | lcd.clear() | ||
| 36 | lcd.display_text(f"Uptime: {uptime_str}", 1, "center") | ||
| 37 | |||
| 38 | |||
| 39 | def recognize_speech(): | ||
| 40 | lcd.clear() | ||
| 41 | try: | ||
| 42 | with microphone as source: | ||
| 43 | recognizer.adjust_for_ambient_noise(source) | ||
| 44 | print("Listening...") | ||
| 45 | audio = recognizer.listen(source) | ||
| 46 | text = recognizer.recognize_google(audio) | ||
| 47 | lcd.clear() | ||
| 48 | lcd.display_text(text, 1) | ||
| 49 | print("Speech recognized:", text) | ||
| 50 | except speech.UnknownValueError: | ||
| 51 | lcd.display_text(ERROR_BAD_REQUEST, 1) | ||
| 52 | print(ERROR_BAD_REQUEST) | ||
| 53 | except speech.RequestError: | ||
| 54 | lcd.display_text(ERROR_UNAUTHORIZED, 1) | ||
| 55 | print(ERROR_UNAUTHORIZED) | ||
| 56 | |||
| 57 | |||
| 58 | def save_notes(): | ||
| 59 | PRINT_REQUEST = True | ||
| 60 | EXIT_CODES = ["stop", "break", "quit", "exit"] | ||
| 61 | if PRINT_REQUEST == True: | ||
| 62 | while True: | ||
| 63 | OUTPUT = input() | ||
| 64 | print(OUTPUT) | ||
| 65 | lcd.display_text(OUTPUT, 1) | ||
| 66 | time.sleep(2) | ||
| 67 | for i in EXIT_CODES: | ||
| 68 | if OUTPUT == i: | ||
| 69 | PRINT_REQUEST == False | ||
| 70 | |||
| 71 | |||
| 72 | OPTIONS = { | ||
| 73 | "CPU_INFO": display_cpu_info(), | ||
| 74 | "UPTIME": display_uptime(), | ||
| 75 | "SPEECH_TRANSCRIBER": recognize_speech(), | ||
| 76 | "NOTES": save_notes(), | ||
| 77 | } | ||
| 78 | |||
| 79 | |||
| 80 | def main(): | ||
| 81 | lcd.clear() | ||
| 82 | print("WELCOME TO THE I2C COMMAND LINE CENTER") | ||
| 83 | print("Options:", ", ".join(OPTIONS.keys())) | ||
| 84 | |||
| 85 | while True: | ||
| 86 | user_input = input("Enter command: ").upper() | ||
| 87 | action = OPTIONS.get(user_input) | ||
| 88 | |||
| 89 | if action: | ||
| 90 | action() | ||
| 91 | else: | ||
| 92 | lcd.display_text(ERROR_NOT_FOUND, 1) | ||
| 93 | print(ERROR_NOT_FOUND) | ||
| 94 | |||
| 95 | |||
| 96 | def destroy(): | ||
| 97 | lcd.clear() | ||
| 98 | os.system("cls" if os.name == "nt" else "clear") | ||
| 99 | |||
| 100 | |||
| 101 | if __name__ == "__main__": | ||
| 102 | os.system("cls" if os.name == "nt" else "clear") | ||
| 103 | try: | ||
| 104 | main() | ||
| 105 | except KeyboardInterrupt: | ||
| 106 | destroy() | ||
diff --git a/bin/source.py b/bin/source.py deleted file mode 100644 index 485cc03..0000000 --- a/bin/source.py +++ /dev/null | |||
| @@ -1,106 +0,0 @@ | |||
| 1 | import time | ||
| 2 | import os | ||
| 3 | import speech_recognition as speech | ||
| 4 | import sounddevice | ||
| 5 | import i2c as LCD | ||
| 6 | from gpiozero import CPUTemperature | ||
| 7 | |||
| 8 | ERROR_BAD_REQUEST = "400 Bad Request" | ||
| 9 | ERROR_UNAUTHORIZED = "401 Unauthorized" | ||
| 10 | ERROR_NOT_FOUND = "404 Not Found" | ||
| 11 | ERROR_TIMEOUT = "408 Request Timeout" | ||
| 12 | |||
| 13 | lcd = LCD | ||
| 14 | cpu_temp = CPUTemperature() | ||
| 15 | recognizer = speech.Recognizer() | ||
| 16 | microphone = speech.Microphone() | ||
| 17 | |||
| 18 | |||
| 19 | def display_cpu_info(): | ||
| 20 | lcd.clear() | ||
| 21 | while True: | ||
| 22 | load = os.getloadavg()[0] # 1-minute load average | ||
| 23 | temperature = cpu_temp.temperature | ||
| 24 | lcd.clear() | ||
| 25 | lcd.display_text(f"CPU Load:i {load}", 1) | ||
| 26 | lcd.display_text(f"Temp: {temperature:}C", 2) | ||
| 27 | time.sleep(5) | ||
| 28 | |||
| 29 | |||
| 30 | def display_uptime(): | ||
| 31 | lcd.clear() | ||
| 32 | with open("/proc/uptime") as f: | ||
| 33 | uptime_seconds = float(f.readline().split()[0]) | ||
| 34 | uptime_str = time.strftime("%H:%M:%S", time.gmtime(uptime_seconds)) | ||
| 35 | lcd.clear() | ||
| 36 | lcd.display_text(f"Uptime: {uptime_str}", 1, "center") | ||
| 37 | |||
| 38 | |||
| 39 | def recognize_speech(): | ||
| 40 | lcd.clear() | ||
| 41 | try: | ||
| 42 | with microphone as source: | ||
| 43 | recognizer.adjust_for_ambient_noise(source) | ||
| 44 | print("Listening...") | ||
| 45 | audio = recognizer.listen(source) | ||
| 46 | text = recognizer.recognize_google(audio) | ||
| 47 | lcd.clear() | ||
| 48 | lcd.display_text(text, 1) | ||
| 49 | print("Speech recognized:", text) | ||
| 50 | except speech.UnknownValueError: | ||
| 51 | lcd.display_text(ERROR_BAD_REQUEST, 1) | ||
| 52 | print(ERROR_BAD_REQUEST) | ||
| 53 | except speech.RequestError: | ||
| 54 | lcd.display_text(ERROR_UNAUTHORIZED, 1) | ||
| 55 | print(ERROR_UNAUTHORIZED) | ||
| 56 | |||
| 57 | |||
| 58 | def save_notes(): | ||
| 59 | PRINT_REQUEST = True | ||
| 60 | EXIT_CODES = ['stop', 'break', 'quit', 'exit'] | ||
| 61 | if PRINT_REQUEST == True: | ||
| 62 | while True: | ||
| 63 | OUTPUT = input() | ||
| 64 | print(OUTPUT) | ||
| 65 | lcd.display_text(OUTPUT, 1) | ||
| 66 | time.sleep(2) | ||
| 67 | for i in EXIT_CODES: | ||
| 68 | if OUTPUT == i: | ||
| 69 | PRINT_REQUEST == False | ||
| 70 | |||
| 71 | |||
| 72 | |||
| 73 | OPTIONS = { | ||
| 74 | "CPU_INFO": display_cpu_info(), | ||
| 75 | "UPTIME": display_uptime(), | ||
| 76 | "SPEECH_TRANSCRIBER": recognize_speech(), | ||
| 77 | "NOTES": save_notes(), | ||
| 78 | } | ||
| 79 | |||
| 80 | |||
| 81 | def main(): | ||
| 82 | lcd.clear() | ||
| 83 | print("WELCOME TO THE I2C COMMAND LINE CENTER") | ||
| 84 | print("Options:", ", ".join(OPTIONS.keys())) | ||
| 85 | |||
| 86 | while True: | ||
| 87 | user_input = input("Enter command: ").upper() | ||
| 88 | action = OPTIONS.get(user_input) | ||
| 89 | |||
| 90 | if action: | ||
| 91 | action() | ||
| 92 | else: | ||
| 93 | lcd.display_text(ERROR_NOT_FOUND, 1) | ||
| 94 | print(ERROR_NOT_FOUND) | ||
| 95 | |||
| 96 | |||
| 97 | def destroy(): | ||
| 98 | lcd.clear() | ||
| 99 | os.system("cls" if os.name == "nt" else "clear") | ||
| 100 | |||
| 101 | |||
| 102 | if __name__ == "__main__": | ||
| 103 | try: | ||
| 104 | main() | ||
| 105 | except KeyboardInterrupt: | ||
| 106 | destroy() | ||
diff --git a/webconsole/index.html b/webGUI/index.html index 33b4ee9..eb12eca 100644 --- a/webconsole/index.html +++ b/webGUI/index.html | |||
| @@ -13,13 +13,19 @@ | |||
| 13 | 13 | ||
| 14 | <nav class="navigation"> | 14 | <nav class="navigation"> |
| 15 | <p>I2C MODES</p> | 15 | <p>I2C MODES</p> |
| 16 | <button>STATS</button> | 16 | <a href="" class="CPU_INFO">CPU Information</a> |
| 17 | <button>AI</button> | 17 | <a href="" class="recources">Recources</a> |
| 18 | <button>TOOLS</button> | 18 | <a href="" class="speech_trans">Speech Transcriber</a> |
| 19 | <button>MORE</button> | 19 | <a href="" class="notes">Display a message</a> |
| 20 | <a href="" class="general">General Tools</a> | ||
| 21 | |||
| 20 | </nav> | 22 | </nav> |
| 21 | 23 | ||
| 22 | 24 | ||
| 23 | </body> | 25 | </body> |
| 24 | 26 | ||
| 27 | <footer> | ||
| 28 | |||
| 29 | </footer> | ||
| 30 | |||
| 25 | </html> \ No newline at end of file | 31 | </html> \ No newline at end of file |
diff --git a/webGUI/main.mjs b/webGUI/main.mjs new file mode 100644 index 0000000..c7464e5 --- /dev/null +++ b/webGUI/main.mjs | |||
| @@ -0,0 +1 @@ | |||
| let modes = ["STATS", ""] \ No newline at end of file | |||
diff --git a/webGUI/pages/stats.html b/webGUI/pages/stats.html new file mode 100644 index 0000000..8fdbb74 --- /dev/null +++ b/webGUI/pages/stats.html | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | <!DOCTYPE html> | ||
| 2 | <html lang="en"> | ||
| 3 | |||
| 4 | <head> | ||
| 5 | <meta charset="UTF-8"> | ||
| 6 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| 7 | <title>STATS - CONSOLE</title> | ||
| 8 | </head> | ||
| 9 | |||
| 10 | <body> | ||
| 11 | |||
| 12 | </body> | ||
| 13 | |||
| 14 | </html> \ No newline at end of file | ||
diff --git a/webGUI/styles.css b/webGUI/styles.css new file mode 100644 index 0000000..eefc162 --- /dev/null +++ b/webGUI/styles.css | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | body { | ||
| 2 | background-color: rgba(0, 10, 30, 1); | ||
| 3 | text-decoration: none; | ||
| 4 | color: white; | ||
| 5 | font: sans-serif; | ||
| 6 | } | ||
| 7 | |||
| 8 | body button a { | ||
| 9 | border-radius: 10px; | ||
| 10 | text-decoration: none; | ||
| 11 | } | ||
| 12 | |||
| 13 | a { | ||
| 14 | text-decoration: none; | ||
| 15 | color: wheat; | ||
| 16 | } | ||
| 17 | |||
| 18 | .navigation { | ||
| 19 | max-width: fit-content; | ||
| 20 | margin-left: auto; | ||
| 21 | margin-right: auto; | ||
| 22 | } | ||
| 23 | |||
| 24 | .navigation a { | ||
| 25 | display: block; | ||
| 26 | |||
| 27 | background-color: rgba(0, 0, 0, 1); | ||
| 28 | border-radius: 10px; | ||
| 29 | border: none; | ||
| 30 | padding: 10px; | ||
| 31 | min-width: 100px; | ||
| 32 | } | ||
diff --git a/webconsole/main.js b/webconsole/main.js deleted file mode 100644 index e69de29..0000000 --- a/webconsole/main.js +++ /dev/null | |||
diff --git a/webconsole/styles.css b/webconsole/styles.css deleted file mode 100644 index a940b10..0000000 --- a/webconsole/styles.css +++ /dev/null | |||
| @@ -1,8 +0,0 @@ | |||
| 1 | body { | ||
| 2 | background-color: teal; | ||
| 3 | } | ||
| 4 | |||
| 5 | .navigation button { | ||
| 6 | background-color: none; | ||
| 7 | border: none; | ||
| 8 | } | ||
