This is a big update!

I made seperate implementation files for the two currently supported.
In addition, there's now a middle ground that handles things like
probing and controller opening.

Hopefully, this not only helps clean up code, it clarifies certain bugs.
Makefile has also been updated accordingly.
Doh, forgot to add header