<!--
	Rig definition file for use with fldigi
-->

<RIGDEF>

<RIG>FlexRadio PowerSDR</RIG>

<PROGRAMMER>
	Tim Ellison W4TME (w4tme@arrl.net)
	Tested by: 
</PROGRAMMER>

<STATUS comment="Native PowerSDR CAT protocol">
	Beta
	Version:    3.11
	Date:       15 April 2009
</STATUS>

<TITLE>Rig Control - FlexRadio PowerSDR</TITLE>

<!--
default settings for initial setup
-->

<TIMEOUT>50</TIMEOUT>
<RETRIES>2</RETRIES>
<WRITE_DELAY>5</WRITE_DELAY>
<BAUDRATE>38400</BAUDRATE>
<RTSCTS>false</RTSCTS>
<ECHO>false</ECHO>
<CMDPTT>true</CMDPTT>

<!-- Define the the name and  return code for different mode types. Mode ID is a two byte value -->

<MODES>
	<ELEMENT><SYMBOL>LSB</SYMBOL><SIZE>2</SIZE><BYTES>30 30</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>USB</SYMBOL><SIZE>2</SIZE><BYTES>30 31</BYTES></ELEMENT>
    <ELEMENT><SYMBOL>DSB</SYMBOL><SIZE>2</SIZE><BYTES>30 32</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>CWL</SYMBOL><SIZE>2</SIZE><BYTES>30 33</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>CWU</SYMBOL><SIZE>2</SIZE><BYTES>30 34</BYTES></ELEMENT>
    <ELEMENT><SYMBOL>FMN</SYMBOL><SIZE>2</SIZE><BYTES>30 35</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>AM</SYMBOL><SIZE>2</SIZE><BYTES>30 36</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>SAM</SYMBOL><SIZE>2</SIZE><BYTES>31 30</BYTES></ELEMENT>
    <ELEMENT><SYMBOL>SPEC</SYMBOL><SIZE>2</SIZE><BYTES>30 38</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>DIGL</SYMBOL><SIZE>2</SIZE><BYTES>30 39</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>DIGU</SYMBOL><SIZE>2</SIZE><BYTES>30 37</BYTES></ELEMENT>
    <ELEMENT><SYMBOL>DRM</SYMBOL><SIZE>2</SIZE><BYTES>31 31</BYTES></ELEMENT>
</MODES>

<!-- lsb mode strings should match those given in the modes symbol specifier -->

<LSBMODES>
	<STRING>LSB</STRING>
	<STRING>CWL</STRING>
	<STRING>DIGL</STRING>
</LSBMODES>

<!-- Define the the name and  location for each individual RX filter in the PowerSDR 3x4 filter matrix. 
The filter ID is a two byte value -->

<BW-CMD>
	<ELEMENT><SYMBOL>Filter 1-1</SYMBOL><SIZE>2</SIZE><BYTES>30 30</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 1-2</SYMBOL><SIZE>2</SIZE><BYTES>30 31</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 1-3</SYMBOL><SIZE>2</SIZE><BYTES>30 32</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 2-1</SYMBOL><SIZE>2</SIZE><BYTES>30 33</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 2-2</SYMBOL><SIZE>2</SIZE><BYTES>30 34</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 2-3</SYMBOL><SIZE>2</SIZE><BYTES>30 35</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 3-1</SYMBOL><SIZE>2</SIZE><BYTES>30 36</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 3-2</SYMBOL><SIZE>2</SIZE><BYTES>30 37</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 3-3</SYMBOL><SIZE>2</SIZE><BYTES>30 38</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 4-1</SYMBOL><SIZE>2</SIZE><BYTES>30 39</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>VAR 1</SYMBOL><SIZE>2</SIZE><BYTES>31 30</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>VAR 2</SYMBOL><SIZE>2</SIZE><BYTES>31 31</BYTES></ELEMENT>
</BW-CMD>

<BW-REPLY>
	<ELEMENT><SYMBOL>Filter 1-1</SYMBOL><SIZE>2</SIZE><BYTES>30 30</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 1-2</SYMBOL><SIZE>2</SIZE><BYTES>30 31</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 1-3</SYMBOL><SIZE>2</SIZE><BYTES>30 32</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 2-1</SYMBOL><SIZE>2</SIZE><BYTES>30 33</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 2-2</SYMBOL><SIZE>2</SIZE><BYTES>30 34</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 2-3</SYMBOL><SIZE>2</SIZE><BYTES>30 35</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 3-1</SYMBOL><SIZE>2</SIZE><BYTES>30 36</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 3-2</SYMBOL><SIZE>2</SIZE><BYTES>30 37</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 3-3</SYMBOL><SIZE>2</SIZE><BYTES>30 38</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>Filter 4-1</SYMBOL><SIZE>2</SIZE><BYTES>30 39</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>VAR 1</SYMBOL><SIZE>2</SIZE><BYTES>31 30</BYTES></ELEMENT>
	<ELEMENT><SYMBOL>VAR 2</SYMBOL><SIZE>2</SIZE><BYTES>31 31</BYTES></ELEMENT>
