From f20210526b5c79122abecca9d47e65cec2fe9a9a Mon Sep 17 00:00:00 2001 From: Adam Greenwood-Byrne Date: Tue, 30 Mar 2021 22:18:58 +0100 Subject: [PATCH] Added simple iOS controller to emulate 2-button mouse, and examples/wgt23.c --- .../project.pbxproj | 349 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 43445 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 142872 bytes .../WorkspaceSettings.xcsettings | 18 + .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 + .../xcschemes/xcschememanagement.plist | 14 + .../xcschemes/xcschememanagement.plist | 19 + .../rpi4-osdev-ioscontrol/AppDelegate.swift | 37 ++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 39 ++ .../Base.lproj/Main.storyboard | 84 +++++ .../rpi4-osdev-ioscontrol/Info.plist | 47 +++ .../ViewController.swift | 101 +++++ .../characteristic.js | 0 .../{controller => controller-node}/main.js | 0 part12-wgt/lib/bt.c | 8 + part12-wgt/samples/wgt23.c | 121 ++++++ part12-wgt/samples/wgt25.c | 18 +- part12-wgt/wgt/mouse.c | 6 + 23 files changed, 987 insertions(+), 6 deletions(-) create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.pbxproj create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/Akshata.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/agb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/agb.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/agb.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/AppDelegate.swift create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/Contents.json create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/LaunchScreen.storyboard create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/Main.storyboard create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Info.plist create mode 100644 part12-wgt/controller-ios/rpi4-osdev-ioscontrol/ViewController.swift rename part12-wgt/{controller => controller-node}/characteristic.js (100%) rename part12-wgt/{controller => controller-node}/main.js (100%) create mode 100644 part12-wgt/samples/wgt23.c diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.pbxproj b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ae86f70 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.pbxproj @@ -0,0 +1,349 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + AC9F7547231E6ADA00387AF8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9F7546231E6ADA00387AF8 /* AppDelegate.swift */; }; + AC9F7549231E6ADA00387AF8 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9F7548231E6ADA00387AF8 /* ViewController.swift */; }; + AC9F754C231E6ADA00387AF8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AC9F754A231E6ADA00387AF8 /* Main.storyboard */; }; + AC9F754E231E6AE300387AF8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AC9F754D231E6AE300387AF8 /* Assets.xcassets */; }; + AC9F7551231E6AE300387AF8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AC9F754F231E6AE300387AF8 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + AC9F7543231E6ADA00387AF8 /* rpi4-osdev-ioscontrol.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "rpi4-osdev-ioscontrol.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AC9F7546231E6ADA00387AF8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + AC9F7548231E6ADA00387AF8 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + AC9F754B231E6ADA00387AF8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + AC9F754D231E6AE300387AF8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + AC9F7550231E6AE300387AF8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + AC9F7552231E6AE300387AF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AC9F7540231E6ADA00387AF8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AC9F753A231E6AD900387AF8 = { + isa = PBXGroup; + children = ( + AC9F7545231E6ADA00387AF8 /* rpi4-osdev-ioscontrol */, + AC9F7544231E6ADA00387AF8 /* Products */, + ); + sourceTree = ""; + }; + AC9F7544231E6ADA00387AF8 /* Products */ = { + isa = PBXGroup; + children = ( + AC9F7543231E6ADA00387AF8 /* rpi4-osdev-ioscontrol.app */, + ); + name = Products; + sourceTree = ""; + }; + AC9F7545231E6ADA00387AF8 /* rpi4-osdev-ioscontrol */ = { + isa = PBXGroup; + children = ( + AC9F7546231E6ADA00387AF8 /* AppDelegate.swift */, + AC9F7548231E6ADA00387AF8 /* ViewController.swift */, + AC9F754A231E6ADA00387AF8 /* Main.storyboard */, + AC9F754D231E6AE300387AF8 /* Assets.xcassets */, + AC9F754F231E6AE300387AF8 /* LaunchScreen.storyboard */, + AC9F7552231E6AE300387AF8 /* Info.plist */, + ); + path = "rpi4-osdev-ioscontrol"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AC9F7542231E6ADA00387AF8 /* rpi4-osdev-ioscontrol */ = { + isa = PBXNativeTarget; + buildConfigurationList = AC9F7555231E6AE300387AF8 /* Build configuration list for PBXNativeTarget "rpi4-osdev-ioscontrol" */; + buildPhases = ( + AC9F753F231E6ADA00387AF8 /* Sources */, + AC9F7540231E6ADA00387AF8 /* Frameworks */, + AC9F7541231E6ADA00387AF8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "rpi4-osdev-ioscontrol"; + productName = BLEPeripheralApp; + productReference = AC9F7543231E6ADA00387AF8 /* rpi4-osdev-ioscontrol.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AC9F753B231E6AD900387AF8 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1020; + LastUpgradeCheck = 1240; + ORGANIZATIONNAME = isometimes; + TargetAttributes = { + AC9F7542231E6ADA00387AF8 = { + CreatedOnToolsVersion = 10.2.1; + }; + }; + }; + buildConfigurationList = AC9F753E231E6AD900387AF8 /* Build configuration list for PBXProject "rpi4-osdev-ioscontrol" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AC9F753A231E6AD900387AF8; + productRefGroup = AC9F7544231E6ADA00387AF8 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AC9F7542231E6ADA00387AF8 /* rpi4-osdev-ioscontrol */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AC9F7541231E6ADA00387AF8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AC9F7551231E6AE300387AF8 /* LaunchScreen.storyboard in Resources */, + AC9F754E231E6AE300387AF8 /* Assets.xcassets in Resources */, + AC9F754C231E6ADA00387AF8 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AC9F753F231E6ADA00387AF8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AC9F7549231E6ADA00387AF8 /* ViewController.swift in Sources */, + AC9F7547231E6ADA00387AF8 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + AC9F754A231E6ADA00387AF8 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AC9F754B231E6ADA00387AF8 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + AC9F754F231E6AE300387AF8 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + AC9F7550231E6AE300387AF8 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AC9F7553231E6AE300387AF8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + AC9F7554231E6AE300387AF8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AC9F7556231E6AE300387AF8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 7L2BE98W4U; + INFOPLIST_FILE = "rpi4-osdev-ioscontrol/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.AwayPlays.BLEPeripheralApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AC9F7557231E6AE300387AF8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 7L2BE98W4U; + INFOPLIST_FILE = "rpi4-osdev-ioscontrol/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.AwayPlays.BLEPeripheralApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AC9F753E231E6AD900387AF8 /* Build configuration list for PBXProject "rpi4-osdev-ioscontrol" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AC9F7553231E6AE300387AF8 /* Debug */, + AC9F7554231E6AE300387AF8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AC9F7555231E6AE300387AF8 /* Build configuration list for PBXNativeTarget "rpi4-osdev-ioscontrol" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AC9F7556231E6AE300387AF8 /* Debug */, + AC9F7557231E6AE300387AF8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AC9F753B231E6AD900387AF8 /* Project object */; +} diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..b36c899 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/Akshata.xcuserdatad/UserInterfaceState.xcuserstate b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/Akshata.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cf501f091744dfdaffb96687064e8ae937e64464 GIT binary patch literal 43445 zcmeFa2Vhji);NA=Zrgh|Wz!QL08FfOPQ5Tep@=#AS01ZTg&|owK4MkD^M(?0^(IIpg zy@!sVqv#X#DLRABqI2jx`Wk(MzC%~gujn^)4gHS(z&b2pSL}uTa3F4r+u`;&3ddm+ zPQ*z#19!riI1Bg2g}4tc!hP`wJQA1SQP_;j@HjjkPsEe3f(f3DAI6X1NAV)O6feW8 z@Kbmr-h`jWJMd2YGJXpm#wYOm_+xw)pTp$`32YTx&DO9J zSu1N}C$m%78SG5&?*!AoN_9=EFyNTV*ZegEcpJjKjJK4SL zK6XEQoISywWKXfD+4tEG*bmuH*t6_8_B?x;{hIxT{hs}e{hj@T!yL=Gat6+gbLTub zPtJ?;LSH_Ly zD!6K{hMU1D9O3Tg=5TYldE67+Qf?WyoLj-I=GJo?xTm;hxM#WT+{@f6+&*qU_bT@$ zcZfU8y~iElj&dJxA95dY7r2YuCGIQkGWQ+#3-R34STRj97F+~Z!63K^?m~MZN{AL>gjgX?h!+wBqhJyW zgdRdqp_kBGC=~h#MM7VppHM6e6NU>TgptA+pG!2`>w;2>XOLg#*G{!a?DXa9DUxI4+zJJ{3L_ zei9iGiCAPsPSlC6qCs>M-NiPdzZf946GO!)F;0vZ6U8JkO-vU%iJiqRVplOo>?U>> z3&lR-0I@_Y73)MI&KB<#?-TDA9}*Xc3&lm^W8z|QrTC<{R@^8)Ej}ym5O<1u#23X^ z#C_r$;@jd8@s#+X_^J4r__=sN{93#s-VlEm|Io=gz0OJJtaH(M>b!JqbYZ%9U9v7k zm!a#b%heU?`sjw}hU&)X%5`IP6}oY{8M>LedvvpOijL@J>+aRvr<<#rr(397q+70A zqg$`rqT8-}PPbe4lJ1c1u&k_Jn|qzO`$R4vs=6D6x; zlWL{8(md&5=@IEsX}+{TS|}}&9+Ngoo21Rs7U^ketF%peMtWA-F1;Y_m0p!zlMYIU zq@&VF>6G-LbVmAIx+HxiU6HOyf5-+oKn|3H0pk`?)WdA__%UM;VY8|6*%HhH(aM}A#? zLp~}WlaI?MKE&m>l^i3^}F;h>tE6D8xU4iS6O+Skrf<2|UbIDWiks%TA^*}3qPksOzoo@UH8CFUmQreu^DJPUI3231?f+iJ|EmfY&nx(Sx5S}1Ky z%`v8=r)R|F=j3F?C1+&h#--;O;g`{9GMb?7EK?F>OHax%8I!V%ak*)!$W`BJtH|MKR-P;IU~<8umC2EiQT{iGC@o*6T-A*+A*PusOS_)krln-q&RP2!kGvr zl4%c_qM2yLMfp@|ubhEQe(+-~F?4C!+y3U!In`CQ*6PYii?t*bMwOb8k`!Bk$@yt%X(MUzimI~e$@y0E1WSn_qUi-xmTk5UGTR1L*eXU> zS_W0rjxDaJDzCIaN{OL;%Z9ZoN(zhnS!}h{Rx@NTt~J+Ma?Q2o5<@U#%_^-02BitE zt$S+lYi_l=x^lGHTHt84#NgYUruL{Q$pOU_rYjS>kx6CJm~A-YkIx(G@E{dyS zP}~%E#Y6E_ycBQ6XCspdP|Rj>m|P~0$%p6eiZ8&ijWS#@D`koep6e)7y|ZjK;J(aN zwRvR~Fd$nm^VI4(zybqwrg&`iSW?3yTV4AC-%2or+S+!Mr<YX??XCJ(2-n#(%6GN85s zGE`V>BcL*^yR?{rksJUT$P8m*8<|1OU}gw2RPk2=lt3k@kr~d6U`8?}O0bfl6evCD zz(WR?R+m}gp{AY{wed~EiZ8CU)|J-QSph==?vh3AS&6}|*is4Owv;s$E-?h&rAUFz zR%fv}x;ciaqN|~t8Ou~K3LIX%vEKUvVvO6 z1Y3Wr1qRp_NdaDF`JskwOL74jE;n@%ri7$p^{L~JgcNMCp^#WqzOBe)OvMX00~dJx|*qHylryD zm|90gFETGRHT|-Z-rV$l=2a$k&6?(#-(cQlV%IZoG6$Hqn1g`K?iX($HCNdx z0Nqsb3b6Ib&F*-}JT5VW!uy;$s};K1 z%UoAgI<{CFP(RBUXs)W%($g}v#9)G4-OZCM1yw-7%$1c>9kt{X4bUhZ?bg_e$}%XU z4*8hM5nN=xs%I`Kc}o6WvGE(`TR<*5-W6MF*D~KQ-!ZEO6c)pm;b~(^$Bee5l$w&p z(7C^Dg=Nf~`4@}O{J&OOX;l?Dt(k9 zrLWRYDOUO`12!{}2s6=$Lp&1b52a~H07MuFa2=!!QHH8Nl(r3ZAV;3nT5WA24t6qj zXQBs_>%byQnTk~E{tk0bC(J>PG{k{*X`{7JjId=-?LV~!u*Z$gpM#V^n{*w!w|uA4 zJ9ybDBQ0xxXRi$~ueO3R7Icf(sOqgF(9qj4^Ave2H8KD--99s^GiRzefZ8DcHOgR> zRG>fQ4|mb)Lt1; zkD`^46zXm3fP@!WDb89gWjVmnl*1;THw6ejU7ZEFHm%xtf4;SPLK9EosJbi4qOi$SEcGZ` z8AD;?mOHS26K|q!pBgOkk^frM4RuEaO1UyYsZjHH!4JZl(9;MGHxyE z3yYvw84pNbshCDUmD-@jR9LLT>9=M+&;Va4jqYtO2WnAANgQQ?nus4|dO|ZNGU`7^ zlfzKSZB34XCPyn(&}20<2~{*RO`(~OKh>&yIU0Xk`AR5XrA&nKR=V5LPBiggS|@5U zTUBC1brg8DN^L!mPL*xv82%3%VRVFEu zl_|G)}V5Y19r5273HDS}xN|oKF?2iK&%g_o6!{v%nk5(##4klb{ z-OifdtpP^`YfuBNpkA3>kJc*pD#rf3%@tLS)D37eo#&^}Mzl$}Pq|;2vleXuXl_*= z00=%q=Q*lXbLwVP45xsqa`mx^ivdO)h-~Y;cJA-i_uVYj6D+mXsoJ`E9__40JCp~N zWsXkmLi>OrM!V4-^dj1eUP3RUSCog8xyn4{VdW9!QDy!Hv>&~SUPG@lJJ6fxfU-bY zsH{=8D5=WR%2vfVoDyz&2BUO&nARt?x4<1_sUl;_l(n7^n2)Ayfv)O8^;qcVV1@6H z=I=;rri&_JqHB1VBW*yxUcd;})QzsJDAjnYI9qj{wX|u1kD=3ycOyEEPN0+Ml(I;9 zOj)cv-iY2uAHY0(q%2XE!%VE8Gts74EtvxtsEsM!ra~Cd2^f#t6HDoVSRHqK^_Vd> z3!Dtv{%NktiYlNk0k`F$XQTY;$}*UAZO%TUbN0FNgtAQg{w3Pkh%P{X;iD{t{?gAf zLl1423P#^H&`l}yl`ATJU>pA9b|}K30N^kjjw5j7Fvn~FN)MsD zjjh%^p+?!LY*LsK!?ZE5NOR3bRqY_kl5zg9~nAo(PV!YJF6joNrR;EurU!z?x64$LYI2|L4r z#a)zVm1RJTo4I~dQhI7^NNQ@@%$fEziL-Gx5Sri|oQv~tzVe*%ys|^t*@(O20_G6z zsl1@P1P8cR6yxAtmNBY)W=Ow^^0DgEP;F1r_C=N9cF1s=c1A}t{qP{#Ofl|{2jGFq zE@ii}M|rUkc(+VE6u5=1$;oOENbm^*U-Q=S|v7)K3i}(Y^8XN@^U?pIbW3-1m@9J zU1=9x(1ANLS7MOrXq+RiR`w}Itwt+w%-Du&mHo==O&lVgjHlnqZs8eBB)&&^6(I4N zVrl|5aC%BhCJWz-AGodPgG@A@tGof=ds8trPfuv(!rWG6=i>#fPVx9L{5T!qV&z~x zUZTAHC+sd>P6x6AuTy>w*H;14%O>9?a=KcFx^=32Pc3atJ zpzL<#Jt%v`A>nawO&ZHNHbkxC1bzYU!n!3UV) z!Jvay59$MJ%=FwptW=YXX$Q&>2id$EK^azUrGgE0uY#67R6bUYx7^zf;0JPD!oTHmLvEmKBk;hPAR8v*;urFVFe>J<-!jJeTP4e=O zT4=yO)7q(!<{xDR$}oL;Vr)o88WljAGEC|4oMM7gIQ|u|;5U4Y(%~}L0%=uZh$$&Kgf<fL$0X0!#dQy5$Qf_WsRuX8S z($aHGamiUJd2uPAHOk1&&Php4P8ts2P6W}f$(U}Oc`T%DyU;tyS3&U6vI7n6!kXl$ z$0H)$+DAnLUsqVH4PEPGD~(TZ>$H}2sWKzQ8MIEWcSQp=!6Bb^^fv`IQs{7e0(7or z!wvCa@YxirW&b4&b6=@1ca6{jaXQ$XAG{XY3UgqI(F*Z zrE6wZc1~_yez)%3dvx#ByRc7D-+sj-91W>`29)eyQCkUw&JEB*>w%`4vRFZZ2>67E3na1A+Ugj#rYLh8yr?`HPyfqTY<^Qp~^<>IAmz5RRgFE zl8bAnR$6+SZR1sex7KD8;uYj-&33casO>-x3d*K5L8q{8!f1_BxFVlW6q)qnl%f9-$RA<9{eRNcV8!<0GH0zf_1;v4u6W)(~YJ+Ruj2bN)Fkb$s> z#ViXQ;8}qcSsg1WpDCX!Unu95FO>_*Mdgz6)kY?gbz+@a7uJj5moWr7wG zw3wgy4Ht$d?=t9++iS;t1Ok!*W5ij7vjCn%VpM1lqpG@QaHtrc^wY6@CNGjHYA zi-D1xI=UK!M{q1?RkC%*;z7A;sRi+;xw5*vsS&k6QjxWqnzR+y)lksf+Cr;5usQx& zBfYB29bo;ZPZ^rs0h`FCfIO8=Vw060l%E>dR5nfdg&;j>dz#N7Y$sT&+ms(m49fq^ z(T}1~d}R#)DuL3fc&c#Mz}~V~S!%C-E-^g#Ki(_5zDL~@TlUTl)m*j!PCP(6@+tLD zt}4GOzbV%m@lYToz1ZGx+PS7&SN@>*=jXt5P@V&QY?ctf60z%)8Ryje2&F^1Ip(x~6+pRZp(!Q&&rc zL$u_ein7|Vp_w&jRodn#J)A8C{U1Am9m$rkqgXRLTDeIOLlDSrF+nUr+hs)TC1+=ZLWa|Xkr#sg9Ej)G&e(KL6%7spr?(FOyN0c&^X^Ab8-n}^ z3M44#Z#3_puZ!x@Z}B>y;nS0n;}eak=^3dhDW){ae<#I;q@*Xso03ya$)-e8ipiLk zo@B?1rzu`+B`5&!!f5IdS6LHRJ+QX}K-<~p?t&LDu)8V1cM%j)&+Z|pU2F3C3MFI& zwJkB!{m)P`b$7DGPbmd%&r;j8g}%zZ4Z?W#HTHG(4faj;0Q(kukf2b4!Uzf{D1soE z)Aj^KZD8MF-(?T6huQboBkWOvq6vy2D3+i&g5n7>5@e#-?V|~;HPe$8q-~f@m2RsV zHCUKsmRfT~W%C(jgsl`r=pa3dgF`m8HPW)jQEPGgE7wX`=J_Bqro0AZ8c_`*w@E;< z)O7W5%6`OrwMNO;oLOn2ZP*`EkX zA}FPS{e`_sP#QtqTVu%$4NKq{Sp7eOC4e3vN1>Z=i%pk9S}#&d4D0XG3yW<$Sm-;% z!jZP{L}NBseALyzgZ->yYauLla4K)~swN_#2-8IEsOKI65b&YV|K;1Z?;$4+x zC%87C3jmD(=g$SOH@Ki7+De99mY^(xG6_m1C_gl7|AFE)*CPY$>x65|fwgA?*Ny|C zkxfue0~gK#*~ld*PcaU%!)&0VkGCly?%r+nM8(B%@eWHn$E@56sI^=Ir%LTLgS@+C zyR(wOF^ohmsnsIoQn?ObCB&t1=^P+U0YNbaKd$aUfXUwRQVfS`dCW$uIme=?_c z%I?6hmJ?*hn21)BY6s)prZb05CqTY;%jxXKb>|AWAcBer>O)W=Oyd8Vl?>Q6KlS~y z>Cuj9D&+c7Z0p0pVEPi&uYv2w6%z#i`zuB}mJQUv2$HJX;RHL&t!k({=5w?+j2qq> zElM~uYzy2df(F-fqX~k2p(U*>*J$OC5<}vYxG9vH#=&tAG-tV4*%|qHCNNgcG3Cc4 zC#8doEIThdE-xuLH$5peEjuwS$JZ@ z-+AXrXno|e8(B6Vrn!f-ae#gK*1z>QKuwzqDmE|yx3sbp73%o(_qlqx<+P=(!|fm;Li4AiQK{(yc& z`&ky6nW!D@3|WqaxRKkUS}<^%m6Zfd022motFnrKos{Vo>jk%f%Z@_Nal0t2p67OO zJGmDKsv&41K~{onjofZ-5BDMm=fPTnrVuohplN?ESiMGJ^*TXy4p|$l*$eOt&jV<9Fec$yo+Ic1f*vI3A%f;M@&W}7FA+3P1I?pH;F%BD!?&f_v*32@(am=h zis0LW9Xk&v)kXDu6hV(^29Q*#;ZR!Lw(C2}#`9^6_fvcVZ{$sUBA>)3^C^5PK|s%z z5cC8=O9@&=&~k!6_ObFQJ{=4aBl(VeC%!Y^g@Hrxlc2qZ12RyB)dZ~}V2bAldhlA6 z_b<-vIkdu-S6NX`g-;-((_U**sRG-e3NY{h19FhMw@h#x0Dv*kUaQBXS`Z-DQBM{7 zORbW8@YSdUlXI_@6;MM3I9pSV_$@8MxfcYOwU*)F8c|(kskWIC;}c5^8D*1d%T!TW zoR-j`v@F?@oR%>oOEhJSHdzLktrJp{2UZl( z>V{~4(qoey(Cxz)0~5^`@qPJz1g#~gk)U;J`TqO>ejq{X33`>FXDQMeL1)`qfnZlQ z!11HFZo&jm-D^`>Y$;c*iZoAv)Sqj)nx z8wdg}X*)qX3EI%f=sV`Oo_cZ+JC%>JvY`L?3Y z)d0Hgh{%`}P{Ov&=uCC5V8=Fa=!o(v>!fKj?e3bI0w1)fc93fxK%nbwwr~d*%@Bnh zQe0OGO9b4mj=QK2+Ap~2a0xdHqu!F>|+Xz|7QpbNH4sg3Jy zF;AL$OjdQ}ZM24(t7y@CUqzxljx{E)jf+pvoHW;(5|cC?xdKLtzRJtzpG^JAOoM!2xfiVcjdi3no`%abyt+n>O z3IXDp-T_J!^}W>rqo`jYOqS|>0qOk*r~q&%e4G8i`u8e?2o?fZ!b0H72BV`np82c5S}v`2DhuJ&F%-!J>YqC z-S`1n@Ei-zTgF)P2f%X|cz%CuU3dDN%rLC?w6XmM!E+Ei_oy0O*ax0F!1LHrTh35; zZV%55V=V=Ao&aX-+ZDA1)Pw=rW52al_oMlv8HVdrX35Rd-g9HdSNEiSXb10~w@oUh z@6|p}8=FJ>32kww#+iE*!7~sc?k7uSH<};n;oH>I7STH4JD*!sSxDQ>gy$s|n>t?j z&Y!9s+n>%^BEtynYOVcgS?HV4e@sPw0X*l!^OUjH?({v3S9rOmQpGcXiEzVO*N=`J z#wg}nss>OPQoK;i*1T@;46qXSG6Rtrg1uBj*cS^^3QoA^m=MMWKDd+Ar*g*3On^@a z^dJ^K-5^&Le5{be241=$;N)lpqZ3Cu{Z32JGBuD=&5VJZl~B&{Hbf0Bqm`p|RKtgU zqxD`?>n*jn7Z2^_1g&H0Abl)^kg0;-ArP|WtomjO^lt)u&w;mfkX8=QEn7(hJW6DW z)V^wcpy{-gOZHZ(p+uS5mR63AvJ7(2Ix8UGG)SX;Q%BDEa7Hc(J{=)+NoNqG(%P($ zV=5D;zVD>IbF|t#ayqt4O|4FZzS0&b)adBxQ!`{V81Dyo)xz6K7-5wiJ~rsh4Jb3- zUb1VXwiU9N?gRYsRcn^$nei zO8BAka(h3U=S-`I=4nv_V%2sj&St5#(9{X=p)+eyA+OC}9Xx|OIp8TR9S0cG+{;@r z3TitrW3Mk0a_ZrI2bqv9hTU&9jV|OQw`=%urvo#_R4r&zQ!{e?jO&(~=2SWlmIn%d zDP(5H8lN$KZEQ4dG5%=$v^j_IwDB9`Nn<^vT!zp*JJ^@l-RvIrT_yy+?SW7{yVa*H z5SV8#`)pIW))=nApf!e5d@HqMG#z8D9j992e#s^T?c;5^z9 zNuvq3Vvf2VThvg=41ks@n90x&E5Mbm_9~zyA+7RIN=&H`U?du*&fy(a0v80ql?s3| z^vlvZh!B~A^&)P>6hZ4J<|mLq`Lnv{> zs&%WQ6LN*_LOv4$;fmlr1TN|U&lxmVEpXYe-!M7VHB+tBO(Fy&sFjwGf~wN^*pNh{ z33fNiGtoQ@^J8C?7ee0emeyG(Y414thX?O(SBUK52fJ!0?ADqwWJlOD^MD8F1L4bt zFe70cV__z(0NEJ~fq-T6z)bRS2vD$^X=FAsTbb?53(Q_-KRD^X!yJKdWgo$QavnmI zT><~?>j)tcLX>$xII>_Aj$$ATSvmwD%R{|TKL|WF3YDWOR0lqp_kyG4BD5UUgU{fz z;H0-7f{PsmgUWO05_oc5179pB>u#J=r-wIhVV%jbk`v)Qn=JX>LZm&Qz6h%qqIkQ zPdYDMm)+z@xwG6~9w!rdsk{|J4Sg*CsMkXfp$vUr2ouNE(I=SF0))#xa@Q} z=JKtp`8&U2pU)1HSt zuXwq8C3_9@n&P#>>m{$V-mG_ocY$}M_k8c|-lx2;`2_l8`B;1&^4aQh%;&1Fzi+0m z#dognHs6!J*Ze~K^8Cj8E%bZA?~^uMo9H%u+e~h=s?8g1zV`R@@91CZKi7Y||AzrM zAUdF5!1RE%0q+L<92gYXEwCnVS>S7dUk7;yWd@B4S{(Fp(4}CH;4Z-x!Ha`m3H~a? zDmgU#2DI(owyte`+rw?Iw~K5ypxx|t+uD5+Dug{Oy)4Syp1K={>&$cRA^4@A5WaWT?2vLJF=?p(Zg ze6RS~@h`-Gn-G>TG+|-FfrLMdDaK0J-99q8n|hdLoA#J~NQ_P_OZP=>v{7j*(@v**rWd6@oc>k@pOKw0 zD`RiQZyi!Q)OOh3;k%A;9mjXv)bV1c$WE3{jh#O4+^(~^bA9KtT|&By>awQG*{*H7 zn!7f1{VX#yvn+Fc=7p@NtZ`XevcAnWW?Qp&WM9qckTWx9UoM;5Eq8A2;XL=e0eQ>w zKFx2JU!K1?|4O%%ZqvK%>&|!Y*?nR6(*=PAr3D)cuJlOjF|)_(J)L?M_gvodvtH4? ztiAU1#=U#=eysP$h2e!&g)j7B`V{netj{M!kwp`WUhFIME$X|X@0a~d{buw#Q0!4$ zQoO17m;TxP=lB0;K>Go81702II&k>FjRUU^${n<5(AmKWgJ%wYXGohN6+?Cn6^9NS zx_;=-!}5kbKJ5JPl;LxRpBfQ4V#x!I;ppJvxU1v)jNdT+X62yDZ4-18MorjVhM7MnYhr5V)SR8zVdCQxuULCp z*V~Y7gl$)?Cmb-}t!rO*f8DuBT_&xV^y}n-lb@U7Hl=FHyHlg5J~Z{hwESu7rgPIv zr@uO*?F=&G+{~<*_4lBAM&I-5tk7Ba%{mW3MV=xu8BY$)HqKr&`=@&c-Mi<$!26W@ zKEJ=){hQ~w%(2cn{XoYDRzJu+Sn=TDhmsyz_Rt@5%jUj4&p2<%yc-XfKK%A0rbm`O za`VwKj~L=tU z>Yg~ewAa#I%fgl|SaxIi*ySfzWUtt^GGOIHE3ZCT_T;funX9(04qQEN^|dt>Yu>N# zR==|$qG8EeVeO=~Up5YGJg_c(-NyB8*3Vo2`-Z9wXP@f#)ax75Hg4P$uxb8gyt!`k zr7gp^9C0Mjnw$^X+-Zt+U=9#)@zIt}lv!}NA-2Uow>CbI_KK%KWJ3MyG-HCQi z-FfAOu`it6HDuS(-92`{x~Jow9WTbexM6SGy(?bwdTIX4^2_(VeDjrQul&5PX5ZKQ z%lCi&YRRh~y*Bu@6R-Du{qP$--+1fI{5M}akaggdw>rPI_h5&EyWdWK`-OK>-`V+Y z%DX!br5xIEIQ8((_tM_mbtL1+o}-zW()`Z`{6F`EC1epZ_lNyLYb) zzH-RT*c=$)ZA2#%AO0yw6X+Jy+0+UvQ%jI+kNxB3t$E)#n2tfK4J_Nx>Pvg%Z?C4eSu<(Nr zqaolV5C(n$32ZXkfz1X-k9@Gr?#&MH-0%6C=UbkqJU{e2=lP}QkDkAHv0geagO`Vw zuUDLx(JRkukk?SJ5{+ZSNc#)pZ}rd1teka-$)DsK!EP3G2dnutz@Iemp!om|!ixlf zDr*x#FA?GLO~fq&?^M(2lwzHRISkN&*lG``{6&x1o#8OLF#Sy zCkhIhN%ivihdKL$L${jq82>Dz=eP6EQGp?K76&_>H>)OGdA&P9`&7Fv;Kg=o2yAKK zcTlf9&mrJXVzHKi1kPL=lF=b4JtV8QVVtIu*#ps47-wLDX|zKQ+=Cp^Rrq~8grcfv zoE2Qpzedm-c28UWO|681afK2*l!2Hz5LJ&l=m4~r287XMo8pnp#=fvymnpu7$g7@bwqu=r*l{9g8i zcvV&mOQNiphDvMl4vMfFBvXNL=YK;Oga|tr%f@$}U@on;O)(k4VBP*!Q~q|IlAc-u z(K)H4-4fR#S4(96R-2*s{+F9n@jq(gIQqZOq^fzja0S{R3LX2#H35S)K7XCR!T-+x z!QT`Z0UT^j5Ok8DQv{tR=zW4dAn3yl0xNJ#q#*FuLE;Wp2p2%bvtGXy_J@J@nX1Q0`rh}LnoK&=N`Ee$fE#SQ`Or1q-m zEA?B@UNr?w(_Z}#1X2ZK5O4yyL;P1e_6dnXXC`)&kR&7vDMBhpPtrlk)j{YebRy_W zf-Vqrk)TTieMQh^g1#mQte(Cl=(|lq7on?=Ng>5#g0L(Pgk^w|R|xJ%@L&~Cz66&N zY$ce+q6OxLMkCg2nbl|_Kyx8%1NC8R^%@*2)Tmu80%!eO19-vA(aCKYqQU{Y{sII% zX%GeoU`FvhK|eGIg9TvdekAB8z!EhCn8Ro7uZH+)*Jb^$*B$kj2%~BJqfk9TKP$5v zgi@i5pkD~~SByiNeBT_o#|o7YYeT32*%#QVTqWpNf__^oOn~VD^WSS=cZI=7>AyYr zmrw`Hm@tW;>rMQeFjXKx;)H1+l$#;U6z&mb2?{|s2>P9%KM1->FhejR7;g|}3-=25 z3HQU#1NZ_V!7vZ&!7xwQ2!?ss>2||B zc3g`9C&E@?8w5Cs6t)xWO|T1uIDrZFQkiuDg2OckI|QJot^~U`g@_Y&3oioGFYF=M zP%qpM(@klHdzBiU8Vu>E6In@>8o@2(PNvr(?VH%PC`bSI3$M{CUnSV1UU;2gPw+?u z_gaWFNdvmw>e{UlBybv2BV)$rR71Q^ixq6MYHc2~ZfgIIV>Nshe+fqjaC$hTY$DhP z4ni*uS(jDYt;EnlV=;lG-8}|WVRcnLFqFkp;b=6WnHklfbA+y*qXf61u{T?U49!Ra zhsBmrorIIZ2X|WU9|BH&OmG0js0_uV)p`buGKI4Q2R4KIbK&w|T$5Dnm#B3u=I6@DW)nBWkC+Y;QaQMfML z5Plc_AUKrZ2!bOCZvS_|coj+_4^R?ed4}0dS49a-S4El0q#uIADM;ZLn6CPSW`cbJ z{bz8t4_)*Sz177cdeOxa1&c+5cvl2R-@aI!Lt88sF;EP`ycj~8NG3Q=*-UWke>pat z7zQDP#Beb}1o*}iY$Q0bDTjyEzEK zTuKP$i4W5c!QBZi(0&6c7+?qu%}lcsgYJ&uKQ6+)4`DFHCnz!KeRqrhmV{uHxY|Jo z`V-v8P6#yoYNX40ow#1yKyVSkeF^T@w5(w=U|GWqz^cA`a4>PZwp5G%e5q=YAssOw z!)QcDEuwyJa}~%?tnEuWlvR|`C@m19u%E?T)*(vk;a&=~mk1to#}$y0262>{Lb{3j zaisVfhTLY#84S5C6dPoC6NQKeArKj)n-$p6hPDLNJL0mvZSSwH+rJy<{9v4p# zJe**_{E`1GsLp7hD*5Z6Y86OLyx1H_jo{HhC_c7FQWL+SP{!D9)oAb8y0Cn%%6uR2$q8&EWzf#Aw|ojbu3=t%Dpms{rzfeLj#Iv{6N1R^my z_FS=Axsua9z}G8CykIbYx7>nP|6Q7oGTz14Qalb!n{}M|B-^ouD|T z!54L%351B$LPqK`=>W2HKosi;p4>cuJYB(U{eoDFx?VKaBEgdsQ)uRF%`o24!y;Y( z+loMlMcp78Vv*n}w8+F~RQlv7GE6s$;>B>?2;E3s3Bf>~rxQGb;F*m&vu?DmR0jxn z55bQSTu*QVor!mZzHy>1S{57z4*B={k^ z+1}-172U(SM=8QTLh#&r-F$-Q(b>P9`_tHc-DA2XR6?;#goA(t%pyDr%hX4yi6zmk z&^_7Q{wjhWX}WVnSFc;!+*%{S;LGOd^#UD6+n%|uCv~C+MwUyun^=fmp zkFK{ykg|92dEL(D)?XlaQFH5iba3Ka(|qFzSpB>KDm>jQx_!F+x>o_?UMF}l!H*NX zgkU(m1I{g756E=@gkI6Qx0yo}v6jIm0Sj#ngwTa<1lomx^nL>MK&l2*bKFM)-U^Ve z%98#y*Pq<=q7?@ikLyl@yN&LI?xgM%!OIC=LGa48y7!^~9}*0HYy_{S{id6W+AqiD z751Pl|NONkS}e|gbYY6hGw9C3e;H5t0t;xycRc@V_O zZgu2tlDfvLqj7-YqV6ZS)8|L$*ZrXTk>Iri1M;mScs;?u zUp+hy79p*jFK? z=|&W)R0c6DeW!*>&ZbxF{NsyG?s$XB?Nj8q<3w^%?>Mo~hvX)Cz!H{Vqkpzuf@9`( zii3agiW12ec2CrFMTw)zKq&-hkrX5a6Z|~EJN}iIhDec86eT$-dm=>>{DOTam*PMr zEyYU-60iun2;NO_vpb=bB!Qo4Yks8lEg_D+cb2kl%Qy;d!f3kN!;!I@)bqBCm5{ON z5)Vhlz7jZL)=T{e-usts>HsMGpPP@gf>c2PitqlXOho6KinzuoG z^TYTY{stn?y1*685fCLcTD^KXfi*!;&=fWeE?@4*cGkogP1a7-&#T2hHnYjvNg6Jd z0aGrGkVZ-+(kRI+jh0FY-be6$f?p;0HG+Y6dV}CMH%Jy~3==7hl}4yqYkYvP!+>vM z;b^`O6odcKTB}-XsZN>&T5D;NG+CMg#^%$c>Cy~orUb{Zw+KE+@Y@8xL-4x2;9CNpDDRN(Tr&OE56|pZ$~4IO&)s zjr;t+D2_1r}G3~td}kje2H?V|CDrIx-5MI zRjAT=>05%oYC5?}-%CGJ_N}FKUiyW}lzt`nGDzoHY?sbUa3xZ`bc5ipn>%(>7XPty zUY2CJ`3fz9zajW~^Cen#<`BGBKvmT!L%agnQ}!YlI{6*JR|x*TQTCC2Wk0zM!9Ngu zm0;-EZ+|P{yxbN*Bex^?N4s!d4hP}9903kF5pop4KN0-1`ui6U&i69(F_eU6rf8d( zp_2muCOKIZ&&x?vJb&#kiRa}Ga!32RU=hJL?CU~3$jX_3<#LvsE$0yYJHepjy!lUJ zxm>7XIm`TYEZ3SIMBy=*u?rEvUCP|PyT!uJyAZeCI$|aaenpvK(0!W(W(Q+ws zNVX7GB&-uinpsu*{#PZ<;09F<70cu0N_m1@MOYnSCBn*t)&K1z&GIyP2CPnbI$@pb z<(Y(ap$q&jl4cpA8aK$Z<$DS1N?1dapjMtE&%N~=c1KCGyg*)jTgE#{n&ss(gk7$e zR}j|yA4{6$dby#M=t^EEZ-C;eq*;E7uwM4_sl1sEV2k`TVZ90K+dP10qEuH4?d-?8^@w~QGVsNA|Pp&UsWZ|EEpGsW)9I-nxn{@@;ekS4#;oG2j#a3 z>rdDK!UhsHs8N1bKE#Za-y>`=VH1@C0^B7`#J^F{ET57;1qv&lmfx2@kUx|^0-wH5 z2pdA!wuEg**igcT5jLE#5gX()Or(5{3Yz6FTO? zz9RnsqE=?M5?wFr7 zRM9b;u8NM?u769>vA&Z&6GX@Q&iXET*bp)Z+kvnh*XpzM*}yupoe0}SJG|XZbo}3X zZ??VwM92CbgzbDc(eXdL727e(MS2MLx*6Pd`{|4I{q+O%1NDRSgY`r7L-oT5n?=}c z!sZY*m#}$+%_nR(!gePt5G-iDC&-5NBVk5I-6k7md(o3v@Bhe#t<`lkG~8YD9ffxB zy+byvpVU$|te>i%4$DzLjj(;{^)m=tM2W>;lnv{ZJIRLi_v;@7ilU#Re}J(42wVKG zlnv|W>mg36ouSY#B5>V?rsdT?4zgkW68#hUrGy66k9H8Enp*j`&G3}TbCIy0cbrpUWS2j)J35V)hQE>st; z8>6e!tMr$=dP#*+kFO^Fb(s*ftR4q-EY#?x*406`# zAWPf;VLc8>pMyLkSWc8P=_y_=l84B{@~m zl;V`;l;PCVX|U5Urx8x0oJKp9IZbxD&*>qjc}|ZwEpl4yw8Uwt(=w+mPCFo6$U&zw zPG36x=yb!Gcb1)foZC1DI0rkobq;klIwv`&IHx;zaPH(>;M~i((7CU3vGV}u(asj< za_4c*mCjYp_d73ge%$#9=jF~TomV+;cHZLrwDUISz0L=n-*G&hMkGY<3J>~ko>xZr% zyMF5Wv+GsY-(0V|{_c9yfDEjGH;53@L~n35v^S&~1{$giGYtz3>kWGhhYer3ac=%@ zVQ%4Wk#0t}u5S5mg>FS|L)?bC4R^D+jdPpqHqC8@+blQYcCXt8w`bgTxV_-E+wDcS zpWI{I)7?9}cXiKl&v)ozhWi2cgYNIR zzwds={ha&f?&saVcK_D>iu(`lKY3seSC4icDIQ%sdV2Kp=OAi8nCG#`W3k5)kEI@~J?cHydaU!<;IYT!HIE}6$30GZyzlX$$HyMmJVnnoo&lag zo*|y?Ji|OAJllIld&YWp_000j@yzq=2BBDbdiM70}?)<>wXP733A-)!l1=*I;l-AK_KvW%e55W%HWmHN)#3FU9KtuZO(mc|GDa z-|I!M<6f7&e)78N^_$mqZ=JV~x1YDacc6E$cU$jJ?{M#A?^N$}?+)Ibyt{a3dS`p* zdiV7n;XTFsVehBB-}FA_ebM`8?>~GPAMC^V2tKYpZayA9UOqlPemT}KKrZ4hkeR*HKZyVoG z-!R_@-zeWMzI}a1`PzKv`!4i-%=dBMCw!OrzT zOxZ}8s;p=$Q}AMiip|F!?m{#X5f^S|!@dw>w23y=ex0$c(N0r3Gn z1F8ZZ2v`uXFyOI(H4x5bUBFWTn*z23>7H}cpQo!YaZvw6b zqChr~4-^Ak0u6!gfu4chfx&_815*M!1$GI{49pHJ2<#cyJFrh+-@svkWq}g|t%0_{ zy1?0i_Xj=@I5+U&z()fc0yhUf6SzI_`M{kJGUx5UcLNUx9tk`h_(9-Dfu97P3A_~e zL*UIIAxIY_2RQ|K1bGGd1o;K|2gL=Y26YP>9yBRvVbEhij|V*wv@B?Q(2GH@1|1Ii zKIr$Lo53iU4d#Q}1P25|@Y&#Y!C}F1!O6j?!Rf&rf;$Bl1osT?9o#2)c<{*JQNg2w ztAi&7+k)$Y9}Ipx_=(_U!7GBF58fHPD|k=v-rzTa-wJ*^_}$=>!8b#=kob_akP#uH zLmmvN57`v5J?wPY2VtLuT?xAy_D8rrJSaRQyj^%$ctm*n@aXW^@c3|Jcusg;c(?E# z;l0C)!i&QPh7SoJ9zHU>E__k=>hPW6m%^_{_(nuWHo&%#PR_aUrs8WY5Uykq<^b5;;F|VdRp?rI9NlpN!lTxg~OIPMemJ%Df;E;ebEP_Peq@J{w(@@^u_4Q(LY8168&5Bjp&;( zC?+t*6f-EMCT3=g5_50NoR|k==Ekg#c`jyO%xf`k#vF`!H|D*VV=-r9K8raYb1~*} z%(pRDVt$DEJywbhjqMRz7CSjsiQOFgeC!Lcdt&#-9*8{=douP^?EA6jV!w_3KK7^B ztFhN&Z^TJ)`Z(t}L)?RLkHE1^w7U_wYjyM%-UQ$kWgYQj?qI}%<<*qyM~Xfaxi z(~b8SiSa(;1I7i$$Bavi%Zw|HtBi+@znfxBLrt}&hfIr1kDHd7mYX)4c9?dVUNpUI z+HZQ>blUW>>5Set}PeNotf*;4dt@A5z#1-R5U>}Ni;?Dg=o466cvfIB8vzSg+y~j z>qOf`+eMY4ouX<{jp(@Ol;}6nIni}dz37&xN!&*~R6IgFTAV8uizVW(#Rf4fM#Z?; zE%u82;*gjXN5nC4LcCDCSiDrcB5z>csJt>gm7S2Cl3kEpk~PZi%Knz!mpzd^lf9I^l6R74$g||x@*(nJ z@{#f}a=Bb7SIfuBKazheH_K!4jq>C2-{lwNm*rRG4f1CBefdNAWBF70bH!VVbVX;y zJBsd#o{IMry%j?h5=FjZyy9cUr;5pn=?YLWLs6{ID~yVOqC#<0(Wq!qJXAbUJOkPQ z9f8h32GAAg2J`@W0olM%U^p-e5CM6B3{U`*fGNNXKnoZEGhhYm013o^`M?jrdSD~) zGq45N4(tS~fPKJe;4JVva2~h>Tm|ZYdf*n&2;2w$QFd1jSB_N{C^2PJIZt_7`G@kV zvQha+`BM2>)kf7$m9BbQ)kW1!)kF2E%A)eCBC2xLJkaV| zPgSj|Q5{#EQk_w~P!Ca0Q)|^0HKh)#6Y5#&a`im*67_QRDs_c=t$LGsv$|4!SY4|= zsXn7Vr@pMdroOJescuj=s~_a2=6B71FFz~4U;e=S5A%oTkIK)<7v(GSKgyp{aHZf{ z!CwW>3SJhx*0j;I)1+xSYIUrd+|@kP zJOeYpE?_1&02~BngCBq&f_b0}RDddQEI1yV41Ntx2Q^?JSOi)?8wi64=mle70-Obw zgY&=z;9_tYxDs3gt_9bD+rUb2CspL8}N|RCu`XaquU#6d@U!~u!->I+C@6#XDAJHGx*XmE|&*;zTZ|m>s zoAnR$kMvLU&-5?#uMKSsZCi1%EQ8pPZ?JqHYV=OZ=M$Q;D#*Ini4&!NKlkvXs zk@2bVx#=xacT+D@Z&P2>0MlU82d1GWnF%ndP2)@xOrMxOGfg#pVbYplQ`of7wAJ*R z>6+=G`9J0k=1%4eb60bBb6@iS^B{A!d5C$ad7{~AE;s*d-fZ4$K4d;(K59N;K4t#R ze9l~NZZN+zzqYiow6&yK+FQC05)ZT|iK{=2Zl0Z|TBFF?mkR56rG=xeZ3YrP|AP(Z81SCL< zp&z0DLYtsppl#3&Xg9PMIsu)6euI98E)X~Y)^66G z)=X=bRc6&&S?g-+2J27O&DJf}D(eyJQR^}53F|5A8S7c=73($YU)C1u1M6e!3+q4D zH?}smcWm$4hS-MLM%qT(a&2Op&E~REwwX4+Eo5VCvu$&1^KA2N8*RI6du;n`2W;nT z*KId#4YnrROM82Jy1lbK!=AJ+wjZ;fw_mhhwqLV1+V9x!*_+`sxEtIP&V>8G{o#S| zBv=E_fQw;0Y=SMY8~z5K3H#sx%)vYyhXr^xybxXjFNasc8{sN=FT5W<2p@*4;iK>| z_#%86z6M{1Z^8|56MP503qN|XB_7o=N*?ER~*+Ib&lJPzZ}mTuN-fX6eJDlfTSaxkt}2kB0?mH3;_@o zG7*`Ie2Gj$G)N(0MeK+JL6K6V4DlmDB#F#M%8|LqT4W2d4XH$SB6Y}ZT+($d0 znP?xhA36{nj4DwzIu88^oro5rdenqkP#X%P1X_yv&>+g7VYD2bi++bLKr7I-=sI*g zT8ZvLtI)mZ8T1-jhu%PMqOV$I>=b7^=UdJUXIE!;XHVx~=LqL0XO2_slsNO9E~noaamJiU=WOR3=Mv{K=L+X4=Njkt&O^>RtSy#>eTWUmMqxRa7?WV1 zVbicetQc!8d}A0^f>Bs0R)#TH7>i&$7RMG~%dwT%YODg=fNjJ!VVkin*naE~R*ltQ zwb%*lI`%i#jJ047us3)L-VRU0JK~-2?sz8N2k(y$#7E(IxD=P;06rd{fKS9H;gj*{ zxCw`G1b5;%PPWp3GjTs2#CiNXd^x@fufTu6*W+98?f6c-3g3qxz;C+Rx_Y`Ku8&+_ zy9!)|u40$oWpY6-yNhzobopFC7wuwOalx1?;acq4={oIt%u>!CfoC*hgpDfcY&Eb%P!tn{q* z?DG8GN+S00_V*6*W_zXH3EpCFnV0vj@UHfL?_KBJ;Qh(F*}K(S>D}esE1QQZl<_O-W_R*^;J`H)MOV1DQ_t zB72j4$pPeG@_lj=`85fWGst36ME1u2FKQxU3y+Cx>B9V9 z@_YQGztr#Z2mQ34^>hBY{-{7zl=fi-Jpn z%Y!R}Yl1t1yMud!`-6vqM}kjV15jzLdmo)!H#fS5`h^CB28FUiIU!MNfm9lr5c(uE zDKt5x51}C}A z)~p$wLHD40(V27>J&1mv9zqYJN6>k+j0R{G{TV%jE~a&~fi}?=+DhALiY}#nbdaWL zmgeXv9i!*dE9lkq_w+h?1HF~5q<7JK=>7CT`cEd6`H=a9`I4E&XqZCA#2^gDxEU`) zF{Mly<7a{l&%~Jp%u;4Kvx-^EtYg+Q|7CVFr@apDJDSa5C$L|!)7SzQWR0wawXrZuv$NO*>>_q4yMkTCu4gy0 zKeNBE+t^C>6nlwnWLwyW>=X7m`%gGEoEGj7P7ikuXM{(DCxxBiNO*2|et1!MX?R6= zRd`!?Z}?ESI$RU34POZV8NME_58n#k4gVc(2|oxw;@WWSxsF^X?rp9+*OPmX>&^Ay zhH@jg(OfPk<|N!_9LN=NGq_?7=1>mf+?17d?>*|7;ReXKM#FSaRG6+0BGj@87D$Iiz7 zh+T|bj$MsCj`xm#9tYz^ab4UH_ryc-1@Vgb?)cvLf%xJ0ukmB?6YJMY?thv9GuKf zevlL;B}sWwnaod)OInk7(wiic-y~-yqse4)c5+T~L2^-YNpe|oTk?GJX0kDPCwVW~ zl6;VSDWnLgLVF=y=qzLk1B5|Bw(x;4QW!1d2qGa*7%xl`CJR%AF9eNHC=>}=K`)?! zM<@{}p;QP7j1U$g0xx{mO2{q|mJ2I|)xv(^qHv?Up}eX5MfsaKss9FbQd0i?>A(K_ J|9|JC{SVX5j^Y3S literal 0 HcmV?d00001 diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/agb.xcuserdatad/UserInterfaceState.xcuserstate b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/project.xcworkspace/xcuserdata/agb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..13365ee15feaf1e6a54aa9e6014b652d5979043d GIT binary patch literal 142872 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%0A4hxqh3!h<=+l!%UiY#2wAm*!(NZ zvAH?6h+y_D-lH5t7|R5XkjyV3(lR~Ilbr^%#JpRoy`|n;I=7`WTRO9qGg}qJZustf zq*Wqa>480N^(7m*7b30o+1h+t`)q6dwJu991~ZHu=&AKVob5aCkv2~fLrrQihN;ZJ zp0@FRw2@=mXUTyq+Q!q6CQN1y^YKo#J%MKuot>!9#7w9o(VisQlSKQOXg?F}S>jIi zb0|dGr6ViZaCSTU*v@R)En*dVZRhNEzwvvBwD-C8_PBjM>eGVOsKJWJ8a=Lk3yuQ96P>^Id&|^JeISPn>;{%o%Gd7U!C;T zX*lNG$^D%UV*fg+x3fAstFyB@JFBmAXUwnjXKZ3C|At5xbL--FSQqzoi6xGOxUpsU)uI;-mkRG}J+`G_^#4UujUoY$=evg_6e zKkv4V^~j-{9J)KJyE?kprXJIfYj-p8Jx{m#>AN;W`k6t$3_MFKI+4WZY-U@C^p|h{ zXYjfHX5T-7I;_U~*ncBtF+hF;e0G3ye0MQ2z&QgBbAq2kWMF=ZP>ey0W*o=(h0`H2 z=q2p!px5a}e|&b(ZtU40=M7FrR^?%tlQ^ ze&>%68Jds66s0=@7|ag7#ofbFlb%e}r5P<*$!EBGn7Iy<#W1rOUYUj6=qFL{XgQ7Uh&)H@X|z1Yyo`MvqyI5O8OKC^#7um@E;827$J*zyCFsFG zhTxpB&Kc_*-=T|)Q;YA=MaFf&=f?HMe8-vZIA@J7g7;^Ft^AdSU#NE?nI^Dg~-8nnB5$+n`3r!n&Ibj%y5o-=Iml`h|G1* z+$`vCZVTKqw=>?gx%ObLeVXTtdAX7Oyn&2jEWdGyD_G>B&Svit`@jC{Hw1sX+pDsD~_9B!)hft_i*19_icTObY$RJ}~dYo3pm%#JslU!Cr35PZ5goHu~EZh5NS2d0Q2l(ULZ_!+XC? z{@c3J19RBckAV!v{%o7X6sCvB_6Y9ZF30T|$;?QmF@ssmWhEc68gtyf1-r3*2ljhM zE?(nx3R4u%?^w!mKE(4o-Lq3>JAHm + + + + BuildLocationStyle + UseAppPreferences + CustomBuildLocationType + RelativeToDerivedData + DerivedDataLocationStyle + Default + IssueFilterStyle + ShowActiveSchemeOnly + LiveSourceIssuesEnabled + + ShowSharedSchemesAutomaticallyEnabled + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcschemes/xcschememanagement.plist b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..b39e61e --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/Akshata.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + BLEPeripheralApp.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/agb.xcuserdatad/xcschemes/xcschememanagement.plist b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/agb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..f0aead2 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol.xcodeproj/xcuserdata/agb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,19 @@ + + + + + SchemeUserState + + BLEPeripheralApp.xcscheme_^#shared#^_ + + orderHint + 0 + + rpi4-osdev-ioscontrol.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/AppDelegate.swift b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/AppDelegate.swift new file mode 100644 index 0000000..8e9839b --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/AppDelegate.swift @@ -0,0 +1,37 @@ +// +// AppDelegate.swift +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } +} diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/AppIcon.appiconset/Contents.json b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/Contents.json b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/LaunchScreen.storyboard b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..09ee174 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/Main.storyboard b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/Main.storyboard new file mode 100644 index 0000000..cb2d4af --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Base.lproj/Main.storyboard @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Info.plist b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Info.plist new file mode 100644 index 0000000..1adb454 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + NSBluetoothAlwaysUsageDescription + Sending control information to the Raspberry Pi 4 + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/ViewController.swift b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/ViewController.swift new file mode 100644 index 0000000..5212959 --- /dev/null +++ b/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/ViewController.swift @@ -0,0 +1,101 @@ +// +// ViewController.swift +// + +import UIKit +import CoreBluetooth + +class ViewController: UIViewController,CBPeripheralManagerDelegate { + @IBOutlet weak var messageLabel: UILabel! + @IBOutlet weak var fireButton: UIButton! + + private var service: CBUUID! + private var peripheralManager : CBPeripheralManager! + let myCharacteristic1 = CBMutableCharacteristic(type: CBUUID(string: "EC0E"), properties: [.notify, .write, .read], value: nil, permissions: [.readable, .writeable]) + + override func viewDidLoad() { + super.viewDidLoad() + peripheralManager = CBPeripheralManager(delegate: self, queue: nil) + } + + @IBAction func onFireUp() { + let fireup : [UInt8] = [2, 1] + + messageLabel.text = "Fired" + + var fireupData = Data() + fireupData.append(contentsOf: fireup) + + peripheralManager.updateValue(fireupData, for: myCharacteristic1, onSubscribedCentrals: nil) + } + + @IBAction func onFireDown() { + let firedown : [UInt8] = [1, 1] + + messageLabel.text = "Firing" + + var firedownData = Data() + firedownData.append(contentsOf: firedown) + + peripheralManager.updateValue(firedownData, for: myCharacteristic1, onSubscribedCentrals: nil) + } + + @IBAction func handlePan(_ gesture: UIPanGestureRecognizer) { + let screenSize: CGRect = UIScreen.main.bounds + let tap = gesture.location(in: view) + + let maxx = screenSize.width + let maxy = screenSize.height + + let realx = UInt16(((tap.x / maxx) * 320).rounded()) + let realy = UInt16(((tap.y / maxy) * 200).rounded()) + + let coords : [UInt8] = [UInt8(realx & 0x00ff), UInt8(realx >> 8 & 0x00ff), UInt8(realy & 0x00ff), UInt8(realy >> 8 & 0x00ff)] + + var coordData = Data() + coordData.append(contentsOf: coords) + + peripheralManager.updateValue(coordData, for: myCharacteristic1, onSubscribedCentrals: nil) + } + + func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) { + switch peripheral.state { + case .unknown: + print("Bluetooth Device is UNKNOWN") + case .unsupported: + print("Bluetooth Device is UNSUPPORTED") + case .unauthorized: + print("Bluetooth Device is UNAUTHORIZED") + case .resetting: + print("Bluetooth Device is RESETTING") + case .poweredOff: + print("Bluetooth Device is POWERED OFF") + case .poweredOn: + print("Bluetooth Device is POWERED ON") + addServices() + @unknown default: + fatalError() + } + } + + func addServices() { + service = CBUUID(string: "EC00") + let myService = CBMutableService(type: service, primary: true) + myService.characteristics = [myCharacteristic1] + peripheralManager.add(myService) + startAdvertising() + } + + func startAdvertising() { + messageLabel.text = "Waiting for subscriber" + peripheralManager.startAdvertising([CBAdvertisementDataLocalNameKey : "echo", CBAdvertisementDataServiceUUIDsKey : [service]]) + } + + func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) { + messageLabel.text = "Sub \(central.identifier.uuidString)" + } + + func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) { + messageLabel.text = "Unsub \(central.identifier.uuidString)" + } +} diff --git a/part12-wgt/controller/characteristic.js b/part12-wgt/controller-node/characteristic.js similarity index 100% rename from part12-wgt/controller/characteristic.js rename to part12-wgt/controller-node/characteristic.js diff --git a/part12-wgt/controller/main.js b/part12-wgt/controller-node/main.js similarity index 100% rename from part12-wgt/controller/main.js rename to part12-wgt/controller-node/main.js diff --git a/part12-wgt/lib/bt.c b/part12-wgt/lib/bt.c index 912dd47..f68a8c1 100644 --- a/part12-wgt/lib/bt.c +++ b/part12-wgt/lib/bt.c @@ -1,3 +1,5 @@ +#define IOS_CONTROL + #include "../include/io.h" // UART0 @@ -232,7 +234,11 @@ void sendACLsubscribe(unsigned int handle) bt_writeByte(lo(channel)); bt_writeByte(hi(channel)); +#ifdef IOS_CONTROL volatile unsigned char command[5] = { 0x12, 0x3d, 0x00, 0x01, 0x00 }; +#else + volatile unsigned char command[5] = { 0x12, 0x2b, 0x00, 0x01, 0x00 }; +#endif unsigned int c=0; while (c++> 17; + s1 ^= s0; + s1 ^= s0 >> 26; + state1 = s1; + + return state0 + state1; +} + +// ######## STUB FUNCTIONS ######## + +unsigned int kb = 0; + +unsigned int kbhit(void) { + kb++; + return kb / 500; +} + +void getch(void) { + wait_msec(0x500000); + kb = 0; +} + +// ######## WGT EXAMPLES ######## + +#define SPRITES_IN_FILE 20 /* We're loading 20 sprites */ + +int i; /* Generic counter */ +color palette[256]; /* Our palette */ +block sprites[SPRITES_IN_FILE+1]; /* Pointers to sprites */ +int quit; /* if quit !=0, program quits */ + +void looper (void); /* Function to move cursor */ + +void wgt23() +{ + set_clock_rate(get_max_clock()); + mem_init(); + vga256 (); + + start_core2(minit); // Start the comms engine (core 2) + while (!comms_up); // Wait for comms up + + /* Load our sprites from the file. Palette is loaded too */ + extern unsigned char _binary_bin_mouse_spr_start[]; + wloadsprites (palette, &_binary_bin_mouse_spr_start[0], sprites, 0, SPRITES_IN_FILE); + wsetpalette (0, 255, palette); + + /* Initialize the WGT sprite system */ + initialize_sprites (sprites); + maxsprite = 1; /* number of sprites on */ + + for (i = 0; i < 200; i++) /* draw a background */ + { + wsetcolor (vgapal[i]); + wline (0, i, 159, i); + wline (160, 199 - i, 319, 199 - i); + } + + wcopyscreen (0, 0, 319, 199, NULL, 0, 0, backgroundscreen); + wcopyscreen (0, 0, 319, 199, NULL, 0, 0, spritescreen); + /* when using sprites, whatever is on the visual page must be on + spritescreen too! */ + + /* Also, you must make sure you turn a sprite on AFTER you draw + the background or it will leave a black spot where the sprite + is first shown. */ + wsetscreen (spritescreen); + spriteon (1, 160, 100, 1); /* turn on any sprites */ + + animate (1, "(1,30)(2,30)(3,30)(4,30)(3,30)(2,30)R"); + animon (1); + /* animate the sprite */ + + do { + looper (); /* Position cursor where mouse is */ + } while (!quit); + + spriteoff (1); /* turn off sprites */ + /* To be safe, turn off all sprites before ending your program. + This will free any memory used from them. */ + + deinitialize_sprites (); + mdeinit (); /* Deinitialize the mouse handler */ + wfreesprites (sprites, 0, SPRITES_IN_FILE); /* free memory */ +} + +void looper (void) +{ + erase_sprites(); /* clear the sprites */ + + s[1].x = mx; /* any direct sprite movements must be placed */ + s[1].y = my; /* between erasespr and drawspr */ + /* This will place sprite number 1 where the mouse cursor is. */ + + draw_sprites (1); /* draw them back on */ + wait_msec(0x3E9F); + if (but) + quit = 1; +} + +void main() +{ + wgt23(); + while (1); +} diff --git a/part12-wgt/samples/wgt25.c b/part12-wgt/samples/wgt25.c index 7b069a1..8781f0a 100644 --- a/part12-wgt/samples/wgt25.c +++ b/part12-wgt/samples/wgt25.c @@ -1,5 +1,6 @@ #include "include/wgtspr.h" #include "include/mem.h" +#include "include/multicore.h" // ######## REQUIRED FUNCTIONS ######## @@ -52,9 +53,14 @@ void wgt25() set_clock_rate(get_max_clock()); mem_init(); vga256 (); + + start_core2(minit); // Start the comms engine (core 2) + while (!comms_up); // Wait for comms up + extern unsigned char _binary_bin_mouse_spr_start[]; wloadsprites (palette, &_binary_bin_mouse_spr_start[0], sprites, 0, 1000); wsetpalette (0, 255, palette); + initialize_sprites (sprites); /* initialize them */ maxsprite = 4; /* number of sprites on */ @@ -98,7 +104,7 @@ void wgt25() do { looper (); - } while (1); + } while (!quit); spriteoff (1); /* turn off sprite */ spriteoff (2); /* turn off sprite */ @@ -112,13 +118,13 @@ void wgt25() void looper (void) { + int i; + erase_sprites (); /* clear the sprites */ - /* - if (kbhit ()) + if (but) { - c = toupper (getch ()); - if (c == 'Q') + if (but == 2) quit = 1; sprite_toggle = !sprite_toggle; @@ -136,8 +142,8 @@ void looper (void) moveyon (i); animon (i); } + noclick(); } - */ draw_sprites (1); /* draw them back on */ /* This loop is required to update sprite diff --git a/part12-wgt/wgt/mouse.c b/part12-wgt/wgt/mouse.c index 34907be..ff308ab 100644 --- a/part12-wgt/wgt/mouse.c +++ b/part12-wgt/wgt/mouse.c @@ -1,3 +1,5 @@ +#define IOS_CONTROL + #include "../include/wgt.h" #include "../include/multicore.h" #include "../include/io.h" @@ -173,7 +175,11 @@ void acl_poll() unsigned char opcode = data[4]; if (thandle == connection_handle && opcode == 0x1b) { +#ifdef IOS_CONTROL if (channel == 4 && data[5] == 0x3b && data[6] == 0x00) { +#else + if (channel == 4 && data[5] == 0x2a && data[6] == 0x00) { +#endif if (length == 7) msetxy(data[7] | (data[8] << 8), data[9] | (data[10] << 8)); if (length == 5) msetbut(data[7], data[8]); }