Jump to content

How can I use a 5 bit switch with DCS Bios?


Recommended Posts

Ian wrote a code that I used for the IFF panel BCD switches. It’s in the post under Home Cockpit and then the thread on IFF panel. It works great for BCD encoders that uses 4 bits but if you had 5 or 6 or more I’m sure this code could be adapted for the extra bits. Also he included a neat feature where you could select if the bits were active low “GND” , or active high “5V”. You had to comment out one of the code lines. He explains it in the IFF post.

 

 

#define DCSBIOS_IRQ_SERIAL

 

#include "DcsBios.h"

 

namespace DcsBios {

class SwitchMultiPosBCD : PollingInput {

private:

const char* msg_;

const byte* pins_;

char numberOfPins_;

char lastState_;

 

char readState() {

unsigned char i;

unsigned char state = 0;

for (i=0; i<numberOfPins_; i++) {

unsigned char j = numberOfPins_ - i - 1;

state |= (digitalRead(pins_) << j);

}

return state;

}

 

void pollInput() {

char state = readState();

if (state != lastState_) {

char buf[7];

utoa(state, buf, 10);

if (tryToSendDcsBiosMessage(msg_, buf))

lastState_ = state;

}

}

public:

SwitchMultiPosBCD(const char* msg, const byte* pins, char numberOfPins) : lastState_(0) {

msg_ = msg;

pins_ = pins;

numberOfPins_ = numberOfPins;

unsigned char i;

for (i=0; i<numberOfPins; i++) {

pinMode(pins, INPUT_PULLUP);

}

lastState_ = readState();

}

};

}

 

const byte iffMode1Wheel1Pins[4] = {5, 6, 7, 8};

DcsBios::SwitchMultiPosBCD iffMode1Wheel1("IFF_MODE1_WHEEL1", iffMode1Wheel1Pins, 4);

 

void setup() {

DcsBios::setup();

}

 

void loop() {

DcsBios::loop();

}

  • Like 1
Link to comment
Share on other sites

When I plug this code directly into the Arduino compiler, I get sad panda:

 

'tryToSendDcsBiosMessage' was not declared in this scope

 

<Edit> Found out what was up after playing with the library. Yep, I added this to the actual library instead of the compiler for now.

 

In your line of code above, you have:

if (tryToSendDcsBiosMessage(msg_, buf))

All the other switches use the following:

if (sendDcsBiosMessage(msg_, buf))

After I changed to the later one to mimic the other switches in the library, it finally compiles and reads my switch, all twenty positions! BUT, it reads it in binary instead of Gray code (my preset values are not correct on serial monitor), so I got that going for me. I will figure this out by the weekend! Thanks!!!!


Edited by Trounce
Link to comment
Share on other sites

Thanks. Glad you are looking into it. I would like to see the BCD class and Grey Code class encoders added to the DCS Bios switch.h file or maybe it belongs to the encoders.h file.

 

P.S.

I used my laptop and pulled the latest library from github, the Dcs-Bios-arduino-library-0.2.11\src\internal\switch.h

all the switch classes show as below

if (tryToSendDcsBiosMessage(msg_, buf))

 

But glad you can figure this out.

Link to comment
Share on other sites

Well Gray code is kicking my A**. I am not going to try and think about this for the rest of tonight. My attempts to code is trial and error plugging things in here and there without to much knowledge of what I'm doing until it works somehow, heh.

Link to comment
Share on other sites

Well Gray code is kicking my A**. I am not going to try and think about this for the rest of tonight. My attempts to code is trial and error plugging things in here and there without to much knowledge of what I'm doing until it works somehow, heh.

 

I know that feeling, sometimes it's good to just go take time out sometimes not thinking about something can make it clearer when you come back to it.

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