</BW-REPLY>

<!-- Define the data location for various CAT responses and correlate the response with data defined above.  
This includes extracting specific informationout of the ZZIF and ZZFI CAT commands  
-->

<!-- frequency & mode data are contained in the ZZIF; response
      ZZIFaaaaaaaaaaabbbbcdddddefghhijjklmnoop;
      12345678901234567890123456789012345678901

     where:
         aaaaaaaaaaa => Decimal value of vfo frequency
		 bbbb=> Frequency step size
		 c=> (+) or (-) for RIT/XIT offset
		 ddddd=> RIT/XIT frequency
         e => RIT off/on
         f => XIT off/on
		 g=> Channel Bank number; not used defaulted to 0
		 hh=> Channel Bank number; not used defaulted to 00
		 i=> MOX or PTT status 0=rx & 1=tx
		 jj=> Operating mode
		 k=> VFO split status (always 0)
		 l=> Scan status (not implemented) defaulted to 0
		 m=> VFO split status
		 n=> CTCSS tone; not used defaulted to 0
		 o=> More tone controls; not used defaulted to 00
		 p=>Shift status; not used defaulted to 0

Test output from PowerSDR CAT Validator to IF; command         

ZZIF000140700001010+00000000000070000000;

Frequency on VFO is 14,070,000 Hz
Step size (500 Hz) = 1010
Mode = DIGU (07)

Modes:
00 = LSB,  01 = USB, 02 = DSB, 03 = CWL, 04 = CWU,  05 = FMN
06 = AM, 07 = DIGU, 08 = SPEC, 09 = DIGL, 10 = SAM, 11 = DRM    
-->

<REPLY>
	<SYMBOL>MODE</SYMBOL>
	<SIZE>41</SIZE>
	<STRING>ZZIF</STRING>
	<FILL>27</FILL>
	<DATA>
		<DTYPE>BYTE</DTYPE>
		<SIZE>2</SIZE>
	</DATA>
	<FILL>7</FILL>
	<STRING>;</STRING>
</REPLY>

<REPLY>
	<SYMBOL>FREQ</SYMBOL>
	<SIZE>41</SIZE>
	<STRING>ZZIF</STRING>
	<DATA>
		<DTYPE>DECIMAL</DTYPE>
	    <SIZE>11</SIZE>
	    <MAX>99999999999</MAX>
	    <MIN>00000009000</MIN>
	    <RESOL>1</RESOL>
	</DATA>
	<FILL>25</FILL>
	<STRING>;</STRING>
</REPLY>	

<REPLY>
	<SYMBOL>BW</SYMBOL>
	<SIZE>7</SIZE>
	<STRING>ZZFI</STRING>
	<DATA>
		<DTYPE>BYTE</DTYPE>
		<SIZE>2</SIZE>
	</DATA>
	<STRING>;</STRING>
</REPLY>

<!-- Define the format for various GET and SET commands -->

<COMMAND>
	<SYMBOL>SETFREQ</SYMBOL>
	<SIZE>16</SIZE>
	<STRING>ZZFA</STRING>
	<DATA>
		<DTYPE>DECIMAL</DTYPE>
	    <SIZE>11</SIZE>
	    <MAX>99999999999</MAX>
	    <MIN>00001500000</MIN>
	    <RESOL>1</RESOL>
	</DATA>
	<STRING>;</STRING>
</COMMAND>

<COMMAND>
	<SYMBOL>GETFREQ</SYMBOL>
	<SIZE>5</SIZE>
	<STRING>ZZIF;</STRING>
	<INFO>FREQ</INFO>
</COMMAND>

<COMMAND>
	<SYMBOL>SETMODE</SYMBOL>
	<SIZE>7</SIZE>
	<STRING>ZZMD</STRING>
	<DATA>
		<DTYPE>BYTE</DTYPE>
		<SIZE>2</SIZE>
	</DATA>
	<STRING>;</STRING>
</COMMAND>

<COMMAND>
	<SYMBOL>GETMODE</SYMBOL>
	<SIZE>5</SIZE>
	<STRING>ZZIF;</STRING>
	<INFO>MODE</INFO>
</COMMAND>

<COMMAND>
	<SYMBOL>PTTON</SYMBOL>
	<SIZE>6</SIZE>
	<STRING>ZZTX1;</STRING>
</COMMAND>

<COMMAND>
	<SYMBOL>PTTOFF</SYMBOL>
	<SIZE>6</SIZE>
	<STRING>ZZTX0;</STRING>
</COMMAND>

<COMMAND>
	<SYMBOL>SETBW</SYMBOL>
	<SIZE>7</SIZE>
	<STRING>ZZFI</STRING>
	<DATA>
		<DTYPE>BYTE</DTYPE>
		<SIZE>2</SIZE>
	</DATA>
	<STRING>;</STRING>
</COMMAND>

<COMMAND>
    <SYMBOL>GETBW</SYMBOL>
 	<SIZE>5</SIZE>
	<STRING>ZZFI;</STRING>
	<INFO>BW</INFO>
</COMMAND>


</RIGDEF>
