Compare commits

...

104 commits

Author SHA1 Message Date
ff4a7705d4
Merge pull request 'v2.3.3' (#19) from devel into stable
All checks were successful
ci/woodpecker/tag/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #19
2023-06-29 10:16:28 -04:00
701ff50ec8
Merge branch 'stable' into devel
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2023-06-29 10:13:12 -04:00
04e79dca2b
Version bump
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2023-06-29 10:04:47 -04:00
b27da2155e
Attempt to generalise serial init
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-29 09:58:20 -04:00
32789a4546
Add catch for uboot
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Apparently, you can just run "boot" in a uboot prompt to get to the
login prompt.
2023-06-27 09:00:06 -04:00
c6c34462bb
Attempt to resolve #10
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-26 13:00:16 -04:00
0a0f502410
Adjust priority so temp checks don't fail
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-26 11:48:54 -04:00
e92b0522b8
Increase complexity of read tree
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-26 11:44:58 -04:00
1300e040d7
Remove reboot from auto_serial
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
We have a whole state machine here. Might as well use it.
2023-06-26 11:29:47 -04:00
a59a3c590d
Catch first major error
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
go_to_* functions fell to catch-all for bad debug command response;
should treat as shell
2023-06-26 11:12:40 -04:00
c403dfa7c1
Attempt to reduce init time
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
To be tested
2023-06-26 11:04:01 -04:00
5d96f6cb2d
v2.3.2 take 2 (#18)
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
Reviewed-on: #18
2023-06-23 15:04:03 -04:00
108132ef9e
Comment out releases for now
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
Clearly, I don't really know what's going on here. So rather than
further pollute the public repo, I'm going to set up another repo to
play with.
2023-06-23 15:01:41 -04:00
5d42a34f16
once again, I am asking for your api key
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2023-06-23 14:52:54 -04:00
41e1f8eda3
third time's the charm?
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2023-06-23 14:47:48 -04:00
d4b47c109f
secrets take 2
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2023-06-23 14:32:45 -04:00
f7b9da5086
add "from secrets" denotation
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2023-06-23 14:27:05 -04:00
dc697e9dfb
Merge pull request 'Modify CI to use secrets' (#17) from devel into stable
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
Reviewed-on: #17
2023-06-23 14:23:14 -04:00
c5bfbc9adb
Modify CI to use secrets
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2023-06-23 14:21:47 -04:00
a198e7b101
Merge pull request 'v2.3.2' (#15) from devel into stable
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
Reviewed-on: #15
2023-06-23 13:59:05 -04:00
820712ef4c
Use env variable for target
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2023-06-23 13:56:21 -04:00
31099ebdcb
Finish CI release pipeline (hopefully)
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-23 13:52:50 -04:00
7294638681
Use single constant for TTY timers
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-23 13:39:50 -04:00
9bd3fc067d
Re-add write-wait
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
The wait on login is no longer necessary, but the wait for write is
still necessary for communication.
2023-06-23 13:32:42 -04:00
7f8d0a8397
Try to further clean up logging
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
2023-06-23 13:12:08 -04:00
abc0c5fb54
Modify badge for PR to 2.3.2
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-23 13:02:27 -04:00
f34356da10
Log data written to file
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-23 11:25:39 -04:00
f5ca4bd2f7
Exchange read logs for write logs
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-23 11:19:41 -04:00
76f3599d24
Improve logging verbosity
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
the -i flag now overrides debug cycle count
2023-06-23 11:12:48 -04:00
c7b99764e1
Add branch-specific build badge
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-22 10:27:24 -04:00
b95fb2713a
Try new CI again
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-22 10:24:38 -04:00
bde028d195
Test CI with known-good value
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-22 10:11:28 -04:00
fcacee8fd7
Test if CI agents are working properly
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-22 10:09:32 -04:00
982e17933c
Add build badge
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-22 09:45:29 -04:00
6855ef7ed7
Remove manual runners in favour of automated CI
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2023-06-22 08:00:08 -04:00
8566de3f70
Reduce CI releases to tag events only
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m5s
ci/woodpecker/push/woodpecker Pipeline was successful
Basic Cargo Checks / docker-build (push) Successful in 5m23s
2023-06-22 07:57:28 -04:00
0430a37cd2
Escape CI command using single quotes
Some checks failed
Basic Cargo Checks / docker-check (push) Successful in 1m9s
ci/woodpecker/push/woodpecker Pipeline failed
Basic Cargo Checks / docker-build (push) Failing after 10m48s
2023-06-22 07:49:14 -04:00
2a51417b80
Modify CI to actually run build
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Basic Cargo Checks / docker-check (push) Successful in 1m14s
Basic Cargo Checks / docker-build (push) Successful in 5m12s
2023-06-22 07:47:42 -04:00
b78e6bb278
Transition CI to Nix
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Basic Cargo Checks / docker-check (push) Successful in 2m3s
Basic Cargo Checks / docker-build (push) Successful in 2m19s
Since I've already got the shell there anyways...
2023-06-22 07:43:28 -04:00
260c166ce9
Update cross-compile documentation
Some checks failed
Basic Cargo Checks / docker-check (push) Successful in 1m19s
ci/woodpecker/push/woodpecker Pipeline failed
Basic Cargo Checks / docker-build (push) Successful in 5m28s
Also, add initial CI test
2023-06-22 07:38:58 -04:00
7aa23f4015
Add repo-relative linker config
Some checks failed
Basic Cargo Checks / docker-check (push) Successful in 1m22s
Basic Cargo Checks / docker-build (push) Failing after 11m3s
2023-06-22 07:08:59 -04:00
c0d13009a4
Update documentation re: cross-compilation
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m26s
Basic Cargo Checks / docker-check (push) Successful in 4m5s
2023-06-21 16:11:41 -04:00
bb1dcbe4a1
Fix saving so that data can be re-imported
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m13s
Basic Cargo Checks / docker-build (push) Successful in 1m52s
2023-06-21 13:24:23 -04:00
0cc47955af
Modify default print statements
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m49s
Basic Cargo Checks / docker-check (push) Successful in 1m11s
2023-06-21 13:13:38 -04:00
9fe4197e52
Determined source of failed imports
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m22s
Basic Cargo Checks / docker-build (push) Successful in 2m9s
Matching a split against a value that contains the split character will
never work.
2023-06-21 13:00:33 -04:00
ad887a536e
Continue debugging failed imports
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m45s
Basic Cargo Checks / docker-check (push) Successful in 3m45s
2023-06-21 12:52:02 -04:00
877b8538eb
Attempt to start debugging data loading
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m20s
Basic Cargo Checks / docker-build (push) Successful in 4m59s
2023-06-21 12:35:26 -04:00
5a7183b154
Attempt smarter handling of init reboot sequence
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m38s
Basic Cargo Checks / docker-build (push) Successful in 5m2s
2023-06-21 12:24:22 -04:00
e0e8562d23
Update documentation re: dependencies
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m42s
Basic Cargo Checks / docker-check (push) Successful in 3m53s
2023-06-21 10:41:07 -04:00
e63ea62512
remove dependencies, version bump
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m19s
Basic Cargo Checks / docker-build (push) Successful in 4m55s
First attempt at fixing bug #11
2023-06-21 10:32:44 -04:00
0c3a7ed0d8
Merge branch 'stable' into devel
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m33s
Basic Cargo Checks / docker-build (push) Successful in 4m59s
2023-06-21 08:30:20 -04:00
62995f8429
Remove temporary notes files
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m51s
Basic Cargo Checks / docker-build (push) Successful in 2m6s
Moving to Forgejo Issues for notetaking
2023-06-20 12:25:44 -04:00
ed897d6ff7
Merge pull request 'v.2.3.1' (#9) from devel into stable
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m40s
Basic Cargo Checks / docker-check (push) Successful in 1m37s
Reviewed-on: #9
2023-06-20 12:24:22 -04:00
e73dac51f5
Version bump
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m33s
Basic Cargo Checks / docker-check (push) Successful in 3m53s
Also, fix readme typo
2023-06-20 10:59:09 -04:00
c501f6c5e6
Add readme
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m23s
Basic Cargo Checks / docker-build (push) Successful in 1m59s
2023-06-20 10:31:36 -04:00
10606b14ed
Add additional CLI arguments, serial fallback
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m53s
Basic Cargo Checks / docker-build (push) Successful in 2m10s
2023-06-20 09:43:04 -04:00
31a4da2773 Merge pull request 'v2.3.0' (#5) from devel into stable
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m45s
Basic Cargo Checks / docker-build (push) Successful in 2m7s
Reviewed-on: #5
2023-06-19 15:34:17 -04:00
b935fdf043
Increase verbosity in initialisation
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m25s
Basic Cargo Checks / docker-check (push) Successful in 3m35s
Also, version number bump
2023-06-19 15:18:40 -04:00
d522fac9b8
Move iteration count ask to beginning of loop
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m25s
Basic Cargo Checks / docker-check (push) Successful in 3m31s
2023-06-19 15:09:56 -04:00
f1d8af8e3d
Add end handling
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m24s
Basic Cargo Checks / docker-check (push) Successful in 3m25s
2023-06-19 14:58:15 -04:00
6280603232
Add parsing for blank lines
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m38s
Basic Cargo Checks / docker-build (push) Successful in 2m1s
2023-06-19 14:52:24 -04:00
ab560b926a
Properly exit get_serial
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m45s
Basic Cargo Checks / docker-build (push) Successful in 2m3s
2023-06-19 14:47:28 -04:00
d24b0edcb0
Start debugging partial function
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m45s
Basic Cargo Checks / docker-check (push) Successful in 3m31s
2023-06-19 14:45:58 -04:00
94cbba27cf
Change priority of serial
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m57s
Basic Cargo Checks / docker-check (push) Successful in 2m1s
2023-06-19 14:35:09 -04:00
5773952538
Multithread serial acquisition
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m53s
Basic Cargo Checks / docker-build (push) Successful in 2m10s
2023-06-19 14:31:14 -04:00
ebda011bc7
Add parsing for DebugInit
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m24s
Basic Cargo Checks / docker-check (push) Successful in 3m33s
2023-06-19 14:28:03 -04:00
3070e42945
Remember to trim string to remove whitespace
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m47s
Basic Cargo Checks / docker-build (push) Successful in 2m2s
2023-06-19 14:19:09 -04:00
9a7700dee4
First rough shot at using built-in serial
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m28s
Basic Cargo Checks / docker-check (push) Successful in 3m35s
2023-06-19 14:16:14 -04:00
9c1d2ad049
Merge branch 'devel' of forgejo:blizzardfinnegan/seymourLifeRust into devel
Some checks failed
Basic Cargo Checks / docker-build (push) Failing after 15s
Basic Cargo Checks / docker-check (push) Successful in 1m23s
2023-06-19 13:43:01 -04:00
f1a4b4b251
Add notes for auto-serial check 2023-06-19 13:42:26 -04:00
57968c3167 Merge pull request 'v2.2.0' (#4) from devel into stable
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m29s
Basic Cargo Checks / docker-check (push) Successful in 3m36s
Reviewed-on: #4
2023-06-19 10:57:21 -04:00
7b28751871
Deprioritise misc responses
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m12s
Basic Cargo Checks / docker-build (push) Successful in 4m58s
There's a lot of these, and most are shutdown or bootup logs. Will still
log, but won't show in the default mode
2023-06-19 10:31:26 -04:00
8fb05a3010
Mute unexpected response for DebugInit and empty
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m54s
Basic Cargo Checks / docker-build (push) Successful in 2m3s
2023-06-19 10:14:59 -04:00
35d9c7b6fb
Add debug menu init and blank newline handling
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 2m2s
Basic Cargo Checks / docker-build (push) Successful in 2m16s
2023-06-19 10:05:03 -04:00
3b352472dc
Log "other" TTY Response
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m12s
Basic Cargo Checks / docker-build (push) Successful in 4m54s
2023-06-19 09:45:27 -04:00
24e742e0a2
Continue debugging
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m25s
Basic Cargo Checks / docker-check (push) Successful in 4m28s
2023-06-19 09:22:29 -04:00
5182e4431b
Add debug tool
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m51s
Basic Cargo Checks / docker-build (push) Successful in 2m7s
Not sure why Unexpected Response error always shows. trying to track it
down.
2023-06-19 09:08:37 -04:00
6f361644cd
Merge branch 'devel' of forgejo:blizzardfinnegan/seymourLifeRust into devel
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m29s
Basic Cargo Checks / docker-check (push) Successful in 3m33s
2023-06-17 15:42:11 -04:00
4a83509bf8
Add Nix dev environment 2023-06-17 15:41:35 -04:00
70da5adc2b
Remove some logging for storage purposes
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 1m14s
Basic Cargo Checks / docker-build (push) Successful in 4m55s
Also, stored a particularly useful log in the repo for easier analysis
2023-06-16 14:00:43 -04:00
f9f819d5fd
Rewrite goto functions, remove extra return type
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 4m59s
Basic Cargo Checks / docker-check (push) Successful in 3m44s
Goto functions are now smarter, and can handle empty/bad reads from the
seymour. Also simplified the DebugMenu checks in tty
2023-06-16 10:57:16 -04:00
823543ff03
Update init and project name
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m24s
Basic Cargo Checks / docker-check (push) Successful in 3m32s
Project is no longer Proof Of Concept.
Modified Device init to be more consistent.
Started explicit typing of variables.
2023-06-16 09:53:46 -04:00
c2ea32f2c9
Attempt to debug bad temp cycle check
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 1m28s
Basic Cargo Checks / docker-check (push) Successful in 32s
2023-06-15 17:02:12 -04:00
c1e3efdb8c
revert previous change
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 52s
Basic Cargo Checks / docker-build (push) Successful in 2m19s
2023-06-14 15:31:37 -04:00
e666931d1a
take advantage of new runners
Some checks failed
Basic Cargo Checks / docker-check (push) Failing after 54s
Basic Cargo Checks / docker-build (push) Failing after 54s
2023-06-14 15:26:52 -04:00
a2701de3a0
Remove excess argument for test
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 53s
Basic Cargo Checks / docker-build (push) Successful in 4m55s
2023-06-14 14:36:19 -04:00
4bc8383016
Continue tweaking reboot algorithm
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 47s
Basic Cargo Checks / docker-build (push) Successful in 4m54s
2023-06-14 13:31:39 -04:00
714c198f54
Add proper password prompt parsing functionality
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 50s
Basic Cargo Checks / docker-build (push) Successful in 3m57s
2023-06-14 10:14:04 -04:00
fe7cd6d510
Finish temp algorithm, update login algorithm
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 46s
Basic Cargo Checks / docker-build (push) Successful in 3m57s
Bash often drops beginning characters in the first command sent if it is
sent too soon after being logged in. Solution is to wait 1s after
logging in
2023-06-13 15:46:09 -04:00
7a601ebc6e
Add back is_temp_running
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 2m37s
Basic Cargo Checks / docker-build (push) Successful in 13m52s
2023-06-13 09:32:44 -04:00
c1757ce169
Continue reconfiguring for new cycle structure
Some checks failed
Basic Cargo Checks / docker-build (push) Failing after 53s
Basic Cargo Checks / docker-check (push) Failing after 2m34s
2023-06-13 09:26:25 -04:00
5845642101
Version bump
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 51s
Basic Cargo Checks / docker-check (push) Successful in 11m30s
2023-06-13 08:30:40 -04:00
c38b476f9f
Start dealing with reboot
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 3m55s
Basic Cargo Checks / docker-check (push) Successful in 11m29s
2023-06-12 16:06:23 -04:00
7cf87ee58a
Add notes for rebooting status
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 50s
Basic Cargo Checks / docker-check (push) Successful in 10m52s
Turns out, long shutdown-before-reboot is why things get desynced after
a while. There's a random thread that can wait up to 10s before dying,
and that's what causes the "drops", which are actually more akin to
"desync"s.
2023-06-12 15:02:51 -04:00
6f1ac51630
Attempt to fix "drop"
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 51s
Basic Cargo Checks / docker-check (push) Successful in 11m36s
Remove infinite loop from is_temp_running, add logging
2023-06-12 13:31:09 -04:00
b351228df4
Reduce boot time and bp time
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 56s
Basic Cargo Checks / docker-check (push) Successful in 11m49s
2023-06-12 12:58:23 -04:00
b0dad705bc
Fix borrow issue
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 48s
Basic Cargo Checks / docker-check (push) Successful in 2m32s
2023-06-12 08:45:47 -04:00
40c33a8d79
Increase logging verbosity
Some checks failed
Basic Cargo Checks / docker-build (push) Failing after 51s
Basic Cargo Checks / docker-check (push) Failing after 2m35s
2023-06-12 08:42:36 -04:00
42944f2d3c
set debug iteration count
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 29s
Basic Cargo Checks / docker-build (push) Successful in 3m44s
Debug mode now requires no user input whatsoever
2023-06-09 11:07:38 -04:00
37accb8a0f
Version bump
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 31s
Basic Cargo Checks / docker-check (push) Successful in 2m31s
2023-06-09 11:04:20 -04:00
a235a84dad
Add init logging in debug mode
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 31s
Basic Cargo Checks / docker-build (push) Successful in 30s
Added log call for init of devices. The whole point of debug mode is
to get more info, so not saying what you're doing isn't super helpful.
2023-06-09 10:54:08 -04:00
3cc2f05b82
Fix weird spacing issue in init script
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 30s
Basic Cargo Checks / docker-build (push) Successful in 3m44s
2023-06-09 10:52:14 -04:00
980a8432e6
Resolve init file write error
All checks were successful
Basic Cargo Checks / docker-build (push) Successful in 29s
Basic Cargo Checks / docker-check (push) Successful in 2m30s
Was originally trying to create a text file in the /dev path, which is
not possible. Have now used string parsing to resolve this issue.
2023-06-09 10:46:00 -04:00
7f3e4326ea
Update build Cargo version number
All checks were successful
Basic Cargo Checks / docker-check (push) Successful in 27s
Basic Cargo Checks / docker-build (push) Successful in 3m41s
2023-06-09 10:19:30 -04:00
14 changed files with 1016 additions and 354 deletions

2
.cargo/config.toml Normal file
View file

@ -0,0 +1,2 @@
[target.aarch64-unknown-linux-musl]
linker = "lld"

View file

@ -1,43 +0,0 @@
name: Basic Cargo Checks
run-name: ${{ github.actor }} is testing
on: [push]
jobs:
docker-check:
runs-on: docker
steps:
- name: Grab misc. dependencies
run: |
apt update && apt install -y librust-libudev-sys-dev build-essential
- name: Check out repository code
uses: actions/checkout@v3
- name: Grab Rust toolchain
uses: https://github.com/actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
target: aarch64-unknown-linux-gnu
override: true
- name: Run check
uses: https://github.com/actions-rs/cargo@v1
with:
command: check
docker-build:
runs-on: docker
steps:
- name: Grab misc. dependencies
run: |
apt update && apt install -y librust-libudev-sys-dev build-essential
- name: Check out repository code
uses: actions/checkout@v3
- name: Grab Rust toolchain
uses: https://github.com/actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
target: aarch64-unknown-linux-gnu
override: true
- name: Run check
uses: https://github.com/actions-rs/cargo@v1
with:
command: build
args: --release

4
.gitignore vendored
View file

@ -1,3 +1,5 @@
/target
/logs
/output
/output
.cargo
.rustup

23
.woodpecker.yml Normal file
View file

@ -0,0 +1,23 @@
pipeline:
build:
image: nixos/nix:latest
commands:
- nix-shell --run 'cargo build --release --target aarch64-unknown-linux-musl'
# publish:
# when:
# event: tag
# image: woodpeckerci/plugin-gitea-release
# settings:
# base_url: https://git.blizzard.systems
# files:
# - "target/aarch64-unknown-linux-musl/release/seymour_life"
# checksum:
# - "target/aarch64-unknown-linux-musl/release/seymour_life"
# api_key: ${FORGEJO_API}
# secrets:
# - source: forgejo_api
# target: FORGEJO_API
# target: ${CI_COMMIT_TAG}
# draft: true
# prerelease: true
# title: .woodpecker/title.txt

1
.woodpecker/title.txt Normal file
View file

@ -0,0 +1 @@
v2.3.2

38
Cargo.lock generated
View file

@ -302,6 +302,12 @@ dependencies = [
"log",
]
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "heck"
version = "0.4.1"
@ -382,26 +388,6 @@ version = "0.2.142"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
[[package]]
name = "libudev"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0"
dependencies = [
"libc",
"libudev-sys",
]
[[package]]
name = "libudev-sys"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
dependencies = [
"libc",
"pkg-config",
]
[[package]]
name = "link-cplusplus"
version = "1.0.8"
@ -486,12 +472,6 @@ version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "pkg-config"
version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "proc-macro-hack"
version = "0.5.20+deprecated"
@ -630,7 +610,6 @@ dependencies = [
"IOKit-sys",
"bitflags",
"cfg-if",
"libudev",
"mach 0.3.2",
"nix",
"regex",
@ -638,13 +617,14 @@ dependencies = [
]
[[package]]
name = "seymour_poc_rust"
version = "2.0.1"
name = "seymour_life"
version = "2.3.3"
dependencies = [
"chrono",
"clap",
"derivative",
"fern",
"glob",
"log",
"once_cell",
"rppal",

View file

@ -1,15 +1,18 @@
#This feature is currently limited to nightly versions of cargo.
#cargo-features = ["per-package-target"]
[package]
name = "seymour_poc_rust"
version = "2.0.1"
name = "seymour_life"
version = "2.3.3"
edition = "2021"
#This feature is currently limited to nightly versions of cargo.
#forced-target="aarch64-unknown-linux-musl"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rppal = "0.14.1"
serialport = "4.2.0"
serialport = { version = "4.2.0", default-features = false }
log = "0.4"
fern = "0.6.2"
chrono = "0.4.24"
@ -17,6 +20,7 @@ once_cell = "1.17.1"
derivative = "2.2.0"
time = "0.2.23"
clap = { version = "4.3.2", features = ["derive"] }
glob = "0.3.1"
[dev-dependencies]
time = "0.2.23"

61
README.md Normal file
View file

@ -0,0 +1,61 @@
[![status-badge](https://ci.blizzard.systems/api/badges/blizzardfinnegan/seymourLifeRust/status.svg?branch=stable)](https://ci.blizzard.systems/blizzardfinnegan/seymourLifeRust)
# Seymour Life
This is a personal/professional project, which makes use of serial communications (tty over USB via UART) and Raspberry Pi GPIO to simulate long term use of a Seymour device.
Note that this project will ONLY run properly on a Raspberry Pi. It is developed on, and tested for, the Raspberry Pi 400. This should also be compatible with the Raspberry Pi 4, and Raspberry Pi 3, although they have not been explicitly tested. Older models of Raspberry Pi may work properly, however as this project is originally intended for the `aarch64`/`ARM64` architecture, and older compatibility will not be tested.
## Install
### Precompiled Binary
Pre-compiled binaries can be found in the [releases tab](https://git.blizzard.systems/blizzardfinnegan/seymourLifeRust/releases/latest). Download the preferred version to your preferred directory, then run the following command to make the code executable:
```bash
sudo chmod u+x ./seymour_life
```
To run the binary, simply run:
```bash
sudo ./seymour_life
```
Note that this command MUST be run as `sudo`/root, due to the way it interacts with GPIO. For more information, please see [the GPIO documentation](https://github.com/golemparts/rppal).
## Build From Source
To build this project from source *ON A RASPBERRY PI*, first, download the repository. This can be done by using the Download ZIP button, or running the following command in a terminal where `git` is installed:
```bash
git clone https://git.blizzard.systems/blizzardfinnegan/seymourLifeRust
```
Once the repository has been downloaded, the project can be built with `cargo`. This can be done using any of the listed install methods on [the Rust install website](https://rustup.rs/).
Once cargo has been installed, run the following to build the project:
```bash
cargo build --release
```
The runnable command can then be run by the following:
```bash
sudo ./target/release/seymour_life
```
You can also build without the `--release` flag, which wil take less time, but will be less optimised for the hardware. If you do this, substitue `./target/release/seymour_life` for `./target/debug/seymour_life` in the above command.
## Cross-Compilation
Cross compilation is possible with this project, if you do not have a Raspberry Pi available specifically for compilation. Compilation directly on the Pi is rather intensive, and takes significantly longer than cross-compiling.
If you are compiling on Linux, cross-compilation has a dependency of `lld`. This can be found in your distribution's package manager, or directly distributed by LLVM. For Nix users, a predefined `shell.nix` file has been provided for your convenience.
If you are compiling on Windows, to safely cross-compile, you must modify the `.cargo/config.toml` file. Replace `lld` with `rust-lld`, then cross-compilation should work properly.
```bash
cargo build --target aarch64-unknown-linux-musl
# OR
cargo build --release --target aarch64-unknown-linux-musl
```

View file

@ -1,2 +0,0 @@
librust-udev-sys-dev
pkg-config

View file

@ -0,0 +1,264 @@
2023-06-16T13:24:21.325337369-04:00 - [INFO, seymour_life_rust] - Seymour Life Testing version: 2.2.0
2023-06-16T13:24:21.332725203-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0. This may take a moment...
2023-06-16T13:24:21.334390641-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0. This may take a moment...
2023-06-16T13:24:21.334981706-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0. This may take a moment...
2023-06-16T13:24:21.334946688-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0. This may take a moment...
2023-06-16T13:24:21.338485005-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0. This may take a moment...
2023-06-16T13:24:21.339429546-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0. This may take a moment...
2023-06-16T13:24:21.342069340-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0. This may take a moment...
2023-06-16T13:24:21.345380402-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0. This may take a moment...
2023-06-16T13:24:21.346291314-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0...
2023-06-16T13:24:21.348997033-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0. This may take a moment...
2023-06-16T13:24:21.348832313-04:00 - [INFO, seymour_life_rust] - Testing port /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0. This may take a moment...
2023-06-16T13:24:21.350397252-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0...
2023-06-16T13:24:21.354512283-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0...
2023-06-16T13:24:21.354555227-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0...
2023-06-16T13:24:21.356737602-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:21.356767268-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0...
2023-06-16T13:24:21.361574936-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0...
2023-06-16T13:24:21.361613528-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0...
2023-06-16T13:24:21.363938697-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0...
2023-06-16T13:24:21.364785888-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0...
2023-06-16T13:24:22.353277040-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\0\nNormal Boot\r\nHit any key to stop autoboot: 0 \u{8}\u{8}\u{8} 0\r\nu-boot=> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:22.353534518-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0 is valid port!
2023-06-16T13:24:22.353576536-04:00 - [TRACE, seymour_life_rust::tty] - writing Quit to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0...
2023-06-16T13:24:22.355662412-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of " \r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.355762318-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0 is valid port!
2023-06-16T13:24:22.356654119-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.356813672-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.356864357-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.356906967-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.356945559-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.356985114-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.357024188-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.357063946-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.357107446-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0...
2023-06-16T13:24:22.357165852-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of " \r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.357251406-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0 is valid port!
2023-06-16T13:24:22.357305239-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.357424015-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.357472755-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.357512199-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.357549587-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.357588716-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.357627067-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.357666030-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.357706177-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0...
2023-06-16T13:24:22.359582001-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.359679389-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0 is valid port!
2023-06-16T13:24:22.359732721-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.359928218-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.359981273-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.360021161-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.360059179-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.360148919-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.360190029-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.360229288-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.360269880-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0...
2023-06-16T13:24:22.364684165-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\0 \r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.364785719-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0 is valid port!
2023-06-16T13:24:22.364705535-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of " \r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.364908847-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0 is valid port!
2023-06-16T13:24:22.364850218-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.364974291-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.365107992-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.365155510-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.365217472-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.365270027-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.365320730-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.365372803-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.365423673-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.365474709-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.365527412-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0...
2023-06-16T13:24:22.365158269-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.365630614-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.365670484-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.365711243-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.365750909-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.365790612-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.365831037-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0...
2023-06-16T13:24:22.369334447-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of " \r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.369416280-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0 is valid port!
2023-06-16T13:24:22.369466834-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.369578981-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.369670591-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.369712349-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.369749978-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.369788663-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.369826477-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.369865143-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.369905143-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0...
2023-06-16T13:24:22.370206823-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of " \r\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:22.370292637-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0 is valid port!
2023-06-16T13:24:22.370343729-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.370458560-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.370507078-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.370546448-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.370583688-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.370622465-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.370660613-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.370698964-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.370738741-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0...
2023-06-16T13:24:22.553102264-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0 is valid port!
2023-06-16T13:24:22.553205374-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:22.553326650-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:22.553375871-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:22.553415871-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:22.553453741-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:22.553492777-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:22.553530240-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:22.553569239-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:22.553610090-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:23.356013718-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "q\r\nUnknown command 'q' - try 'help'\r\nu-boot=> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:23.356199919-04:00 - [TRACE, seymour_life_rust::tty] - writing Newline to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0...
2023-06-16T13:24:23.936752728-04:00 - [DEBUG, seymour_life_rust] - /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0 is valid port!
2023-06-16T13:24:23.936934521-04:00 - [DEBUG, seymour_life_rust::device] - "uninitialised"
2023-06-16T13:24:23.937176314-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0\nSuccessful BP tests: 0\nSuccessful temp tests: 0\n"
2023-06-16T13:24:23.937228554-04:00 - [TRACE, seymour_life_rust::device] - "Reboots: 0"
2023-06-16T13:24:23.937269794-04:00 - [TRACE, seymour_life_rust::device] - "Reboots" value: [0]
2023-06-16T13:24:23.937308701-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests: 0"
2023-06-16T13:24:23.937347719-04:00 - [TRACE, seymour_life_rust::device] - "Successful BP tests" value: [0]
2023-06-16T13:24:23.937386107-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests: 0"
2023-06-16T13:24:23.937425940-04:00 - [TRACE, seymour_life_rust::device] - "Successful temp tests" value: [0]
2023-06-16T13:24:23.937470384-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0...
2023-06-16T13:24:24.358985874-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\nUnknown command 'q' - try 'help'\r\nu-boot=> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:24.359177982-04:00 - [ERROR, seymour_life_rust::device] - Unknown state for TTY TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.3:1.0-port0" }!!! Consult logs immediately.
2023-06-16T13:24:25.360298184-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Sun Jun 11 00:42:39 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.360489959-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.360586291-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.360663364-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0...
2023-06-16T13:24:25.360741362-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Thu Jun 15 09:15:47 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.360839750-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.360978970-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.361114968-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0...
2023-06-16T13:24:25.362313339-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Sun Jun 11 00:28:04 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.362484114-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.362575594-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.362652704-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0...
2023-06-16T13:24:25.367849441-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Sun Jun 11 00:56:47 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.368084956-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.368174547-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.368269435-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0...
2023-06-16T13:24:25.368280342-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Sun Jun 11 01:01:08 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.368363674-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.368432821-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.368550542-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0...
2023-06-16T13:24:25.372596018-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Sun Jun 11 00:47:31 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.372769534-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.372858440-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.372934865-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0...
2023-06-16T13:24:25.375055407-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Thu Jun 15 20:49:41 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:25.375237700-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.375334643-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.375411013-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0...
2023-06-16T13:24:25.557097398-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:25.557296913-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:25.557379616-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:26.568658516-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:26.610508925-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8python3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:26.610670997-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:26.610823513-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:26.610902919-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0...
2023-06-16T13:24:26.635031576-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8ython3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:26.635233406-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:26.635330349-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:26.635402885-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0...
2023-06-16T13:24:27.069456557-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:27.188577455-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8python3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:27.188883358-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:27.188974579-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:27.189053614-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0...
2023-06-16T13:24:27.210484478-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8ython3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:27.210824158-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:27.210907972-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:27.210970026-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0...
2023-06-16T13:24:27.231532384-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8ython3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:27.231821806-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:27.231910323-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:27.231979193-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0...
2023-06-16T13:24:27.232081413-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8ython3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:27.232402112-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:27.232481111-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:27.232543628-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0...
2023-06-16T13:24:27.237853808-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\u{1b}8ython3 -m debugmenu; shutdown -r now\r\nroot@imx8mplus-seymour-mel:~# python3 -m debugmenu; shutdown -r now\r\nLoading App-Framework from: libapp-framework.so.0.01.00\r\n\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:27.238178618-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:27.238273191-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:27.238340579-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0...
2023-06-16T13:24:27.499435661-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:27.499701990-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:27.499787489-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0...
2023-06-16T13:24:27.570194729-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:27.772097088-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> \r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:27.772521156-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0...
2023-06-16T13:24:27.962626155-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> \r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:27.962938539-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0...
2023-06-16T13:24:28.070936955-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:28.191593793-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.191799808-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0...
2023-06-16T13:24:28.214286786-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.214407414-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0...
2023-06-16T13:24:28.234680906-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.234810478-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0...
2023-06-16T13:24:28.235528337-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.235729483-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0...
2023-06-16T13:24:28.241015237-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.241136050-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0...
2023-06-16T13:24:28.571600591-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:28.767729907-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:28.767923015-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:28.768003866-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0...
2023-06-16T13:24:28.775642881-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.775835045-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0...
2023-06-16T13:24:28.965444866-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:28.965630567-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0...
2023-06-16T13:24:29.072294448-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:29.194344987-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:29.194530725-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0...
2023-06-16T13:24:29.217018795-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:29.217122145-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0...
2023-06-16T13:24:29.237575949-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:29.237682688-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0...
2023-06-16T13:24:29.238352863-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:29.238449325-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0...
2023-06-16T13:24:29.243788745-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:29.243882484-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0...
2023-06-16T13:24:29.573068322-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:29.769913868-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0...
2023-06-16T13:24:29.778399111-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:29.968241114-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:30.073820511-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:30.197146679-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:30.219818172-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:30.240324253-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:30.241143352-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.3.2:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:30.246195221-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.1:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:30.574508720-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:30.772775781-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0" }. Possible read error.
2023-06-16T13:24:30.772934297-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0...
2023-06-16T13:24:31.075258075-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:31.575960987-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:31.775642249-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.1.4:1.0-port0" }. Possible read error.
2023-06-16T13:24:32.076730194-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:32.577459105-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:33.078236348-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:33.578938852-04:00 - [DEBUG, seymour_life_rust::tty] - Read an empty string from device TTY { Serial port name: "platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0" }. Possible read error.
2023-06-16T13:24:34.513333606-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\r\nimx8mplus-seymour-mel ttymxc2\r\n\r\nHillrom Front Line Care Embedded Linux for mel 12 imx8mplus-seymour-mel ttymxc2\r\n\r\nimx8mplus-seymour-mel login: " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern LoginPrompt
2023-06-16T13:24:34.513549158-04:00 - [TRACE, seymour_life_rust::tty] - writing Login to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:37.516918467-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root\r\r\nLast login: Fri Jun 16 13:04:18 UTC 2023\r\n\u{1b}7\u{1b}[r\u{1b}[999;999H\u{1b}[6n" from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern PreShellPrompt
2023-06-16T13:24:38.255944578-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "root@imx8mplus-seymour-mel:~# " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern ShellPrompt
2023-06-16T13:24:38.256092890-04:00 - [TRACE, seymour_life_rust::tty] - writing DebugMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:39.503439425-04:00 - [ERROR, seymour_life_rust::device] - Unexpected response from device uninitialised!
2023-06-16T13:24:39.503664681-04:00 - [ERROR, seymour_life_rust::device] - Unsure how to continue. Expect data from device uninitialised to be erratic until next cycle.
2023-06-16T13:24:39.503739235-04:00 - [TRACE, seymour_life_rust::tty] - writing LifecycleMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:40.739795958-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nDebug Menu\r\n========================================\r\nThis menu is defined in debugmenu.xml. Add submenu tags to this file to add new\r\ncategories for your debug programs and scripts.\r\n----------------------------------------\r\na) Menu Demo\r\nb) Alarms Manager Menu\r\nB) Barcode Manager Menu\r\nc) Connectivity Manager Menu\r\nC) SCRM Menu\r\nd) Software Update Menu\r\nD) Pulse Rate Menu\r\ne) Events Menu\r\nE) Respiration Menu\r\nf) Configuration Application Menu\r\nh) HostProxy Menu\r\nH) HL7Proxy Menu\r\nl) LDAP/Active Directory Menu\r\nL) Life Cycle Testing Menu\r\nm) ModManager Menu\r\nM) Manual Set Parameters Menu\r\nn) NIBP Menu\r\nP) Power Manager Menu\r\np) PDM Menu\r\nr) Radio Menu\r\nR) Braun Menu\r\ns) SpO2 Menu\r\nS) SvcMonProxy Menu\r\nT) NTPProxy Menu\r\nu) UI Menu\r\nU) SureTemp Menu\r\nv) Connector Test\r\nx) Proxy Events Menu\r\ny) SysCtrl Menu\r\nw) Weight App Manager Menu\r\nW) BEST menu\r\nz) Print Manager Debug Menu\r\nZ) LCD Test Menu\r\nv) Debug Menu Verbosity\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> \r\n\r\nLife Cycle Testing Menu\r\n========================================\r\na) EEPROM Data\r\nB) Screen Brightness Menu\r\nb) Power Down Device\r\nc) Reboot Device\r\nd) Check UI Started\r\ne) Read Battery Charge Level\r\nf) Nurse Call On\r\ng) Nurse Call Off\r\nh) Display Current Readings\r\nH) Display Cycle Counts\r\ni) Force Log Rotation\r\nj) Display Patient ID\r\nk) Activate Wireless Networking\r\nl) Deactivate Wireless Networking\r\nN) Start NIBP Reading\r\nn) Check NIBP In Progress\r\np) Bluetooth Info\r\nr) WiFi Radio Info\r\ns) Enable and Start SSH\r\nt) Disable and Stop SSH\r\nu) Check WACP USB Connection\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:40.740159952-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessMenu to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:41.742733809-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n\r\nSet Screen Brightness\r\n****************************************\r\n1) 10%\r\n2) 20%\r\n3) 30%\r\n4) 40%\r\n5) 50%\r\n6) 60%\r\n7) 70%\r\n8) 80%\r\n9) 90%\r\n0) 100%\r\n----------------------------------------\r\n\\) Back\r\nq) Quit\r\n?) Redraw menu\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:41.742998323-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessLow to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:42.745470643-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern DebugMenu
2023-06-16T13:24:42.745983006-04:00 - [INFO, seymour_life_rust] - --------------------------------------
2023-06-16T13:24:42.746109393-04:00 - [INFO, seymour_life_rust] - Number of devices detected: 9
2023-06-16T13:24:42.746264298-04:00 - [INFO, seymour_life_rust] - --------------------------------------
2023-06-16T13:24:42.746362074-04:00 - [TRACE, seymour_life_rust::tty] - writing BrightnessHigh to tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0...
2023-06-16T13:24:43.748400808-04:00 - [TRACE, seymour_life_rust::tty] - Successful read of "\r\n> " from tty /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2.2.3:1.0-port0, which matches pattern DebugMenu