SUCCESS!!!!!!!! So, it's super messed up code probably, but it 100% works. Heh, after 52oz of scotch I got it to work. I saved it and on putting it on here for posterity. I used Boolean with and wrote a new switch class as well. It only works up to channel 10 so far, because I have to plot the last 10 channels 11-20 truth table tomorrow. To easy! Now, all my ARC-164 switches work. Check out this new switch class and Boolean for the gray code (NOTE, this code contains all programs for my switches. It takes an almost an entire Arduino Mega to run an ARC-164 face plate) (additional note for others wanting to use this... my wires aren't in order in anyway, you just have to change the pin numbers to correspond to the ones YOU are using):

#define DCSBIOS_IRQ_SERIAL
#include "DcsBios.h"
#include <LedControl.h>
/* This code is used on the Arduino Mega */

namespace DcsBios {
 class Switch20Pos : PollingInput {
   private:
     const char* msg_;
     char pinA_;
     char pinB_;
     char pinC_;
     char pinD_;
     char pinE_;
     char lastState_;
     char readState() {
// set pin numbers:
const int switchPin1 = A2; // the number of the switch’s pin
const int switchPin2 = A6; // the number of the switch’s pin
const int switchPin3 = A3; // the number of the switch’s pin
const int switchPin4 = A1; // the number of the switch’s pin
const int switchPin5 = A5;
// set variables:
int switchState1 = 0; // variable for reading the switch’s status
int switchState2 = 0; // variable for reading the switch’s status
int switchState3 = 0; // variable for reading the switch’s status
int switchState4 = 0; // variable for reading the switch’s status
int switchState5 = 0;
switchState1 = digitalRead(switchPin1);
switchState2 = digitalRead(switchPin2);
switchState3 = digitalRead(switchPin3);
switchState4 = digitalRead(switchPin4);
switchState5 = digitalRead(switchPin5);
          if (((switchState1 && switchState2 && switchState3 && switchState4) == HIGH ) && (switchState5 == LOW))return 1;
          if (((switchState1 && switchState3 && switchState4) == HIGH ) && ((switchState2 or switchState5 ) == LOW)) return 2;
          if (((switchState1 && switchState3 && switchState4 && switchState5) == HIGH) && (switchState2 == LOW)) return 3;
          if (((switchState1 && switchState4 && switchState5) == HIGH) && ((switchState2 or switchState3)== LOW)) return 4;
          if (((switchState1 && switchState4) == HIGH) && ((switchState2 or switchState3 or switchState5)== LOW)) return 5;
          if (((switchState1 && switchState2 && switchState4) == HIGH) && ((switchState3 or switchState5)== LOW)) return 6;
          if (((switchState1 && switchState2 && switchState4 && switchState5) == HIGH) && (switchState3 == LOW)) return 7;
          if (((switchState1 && switchState2 && switchState5) == HIGH) && ((switchState3 or switchState4)== LOW)) return 8;
          if (((switchState1 && switchState2) == HIGH) && ((switchState3 or switchState4 or switchState5)== LOW)) return 9;
          if ((switchState1 == HIGH) && ((switchState2 or switchState3 or switchState4 or switchState5)== LOW)) return 10;
          
       
       return 4;
     }
     void pollInput() {
       char state = readState();
       if (state != lastState_) {
         if (state == 0)
           if (tryToSendDcsBiosMessage(msg_, "0"))
             lastState_ = state;
         if (state == 1)
           if (tryToSendDcsBiosMessage(msg_, "1"))
             lastState_ = state;
         if (state == 2)
           if (tryToSendDcsBiosMessage(msg_, "2"))
             lastState_ = state;
         if (state == 3)
           if (tryToSendDcsBiosMessage(msg_, "3"))
             lastState_ = state;
         if (state == 4)
           if (tryToSendDcsBiosMessage(msg_, "4"))
             lastState_ = state;
         if (state == 5)
           if (tryToSendDcsBiosMessage(msg_, "5"))
             lastState_ = state;
         if (state == 6)
           if (tryToSendDcsBiosMessage(msg_, "6"))
             lastState_ = state;
         if (state == 7)
           if (tryToSendDcsBiosMessage(msg_, "7"))
             lastState_ = state;
         if (state == 8)
           if (tryToSendDcsBiosMessage(msg_, "8"))
             lastState_ = state;
         if (state == 9)
           if (tryToSendDcsBiosMessage(msg_, "9"))
             lastState_ = state;
         if (state == 10)
           if (tryToSendDcsBiosMessage(msg_, "10"))
             lastState_ = state;
         if (state == 11)
           if (tryToSendDcsBiosMessage(msg_, "11"))
             lastState_ = state;
         if (state == 12)
           if (tryToSendDcsBiosMessage(msg_, "12"))
             lastState_ = state;
         if (state == 13)
           if (tryToSendDcsBiosMessage(msg_, "13"))
             lastState_ = state;
         if (state == 14)
           if(tryToSendDcsBiosMessage(msg_, "14"))
             lastState_ = state;
         if (state == 15)
           if (tryToSendDcsBiosMessage(msg_, "15"))
             lastState_ = state;
         if (state == 16)
           if (tryToSendDcsBiosMessage(msg_, "16"))
             lastState_ = state;
         if (state == 17)
           if (tryToSendDcsBiosMessage(msg_, "17"))
             lastState_ = state;
         if (state == 18)
           if (tryToSendDcsBiosMessage(msg_, "18"))
             lastState_ = state;
         if (state == 19)
           if(tryToSendDcsBiosMessage(msg_, "19"))
             lastState_ = state;
             
       
       }
     }
   public:
     Switch20Pos(const char* msg, char pinA, char pinB, char pinC, char pinD, char pinE) {
       msg_ = msg;
       pinA_ = pinA;
       pinB_ = pinB;
       pinC_ = pinC;
       pinD_ = pinD;
       pinE_ = pinE;
       
       pinMode(pinA_, INPUT_PULLUP);
       pinMode(pinB_, INPUT_PULLUP);
       pinMode(pinC_, INPUT_PULLUP);
       pinMode(pinD_, INPUT_PULLUP);
       pinMode(pinE_, INPUT_PULLUP);
       
       lastState_ = readState();
     }
 };
}





// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl lc = LedControl(9, 11, 10, 1); /* These are on the PWM output on the Mega, it's okay to use them */
// lc.setChar(0, 6, 3, false);
//lc.setChar(0, 7, 2, false);
void onUhfFrequencyChange(char* newValue) { /*UHF display*/

  /* 0,1 = first MAX2719, digit to writ to on MAX2719 output; [0] is the first digit DCS transmits for the display */
 
  lc.setChar(0,1,newValue[0], false); /*DIGIT 1 "0,1"  should have been digit "0,0" but I soldered to wrong max2719 pin for digit 1 instead of digit 0 on the chip. */
  lc.setChar(0,2,newValue[1], false);
  lc.setChar(0,3,newValue[2], true);
  lc.setChar(0,4,newValue[2], false);
  lc.setChar(0,4,newValue[4], false);
  lc.setChar(0,5,newValue[5], false);
  lc.setChar(0,6,newValue[6], false);
}
DcsBios::StringBuffer<7> uhfFrequencyBuffer(0x1180, onUhfFrequencyChange); /*Channel presets*/

void onUhfPresetChange(char* newValue) {
  
  lc.setChar(0,7,newValue[0], false);
  lc.setChar(0,0,newValue[1], false); /*I just wrote the code to reuse digit 0 on the MAX2719 chip for the UHF Preset channel selector instead */
}
DcsBios::StringBuffer<2> uhfPresetBuffer(0x1188, onUhfPresetChange);

void onUhfPresetSelChange(char* newValue) {



}
DcsBios::StringBuffer<2> uhfPresetSelStrBuffer(0x1176, onUhfPresetSelChange);


/* ******VALIDATED LINE INCLUDING PINS, I soldered the pins and plugged them in randomly. Use serial monitor to see which ones are wired where. ****** */ 
const byte uhf10mhzSelPins[10] = {38, 40, 34, 42, 36, 46, 52, 50, 44, 48,}; 
DcsBios::SwitchMultiPos uhf10mhzSel("UHF_10MHZ_SEL", uhf10mhzSelPins, 10);

