# CMDR Joystick 25

USB Joystick with 2 hall effect gimbals, 2 hat switches and 27 buttons for use computer simulators.

## Layout

```cpp
HW Button index map:
---------------------------------------------------------------
|  0 L|  1 U| 25 U |        |  2  |        | 26 U |  4 U|  3 L|
---------------------------------------------------------------
|     |  5  |  6  |  7  |             | 12  | 11  | 10  |     |
|                                                             |
|                 |  8  |             | 13  |                 |
|                 |  9  |             | 14  |                 |
|      X1/Y1                                       X2/Y2      |
|                 | 16  |             | 21  |                 |
|           | 19  | 15  | 17  | | 24  | 20  | 22  |           |
|                 | 18  |             | 23  |                 |
---------------------------------------------------------------

USB HID joystick map :
---------------------------------------------------------------
| Fn L| B2 U| B26 U|        | B3  |        | B28 U| B5 U| B4 L|
---------------------------------------------------------------
|     | TH |  B6  | B8  |             | B13 | B12 | B11 |     |
|                                                             |
|                 | B9  |             | B14 |                 |
|                 | B10 |             | B15 |                 |
|      X1/Y1                                       X2/Y2      |
|                 | H1U |             | H2U |                 |
|           | H1L | B18 | H1R | | H2L | B19 | H2R |           |
|                 | H1D |             | H2D |                 |
---------------------------------------------------------------

USB HID joystick map (Fn):
---------------------------------------------------------------
| Fn L| B21 U| B27 U|       | B3  |       | B28 U| B5 U| B22 L|
---------------------------------------------------------------
|      | TH |  B7 | B8  |             | B13 | B24 | B23 |     |
|                                                             |
|                 | B29 |             | B31 |                 |
|                 | B30 |             | B32 |                 |
|      X1/Y1                                       X2/Y2      |
|                 | H3U |             | H4U |                 |
|           | H3L | B20 | H3R | | H4L | B25 | H4R |           |
|                 | H3D |             | H4D |                 |
---------------------------------------------------------------

Config Layer (holding CONFIG button)
---------------------------------------------------------------
|BOOT L| CAL U|           | CONFIG |              |  -  |  -  |
---------------------------------------------------------------
|     |  -  |  -  |  -  |             |  -  |  -  |  -  |     |
|                                                             |
|                 |  -  |             |  -  |                 |
|                 |  -  |             |  -  |                 |
|        -/-                                        -/-       |
|                 |  -  |             |  -  |                 |
|           |  -  |  -  |  -  | |  -  |  -  |  -  |           |
|                 |  -  |             |  -  |                 |
---------------------------------------------------------------

```

## Features

- Ergonomic design (low profile)
- Hall effect gimbals
- Supports both USB HID joystick and ELRS Tx
- Total 6x axis, 4x hat switches and 32x buttons (using Fn mode) implemented in USB HID mode

## Hardware

- 2x FrSky M7 or M10 gimbals [M7 datasheet](https://www.frsky-rc.com/product/m7/)
- 6x Kailh choc low profile switches [Brown](http://www.kailh.com/en/Products/Ks/CS/)
- 8x Cherry MX switches [Brown](https://www.cherrymx.de/en/cherry-mx/mx-original/mx-brown.html)
- 2x Miniature Toggle Switch (M6 shaft, 7-8mm wide body. Ex Apem 5636) [Apem 5000 series](https://www.farnell.com/datasheets/2626614.pdf?_ga=2.22934718.461231604.1570510103-1672862477.1542183430)
- 2x Alpine RKJXM1015004 hat switches [pdf](https://www.mouser.se/datasheet/2/15/RKJXM-1662398.pdf)
- 1x Bottom case (3D printed)
- 1x Top plate (3D printed)
- 2x Hat swith top (3D printed) [stl](/mCAD/Hat_Castle_Short_scale_99_99_130.stl)
- 1x Custom PCB (CMDR Joystick 25 rev A)

  - ![pcb_top](/eCAD/cmdr-joystick/cmdr-joystick_rev_a_board_top.png)
  - ![pcb_bottom](/eCAD/cmdr-joystick/cmdr-joystick_rev_a_board_bottom.png)
  - Gerber files: [zip](/eCAD/cmdr-joystick/cmdr-joystick_rev_a_gerber.zip)
  - Schematics: [pdf](/eCAD/cmdr-joystick/cmdr-joystick_rev_a_schematics.pdf)
    - rp2040zero pinout: [jpg](https://www.waveshare.com/w/upload/2/2b/RP2040-Zero-details-7.jpg)
    - rp2040zero schematic: [pdf](https://www.waveshare.com/w/upload/4/4c/RP2040_Zero.pdf)
    - eeprom 24C32LV: [pdf](https://www.mouser.se/datasheet/2/308/1/NV24C32LV_D-2319484.pdf)
    - P-Fet si2372eds: [pdf](https://www.vishay.com/docs/63924/si2371eds.pdf)
    - N-Fet 2N7002: [pdf](https://www.mouser.se/datasheet/2/408/T2N7002AK_datasheet_en_20150401-1916411.pdf)
    - Small signal diod 1N4148W: [pdf](https://www.diodes.com/assets/Datasheets/BAV16W_1N4148W.pdf)

## Software Build environment

##### Rust

- Cargo (rust embedded)
- Flashing via Cargo
  - Press and hold boot button on rp2040zero board while perform a reset
  - Press and hold CONF and press BOOT button.

## References

- rp2040 datasheet: [pdf](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf)

## Calibration

1. Center both gimbals.
2. Press and hold CONF button and press CAL botton. Status led will start blinking green.
3. Move both gimbals to all corners.
4. Press right hat switch to save calibration data to eeprom.
