summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--I2C/I2C.xcodeproj/project.pbxproj563
-rw-r--r--I2C/I2C.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--I2C/I2C.xcodeproj/project.xcworkspace/xcuserdata/nsrddyn.xcuserdatad/UserInterfaceState.xcuserstatebin38407 -> 0 bytes
-rw-r--r--I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist56
-rw-r--r--I2C/I2C.xcodeproj/xcuserdata/nsrddyn.xcuserdatad/xcschemes/xcschememanagement.plist14
-rw-r--r--I2C/I2C/Assets.xcassets/AccentColor.colorset/Contents.json11
-rw-r--r--I2C/I2C/Assets.xcassets/AppIcon.appiconset/Contents.json35
-rw-r--r--I2C/I2C/Assets.xcassets/Contents.json6
-rw-r--r--I2C/I2C/ContentView.swift17
-rw-r--r--I2C/I2C/I2CApp.swift10
-rw-r--r--I2C/I2C/Preview Content/Preview Assets.xcassets/Contents.json6
-rw-r--r--I2C/I2CTests/I2CTests.swift17
-rw-r--r--I2C/I2CUITests/I2CUITests.swift42
-rw-r--r--I2C/I2CUITests/I2CUITestsLaunchTests.swift33
-rw-r--r--README.md4
-rw-r--r--bin/__pycache__/source.cpython-313.pycbin5737 -> 0 bytes
-rw-r--r--bin/display.c27
-rw-r--r--bin/i2c.py5
-rw-r--r--bin/main.py109
-rw-r--r--bin/source.py106
-rw-r--r--webGUI/index.html (renamed from webconsole/index.html)14
-rw-r--r--webGUI/main.mjs1
-rw-r--r--webGUI/pages/stats.html14
-rw-r--r--webGUI/styles.css32
-rw-r--r--webconsole/main.js0
-rw-r--r--webconsole/styles.css8
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 @@
1import SwiftUI
2
3struct 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 @@
1import SwiftUI
2
3@main
4struct 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
8import Testing
9@testable import I2C
10
11struct 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
7import XCTest
8
9final 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
8import XCTest
9
10final 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}
diff --git a/README.md b/README.md
index fa04791..7746d4e 100644
--- a/README.md
+++ b/README.md
@@ -2,4 +2,6 @@
2A application to control an I2C display on RPI. 2A application to control an I2C display on RPI.
3This 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. 3This 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
5This 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 5This is a starter project with the goal of expanded everything later on to let's say an e-ink display or small LCD.
6
718/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
3static 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
13int 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
diff --git a/bin/i2c.py b/bin/i2c.py
index 75a3509..1afb219 100644
--- a/bin/i2c.py
+++ b/bin/i2c.py
@@ -1,4 +1,4 @@
1from smbus import SMBus 1from smbus2 import SMBus
2from time import sleep 2from time import sleep
3 3
4ALIGN_FUNC = {"left": "ljust", "right": "rjust", "center": "center"} 4ALIGN_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 @@
1import tk 1import time
2import source as main 2import os
3import speech_recognition as speech
4import sounddevice
5import i2c as LCD
6from gpiozero import CPUTemperature
3 7
4source = main() 8ERROR_BAD_REQUEST = "400 Bad Request"
9ERROR_UNAUTHORIZED = "401 Unauthorized"
10ERROR_NOT_FOUND = "404 Not Found"
11ERROR_TIMEOUT = "408 Request Timeout"
5 12
6display = tk.Tk() 13lcd = LCD
7display.title("Kasper") 14cpu_temp = CPUTemperature()
15recognizer = speech.Recognizer()
16microphone = speech.Microphone()
8 17
9display.mainloop() \ No newline at end of file 18
19def 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
30def 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
39def 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
58def 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
72OPTIONS = {
73 "CPU_INFO": display_cpu_info(),
74 "UPTIME": display_uptime(),
75 "SPEECH_TRANSCRIBER": recognize_speech(),
76 "NOTES": save_notes(),
77}
78
79
80def 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
96def destroy():
97 lcd.clear()
98 os.system("cls" if os.name == "nt" else "clear")
99
100
101if __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 @@
1import time
2import os
3import speech_recognition as speech
4import sounddevice
5import i2c as LCD
6from gpiozero import CPUTemperature
7
8ERROR_BAD_REQUEST = "400 Bad Request"
9ERROR_UNAUTHORIZED = "401 Unauthorized"
10ERROR_NOT_FOUND = "404 Not Found"
11ERROR_TIMEOUT = "408 Request Timeout"
12
13lcd = LCD
14cpu_temp = CPUTemperature()
15recognizer = speech.Recognizer()
16microphone = speech.Microphone()
17
18
19def 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
30def 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
39def 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
58def 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
73OPTIONS = {
74 "CPU_INFO": display_cpu_info(),
75 "UPTIME": display_uptime(),
76 "SPEECH_TRANSCRIBER": recognize_speech(),
77 "NOTES": save_notes(),
78}
79
80
81def 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
97def destroy():
98 lcd.clear()
99 os.system("cls" if os.name == "nt" else "clear")
100
101
102if __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 @@
1body {
2 background-color: rgba(0, 10, 30, 1);
3 text-decoration: none;
4 color: white;
5 font: sans-serif;
6}
7
8body button a {
9 border-radius: 10px;
10 text-decoration: none;
11}
12
13a {
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 @@
1body {
2 background-color: teal;
3}
4
5.navigation button {
6 background-color: none;
7 border: none;
8}