/* ******VALIDATED LINE INCLUDING PINS****** */ 
const byte uhf1mhzSelPins[10] = {37, 53, 47, 45, 49, 43, 51, 39, 41, 35};
DcsBios::SwitchMultiPos uhf1mhzSel("UHF_1MHZ_SEL", uhf1mhzSelPins, 10);

/* ******VALIDATED LINE INCLUDING PINS****** */ 
const byte uhfPoint1mhzSelPins[10] = {31, 26, 29, 27, 22, 30, 25, 24, 28, 23,};
DcsBios::SwitchMultiPos uhfPoint1mhzSel("UHF_POINT1MHZ_SEL", uhfPoint1mhzSelPins, 10);

/* ******VALIDATED LINE INCLUDING PINS****** */ 
DcsBios::Switch3Pos uhfTTone("UHF_T_TONE", A10, A9);

/*!!!!!!!!!!!!!!! not not NOT not NOT VALIDATED */ 
const byte uhf100mhzSelPins[3] = {5, 6, 7};
DcsBios::SwitchMultiPos uhf100mhzSel("UHF_100MHZ_SEL", uhf100mhzSelPins, 3);

/* ******VALIDATED LINE INCLUDING PINS****** */ 
const byte uhfPoint25SelPins[4] = {2, 8, 4, 3};
DcsBios::SwitchMultiPos uhfPoint25Sel("UHF_POINT25_SEL", uhfPoint25SelPins, 4);

const byte uhfFunctionPins[4] = {17, 14, 16, 15};
DcsBios::SwitchMultiPos uhfFunction("UHF_FUNCTION", uhfFunctionPins, 4);

DcsBios::Switch3Pos uhfMode("UHF_MODE",  20, 19);

DcsBios::Switch2Pos uhfSquelch("UHF_SQUELCH", A8);

DcsBios::Switch20Pos uhfPresetSel("UHF_PRESET_SEL", A2, A6, A3, A1, A5);

void setup() {
 DcsBios::setup();

 //This initializes the MAX7219 and gets it ready of use:
 lc.shutdown(0,false); //turn on the display
 lc.setIntensity(0,8);//set the brightness 
 lc.clearDisplay(0); //clear the display 



}

void loop() {
 DcsBios::loop();
}


Edited by Trounce
Link to comment
Share on other sites

Okay. I has having some code difficulties where channel 16 should start. So I re-wired my pins to be in order now to make it easier to distill. I have a code that I use to view the logic and write the logic tables before implementing them in DCS-Bios for the switch I want to share with you all. This logic table can be used for binary/gray code:


// This code will show you what pins are outputting on the analog pins that you want to use your ARC-164 Preset selector on
// This code is designed to help you see the pins to write your logic table while in serial monitor
// after finding out the logic table that works for you, you can implement the Switch20Pos class that I built with your logic table
// set pin numbers:
const int switchPin1 = A1; // the number of the switch’s pin
const int switchPin2 = A2; // the number of the switch’s pin
const int switchPin3 = A3; // the number of the switch’s pin
const int switchPin4 = A4; // the number of the switch’s pin
const int switchPin5 = A5;
// set variables:
int switchState1 = 0; // variable for reading the switch’s status
int switchState2 = 0; // variable for reading the switch’s status
int switchState3 = 0; // variable for reading the switch’s status
int switchState4 = 0; // variable for reading the switch’s status
int switchState5 = 0; // variable for reading the switch’s status




void setup() {
// Start serial debugging…
Serial.begin(250000);
// initialize the switch pins as an input:
// sets the analog pins to High
pinMode(switchPin1, INPUT);
digitalWrite(A1,HIGH);
pinMode(switchPin2, INPUT);
digitalWrite(A2,HIGH);
pinMode(switchPin3, INPUT);
digitalWrite(A3,HIGH);
pinMode(switchPin4, INPUT);
digitalWrite(A4,HIGH);
pinMode(switchPin5, INPUT);
digitalWrite(A5,HIGH);
}

