#include "Arduino.h"
#ifndef FT18_STW_Init
#define FT18_STW_Init

#define l 78       // test_led
#define led1 12    // PD8
#define led2 11    // PD7
#define led3 9     // PC21
#define led4 8     // PC22
#define led5 7     // PC23
#define led6 6     // PC24
#define led7 5     // PC25
#define led8 4     // PC26 und PA29
#define led9 3     // PC28
#define led10 2    // PB25
#define led11 10   // PC29 und PA28
#define led12 22   // PB26
#define led13 19   // PA10
#define led14 13   // PB27
#define led15 17   // PA12
#define led16 18   // PA11
#define button1 48 // bl
#define button2 47 // gl
#define button3 44 // gr
#define button4 46 // br
#define button5 45 // sl
#define button6 49 // sr
#define enc1PinA 37
#define enc1PinB 38
#define enc1PinS 35
#define enc2PinA 40
#define enc2PinB 41
#define enc2PinS 39

// define Drehzahlgrenzen TODOOOO
#define RPM_THRES_1 1000
#define RPM_THRES_2 6000
#define RPM_THRES_3 7000
#define RPM_THRES_4 8000
#define RPM_THRES_5 10000
#define RPM_THRES_6 14000
#define RPM_THRES_7 17000
#define RPM_THRES_8 18000
#define RPM_THRES_9 20000
#define RPM_THRES_10 20000

void set_pins(void);
void read_buttons(void);
void read_rotary(void); // read rotary switches

typedef struct {
  uint8_t Stw_shift_up;   // 1 Bit	0
  uint8_t Stw_shift_down; // 1 Bit	1
  uint8_t Stw_neutral;    // 1 Bit	2
  uint8_t Stw_auto_shift; // 1 Bit	3
  uint8_t buttonState1;   // 1 Bit	4
  uint8_t buttonState4;   // 1 Bit	5
  // bool		CAN_toggle;
  // bool		CAN_check;
  // uint8_t		i;						//Index
  // linker Drehschalter
  uint8_t buttonStateEnc1; // button
  // uint8_t		br;						//test
  // mode : mittlere Drehschalter position
  uint8_t buttonStateEnc2; // button
  uint8_t displayindex;    // index für Displayanzeige
  uint8_t error_type;      // Extrainfos über Error-LED
  uint8_t trc;
  uint8_t mode;

  uint8_t button1_rises;
  uint8_t button4_rises;
  uint8_t enc1_rises;
  uint8_t enc2_rises;
} stw_data_type;

typedef struct {
  uint8_t e_thro;  // E-Drossel
  uint8_t g_auto;  // Auto-Shift
  uint8_t gear;    // Gang
  uint16_t revol;  // Drehzahl
  uint8_t t_oil;   // Öl-Motor-Temperatur
  uint8_t t_mot;   // Wasser-Motor-Temperatur
  uint8_t t_air;   // LLK-Temperatur
  uint8_t t_tfl;   // Tire temp front left
  uint8_t t_tfr;   // Tire temp front right
  uint8_t t_trl;   // Tire temp rear left
  uint8_t t_trr;   // Tire temp rear right
  uint8_t u_batt;  // Batteriespannung
  uint8_t rev_lim; // Drehzahllimit Bit
  bool drs_active; // DRS status from BCU
  uint8_t p_wat;
  uint8_t p_fuel;
  uint8_t p_oil;
  uint8_t p_brake_front;
  uint8_t p_brake_rear;
  uint8_t speed_fl;
  uint8_t speed_fr;
  uint8_t speed;
  uint8_t lap_time_sec;
  uint16_t lap_time_msec;
} vehicle_data_type;

extern volatile stw_data_type Stw_data;
extern volatile vehicle_data_type Vehicle_data;

#endif