So with the information on "CR LF ?PB CR" being the solution to stop the program from sending any "garbage" characters to the Enigma Touch, I used that, and a Tera Term Log for all models, rotors, etc, to make a version that now reads all of the Enigma Touch's settings (minus the Custom Enigma - that is for later), and alerts you if the model does not have a plugboard so the Uhr won't work with it, since in reality you would have no way to plug it in. It also resets your rotor positions after the message is typed to what displays on your Enigma, and will alert you if the rotor positions on the program do not match what is on the Enigma Touch after printing one character.
All of this gets to where the lampboard will illuminate with the result output, which is historically how you, as the operator, would see it. To do this, I effectively had to create an Enigma simulator inside of the program that takes the exact values of the model, reflector, rotors, rings, rotor positions, and the plugboard, takes the input, runs through the virtual Uhr module, and then sends that output back to the Enigma Touch. So you effectively have an Enigma Touch sending data to a virtual Enigma attached to a virtual Uhr that then sends the output back to your Enigma Touch. Not super pretty, but it works.
I did some stress testing with a long message for encrypting and decrypting (by chance, the opening to A Tale of Two Cities is exactly 475 characters without spaces or punctuation), and found that you need 2400 Baud or the Enigma Touch won't be able to keep up. I'm modifying the program to have the baud be set to 2400 by default. You can also set the group to whatever number you want, so 5 gives you the typical Wehrmacht 5-character messages, 4 gives you the typical Kriegsmarine style, etc. 0 lumps everything together, unless you leave Keep spaces and punctuation on, in which it'll mirror the input text in spacing and grouping.
Here are some screenshots from the stress test. I randomly put in settings before running this, and the program correctly identified them all.
Stress Test - Encrypt
Stress Test - Decrypt
Note: I started with positions A B C D if anyone wants to try to reproduce this on the previous release. The program correctly identified the new rotor positions after the full message of 475 characters was typed out.
Oh yeah, it also identifies Reflector D's wiring scheme just in case you use it with some custom wiring. I tested it on the German notation, so I don't know if BP notation will work. I'll try that next, as one of the many other parts to work on. :)