void loop(){
// read the state of the switch’s individual pins:
switchState1 = digitalRead(switchPin1);
switchState2 = digitalRead(switchPin2);
switchState3 = digitalRead(switchPin3);
switchState4 = digitalRead(switchPin4);
switchState5 = digitalRead(switchPin5);

// The next code will show all 5 switch states in serial monitor and which ones are on/off.
if (switchState1 == HIGH) {
Serial.println("switchState1   ON"); 
}
else {
Serial.println("switchState1  ---");
}
 if (switchState2 == HIGH) {
Serial.println("siwtchState2   ON"); 
}
else {
Serial.println("switchState2   ---");
}
if (switchState3 == HIGH) {
Serial.println("switchState3   ON"); 
}
else {
Serial.println("switchState3   ---");
}
 if (switchState4 == HIGH) {
Serial.println("switchState4   ON"); 
}
else {
Serial.println("switchState4   ---");
}
 if (switchState5 == HIGH) {
Serial.println("switchState5   ON"); 
}
else {
Serial.println("switchState5   ---");
}
//This next code is where you will build your logic table
//The logic table below is for my switch and may differ a little from yours. Just plug and play around
//Channel 1
  if (((switchState1 && switchState2 && switchState3 && switchState4) == HIGH ) && (switchState5 == LOW)){
Serial.println("Channel 1   ON");
}
else {
Serial.println("Channel 1   ---");
}
//Channel 2  /*VALIDATED!!!!!! */
  if (( (switchState1 && switchState3 && switchState4) == HIGH ) && ((switchState2 or switchState5 ) == LOW)) {
Serial.println("Channel 2   ON");
}
else {
Serial.println("Channel 2   ---");
}
//Channel 3  /*VALIDATED!!!!!! */
  if (((switchState1 && switchState3 && switchState4 && switchState5) == HIGH) && (switchState2 == LOW)) {
Serial.println("Channel 3   ON");
}
else {
Serial.println("Channel 3   ---");//
}
 //Channel 4  /*VALIDATED!!!!!! */
  if (((switchState1 && switchState4 && switchState5) == HIGH) && ((switchState2 or switchState3)== LOW)) {
Serial.println("Channel 4   ON");
}
else {
Serial.println("Channel 4   ---");
}
  //Channel 5  /*VALIDATED!!!!!! */
  if (((switchState1 && switchState4) == HIGH) && ((switchState2 or switchState3 or switchState5)== LOW)) {
Serial.println("Channel 5   ON");
}
else {
Serial.println("Channel 5   ---");
}
   //Channel 6  /*VALIDATED!!!!!! */
  if (((switchState1 && switchState2 && switchState4) == HIGH) && ((switchState3 or switchState5)== LOW)) {
Serial.println("Channel 6   ON");
}
else {
Serial.println("Channel 6   ---");
}
    //Channel 7  /*VALIDATED!!!!!! */
  if (((switchState1 && switchState2 && switchState4 && switchState5) == HIGH) && (switchState3 == LOW)) {
Serial.println("Channel 7   ON");
}
else {
Serial.println("Channel 7   ---");
}
    //Channel 8  /*VALIDATED!!!!!! */
  if (((switchState2 && switchState4 && switchState5) == HIGH) && ((switchState1 or switchState3)== LOW)) {
Serial.println("Channel 8   ON");
}
else {
Serial.println("Channel 8   ---");
} 
     //Channel 9  /*VALIDATED!!!!!! */
  if (((switchState2 && switchState4) == HIGH) && ((switchState1 or switchState3 or switchState5)== LOW)) {
Serial.println("Channel 9   ON");
}
else {
Serial.println("Channel 9   ---");
}
     //Channel 10  /*VALIDATED!!!!!! */
  if ((switchState4 == HIGH) && ((switchState1 or switchState2 or switchState3 or switchState5)== LOW)) {
Serial.println("Channel 10   ON");
}
else {
Serial.println("Channel 10   ---");
}
     //Channel 11  /*VALIDATED!!!!!! */
  if (((switchState4 && switchState5)== HIGH) && ((switchState1 or switchState2 or switchState3)== LOW)) {
Serial.println("Channel 11   ON");
}
else {
Serial.println("Channel 11   ---");
}
     //Channel 12  /*VALIDATED!!!!!! */
  if (((switchState3 && switchState4 && switchState5)== HIGH) && ((switchState1 or switchState2)== LOW)) {
Serial.println("Channel 12   ON");
}
else {
Serial.println("Channel 12   ---");
}
      //Channel 13  /*VALIDATED!!!!!! */
  if (((switchState3 && switchState4)== HIGH) && ((switchState1 or switchState2 or switchState5)== LOW)) {
Serial.println("Channel 13   ON");
}
else {
Serial.println("Channel 13   ---");
}
      //Channel 14  /*VALIDATED!!!!!! */
  if (((switchState2 && switchState3 && switchState4)== HIGH) && ((switchState1 or switchState5)== LOW)) {
Serial.println("Channel 14   ON");
}
else {
Serial.println("Channel 14   ---");
}
       //Channel 15  /*VALIDATED!!!!!! */
   if (((switchState2 && switchState3 && switchState4 && switchState5)== HIGH) && (switchState1 == LOW)) {
Serial.println("Channel 15   ON");
}
else {
Serial.println("Channel 15   ---");
}

// from this point on channels that should be 16-20 do not reflect correctly on my switch;
// the preset selector starts counting backwards when it should be on channel 16 example: Still good ==>13, 14, 15, 15*(bugged now)===>(should be 16), 14(17) 13(18) 12(19) 11(20)
// the only possibility I can think of is that I may have not counted on another pin somewhere, maybe a surface mount at the base of the switch?
Serial.println("\n");

delay(2000);
}

