Process
Planning
The Adafruit Super Game Pi Project
CAD tools such as Autodesk Inventor and Autodesk Fusion, as well as a trusty ruler.
Production
Parts purchased online.
Case printed using a PRUSA i3 3D-printer.
All components wired and soldered by hand.
Programming
I modified a GPIO driver for the RPi to handle button input for all 14 buttons, and interfacing with the various peripherals via i2c and SPI. My modified source code is here.
Components
The driver on the Raspberry Pi 3 communicates with three different peripherals: a stereo amplifier chip that controls sound, a PWM signal chip that controls the screen brightness, and an ADC chip that reads analog signals from both the joysticks and the volume- & screen brightness potentiometers. It uses the i2c bus for the stereo amplifier and PWM chips, while SPI is used for the ADC chip.
The data from the ADC is central: data from the joystick channels is converted to input signals and passed into the linux joystick input device, while data from the volume- and screen brightness sliders is passed directly into the stereo amplifier and PWM signal chips respectively.