@@ -417,12 +417,11 @@ <h5 id="node-help-label">Keyboard Shortcuts <span style="float: right;"><a href=
417417 { "type" :"RadioFMDetector_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"FMDetector" , "inputs" :"1" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
418418 { "type" :"radioModulatedGenerator_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"Modulator" , "inputs" :"2" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
419419 { "type" :"radioNoiseBlanker_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"NoiseBlank" , "inputs" :"2" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
420-
421420 { "type" :"radioCESSBtransmit_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"CESSB_Mod" , "inputs" :"1" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
422421 { "type" :"radioCESSB_Z_transmit_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"CESSB_Z_Mod" , "inputs" :"1" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
423422 { "type" :"radioVoiceClipper_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"Clipper" , "inputs" :"1" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
424-
425423 { "type" :"RadioFMDiscriminator_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"FMDiscrim" , "inputs" :"1" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"2" } } ,
424+ { "type" :"radioCWModulator_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"CWMod" , "inputs" :"0" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"1" } } ,
426425 { "type" :"RadioBFSKModulator_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"BFSKMod" , "inputs" :"0" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"1" } } ,
427426 { "type" :"UART_F32" , "data" :{ "defaults" :{ "name" :{ "value" :"new" } } , "shortName" :"UART" , "inputs" :"1" , "output" :"0" , "category" :"radio-function" , "color" :"#E6E0F8" , "icon" :"arrow-in.png" , "outputs" :"0" } } ,
428427
@@ -3974,6 +3973,113 @@ <h3>Notes</h3>
39743973 </ div >
39753974</ script >
39763975
3976+ < script type ="text/x-red " data-help-name ="radioCWModulator_F32 ">
3977+ <!-- ============ radioCWModulator_F32 ========= -->
3978+ < h3 > Summary</ h3 >
3979+ < div class = tooltipinfo >
3980+ < p > Generates and transmits Morse code at a programmable rate.
3981+ Storage for 512 characters is provided.
3982+ Inputs can be characters or ASCII strings. Most amateur radio CW symbols
3983+ are available. Gaussian bandwidth shaping is used, with a rise time of about 5 milliseconds.
3984+ The output is a keyed sine wave of programmable frequency and amplitude.</ p >
3985+ < / d i v >
3986+
3987+ < h3 > Audio Connections</ h3 >
3988+ < table class = doc align = center cellpadding = 3 >
3989+ < tr class = top > < th > Port</ th > < th > Purpose</ th > </ tr >
3990+ < tr class = odd > < td align = center > Out 0</ td > < td > CW transmit audio or I - F < / t d > < / tr>
3991+ < / table >
3992+
3993+ < h3 > Functions</ h3 >
3994+
3995+ < p class = func > < span class = keyword > < strong > bool</ strong > sendCW</ span > (< strong > char</ strong > ch);</ p >
3996+ < p class = desc > This places a single character, ch, into the buffer. If successful,
3997+ meaning that the buffer is not full, a < strong > true</ strong > is returned.</ p >
3998+
3999+ < p class = func > < span class = keyword > < strong > bool</ strong > sendStringCW</ span >
4000+ (< strong > char*</ strong > pStr);</ p >
4001+ < p class = desc > This places a string, pointed to by pStr, into the buffer. If successful,
4002+ meaning that the buffer is not full, a < strong > true</ strong > is returned.</ p >
4003+
4004+ < p class = func > < span class = keyword > enableTransmit</ span > (< strong > bool</ strong > en);</ p >
4005+ < p class = desc > If en is < strong > true</ strong > and the buffer has characters available, CW is sent.
4006+ If en is < strong > false</ strong > CW is not sent and characters are left in the buffer.
4007+ This, of course, does not control PTT. No return value.</ p >
4008+
4009+ < p class = func > < span class = keyword > < strong > bool</ strong > getEnableTransmit</ span > ();</ p >
4010+ < p class = desc > Returns the enableTransmit status. If enableTransmit(false) is applied,
4011+ the getTransmitEnable() will remain true until the current character is completed.
4012+ Additionally, getTransmitEnable() will go false when all characters in the buffer have
4013+ been fully sent. This can be useful for control of Transmit/Receive.</ p >
4014+
4015+ < p class = func > < span class = keyword > amplitude</ span > (< strong > float32_t</ strong > a);</ p >
4016+ < p class = desc > Sets a, the zero-to-peak amplitude of the transmit signal. The default is 1.0.
4017+ No return value.</ p >
4018+
4019+ < p class = func > < span class = keyword > frequency</ span > (< strong > float32_t</ strong > f);</ p >
4020+ < p class = desc > Sets the frequency of the CW waveform. The default is 600 Hz. Any value up to
4021+ half of the sample rate can be used.
4022+ No return value.</ p >
4023+
4024+ < p class = func > < span class = keyword > setLongDashMs</ span > (< strong > uint32_t</ strong > longDashMs);</ p >
4025+ < p class = desc > Sets the length, in milliseconds, of the long dash, longDashMs. This is sent by a
4026+ semi-colon in the CW buffer. The default is 1000 milliseconds. No return value.</ p >
4027+
4028+ < p class = func > < span class = keyword > setSampleRate_Hz</ span >
4029+ (< strong > const float32_t</ strong > & fs_Hz ) ; </ p >
4030+ < p class = desc > Most standard sample rates are supported. See the Notes below for details. </ p >
4031+
4032+ < h3 > Examples</ h3 >
4033+ <!-- <p class=exam>File > Examples > OpenAudio_ArduinoLibrary > FT8Transmit</p> -->
4034+
4035+ < h3 > Notes</ h3 >
4036+
4037+ < p > See the library file radioCWModulator.h for more information</ p >
4038+
4039+ < p > The alphabet includes A to Z (or a to z), 0 to 9, space, quote, dollar,
4040+ parentheses, period, comma, hyphen. slash, colon, equal (so-called double dash),
4041+ question-mark, under-score, error, KN, AR, SK, AS. There is also a programmable
4042+ long dash that is involked by the semicolon. By changing the frequency, amplitude
4043+ and length, this can be used as a general purpose pulsed tone generator.
4044+ </ p >
4045+
4046+ < p > Seeds can be from 5 to 50 words per minute (WPM). From 5 to 30, all integer
4047+ speeds are available Above 30, you get the speed lower, or equal, than requested as
4048+ 30, 35, 40, 45, or 50 WPM.</ p >
4049+
4050+ < p > A 512 character circular buffer holds CW get to be sent. One can add to this buffer
4051+ any time. The actual transmission of data is controlled by the enable() function.
4052+ If there is any question that the buffer will be over-filled, the getBufferSpace() function
4053+ can be used to check.</ p >
4054+
4055+ < p > This runs on T3.x or T4.x.</ p >
4056+
4057+ < P > The built-in Gaussian bandwidth filter only runs with a sample rate around
4058+ 12 ksps. To support higher rates, the output is "interpolated." The resulting
4059+ ranges of supported sample rates are 11.0 ksps to 12.1 ksps, 44.0 ksps to 50.1 ksps,
4060+ and 88.0 ksps to 100.1 ksps.</ P >
4061+
4062+ < p > It is planned to add a couple of variables to support fast break-in (QSK I think?).
4063+ If someone needs this, let me know at the library Github "messages" and we could
4064+ try to finish it up.</ p >
4065+
4066+ </ script >
4067+ < script type ="text/x-red " data-template-name ="radioCWModulator_F32 ">
4068+ < div class = "form-row" >
4069+ < label for = "node-input-name" > < i class = "fa fa-tag" > </ i > Name</ label >
4070+ < input type = "text" id = "node-input-name" placeholder = "Name" >
4071+ </ div >
4072+ </ script >
4073+
4074+
4075+
4076+
4077+
4078+
4079+
4080+
4081+
4082+
39774083
39784084< script type ="text/x-red " data-help-name ="RadioFT8Modulator_F32 ">
39794085 <!-- ============ RadioFT8Modulator_F32 ========= -->
0 commit comments