15
shell.nix Normal file
View file

@ -0,0 +1,15 @@
{pkgs ? import <nixpkgs> {} }:
pkgs.mkShell rec {
buildInputs = with pkgs; [ lld rustup ];
RUSTUP_HOME = toString ./.rustup;
CARGO_HOME = toString ./.cargo;
RUSTUP_TOOLCHAIN = "stable";
HOST_ARCH = "x86_64-unknown-linux-gnu";
CARGO_BUILD_TARGET = "aarch64-unknown-linux-musl";
shellHook = ''
export PATH=$PATH:${CARGO_HOME}/bin
export PATH=$PATH:${RUSTUP_HOME}/toolchains/${RUSTUP_TOOLCHAIN}-${HOST_ARCH}/bin/
rustup target add "${CARGO_BUILD_TARGET}"
'';
}

View file

@ -2,19 +2,22 @@ use std::{fs::{self, File}, path::Path, io::Write, thread, time::Duration};
use crate::tty::{TTY, Response,Command};
use rppal::gpio::{Gpio,OutputPin};
const BOOT_TIME:Duration = Duration::new(60, 0);
const BP_RUN:Duration = Duration::new(75, 0);
const REBOOTS_SECTION: &str = "Reboots: ";
const BP_SECTION: &str = "Successful BP tests: ";
const TEMP_SECTION: &str = "Successful temp tests: ";
const TEMP_WAIT:Duration = Duration::from_secs(3);
const REBOOTS_SECTION: &str = "Reboots";
const BP_SECTION: &str = "Successful BP tests";
const TEMP_SECTION: &str = "Successful temp tests";
const OUTPUT_FOLDER: &str = "output/";
const SECTION_SEPARATOR: &str = ": ";
const UNINITIALISED_SERIAL: &str = "uninitialised";
const SERIAL_HEADER: &str = "DtCtrlCfgDeviceSerialNum";
#[derive(PartialEq,Debug)]
pub enum State{
Shutdown,
LoginPrompt,
DebugMenu,
LifecycleMenu,
BrightnessMenu
BrightnessMenu,
ShellPrompt
}
#[derive(Debug)]
@ -28,6 +31,8 @@ pub struct Device{
current_state: State,
reboots: u64,
temps: u64,
init_temps: u64,
temp_offset: u64,
bps: u64
}
@ -36,11 +41,11 @@ impl Device{
if ! Path::new(&OUTPUT_FOLDER).is_dir(){
_ = fs::create_dir(&OUTPUT_FOLDER);
};
log::debug!("{:?}",&self.serial);
let output_path = OUTPUT_FOLDER.to_owned() + &self.serial + ".txt";
//log::debug!("{:?}",&self.serial);
let output_path:String = OUTPUT_FOLDER.to_owned() + &self.serial + ".txt";
if ! Path::new(&output_path).exists(){
log::debug!("Creating file {}",output_path);
let temp = fs::File::create(&output_path);
log::debug!("Creating file {}",&output_path);
let temp:Result<File, std::io::Error> = fs::File::create(&output_path);
match temp{
Ok(file) => {
self.output_file = Some(file);
@ -52,35 +57,40 @@ impl Device{
}
}
else {
let temp = std::fs::read_to_string(output_path);
let temp:Result<String, std::io::Error> = std::fs::read_to_string(output_path);
match temp{
Ok(file_contents) =>{
let file_lines = file_contents.split("\n");
let file_lines:Vec<&str> = file_contents.split("\n").collect();
log::trace!("{:?}",file_contents);
for line in file_lines {
if line.len() > 0{
log::trace!("{:?}",line);
let section_and_data:Vec<&str> = line.split(": ").collect();
let section = section_and_data[0];
let possible_value = section_and_data[1].trim().parse::<u64>();
//log::trace!("{:?}",line);
let section_and_data:Vec<&str> = line.split(SECTION_SEPARATOR).collect();
let section:&str = section_and_data[0];
let possible_value:Result<u64, std::num::ParseIntError> = section_and_data[1].trim().parse::<u64>();
match possible_value{
Ok(value) => {
log::trace!("{:?} value: [{:?}]",section,value);
//log::trace!("{:?} value: [{:?}]",section,value);
match section {
REBOOTS_SECTION => {
self.reboots = value;
//log::trace!("Reboots set to {:?}",self.reboots);
},
BP_SECTION => {
self.bps = value;
self.bps = value.clone();
//log::trace!("BPS set to {:?}",self.bps);
},
TEMP_SECTION => {
self.temps = value;
self.temp_offset = value;
//log::trace!("Temp offset set to {:?}",self.temp_offset);
},
_ => ()
_ => {
log::warn!("Invalid import value: [{:?}]. Please ensure that the output directory is clean.",section_and_data);
}
};
}
Err(_) => {
log::warn!("Unable to parse value [{}] into integer",section_and_data[1]);
log::warn!("Unable to parse value [{:?}] into integer",section_and_data);
}
}
};
@ -104,15 +114,55 @@ impl Device{
_ = usb_port.read_from_device(None);
initial_state = State::LoginPrompt;
},
Response::Other | Response::Empty | Response::ShellPrompt
| Response::LoginPrompt | Response::Rebooting =>
initial_state = State::LoginPrompt,
Response::BPOn | Response::BPOff | Response::TempFailed
| Response::TempSuccess =>
initial_state = State::LifecycleMenu,
Response::DebugMenuReady | Response::DebugMenuWithContinuedMessage=>
initial_state = State::DebugMenu,
}
Response::UBoot=>{
usb_port.write_to_device(Command::Boot);
while usb_port.read_from_device(None) != Response::LoginPrompt {}
initial_state = State::LoginPrompt;
},
//Response::Empty parsing here is potentially in bad faith
Response::Other | Response::Empty | Response::ShellPrompt | Response::FailedDebugMenu | Response::DebugInit |
Response::LoginPrompt | Response::ShuttingDown | Response::Rebooting | Response::PreShellPrompt =>
initial_state = State::LoginPrompt,
Response::BPOn | Response::BPOff | Response::TempCount(_) |
Response::DebugMenu=>{
usb_port.write_to_device(Command::Quit);
match usb_port.read_from_device(None){
Response::ShuttingDown | Response::Rebooting => {
while usb_port.read_from_device(None) != Response::LoginPrompt {}
initial_state = State::LoginPrompt;
},
Response::ShellPrompt => {
initial_state = State::ShellPrompt;
},
Response::DebugMenu => {
usb_port.write_to_device(Command::Newline);
match usb_port.read_from_device(None) {
Response::DebugMenu | Response::ShellPrompt => {
initial_state = State::ShellPrompt;
},
_ => {
log::error!("Unknown state for TTY {:?}!!! Consult logs immediately.",usb_port);
log::debug!("Last known state: DebugMenu.");
log::debug!("Assumed but incorrect current state: successfully exited debug menu");
return Err("Failed TTY init. Unknown state, cannot trust.".to_string());
}
};
},
_ => {
log::error!("Unknown state for TTY {:?}!!! Consult logs immediately.",usb_port);
log::debug!("Last known state: DebugMenu.");
log::debug!("Assumed but incorrect current state: attempted to exit debug menu");
return Err("Failed TTY init. Unknown state, cannot trust.".to_string());
}
};
},
//Serial response shouldn't exist, emptynewline is already filtered in main
Response::Serial(_) | Response::EmptyNewline => {
log::error!("Unknown state for TTY {:?}!!! Consult logs immediately.",usb_port);
log::debug!("How did I get here???");
return Err("Failed TTY init. Unknown state, cannot trust.".to_string());
},
};
},
None => initial_state = State::LoginPrompt
};
@ -129,6 +179,8 @@ impl Device{
current_state: initial_state,
reboots: 0,
temps: 0,
temp_offset: 0,
init_temps: 0,
bps: 0
};
if !output.load_values(){
@ -144,22 +196,6 @@ impl Device{
}
}
fn go_to_login_prompt(&mut self) -> &mut Self{
while !(self.current_state == State::LoginPrompt){
match self.current_state {
State::LoginPrompt => return self,
State::DebugMenu | State::LifecycleMenu | State::BrightnessMenu => {
self.usb_tty.write_to_device(Command::Quit);
_ = self.usb_tty.read_from_device(None);
self.current_state = State::LoginPrompt;
self.reboots+=1;
return self;
},
};
};
return self;
}
fn go_to_brightness_menu(&mut self) -> &mut Self{
while !(self.current_state == State::BrightnessMenu){
match self.current_state {
@ -177,42 +213,58 @@ impl Device{
},
State::LoginPrompt => {
self.usb_tty.write_to_device(Command::Login);
_ = self.usb_tty.read_from_device(None);
loop {
match self.usb_tty.read_from_device(None){
Response::PreShellPrompt | Response::Empty | Response::ShuttingDown |
Response::DebugInit | Response::EmptyNewline | Response::Rebooting => {},
Response::PasswordPrompt => {self.usb_tty.write_to_device(Command::Newline);},
Response::FailedDebugMenu | Response::ShellPrompt => break,
_ => {
log::error!("Unexpected response from device {}!",self.serial);
log::debug!("brightness menu, catch-all, login loop, {}, {:?}",self.serial,self.usb_tty);
log::error!("Unsure how to continue. Expect data from device {} to be erratic until next cycle.",self.serial);
//break;
},
};
};
self.current_state = State::ShellPrompt;
},
State::ShellPrompt => {
self.usb_tty.write_to_device(Command::DebugMenu);
_ = self.usb_tty.read_from_device(None);
loop {
match self.usb_tty.read_from_device(None) {
Response::PreShellPrompt | Response::Empty | Response::ShuttingDown |
Response::DebugInit | Response::EmptyNewline | Response::Rebooting => {},
Response::LoginPrompt => {
self.usb_tty.write_to_device(Command::Login);
while self.usb_tty.read_from_device(None) != Response::ShellPrompt {};
self.usb_tty.write_to_device(Command::DebugMenu);
},
Response::DebugMenu =>
break,
Response::FailedDebugMenu => {
self.usb_tty.write_to_device(Command::DebugMenu);
},
_ => {
log::error!("Unexpected response from device {}!", self.serial);
log::debug!("brightness menu, catch-all, shell prompt loop, {}, {:?}",self.serial,self.usb_tty);
log::error!("Unsure how to continue. Expect data from device {} to be erratic until next cycle.",self.serial);
//break;
},
};
};
//_ = self.usb_tty.read_from_device(None);
self.current_state = State::DebugMenu;
},
State::Shutdown => {
while self.usb_tty.read_from_device(None) != Response::LoginPrompt{}
self.current_state = State::LoginPrompt;
},
};
};
return self;
}
#[allow(dead_code)]
fn go_to_debug_menu(&mut self) -> &mut Self{
while !(self.current_state == State::DebugMenu){
match self.current_state {
State::DebugMenu => return self,
State::BrightnessMenu => {
self.usb_tty.write_to_device(Command::UpMenuLevel);
_ = self.usb_tty.read_from_device(None);
self.current_state = State::LifecycleMenu;
},
State::LifecycleMenu =>{
self.usb_tty.write_to_device(Command::UpMenuLevel);
_ = self.usb_tty.read_from_device(None);
self.current_state = State::BrightnessMenu;
},
State::LoginPrompt => {
self.usb_tty.write_to_device(Command::Login);
_ = self.usb_tty.read_from_device(None);
self.usb_tty.write_to_device(Command::DebugMenu);
_ = self.usb_tty.read_from_device(None);
self.current_state = State::DebugMenu;
return self;
},
};
};
return self;
}
fn go_to_lifecycle_menu(&mut self) -> &mut Self{
while !(self.current_state == State::LifecycleMenu){
match self.current_state {
@ -231,37 +283,81 @@ impl Device{
},
State::LoginPrompt => {
self.usb_tty.write_to_device(Command::Login);
_ = self.usb_tty.read_from_device(None);
loop {
match self.usb_tty.read_from_device(None){
Response::PreShellPrompt | Response::Empty | Response::ShuttingDown |
Response::DebugInit | Response::EmptyNewline | Response::Rebooting => {},
Response::PasswordPrompt => {self.usb_tty.write_to_device(Command::Newline);},
Response::FailedDebugMenu | Response::ShellPrompt => break,
_ => {
log::error!("Unexpected response from device {}!",self.serial);
log::debug!("lifecycle menu, catch-all, first loop, {}, {:?}",self.serial,self.usb_tty);
log::error!("Unsure how to continue. Expect data from device {} to be erratic until next cycle.",self.serial);
//break;
},
};
};
self.current_state = State::ShellPrompt;
},
State::ShellPrompt => {
self.usb_tty.write_to_device(Command::DebugMenu);
_ = self.usb_tty.read_from_device(None);
loop {
let read_in = self.usb_tty.read_from_device(None);
match read_in {
Response::PreShellPrompt | Response::Empty | Response::ShuttingDown |
Response::DebugInit | Response::EmptyNewline | Response::Rebooting => {},
Response::LoginPrompt => {
self.usb_tty.write_to_device(Command::DebugMenu);
},
Response::DebugMenu =>
break,
Response::FailedDebugMenu => {
self.usb_tty.write_to_device(Command::DebugMenu);
},
_ => {
log::error!("Unexpected response from device {}! {:?}", self.serial, read_in);
log::debug!("lifecycle menu, catch-all, second loop, {}, {:?}",self.serial,self.usb_tty);
log::error!("Unsure how to continue. Expect data from device {} to be erratic until next cycle.",self.serial);
//break;
},
};
};
self.current_state = State::DebugMenu;
},
State::Shutdown => {
while self.usb_tty.read_from_device(None) != Response::LoginPrompt {}
self.current_state = State::LoginPrompt;
},
};
};
return self;
}
fn save_values(&mut self) -> bool{
let output_path = OUTPUT_FOLDER.to_owned() + &self.serial + ".txt";
let temp = fs::OpenOptions::new().write(true).truncate(true).open(output_path);
let temp = fs::OpenOptions::new().write(true).truncate(true).open(&output_path);
match temp{
Ok(opened_file) => self.output_file = Some(opened_file),
Err(_) => {
log::warn!("Could not open file to write! Potential permissions error.");
log::warn!("Could not open file [{}] to write! Potential permissions error.",&output_path);
return false
}
}
log::trace!("{:?}",self.output_file);
if let Some(ref mut file_name) = self.output_file{
log::debug!("Writing to file!");
let mut output_data = REBOOTS_SECTION.to_string();
output_data.push_str(SECTION_SEPARATOR);
output_data.push_str(&self.reboots.to_string());
output_data.push_str("\n");
output_data.push_str(BP_SECTION);
output_data.push_str(SECTION_SEPARATOR);
output_data.push_str(&self.bps.to_string());
output_data.push_str("\n");
output_data.push_str(TEMP_SECTION);
output_data.push_str(&self.temps.to_string());
output_data.push_str(SECTION_SEPARATOR);
let saved_temps = (self.temps - self.init_temps) + self.temp_offset;
output_data.push_str(&saved_temps.to_string());
output_data.push_str("\n");
log::debug!("final data to write to '{:?}': [{:?}]",file_name,output_data);
let temp = file_name.write_all(output_data.as_bytes());
match temp{
Err(error) => {
@ -275,13 +371,64 @@ impl Device{
}
return true
}
pub fn set_serial(&mut self, serial:&str) -> &mut Self{
pub fn auto_set_serial(&mut self) -> bool{
loop {
match self.current_state {
State::LoginPrompt => {
self.usb_tty.write_to_device(Command::Login);
while self.usb_tty.read_from_device(None) != Response::ShellPrompt {};
self.current_state = State::ShellPrompt;
},
State::Shutdown => {
while self.usb_tty.read_from_device(None) != Response::LoginPrompt{};
self.current_state = State::LoginPrompt;
},
State::DebugMenu | State::LifecycleMenu | State::BrightnessMenu => {
self.usb_tty.write_to_device(Command::Quit);
_ = self.usb_tty.read_from_device(None);
self.current_state = State::ShellPrompt;
},
State::ShellPrompt => {
self.usb_tty.write_to_device(Command::GetSerial);
loop{
let return_value = self.usb_tty.read_from_device(None);
match return_value{
Response::Serial(Some(contains_serial)) =>{
for line in contains_serial.split("\n").collect::<Vec<&str>>(){
if !line.contains(':') { continue; }
let (section,value) = line.split_once(':').unwrap();
if section.contains(SERIAL_HEADER){
self.serial = value.trim().replace("\"","");
}
}
log::info!("Serial found for device {}",self.serial);
break;
},
Response::DebugInit | Response::Empty | Response::EmptyNewline => { continue; }
_ => {
log::error!("Bad value: {:?}",return_value);
return false
},
}
}
self.usb_tty.write_to_device(Command::DebugMenu);
while self.usb_tty.read_from_device(None) != Response::DebugMenu {}
self.current_state = State::DebugMenu;
self.load_values();
self.save_values();
return true
},
}
}
}
pub fn manual_set_serial(&mut self, serial:&str) -> &mut Self{
self.serial = serial.to_string();
self.load_values();
self.save_values();
return self;
}
pub fn get_serial(&mut self) -> &str{
pub fn get_serial(&self) -> &str{
&self.serial
}
pub fn get_location(&mut self) -> String{
@ -311,7 +458,7 @@ impl Device{
}
return self;
}
pub fn start_bp(&mut self) -> &mut Self {
fn start_bp(&mut self) -> &mut Self {
self.go_to_lifecycle_menu();
self.usb_tty.write_to_device(Command::StartBP);
_ = self.usb_tty.read_from_device(None);
@ -329,78 +476,151 @@ impl Device{
_ = self.usb_tty.read_from_device(None);
return self;
}
pub fn is_temp_running(&mut self) -> bool {
pub fn is_temp_running(&mut self) -> bool{
self.go_to_lifecycle_menu();
self.usb_tty.write_to_device(Command::ReadTemp);
loop {
for _ in 0..10 {
match self.usb_tty.read_from_device(None){
Response::TempSuccess => return true,
Response::TempFailed => return false,
Response::TempCount(Some(count)) => return count != self.init_temps ,
_ => {},
}
}
self.usb_tty.write_to_device(Command::ReadTemp);
for _ in 0..10{
match self.usb_tty.read_from_device(None){
Response::TempCount(Some(count)) => return count != self.init_temps ,
_ => {},
}
}
log::error!("Temp read failed!!!");
return false
}
pub fn is_bp_running(&mut self) -> bool {
pub fn update_temp_count(&mut self) -> u64 {
self.go_to_lifecycle_menu();
self.usb_tty.write_to_device(Command::ReadTemp);
for _ in 0..10 {
match self.usb_tty.read_from_device(None){
Response::TempCount(Some(count)) => {
log::trace!("Count for device {} updated to {}",self.serial,count);
self.temps = count;
return count
},
_ => {},
}
}
self.usb_tty.write_to_device(Command::ReadTemp);
for _ in 0..10{
match self.usb_tty.read_from_device(None){
Response::TempCount(Some(count)) => {
log::trace!("Count for device {} updated to {}",self.serial,count);
self.temps = count;
return count
},
_ => {},
}
}
log::error!("Update temp count on device {} failed!!!",self.serial);
return 0;
}
pub fn init_temp_count(&mut self){
self.go_to_lifecycle_menu();
self.usb_tty.write_to_device(Command::ReadTemp);
for _ in 0..10 {
match self.usb_tty.read_from_device(None){
Response::TempCount(Some(count)) => {
log::trace!("init temp count set to {} on device {}",count,self.serial);
self.init_temps = count;
return
},
_ => {},
}
};
self.usb_tty.write_to_device(Command::ReadTemp);
for _ in 0..10{
match self.usb_tty.read_from_device(None){
Response::TempCount(Some(count)) => {
log::trace!("init temp count set to {} on device {}",count,self.serial);
self.init_temps = count;
return
},
_ => {},
}
};
log::error!("init temp count failed on device {}!!!",self.serial);
}
fn is_bp_running(&mut self) -> bool {
self.go_to_lifecycle_menu();
self.usb_tty.write_to_device(Command::CheckBPState);
loop {
match self.usb_tty.read_from_device(None){
Response::BPOn => return true,
Response::BPOff => return false,
Response::DebugMenuWithContinuedMessage =>{},
_ => return false,
}
}
}
pub fn reboot(&mut self) -> () {
self.go_to_login_prompt();
self.usb_tty.write_to_device(Command::Quit);
self.usb_tty.write_to_device(Command::Reboot);
let mut successful_reboot:bool = false;
//let mut exited_menu:bool = false;
loop{
match self.usb_tty.read_from_device(None){
Response::LoginPrompt => break,
Response::Rebooting => {
log::trace!("Successful reboot detected for device {}.",self.serial);
successful_reboot = true;
//This error message is turning out to be more false positive than anything
//else. Reboots can sometimes dump both reboot flag and shutdown flag at once.
//if !exited_menu { log::info!("Unusual reboot detected for device {}. Please check logs.",self.serial); }
},
Response::ShuttingDown => {
log::trace!("Exiting debug menu on device {}.",self.serial);
//exited_menu = true;
},
_ => {}
}
};
if successful_reboot { self.reboots += 1; }
self.current_state = State::LoginPrompt;
}
pub fn is_rebooted(&mut self) -> bool {
if self.current_state == State::LoginPrompt{
return true;
}
else{
self.go_to_login_prompt();
self.reboots +=1;
self.save_values();
return true;
}
}
pub fn test_cycle(&mut self, bp_cycles: Option<u64>, temp_cycles: Option<u64>) -> () {
pub fn test_cycle(&mut self, bp_cycles: Option<u64>) -> () {
let local_bp_cycles: u64 = bp_cycles.unwrap_or(3);
let local_temp_cycles: u64 = temp_cycles.unwrap_or(2);
self.go_to_login_prompt();
thread::sleep(BOOT_TIME);
if self.current_state != State::LoginPrompt { self.reboot(); }
self.go_to_lifecycle_menu();
_ = self.usb_tty.read_from_device(Some("["));
self.update_temp_count();
for _bp_count in 1..=local_bp_cycles{
log::info!("Running bp {} on device {} ...",(self.bps+1),self.serial);
self.start_bp();
let bp_start = self.is_bp_running();
log::trace!("{:?}",bp_start);
thread::sleep(BP_RUN);
let bp_start:bool = self.is_bp_running();
log::trace!("Has bp started on device {}? : {:?}",self.serial,bp_start);
if bp_start{
log::trace!("Starting temp on device {}",self.serial);
self.start_temp();
thread::sleep(TEMP_WAIT);
log::trace!("Stopping temp on device {}",self.serial);
self.stop_temp();
};
while self.is_bp_running() {};
let bp_end = self.is_bp_running();
log::trace!("{:?}",bp_end);
log::trace!("Has bp ended on device {}? : {:?}",self.serial,bp_end);
if bp_start != bp_end {
self.bps +=1;
log::debug!("Increasing bp count to {}",self.bps);
self.save_values();
}
}
for _temp_count in 1..=local_temp_cycles{
log::info!("Running temp {} on device {} ...",(self.temps+1),self.serial);
let temp_start = self.start_temp().is_temp_running();
let temp_end = self.stop_temp().is_temp_running();
if temp_start != temp_end {
self.temps +=1;
log::debug!("Increasing temp count to {}",self.temps);
log::trace!("Increasing bp count for device {} to {}",self.serial,self.bps);
self.save_values();
}
}
log::info!("Rebooting {} for the {}th time",self.serial, self.reboots);
self.reboot();
self.reboots += 1;
self.save_values();
}
}

View file

@ -1,6 +1,6 @@
use seymour_poc_rust::{device::Device,
tty::{self,TTY,Response},
gpio_facade::GpioPins};
use seymour_life::{device::Device,
tty::{self,TTY,Response},
gpio_facade::GpioPins};
use std::{io::{stdin,stdout,Write},
thread::{self, JoinHandle},
path::Path,
@ -11,11 +11,22 @@ use clap::Parser;
#[derive(Parser,Debug)]
#[command(author,version,about)]
struct Args{
/// Print all logs to screen, improves log verbosity. Sets iteration count to 50000
#[arg(short,long,action)]
debug:bool
debug:bool,
/// Force manually setting serial numbers
#[arg(short,long,action)]
manual:bool,
/// Set iteration count from command line. Overrides debug iteration count.
#[arg(short,long)]
iterations:Option<u64>
}
const VERSION:&str="2.1.0";
const VERSION:&str="2.3.3";
const DEBUG_ITERATION_COUNT:u64=50000;
fn int_input_filtering(prompt:Option<&str>) -> u64{
let internal_prompt = prompt.unwrap_or(">>>");
@ -47,113 +58,152 @@ fn input_filtering(prompt:Option<&str>) -> String{
log::debug!("{}:{}",internal_prompt,user_input);
return user_input;
}
//Path::new(&&str).is_dir() -> bool
fn main(){
setup_logs();
let args = Args::parse();
setup_logs(&args.debug);
log::info!("Seymour Life Testing version: {}",VERSION);
if args.debug{
log::debug!("Debug enabled!");
}
log::trace!("Debug enabled!");
loop{
let mut iteration_count:u64 = 0;
if let Some(value) = args.iterations{
iteration_count = value;
}
else if args.debug {
iteration_count = DEBUG_ITERATION_COUNT;
}
else {
while iteration_count < 1{
iteration_count = int_input_filtering(Some("Enter the number of iterations to complete: "));
}
}
log::info!("Testing all available USB ports for connected devices. This may take several minutes, and devices may reboot several times.");
let gpio = &mut GpioPins::new();
match std::fs::read_dir("/dev/serial/by-path"){
Ok(available_ttys)=>{
let mut possible_devices:Vec<Option<Device>> = Vec::new();
let mut tty_test_threads:Vec<JoinHandle<Option<Device>>> = Vec::new();
for possible_tty in available_ttys.into_iter(){
tty_test_threads.push(
thread::spawn(move ||{
let tty_ref = possible_tty.as_ref();
match tty_ref{
Ok(tty_real_ref)=>{
let tty_path = tty_real_ref.path();
let tty_name = tty_path.to_string_lossy();
log::info!("Testing port {}. This may take a moment...",&tty_name);
let possible_port = TTY::new(&tty_name);
match possible_port{
Some(mut port) =>{
port.write_to_device(tty::Command::Newline);
let response = port.read_from_device(Some(":"));
if response != Response::Empty{
log::debug!("{} is valid port!",tty_name);
let new_device = Device::new(port,Some(response));
match new_device{
Ok(mut device) => {
device.darken_screen();
Some(device)
},
Err(_) => None
}
}
else { None }
},
None=>{None}
}
},
Err(error)=>{
log::debug!("{}",error);
None
let mut available_ttys:Vec<Box<Path>> = Vec::new();
for entry in glob::glob("/dev/serial/*").expect("Failed to read glob pattern"){
match entry{
Ok(real_path) =>{
match fs::read_dir::<&Path>(real_path.as_ref()){
Ok(possible_ttys) =>{
possible_ttys.into_iter().for_each(|tty| {
if let Ok(single_tty) = tty {
available_ttys.push(single_tty.path().into());
}
});
break;
}
Err(error) =>{
log::error!("Invalid permissions to /dev directory... did you run with sudo?");
log::error!("{}",error);
return;
}
}
}
Err(error) =>{
log::error!("{}",error);
}
}
}
if available_ttys.is_empty(){
for entry in glob::glob("/dev/ttyUSB*").expect("Unable to read glob"){
match entry{
Ok(possible_tty) => available_ttys.push(Path::new(&possible_tty).into()),
Err(error) => {
log::error!("Invalid permissions to /dev directory... did you run with sudo?");
log::error!("{}",error);
return;
}
};
}
}
if available_ttys.is_empty(){
log::error!("No serial devices detected! Please ensure all connections.");
return;
}
let mut possible_devices:Vec<Option<Device>> = Vec::new();
let mut tty_test_threads:Vec<JoinHandle<Option<Device>>> = Vec::new();
for possible_tty in available_ttys.into_iter(){
tty_test_threads.push(
thread::spawn(move ||{
let tty_name = possible_tty.to_string_lossy();
log::debug!("Testing port {}",&tty_name);
let possible_port = TTY::new(&tty_name);
match possible_port{
Some(mut port) =>{
port.write_to_device(tty::Command::Newline);
let response = port.read_from_device(Some(":"));
if response != Response::Empty{
log::debug!("{} is valid port!",tty_name);
let new_device = Device::new(port,Some(response));
match new_device{
Ok(mut device) => {
device.darken_screen();
if !args.manual {
device.auto_set_serial();
}
Some(device)
},
Err(_) => None
}
}
}));
}
for thread in tty_test_threads{
let output = thread.join().unwrap_or_else(|x|{log::trace!("{:?}",x); None});
possible_devices.push(output);
}
let mut devices:Vec<Device> = Vec::new();
for possible_device in possible_devices.into_iter(){
if let Some(device) = possible_device{
devices.push(device);
else { None }
},
None=>{None}
}
}
}));
}
for thread in tty_test_threads{
let output = thread.join().unwrap_or_else(|x|{log::trace!("{:?}",x); None});
possible_devices.push(output);
}
log::info!("\n\n--------------------------------------");
log::info!("Number of devices detected: {}",devices.len());
log::info!("--------------------------------------\n\n");
for device in devices.iter_mut(){
device.brighten_screen();
if args.debug{
let location = device.get_location();
device.set_serial(&location);
}
else{
device.set_serial(&input_filtering(Some("Enter the serial of the device with the bright screen: ")).to_string());
}
device.darken_screen();
log::debug!("Number of unassigned addresses: {}",gpio.get_unassigned_addresses().len());
if !find_gpio(device, gpio){
device.set_pin_address(21);
log::error!("Unable to find GPIO for device {}. Please ensure that the probe well is installed properly, and the calibration key is plugged in.",device.get_location());
}
}
let mut iteration_count:u64 = 0;
while iteration_count < 1{
iteration_count = int_input_filtering(Some("Enter the number of iterations to complete: "));
}
let mut iteration_threads = Vec::new();
while let Some(mut device) = devices.pop(){
iteration_threads.push(thread::spawn(move||{
for i in 1..=iteration_count{
log::info!("Starting iteration {} of {} for device {}...",
i,iteration_count,device.get_serial());
device.test_cycle(None, None);
}
}));
}
for thread in iteration_threads{
thread.join().unwrap();
let mut serials_set:bool = true;
let mut devices:Vec<Device> = Vec::new();
for possible_device in possible_devices.into_iter(){
if let Some(device) = possible_device{
if device.get_serial().eq("uninitialised"){
serials_set = false;
}
devices.push(device);
}
Err(_)=>{
log::error!("Invalid serial location! Please make sure that /dev/serial/by-path exists.");
break;
}
log::info!("--------------------------------------");
log::info!("Number of devices detected: {}",devices.len());
log::info!("--------------------------------------\n\n");
log::info!("Setting up probe wells for all devices. This may take several minutes...");
for device in devices.iter_mut(){
if !serials_set || args.manual {
device.brighten_screen();
device.manual_set_serial(&input_filtering(Some("Enter the serial of the device with the bright screen: ")).to_string());
device.darken_screen();
}
log::info!("Checking probe well of device {}",device.get_serial());
log::debug!("Number of unassigned addresses: {}",gpio.get_unassigned_addresses().len());
if !find_gpio(device, gpio){
device.set_pin_address(21);
log::error!("Unable to find probe-well for device {}. Please ensure that the probe well is installed properly, and the calibration key is plugged in.",device.get_serial());
device.brighten_screen();
panic!();
}
}
let mut iteration_threads = Vec::new();
while let Some(mut device) = devices.pop(){
iteration_threads.push(thread::spawn(move||{
device.init_temp_count();
for i in 1..=iteration_count{
log::info!("Starting iteration {} of {} for device {}...",
i,iteration_count,device.get_serial());
device.test_cycle(None);
}
}));
}
for thread in iteration_threads{
thread.join().unwrap();
}
if input_filtering(Some("Would you like to run the tests again? (y/N): ")).to_string().contains("y") {}
else { break; }
@ -161,6 +211,7 @@ fn main(){
}
fn find_gpio(device:&mut Device,gpio:&mut GpioPins) -> bool{
device.init_temp_count();
for &address in gpio.get_unassigned_addresses(){
device.set_pin_address(address).start_temp();
if device.is_temp_running(){
@ -175,7 +226,7 @@ fn find_gpio(device:&mut Device,gpio:&mut GpioPins) -> bool{
return false;
}
pub fn setup_logs(){
pub fn setup_logs(debug:&bool){
let chrono_now: DateTime<Local> = Local::now();
if ! Path::new("logs").is_dir(){
_ = fs::create_dir("logs");
@ -190,18 +241,27 @@ pub fn setup_logs(){
message
))
})
.chain(
fern::Dispatch::new()
.level(log::LevelFilter::Trace)
.chain(fern::log_file(
format!("logs/{0}.log",
chrono_now.format("%Y-%m-%d_%H.%M").to_string()
)).unwrap()),
)
.chain(
fern::Dispatch::new()
.level(log::LevelFilter::Info)
.chain(std::io::stdout())
)
.chain({
let mut file_logger = fern::Dispatch::new();
let date_format = chrono_now.format("%Y-%m-%d_%H.%M").to_string();
let local_log_file = fern::log_file(format!("logs/{}.log",date_format)).unwrap();
if *debug{
file_logger = file_logger.level(log::LevelFilter::Trace);
}
else {
file_logger = file_logger.level(log::LevelFilter::Debug);
}
file_logger.chain(local_log_file)
})
.chain({
let mut stdout_logger = fern::Dispatch::new();
if *debug {
stdout_logger = stdout_logger.level(log::LevelFilter::Trace);
}
else {
stdout_logger = stdout_logger.level(log::LevelFilter::Info);
}
stdout_logger.chain(std::io::stdout())
})
.apply();
}

View file

@ -1,10 +1,13 @@
use std::{collections::HashMap, io::{BufReader, Write, Read}, time::Duration};
use std::{collections::HashMap,
io::{BufReader, Write, Read},
boxed::Box,
time::Duration};
use once_cell::sync::Lazy;
use serialport::SerialPort;
use derivative::Derivative;
const BAUD_RATE:u32 = 115200;
const SERIAL_READ_TIMEOUT: std::time::Duration = Duration::from_millis(500);
const SERIAL_TIMEOUT: std::time::Duration = Duration::from_millis(500);
#[derive(Eq,Derivative,Debug)]
@ -23,23 +26,31 @@ pub enum Command{
Login,
DebugMenu,
Newline,
Reboot,
GetSerial,
Boot,
}
#[derive(Clone,Eq,Derivative,Debug)]
#[derivative(Copy,PartialEq, Hash)]
#[derivative(PartialEq, Hash)]
pub enum Response{
PasswordPrompt,
ShellPrompt,
BPOn,
BPOff,
TempFailed,
TempSuccess,
TempCount(Option<u64>),
LoginPrompt,
DebugMenuReady,
DebugMenuWithContinuedMessage,
DebugMenu,
Rebooting,
Other,
Empty,
ShuttingDown,
FailedDebugMenu,
PreShellPrompt,
EmptyNewline,
DebugInit,
Serial(Option<String>),
UBoot,
}
@ -51,57 +62,84 @@ const COMMAND_MAP:Lazy<HashMap<Command,&str>> = Lazy::new(||HashMap::from([
(Command::BrightnessMenu, "B"),
(Command::BrightnessHigh, "0"),
(Command::BrightnessLow, "1"),
(Command::ReadTemp, "h"),
(Command::ReadTemp, "H"),
(Command::UpMenuLevel, "\\"),
(Command::Login,"root\n"),
(Command::RedrawMenu,"?"),
(Command::DebugMenu," python3 -m debugmenu; shutdown -r now\n"),
(Command::DebugMenu,"python3 -m debugmenu\n"),
(Command::Newline,"\n"),
(Command::Reboot,"shutdown -r now\n"),
(Command::Boot,"boot\n"),
(Command::GetSerial,"echo 'y1q' | python3 -m debugmenu\n"),
]));
const RESPONSES:[(&str,Response);10] = [
const COMMAND_RESPONSES: [&str;3] = [
"python3 -m debugmenu",
"q",
"root",
];
const RESPONSES:[(&str,Response);14] = [
("uboot=>",Response::UBoot),
("Last login:",Response::PreShellPrompt),
("reboot: Restarting",Response::Rebooting),
("command not found",Response::FailedDebugMenu),
("login:",Response::LoginPrompt),
("Password:",Response::PasswordPrompt),
("root@",Response::ShellPrompt),
("DtCtrlCfgDeviceSerialNum",Response::Serial(None)),
("Check NIBP In Progress: True",Response::BPOn),
("Check NIBP In Progress: False",Response::BPOff),
("Temp: 0",Response::TempFailed),
("Temp:",Response::TempSuccess),
("> ",Response::DebugMenuWithContinuedMessage),
(">",Response::DebugMenuReady),
("[",Response::Rebooting),
("SureTemp Probe Pulls:",Response::TempCount(None)),
(">",Response::DebugMenu),
("Loading App-Framework",Response::DebugInit),
("root@",Response::ShellPrompt),
("EXIT Debug menu",Response::ShuttingDown),
];
pub struct TTY{
tty: Box<dyn SerialPort>,
failed_read_count: u8
last: Command,
}
impl std::fmt::Debug for TTY{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result{
let absolute_location = self.tty.name();
let relative_location:String;
match absolute_location{
Some(abs_location_string) => {
let sectioned_abs_location = abs_location_string.rsplit_once('/');
match sectioned_abs_location{
Some((_,serial_device_name)) => relative_location = serial_device_name.to_string(),
None => relative_location = "unknown".to_string()
}
},
None => relative_location = "unknown".to_string()
};
f.debug_struct("TTY")
.field("Serial port name",&self.tty.name().unwrap_or("Unknown".to_string()))
.field("Serial port name",&relative_location)
.finish()
}
}
impl TTY{
pub fn new(serial_location:&str) -> Option<Self>{
let possible_tty = serialport::new(serial_location,BAUD_RATE).timeout(SERIAL_READ_TIMEOUT).open();
let possible_tty = serialport::new(serial_location,BAUD_RATE).timeout(SERIAL_TIMEOUT).open();
if let Ok(tty) = possible_tty{
Some(TTY {
tty,
failed_read_count: 0
})
Some(TTY{tty,last:Command::Quit})
} else{
None
}
}
pub fn write_to_device(&mut self,command:Command) -> bool {
log::debug!("writing {:?} to tty {}...", command, self.tty.name().unwrap_or("unknown".to_string()));
if command == self.last{
log::trace!("retry send {}",self.tty.name().unwrap_or("unknown".to_string()));
}else{
log::debug!("writing {:?} to tty {}...", command, self.tty.name().unwrap_or("unknown".to_string()));
};
let output = self.tty.write_all(COMMAND_MAP.get(&command).unwrap().as_bytes()).is_ok();
self.last = command;
_ = self.tty.flush();
std::thread::sleep(std::time::Duration::from_millis(500));
std::thread::sleep(SERIAL_TIMEOUT);
return output;
}
@ -111,27 +149,64 @@ impl TTY{
_ = reader.read_to_end(&mut read_buffer);
if read_buffer.len() > 0 {
let read_line:String = String::from_utf8_lossy(read_buffer.as_slice()).to_string();
if read_line.eq("\r\n") {
return Response::EmptyNewline;
}
for command in COMMAND_RESPONSES{
if read_line.trim().eq(command.trim()){
return self.read_from_device(None);
}
};
for (string,enum_value) in RESPONSES{
if read_line.contains(string){
log::debug!("Successful read of {:?} from tty {}, which matches pattern {:?}",read_line,self.tty.name().unwrap_or("unknown shell".to_string()),enum_value);
self.failed_read_count = 0;
return enum_value;
if(enum_value == Response::BPOn) || (enum_value == Response::BPOff) {
//Don't log BPOn or BPOff, we're gonna see a LOT of those and we don't want
//to overfill the SD card
}
else{
log::trace!("Successful read of {:?} from tty {}, which matches pattern {:?}",read_line,self.tty.name().unwrap_or("unknown shell".to_string()),enum_value);
};
if enum_value == Response::TempCount(None){
let mut lines = read_line.lines();
while let Some(single_line) = lines.next(){
if single_line.contains(string){
let trimmed_line = single_line.trim();
match trimmed_line.rsplit_once(' '){
None => return enum_value,
Some((_header,temp_count)) => {
match temp_count.trim().parse::<u64>(){
Err(_) => {
log::error!("String {} from device {} unable to be parsed!",temp_count,self.tty.name().unwrap_or("unknown shell".to_string()));
return Response::TempCount(None)
},
Ok(parsed_temp_count) => {
log::trace!("parsed temp count for device {}: {}",self.tty.name().unwrap_or("unknown shell".to_string()),temp_count);
return Response::TempCount(Some(parsed_temp_count))
}
}
}
}
}
}
}
else if enum_value == Response::Serial(None) {
return Response::Serial(Some(read_line));
}
else if enum_value == Response::PasswordPrompt {
log::error!("Recieved password prompt on device {}! Something fell apart here. Check preceeding log lines.",self.tty.name().unwrap_or("unknown shell".to_string()));
self.write_to_device(Command::Newline);
_ = self.read_from_device(None);
}
else{
return enum_value;
}
}
}
log::trace!("Unable to determine response. Response string is: [{:?}]",read_line);
return Response::Other;
}
else {
log::debug!("Read an empty string. Possible read error.");
//Due to a linux kernel power-saving setting that is overly complicated to fix,
//Serial connections will drop for a moment before re-opening, at seemingly-random
//intervals. The below is an attempt to catch and recover from this behaviour.
self.failed_read_count += 1;
if self.failed_read_count >= 15{
self.failed_read_count = 0;
let tty_location = self.tty.name().expect("Unable to read tty name!");
self.tty = serialport::new(tty_location,BAUD_RATE).timeout(SERIAL_READ_TIMEOUT).open().expect("Unable to open serial connection!");
return self.read_from_device(_break_char);
}
log::trace!("Read an empty string from device {:?}. Possible read error.", self);
return Response::Empty;
};
}