Skip to content

Instantly share code, notes, and snippets.

View BenJuan26's full-sized avatar

Benjamin Schubert BenJuan26

  • Qlik
  • Toronto
View GitHub Profile
func checkStatusAndUpdate() error {
s, err = getSerialPort(getPNPDeviceID())
if err != nil {
return err
}
status, err := elite.GetStatusFromPath(filepath.FromSlash(getLogDir()))
if err != nil {
return err
}
const baudRate = 9600
type serialPort struct {
MaxBaudRate int
DeviceID string
}
func getSerialPort(pnp string) (*serial.Port, error) {
var dst []serialPort
func main() {
c := &serial.Config{Name: "COM45", Baud: 115200}
s, err := serial.OpenPort(c)
if err != nil {
log.Fatal(err)
}
n, err := s.Write([]byte("test"))
if err != nil {
log.Fatal(err)
// ExpandFlags parses the RawFlags and sets the Flags values accordingly.
func (status *Status) ExpandFlags() {
status.Flags.Docked = status.RawFlags&FlagDocked != 0
status.Flags.Landed = status.RawFlags&FlagLanded != 0
status.Flags.LandingGearDown = status.RawFlags&FlagLandingGearDown != 0
// etc.
}
func GetStatus() (*Status, error) {
// Build the file path from the user's home directory.
// Status represents the current state of the player and ship.
type Status struct {
Timestamp string `json:"timestamp"`
Event string `json:"event"`
// Naming this 'RawFlags' since it will only really by used until
// the values are extracted into the Flags below.
RawFlags uint32 `json:"Flags"`
// The actual flag values will be set by parsing RawFlags.
// Get the states of the physical switches and write them to the Toggleswitch objects.
// Assuming for now that all global variables referenced here are declared and initialized.
void updateKeys() {
if (!kpd.getKeys()) {
return;
}
for (int i = 0; i < LIST_MAX; i++) {
if (kpd.key[i].kchar == NO_KEY) {
continue;
void serialRx() {
if (!Serial.available()) {
return;
}
DynamicJsonBuffer jsonBuffer(512);
JsonObject &root = jsonBuffer.parseObject(Serial);
if (!root.success()) {
return;
}
// Global variable to hold the flags from the game state.
#define NO_FLAGS 0
unsigned long currentFlags = NO_FLAGS;
// Each button press will last about 100ms.
#define BUTTON_HOLD_TIME 100
struct Toggleswitch {
byte currState; // State of the physical switch.
byte lastState; // Last known state of the physical switch.
{
"timestamp": "2017-12-07T10:31:37Z",
"event": "Status",
"Flags": 16842765,
"Pips": [2,8,2],
"FireGroup": 0,
"Fuel": {
"FuelMain": 15.146626,
"FuelReservoir": 0.382796
},
@BenJuan26
BenJuan26 / elite-dangerous-simple.ino
Last active November 4, 2022 06:47
An Arduino sketch for Elite Dangerous that receives data from the game and keeps its switches in sync with the game state.
#include <ArduinoJson.h>
#include <Key.h>
#include <Keypad.h>
// Allow 5 seconds of lag from the device, to the game, and back to the device.
#define BUTTON_SYNC_TIME 5000
// Each button press will last about 100ms.
#define BUTTON_HOLD_TIME 100