I heartily agree with John Laur here. If you want to support CW on an SDR, you must have a key input pin, and the FPGA must generate CW when the key pin goes True.
This is based on my own hardware experience, and also my users on the HiQSDR hardware. Adding minimal support is easy, and can be done in stages.
1. There must be some sort of hardware key input on the board. When this input goes True, the FPGA starts a linear ramp from zero output to maximum output at the Tx frequency over 5 millisecs or so. When the key goes False, the output ramps down. The FPGA in/out pins should be protected from damage by a high impedance resistor network, or even by an optocoupler. The state True/False of the key input is sent to the PC as C0 bit 1 or 2. C0 bit zero is PTT. If we have three input pins, we could send the state to the PC as C0[2:0]. On my hardware, the key input also works as PTT, because I send the mode to the FPGA; CW or not. But my HiQsdr users demanded a second input for a mic switch for PTT, and they were insistent. So let's say we need two input pins, or three.
When the PC sees the key is down, it mutes the audio and provides a sidetone. It can switch to Rx when the key goes up, or can wait and implement semi-breakin. The problem so far is that we need sequencing; that is, we must first switch the T/R relay and next key the FPGA. A second problem is that the sidetone may be too choppy at high speed due to PC and soundcard delays. But if we want to improve this, it takes a lot more work.
2. In my shack, I use a separate box and an MCU to provide sequencing. It keys the T/R relay first and then keys the FPGA. But we could add a protocol to tell the FPGA what sequencing delays we want, and then the FPGA would provide the T/R signal on an output pin, and key the RF output after the delay.
3. For very fast CW that exceeds the ability of PC sidetone generation, the user can use a separate keyer that provides its own sidetone. Otherwise we need to add an audio codec to the hardware, and generate the sidetone from the FPGA. The Flex radios do this, and also add the keyer to the FPGA so the user only has to connect the paddle. Too much work for now in my opinion.
I have no faith in any CW scheme that depends on the PC to key the output.
Jim
N2ADR