Link to comment
Share on other sites

Nice, I was going to mention, well, maybe some Bourbon as an alternative however a break is also good sometimes. :thumbup:

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

Have a look at he chart on the wiki page.

 

https://en.wikipedia.org/wiki/Gray_code

 

You'l see your columns don't match the digit (bit) positions of the columns in the chart.

 

For instance you A5 is bit 0 and your A2 is bit 1 and so forth.

 

Also for your A4 <my bad> column do you have a short or something even a miss wiring it looks to always be off?


Edited by FragBum
<edit>

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

:D

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

It looks to me that when you get to 15 the truth table starts going down again so maybe 15 is the max for 5 pins.

AMD A8-5600K @ 4GHz, Radeon 7970 6Gig, 16 Gig Ram, Win 10 , 250 gig SSD, 40" Screen + 22 inch below, Track Ir, TMWH, Saitek combat pedals & a loose nut behind the stick :thumbup:

Link to comment
Share on other sites

Well as I understand it there are 6 pins to the switch so a common and 5 bits can express 32 unique bit patterns, zero to 31.

 

Not sure of the switch mapping however column A4 is always off and after the 1 to 15 pattern the pattern starts to reverse. Even then I don't see a zero pattern maybe that's not included. However 4 data bits gets you 16 unique bit patterns.

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

Well, I am happy with 15 preset channels working. I actually think the switch pin 4 might have a short since it's always tied to ground (internally in the switch itself). Oh well. I'm going to call the case closed and run with 15. Thanks!

Link to comment
Share on other sites

Well, I am happy with 15 preset channels working. I actually think the switch pin 4 might have a short since it's always tied to ground (internally in the switch itself). Oh well. I'm going to call the case closed and run with 15. Thanks!

 

Damn it that's just reminded me that I have some 40ch CB channel switches in a box somewhere. WoT. :D

Control is an illusion which usually shatters at the least expected moment.

Gazelle Mini-gun version is endorphins with rotors. See above.

 

Currently rolling with a Asus Z390 Prime, 9600K, 32GB RAM, SSD, 2080Ti and Windows 10Pro, Rift CV1. bu0836x and Scratch Built Pedals, Collective and Cyclic.

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...