title_body: Control opentx transmitter from pc? is a standard way to control a physical aircraft by connecting a frsky transmitter to a PC?
  
  I do NOT want to use the transmitter to control a flight Sim etc.
  
  I'd like to write autopilot software myself, and have it running on a PC. Id like to connect the PC to the transmitter, and have it send inputs to the aircraft, and also send telemetry back.
  
  I'd rather not use an ardupilot.
  
  Anyone have a link to details of someone doing this before?
  
  Tldr: can I use a keyboard to control an aircraft with a frsky transmitter?
upvoted_answer: OpenTX can be built from source for your receiver using various compile options which may be useful.
  
  Enabling USB_SERIAL and CLI will allow connection to your pc using a serial connection, which you can use for bidirectional communication.
  
  You will need to add code to the OpenTX firmware to accept commands from the pc, to control the radio. It may be simplest to utilize the trainer variables to control the outputs.
  
  The changes required are:
  
  in cli.cpp, connect the serial to the trainer variables:
  
  int cliSet(const char ** argv)
  {
    if (!strcmp(argv[1], "trainer"))
    {
      int thr;
      int chan;
      if ( (toInt(argv, 2, &amp;chan) &gt; 0)
         &amp;&amp;(toInt(argv, 3, &amp;thr) &gt; 0))
      {
          ppmInput[chan] = thr;
          ppmInputValidityTimer = 240;//PPM_IN_VALID_TIMEOUT;
          serialPrint("!");
      }
    }
    ...cliSet continues
  }
  
  
  in mixer.cpp, enable all trainer channels by default:
  
  // comment out this check
  //        &amp;&amp; isFunctionActive(FUNCTION_TRAINER_STICK1+ch)
  
  
  in trainer.cpp, clear all trainer signals after timeout:
  
  void checkTrainerSignalWarning()
  {
     ...
     else if (!ppmInputValidityTimer &amp;&amp; (ppmInputValidState == PPM_IN_IS_VALID))
     {
        ppmInputValidState = PPM_IN_INVALID;
        AUDIO_TRAINER_LOST();
        memset(ppmInput, 0, sizeof(ppmInput));   //clear all trainer inputs
     }
     ...
   }
  
  
  You should then be able to use commands over serial such as:
  
  set trainer 1 500
  
  
  to control channel 1 to a value of 500