# W.H.S.P.A.H.
An entirely self-hosted, local and free way to interact with CaiXianlin shock collars.

## Basic shit
### What does W.H.S.P.A.H. stand for?
It simply stands for "We Have Shock Pi At Home", playing on [PiShock](https://pishock.com/), but with the "Pi" and "Shock" being swapped to make a more pronounceable name.

### What actually is it?
It's hardware, firmware and software designed for interacting with CaiXianlin.

This can be broken up into 3-4 individual parts:
- [Hardware](/src/hardware/): This is the hardware of W.H.S.P.A.H. that interacts with the shockers directly and runs the [firmware](/src/firmware/).
- [Firmware](/src/firmware/): This runs directly on the [hardware](/src/hardware/) and provides a way to send CaiXianlin commands through the serial port.
- [API](/src/pythonAPI/): This provides an easy way to interact with the previous two parts in Python.
- [Software](/src/software/) (Optional): This is an optional layer that combines all the previous parts into a GUI / CLI.

### Quick special thanks
- Magnus: For helping me figure out that the encoding used was [Lucal code](https://en.wikipedia.org/wiki/Gray_code#Lucal).
- [The OpenShock wiki](https://wiki.openshock.org/): For clarifying packet structure & RF timings.
- TRS / Tango: For giving me a reason to make this mess.