# Pinouts and Remote Control

## Pinouts

<figure><img src="https://3429200414-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LaNHxABbg20hfA0zTDQ%2Fuploads%2FkptFq05GLnw7UazT3BUq%2Fpinout_PWR.svg?alt=media&#x26;token=73aa73f1-efda-43ab-a127-5702ab6f054b" alt=""><figcaption><p>Ember Power Pinout</p></figcaption></figure>

Freefly P/N [910-00713](https://store.freeflysystems.com/products/ember-d-tap-power-cable) can be used to power Ember from a D-Tap power supply or battery output.

<figure><img src="https://3429200414-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LaNHxABbg20hfA0zTDQ%2Fuploads%2F1YLpGtyZXydN7RqpJlzG%2Fpinout_GPIO.svg?alt=media&#x26;token=17650e21-fb12-4050-a040-0f104426ae0f" alt=""><figcaption><p>Ember GPIO Pinout</p></figcaption></figure>

Freefly P/N [910-00661](https://store.freeflysystems.com/products/movi-pro-wave-remote-control-cable) can be used directly to connect Mōvi Pro, Mōvi XL, or Mōvi Carbon to the GPIO port on Ember. It can also be used as a donor cable for making a custom cable for remote start/stop or menu control (see below).

## Simple Remote Start/Stop (GPI)

GPI2/RS can be used to create a simple remote start/stop trigger, either using a physical momentary switch or with active logic from a host microcontroller:

<figure><img src="https://3429200414-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LaNHxABbg20hfA0zTDQ%2Fuploads%2FZ9UGb5Si0UqnmKZ7T7Je%2FRS_Switch.svg?alt=media&#x26;token=cfb3c994-06d3-4c6e-ab10-01af009affb2" alt=""><figcaption><p>Wiring for start/stop with a momentary switch.</p></figcaption></figure>

<figure><img src="https://3429200414-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LaNHxABbg20hfA0zTDQ%2Fuploads%2FwOeqD6gXhepL0757XivB%2FRS_Logic.svg?alt=media&#x26;token=43357aaf-0f2d-45e3-b76f-f3562ff8dd30" alt=""><figcaption><p>Wiring for start/stop with a host microcontroller.</p></figcaption></figure>

In both cases, recording toggled on/off on the rising edge of the GPI2/RS signal. Debouncing and edge detection is handled on-camera. The minimum low pulse is 8ms and the minimum high pulse is 500ms. Pulses shorter than these values will be ignored.

<figure><img src="https://3429200414-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LaNHxABbg20hfA0zTDQ%2Fuploads%2Fk0R5bIcxTyINe5SjtFda%2FRS_Timing.svg?alt=media&#x26;token=f5db1878-8a8e-49c5-b588-e946a8da9f65" alt=""><figcaption><p>GPI2/RS behavior and minimum pulse times.</p></figcaption></figure>

Since the GPIO interface is optically isolated, the host most also supply 3.3-5.0V power on VIN, to power its side of the optocoupler. The current drawn will be <20mA. GPI2/RS is pulled up to VIN in the camera, so the host-supplied power should match the logic voltage.

## QX10001 Remote Menu Control (UART)

An external host can control the camera by transmitting a specific packet to the camera, which receives it on the UART Rx pin. The UART configuration is 115200 8-N-1. Packets may be sent only when user inputs are made on the external device (preferred) or on a regular interval up to 100Hz.

<figure><img src="https://3429200414-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LaNHxABbg20hfA0zTDQ%2Fuploads%2F6cBj476RSOrLqMahL6v6%2FUART.svg?alt=media&#x26;token=ec5639f4-84a7-48ff-b7da-403becc4d321" alt=""><figcaption><p>Wiring for UART control.</p></figcaption></figure>

The following table specifies the packet used to remotely control the on-camera menu and start/stop recording. Numbers with an 'h' suffix (e.g. 51h) are hexadecimal values. Numbers with no suffix are decimal values. Characters in single quotes (e.g. 'Q') are ASCII characters.

<table><thead><tr><th width="109.66666666666666" align="center">Position</th><th width="153" align="center">Value</th><th>Description</th></tr></thead><tbody><tr><td align="center">0</td><td align="center">'Q' (51h)</td><td>Start Byte 1</td></tr><tr><td align="center">1</td><td align="center">'X' (58h)</td><td>Start Byte 2</td></tr><tr><td align="center">2</td><td align="center">20 (14h)</td><td>The length of the packet between this position and the checksum, exclusive.</td></tr><tr><td align="center">3</td><td align="center">91h</td><td>Attribute ID 1: 80h | (10001 &#x26; 7Fh)</td></tr><tr><td align="center">4</td><td align="center">4Eh</td><td>Attribute ID 2: (10001 >> 7) &#x26; 7Fh</td></tr><tr><td align="center">5</td><td align="center">62h</td><td>Options Byte: Tells the receiver that the packet is unencrypted and does not require a response.</td></tr><tr><td align="center">6</td><td align="center">Mode</td><td>Reserved for future use. Must be set to 00h.</td></tr><tr><td align="center">7</td><td align="center">Record</td><td>State of the remote Record button:<br>00h = Not Pressed<br>02h = Pressed<br>All other values reserved for future use.</td></tr><tr><td align="center">8</td><td align="center">Jog</td><td>Signed two’s complement value indicating the number of positions to jog (scroll) the on-camera menu or playback cursor. Positive values scroll right or down, negative values scroll left or up.</td></tr><tr><td align="center">9</td><td align="center">Select</td><td>State of the remote Select button:<br>00h = Not Pressed<br>01h = Pressed</td></tr><tr><td align="center">10-22</td><td align="center">Reserved</td><td>Reserved for future use. Must be set to 00h.</td></tr><tr><td align="center">23</td><td align="center">Checksum</td><td>This checksum byte is set such that the sum of bytes 3-23, mod 256, is 255 (FFh).</td></tr></tbody></table>

The **Record** and **Select** bytes are intended to represent remote Record and Select button presses. They should indicate the physical state of a button without any intervening logic. Edge detection logic is handled by the camera. The camera record state will toggle when the **Record** byte transitions from pressed (02h) to not pressed (00h). Recording can also be started on-camera and stopped remotely or vice versa.

The **Jog** byte is intended to represent a scroll-wheel-like function for navigating the menu, changing settings, or controlling playback speed. Jog values are accumulated across multiple packets. To scroll right or down by one position, send a jog value of 01h in *only one packet*. To scroll left or up by one position, send a jog value of FFh (-1 in two’s complement) in *only one packet*. A scroll wheel or encoder with 10-30 increments per revolution works well. If one isn’t available, D-Pad buttons can be used to send individual increments or decrements.
