diff --git a/src/il2p.h-bak16 b/src/il2p.h-bak16
deleted file mode 100644
index 6a77318..0000000
--- a/src/il2p.h-bak16
+++ /dev/null
@@ -1,150 +0,0 @@
-
-
-#ifndef IL2P_H
-#define IL2P_H 1
-
-
-#define IL2P_PREAMBLE 0x55
-
-#define IL2P_SYNC_WORD 0xF15E48
-
-#define IL2P_SYNC_WORD_SIZE 3
-#define IL2P_HEADER_SIZE 13	// Does not include 2 parity.
-#define IL2P_HEADER_PARITY 2
-
-#define IL2P_MAX_PAYLOAD_SIZE 1023
-#define IL2P_MAX_PAYLOAD_BLOCKS 5
-#define IL2P_MAX_PARITY_SYMBOLS 16		// For payload only.
-#define IL2P_MAX_ENCODED_SIZE (IL2P_MAX_PAYLOAD_SIZE + IL2P_MAX_PAYLOAD_BLOCKS * IL2P_MAX_PARITY_SYMBOLS)
-// FIXME:  above & below IL2P_MAX_ENCODED_PAYLOAD_SIZE
-
-#define IL2P_MAX_PACKET_SIZE (IL2P_SYNC_WORD_SIZE + IL2P_HEADER_SIZE + IL2P_HEADER_PARITY + IL2P_MAX_ENCODED_SIZE)
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_init.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-
-// Init must be called at start of application.
-
-extern void il2p_init (int debug);
-
-#include "fx25.h"	// For Reed Solomon stuff.  e.g. struct rs
-			// Maybe rearrange someday because RS now used another place.
-
-extern struct rs *il2p_find_rs(int nparity);	// Internal later?
-
-extern void il2p_encode_rs (unsigned char *tx_data, int data_size, int num_parity, unsigned char *parity_out);
-
-extern int il2p_decode_rs (unsigned char *rec_block, int data_size, int num_parity, unsigned char *out);
-
-extern int il2p_get_debug(void);
-extern void il2p_set_debug(int debug);
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_rec.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-// Receives a bit stream from demodulator.
-
-extern void il2p_rec_bit (int chan, int subchan, int slice, int dbit);
-
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_send.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "ax25_pad.h"	// For packet object.
-
-// Send bit stream to modulator.
-
-int il2p_send_frame (int chan, packet_t pp, int max_fec, int polarity);
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_codec.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "ax25_pad.h"
-
-extern int il2p_encode_frame (packet_t pp, int max_fec, unsigned char *iout);
-
-packet_t il2p_decode_frame (unsigned char *irec);
-
-packet_t il2p_decode_header_payload (unsigned char* uhdr, unsigned char *epayload, int *symbols_corrected);
-
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_header.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-
-extern int il2p_type_1_header (packet_t pp, int max_fec, unsigned char *hdr);
-
-extern packet_t il2p_decode_header_type_1 (unsigned char *hdr, int num_sym_changed);
-
-
-extern int il2p_type_0_header (packet_t pp, int max_fec, unsigned char *hdr);
-
-extern int il2p_clarify_header(unsigned char *rec_hdr, unsigned char *corrected_unscrambled_hdr);
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_scramble.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-extern void il2p_scramble_reset (int *lsfr_state);
-
-extern void il2p_scramble_block (unsigned char *in, unsigned char *out, int len, int *lsfr_state);
-
-extern void il2p_descramble_reset (int *lsfr_state);
-
-extern void il2p_descramble_block (unsigned char *in, unsigned char *out, int len, int *lsfr_state);
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// 	il2p_payload.c
-//
-///////////////////////////////////////////////////////////////////////////////
-
-
-typedef struct {
-	int payload_byte_count;		// Total size, 0 thru 1023
-	int payload_block_count;
-	int small_block_size;
-	int large_block_size;
-	int large_block_count;
-	int small_block_count;
-	int parity_symbols_per_block;	// 2, 4, 6, 8, 16
-} il2p_payload_properties_t;
-
-extern int il2p_payload_compute (il2p_payload_properties_t *p, int payload_size, int max_fec);
-
-extern int il2p_encode_payload (unsigned char *payload, int payload_size, int max_fec, unsigned char *enc);
-
-extern int il2p_decode_payload (unsigned char *received, int payload_size, int max_fec, unsigned char *payload_out, int *symbols_corrected);
-
-extern int il2p_get_header_attributes (unsigned char *hdr, int *hdr_type, int *max_fec);
-
-#endif
diff --git a/src/il2p_codec.c-bak16 b/src/il2p_codec.c-bak16
deleted file mode 100644
index de2c05a..0000000
--- a/src/il2p_codec.c-bak16
+++ /dev/null
@@ -1,265 +0,0 @@
-//
-//    This file is part of Dire Wolf, an amateur radio packet TNC.
-//
-//    Copyright (C) 2021  John Langner, WB2OSZ
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 2 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#include "direwolf.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-#include <string.h>
-
-#include "il2p.h"
-#include "textcolor.h"
-#include "demod.h"
-
-
-/*-------------------------------------------------------------
- *
- * File:	il2p_codec.c
- *
- * Purpose:	Convert IL2P encoded format from and to direwolf internal packet format.
- *
- *--------------------------------------------------------------*/
-
-
-/*-------------------------------------------------------------
- *
- * Name:	il2p_encode_frame
- *
- * Purpose:	Convert AX.25 frame to IL2P encoding.
- *
- * Inputs:	chan	- Audio channel number, 0 = first.
- *
- *		pp	- Packet object pointer.
- *
- *		max_fec	- 1 to send maximum FEC size rather than automatic.
- *
- * Outputs:	iout	- Encoded result, excluding the 3 byte sync word.
- *			  Caller should provide  IL2P_MAX_PACKET_SIZE  bytes.
- *
- * Returns:	Number of bytes for transmission.
- *		-1 is returned for failure.
- *
- * Description:	Encode into IL2P format.
- *
- * Errors:	If something goes wrong, return -1.
- *
- *		Most likely reason is that the frame is too large.
- *		IL2P has a max payload size of 1023 bytes.
- *		For a type 1 header, this is the maximum AX.25 Information part size.
- *		For a type 0 header, this is the entire AX.25 frame.
- *
- *--------------------------------------------------------------*/
-
-int il2p_encode_frame (packet_t pp, int max_fec, unsigned char *iout)
-{
-
-// Can a type 1 header be used?
-
-	unsigned char hdr[IL2P_HEADER_SIZE + IL2P_HEADER_PARITY];
-	int e;
-	int tx_lfsr_state;
-	il2p_scramble_reset(&tx_lfsr_state);
-	int out_len = 0;
-
-	e = il2p_type_1_header (pp, max_fec, hdr);
-	if (e >= 0) {
-	    il2p_scramble_block (hdr, iout, IL2P_HEADER_SIZE, &tx_lfsr_state);
-	    il2p_encode_rs (iout, IL2P_HEADER_SIZE, IL2P_HEADER_PARITY, iout+IL2P_HEADER_SIZE);
-	    out_len = IL2P_HEADER_SIZE + IL2P_HEADER_PARITY;
-
-	    if (e == 0) {
-	        // Sucess. No info part.
-	        return (out_len);
-	    }
-
-	    // Payload is AX.25 info part.
-	    unsigned char *pinfo;
-	    int info_len;
-	    info_len = ax25_get_info (pp, &pinfo);
-	    
-	    int k = il2p_encode_payload (pinfo, info_len, max_fec, iout+out_len);
-	    if (k > 0) {
-	        out_len += k;
-	        // Success. Info part was <= 1023 bytes.
-	        return (out_len);
-	    }
-
-	    // Something went wrong with the payload encoding.
-	    return (-1);
-	}
-	else if (e == -1) {
-
-// Could not use type 1 header for some reason.
-// e.g. More than 2 addresses, extended (mod 128) sequence numbers, etc.
-
-	    e = il2p_type_0_header (pp, max_fec, hdr);
-	    if (e > 0) {
-
-	        il2p_scramble_block (hdr, iout, IL2P_HEADER_SIZE, &tx_lfsr_state);
-	        il2p_encode_rs (iout, IL2P_HEADER_SIZE, IL2P_HEADER_PARITY, iout+IL2P_HEADER_SIZE);
-	        out_len = IL2P_HEADER_SIZE + IL2P_HEADER_PARITY;
-
-	        // Payload is entire AX.25 frame.
-
-	        unsigned char *frame_data_ptr = ax25_get_frame_data_ptr (pp);
-	        int frame_len = ax25_get_frame_len (pp);
-	        int k = il2p_encode_payload (frame_data_ptr, frame_len, max_fec, iout+out_len);
-	        if (k > 0) {
-	            out_len += k;
-	            // Success. Entire AX.25 frame <= 1023 bytes.
-	            return (out_len);
-	        }
-	        // Something went wrong with the payload encoding.
-	        return (-1);
-	    }
-	    else if (e == 0) {
-	        // Impossible condition.  Type 0 header must have payload.
-	        return (-1);
-	    }
-	    else {
-	        // AX.25 frame is too large.
-	        return (-1);
-	    }
-	}
-
-	// AX.25 Information part is too large.
-	return (-1); 
-}
-
-
-
-/*-------------------------------------------------------------
- *
- * Name:	il2p_decode_frame
- *
- * Purpose:	Convert IL2P encoding to AX.25 frame.
- *		This is only used during testing, with a whole encoded frame.
- *		During reception, the header would have FEC and descrambling
- *		applied first so we would know how much to collect for the payload.
- *
- * Inputs:	irec	- Received IL2P frame excluding the 3 byte sync word.
- *
- * Future Out:	Number of symbols corrected.
- *
- * Returns:	Packet pointer or NULL for error.
- *
- *--------------------------------------------------------------*/
-
-packet_t il2p_decode_frame (unsigned char *irec)
-{
-	unsigned char uhdr[IL2P_HEADER_SIZE];		// After FEC and descrambling.
-	int e = il2p_clarify_header (irec, uhdr);
-
-// FIXME: for symmetry we might want to clarify the payload before combining.
-
-	return (il2p_decode_header_payload(uhdr, irec + IL2P_HEADER_SIZE + IL2P_HEADER_PARITY, &e));
-}
-
-
-/*-------------------------------------------------------------
- *
- * Name:	il2p_decode_header_payload
- *
- * Purpose:	Convert IL2P encoding to AX.25 frame
- *
- * Inputs:	uhdr 		- Received header after FEC and descrambling.
- *		epayload	- Encoded payload.
- *
- * In/Out:	symbols_corrected - Symbols (bytes) corrected in the header.
- *				  Should be 0 or 1 because it has 2 parity symbols.
- *				  Here we add number of corrections for the payload.
- *
- * Returns:	Packet pointer or NULL for error.
- *
- *--------------------------------------------------------------*/
-
-packet_t il2p_decode_header_payload (unsigned char* uhdr, unsigned char *epayload, int *symbols_corrected)
-{
-	int hdr_type;
-	int max_fec;
-	int payload_len = il2p_get_header_attributes (uhdr, &hdr_type, &max_fec);
-
-	packet_t pp = NULL;
-
-	if (hdr_type == 1) {
-
-// Header type 1.  Any payload is the AX.25 Information part.
-
-	    pp = il2p_decode_header_type_1 (uhdr, *symbols_corrected);
-	    if (pp == NULL) {
-	        // Failed for some reason.
-	        return (NULL);
-	    }
-
-	    if (payload_len > 0) {
-	        // This is the AX.25 Information part.
-
-	        unsigned char extracted[IL2P_MAX_PAYLOAD_SIZE];
-		int e = il2p_decode_payload (epayload, payload_len, max_fec, extracted, symbols_corrected);
-
-		// It would be possible to have a good header but too many errors in the payload.
-
-	        if (e <= 0) {
-	            ax25_delete (pp);
-	            pp = NULL;
-	            return (pp);
-	        }
-	        
-		if (e != payload_len) {
-	            text_color_set(DW_COLOR_ERROR);
-	            dw_printf ("IL2P Internal Error: %s(): hdr_type=%d, max_fec=%d, payload_len=%d, e=%d.\n", __func__, hdr_type, max_fec, payload_len, e);
-	        }
-
-	        ax25_set_info (pp, extracted, payload_len);
-	    }
-	    return (pp);
-	}
-	else {
-
-// Header type 0.  The payload is the entire AX.25 frame.
-
-	    unsigned char extracted[IL2P_MAX_PAYLOAD_SIZE];
-	    int e = il2p_decode_payload (epayload, payload_len, max_fec, extracted, symbols_corrected);
-
-	    if (e <= 0) {	// Payload was not received correctly.
-	        return (NULL);
-	    }
-
-	    if (e != payload_len) {
-	        text_color_set(DW_COLOR_ERROR);
-	        dw_printf ("IL2P Internal Error: %s(): hdr_type=%d, e=%d, payload_len=%d\n", __func__, hdr_type, e, payload_len);
-	        return (NULL);
-	    }
-
-	    alevel_t alevel;
-	    memset (&alevel, 0, sizeof(alevel));
-	    //alevel = demod_get_audio_level (chan, subchan); 	// What TODO? We don't know channel here.
-						// I think alevel gets filled in somewhere later making
-						// this redundant.
-
-	    pp = ax25_from_frame (extracted, payload_len, alevel);
-	    return (pp);
-	}
-
-} // end il2p_decode_header_payload
-
-// end il2p_codec.c
-
-
diff --git a/src/il2p_payload.c-bak16 b/src/il2p_payload.c-bak16
deleted file mode 100644
index d17444a..0000000
--- a/src/il2p_payload.c-bak16
+++ /dev/null
@@ -1,317 +0,0 @@
-//
-//    This file is part of Dire Wolf, an amateur radio packet TNC.
-//
-//    Copyright (C) 2021  John Langner, WB2OSZ
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 2 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#include "direwolf.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include "textcolor.h"
-#include "il2p.h"
-
-
-/*--------------------------------------------------------------------------------
- *
- * File:	il2p_payload.c
- *
- * Purpose:	Functions dealing with the payload.
- *
- *--------------------------------------------------------------------------------*/
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_payload_compute
- *
- * Purpose:	Compute number and sizes of data blocks based on total size.
- *
- * Inputs:	payload_size	0 to 1023.  (IL2P_MAX_PAYLOAD_SIZE)
- *		max_fec		true for 16 parity symbols, false for automatic.
- *
- * Outputs:	*p		Payload block sizes and counts.
- *				Number of parity symbols per block.
- *
- * Returns:	Number of bytes in the encoded format.
- *		Could be 0 for no payload blocks.
- *		-1 for error (i.e. invalid unencoded size: <0 or >1023)
- *
- *--------------------------------------------------------------------------------*/
-
-int il2p_payload_compute (il2p_payload_properties_t *p, int payload_size, int max_fec)
-{
-	memset (p, 0, sizeof(il2p_payload_properties_t));
-
-	if (payload_size < 0 || payload_size > IL2P_MAX_PAYLOAD_SIZE) {
-	    return (-1);
-	}
-	if (payload_size == 0) {
-	    return (0);
-	}
-
-	if (max_fec) {
-	    p->payload_byte_count = payload_size;
-	    p->payload_block_count = (p->payload_byte_count + 238)  / 239;
-	    p->small_block_size = p->payload_byte_count / p->payload_block_count;
-	    p->large_block_size = p->small_block_size + 1;
-	    p->large_block_count = p->payload_byte_count - (p->payload_block_count * p->small_block_size);
-	    p->small_block_count = p->payload_block_count - p->large_block_count;
-	    p->parity_symbols_per_block = 16;
-	}
-	else {
-	    p->payload_byte_count = payload_size;
-	    p->payload_block_count = (p->payload_byte_count + 246) / 247;
-	    p->small_block_size = p->payload_byte_count / p->payload_block_count;
-	    p->large_block_size = p->small_block_size + 1;
-	    p->large_block_count = p->payload_byte_count - (p->payload_block_count * p->small_block_size);
-	    p->small_block_count = p->payload_block_count - p->large_block_count;
-	    //p->parity_symbols_per_block = (p->small_block_size / 32) + 2;  // Looks like error in documentation
-
-	    // It would work if the number of parity symbols was based on large block size.
-
-	    if (p->small_block_size <= 61) p->parity_symbols_per_block = 2;
-	    else if (p->small_block_size <= 123) p->parity_symbols_per_block = 4;
-	    else if (p->small_block_size <= 185) p->parity_symbols_per_block = 6;
-	    else if (p->small_block_size <= 247) p->parity_symbols_per_block = 8;
-	    else {
-	        // Should not happen.  But just in case...
-	        text_color_set(DW_COLOR_ERROR);
-	        dw_printf ("IL2P parity symbol per payload block error.  small_block_size = %d\n", p->small_block_size);
-	        return (-1);
-	    }
-	}
-
-	// Return the total size for the encoded format.
-
-	return (p->small_block_count * (p->small_block_size + p->parity_symbols_per_block) +
-                p->large_block_count * (p->large_block_size + p->parity_symbols_per_block));
-
-} // end il2p_payload_compute
-
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_encode_payload
- *
- * Purpose:	Split payload into multiple blocks such that each set
- *		of data and parity symbols fit into a 255 byte RS block.
- *
- * Inputs:	*payload	Array of bytes.
- *		payload_size	0 to 1023.  (IL2P_MAX_PAYLOAD_SIZE)
- *		max_fec		true for 16 parity symbols, false for automatic.
- *
- * Outputs:	*enc		Encoded payload for transmission.
- *				Up to IL2P_MAX_ENCODED_SIZE bytes.
- *
- * Returns:	-1 for error (i.e. invalid size)
- *		0 for no blocks.  (i.e. size zero)
- *		Number of bytes generated.  Maximum IL2P_MAX_ENCODED_SIZE.
- *
- * Note:	I interpretted the protocol spec as saying the LFSR state is retained
- *		between data blocks.  During interoperability testing, I found that
- *		was not the case.  It is reset for each data block.
- *
- *--------------------------------------------------------------------------------*/
-
-
-int il2p_encode_payload (unsigned char *payload, int payload_size, int max_fec, unsigned char *enc)
-{
-	if (payload_size > IL2P_MAX_PAYLOAD_SIZE) return (-1);
-	if (payload_size == 0) return (0);
-
-	int tx_lsfr_state;
-	il2p_scramble_reset(&tx_lsfr_state);
-
-// Determine number of blocks and sizes.
-
-	il2p_payload_properties_t ipp;
-	int e;
-	e = il2p_payload_compute (&ipp, payload_size, max_fec);
-	if (e <= 0) {
-	    return (e);
-	}
-
-	unsigned char *pin = payload;
-	unsigned char *pout = enc;
-	int encoded_length = 0;
-	unsigned char scram[256];
-	unsigned char parity[IL2P_MAX_PARITY_SYMBOLS];
-
-// First the large blocks.
-
-	for (int b = 0; b < ipp.large_block_count; b++) {
-
-
-// FIXME experiment
-il2p_scramble_reset(&tx_lsfr_state);
-
-	    il2p_scramble_block (pin, scram, ipp.large_block_size, &tx_lsfr_state);
-	    memcpy (pout, scram, ipp.large_block_size);
-	    pin += ipp.large_block_size;
-	    pout += ipp.large_block_size;
-	    encoded_length += ipp.large_block_size;
-	    il2p_encode_rs (scram, ipp.large_block_size, ipp.parity_symbols_per_block, parity);
-	    memcpy (pout, parity, ipp.parity_symbols_per_block);
-	    pout += ipp.parity_symbols_per_block;
-	    encoded_length += ipp.parity_symbols_per_block;
-	}
-
-// Then the small blocks.
-
-	for (int b = 0; b < ipp.small_block_count; b++) {
-
-// FIXME experiment -- works  -  no need to pass lfsr state in and out of scramble block.
-il2p_scramble_reset(&tx_lsfr_state);
-
-	    il2p_scramble_block (pin, scram, ipp.small_block_size, &tx_lsfr_state);
-	    memcpy (pout, scram, ipp.small_block_size);
-	    pin += ipp.small_block_size;
-	    pout += ipp.small_block_size;
-	    encoded_length += ipp.small_block_size;
-	    il2p_encode_rs (scram, ipp.small_block_size, ipp.parity_symbols_per_block, parity);
-	    memcpy (pout, parity, ipp.parity_symbols_per_block);
-	    pout += ipp.parity_symbols_per_block;
-	    encoded_length += ipp.parity_symbols_per_block;
-	}
-
-	return (encoded_length);
-
-} // end il2p_encode_payload
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_decode_payload
- *
- * Purpose:	Extract original data from encoded payload.
- *
- * Inputs:	received	Array of bytes.  Size is unknown but in practice it
- *				must not exceeed IL2P_MAX_ENCODED_SIZE.
- *		payload_size	0 to 1023.  (IL2P_MAX_PAYLOAD_SIZE)
- *				Expected result size based on header.
- *		max_fec		true for 16 parity symbols, false for automatic.
- *
- * Outputs:	payload_out	Recovered payload.
- *
- * In/Out:	symbols_corrected	Number of symbols corrected.
- *				
- *
- * Returns:	Number of bytes extracted.  Should be same as payload_size going in.
- *		-3 for unexpected internal inconsistency.
- *		-2 for unable to recover from signal corruption.
- *		-1 for invalid size.
- *		0 for no blocks.  (i.e. size zero)
- *		
- * Description:	Each block is scrambled separately but the LSFR state is carried
- *		from the first payload block to the next.
- *
- *--------------------------------------------------------------------------------*/
-
-int il2p_decode_payload (unsigned char *received, int payload_size, int max_fec, unsigned char *payload_out, int *symbols_corrected)
-{
-// Determine number of blocks and sizes.
-
-	il2p_payload_properties_t ipp;
-	int e;
-	e = il2p_payload_compute (&ipp, payload_size, max_fec);
-	if (e <= 0) {
-	    return (e);
-	}
-
-	unsigned char *pin = received;
-	unsigned char *pout = payload_out;
-	int decoded_length = 0;
-	int failed = 0;
-	int rx_lfsr_state;
-	il2p_descramble_reset(&rx_lfsr_state);
-
-
-// First the large blocks.
-
-	for (int b = 0; b < ipp.large_block_count; b++) {
-	    unsigned char corrected_block[255];
-	    int e = il2p_decode_rs (pin, ipp.large_block_size, ipp.parity_symbols_per_block, corrected_block);
-
-	    // dw_printf ("%s:%d: large block decode_rs returned status = %d\n", __FILE__, __LINE__, e);
-
-	    if (e < 0) failed = 1;
-	    *symbols_corrected += e;
-
-// FIXME - simplify
-il2p_descramble_reset(&rx_lfsr_state);
-
-	    il2p_descramble_block (corrected_block, pout, ipp.large_block_size, &rx_lfsr_state);
-
-	    if (il2p_get_debug() >= 2) {
-	        text_color_set(DW_COLOR_DEBUG);
-	        dw_printf ("Descrambled large payload block, %d bytes:\n", ipp.large_block_size);
-	        fx_hex_dump(pout, ipp.large_block_size);
-	    }
-
-	    pin += ipp.large_block_size + ipp.parity_symbols_per_block;
-	    pout += ipp.large_block_size;
-	    decoded_length += ipp.large_block_size;
-	}
-
-// Then the small blocks.
-
-	for (int b = 0; b < ipp.small_block_count; b++) {
-	    unsigned char corrected_block[255];
-	    int e = il2p_decode_rs (pin, ipp.small_block_size, ipp.parity_symbols_per_block, corrected_block);
-
-	    // dw_printf ("%s:%d: small block decode_rs returned status = %d\n", __FILE__, __LINE__, e);
-
-	    if (e < 0) failed = 1;
-	    *symbols_corrected += e;
-
-// FIXME - just reset in descramble block - no need to pass around as argument.
-il2p_descramble_reset(&rx_lfsr_state);
-
-	    il2p_descramble_block (corrected_block, pout, ipp.small_block_size, &rx_lfsr_state);
-
-	    if (il2p_get_debug() >= 2) {
-	        text_color_set(DW_COLOR_DEBUG);
-	        dw_printf ("Descrambled small payload block, %d bytes:\n", ipp.small_block_size);
-	        fx_hex_dump(pout, ipp.small_block_size);
-	    }
-
-	    pin += ipp.small_block_size + ipp.parity_symbols_per_block;
-	    pout += ipp.small_block_size;
-	    decoded_length += ipp.small_block_size;
-	}
-
-	if (failed) {
-	    //dw_printf ("%s:%d: failed = %0x\n", __FILE__, __LINE__, failed);
-	    return (-2);
-	}
-
-	if (decoded_length != payload_size) {
-	    text_color_set(DW_COLOR_ERROR);
-	    dw_printf ("IL2P Internal error: decoded_length = %d, payload_size = %d\n", decoded_length, payload_size);
-	    return (-3);
-	}
-
-	return (decoded_length);
-
-} // end il2p_decode_payload
-
-// end il2p_payload.c
-
diff --git a/src/il2p_scramble.c-bak16 b/src/il2p_scramble.c-bak16
deleted file mode 100644
index fc4bf05..0000000
--- a/src/il2p_scramble.c-bak16
+++ /dev/null
@@ -1,194 +0,0 @@
-//
-//    This file is part of Dire Wolf, an amateur radio packet TNC.
-//
-//    Copyright (C) 2021  John Langner, WB2OSZ
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 2 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-//  FIXME:  be consistent about descramble or descramble.  not unscramble.
-
-/*--------------------------------------------------------------------------------
- *
- * File:	il2p_scramble.c
- *
- * Purpose:	Scramble / descramble data as specified in the IL2P protocol specification.
- *
- *--------------------------------------------------------------------------------*/
-
-
-#include "direwolf.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include "il2p.h"
-
-
-// Scramble bits for il2p transmit.
-
-// Note that there is a delay of 5 until the first bit comes out.
-// So we need to need to ignore the first 5 out and stick in
-// an extra 5 filler bits to flush at the end.
-
-#define INIT_TX_LSFR 0x00f
-
-static inline int scramble_bit (int in, int *state)
-{
-	int out = ((*state >> 4) ^ *state) & 1;
-	*state = (  (((in ^ *state) & 1) << 9) | (*state ^ ((*state & 1) << 4)) ) >> 1;
-        return (out);
-}
-
-
-// Undo data scrambling for il2p receive.
-
-#define INIT_RX_LSFR 0x1f0
-
-static inline int descramble_bit (int in, int *state)
-{
-        int out = (in ^ *state) & 1;
-	*state = ((*state >> 1) | ((in & 1) << 8)) ^ ((in & 1) << 3);
-        return (out);
-}
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_scramble_reset
- *
- * Purpose:	Reset the TX LFSR register at the beginning of a packet or payload.
- *
- * Outputs:	lfsr_state	Current state of transmit LFSR.
- *				This is reset at the start of the packet and is
- *				cummulative across the header and data blocks.
- *
- *--------------------------------------------------------------------------------*/
-
-void il2p_scramble_reset (int *lfsr_state)
-{
-	*lfsr_state = INIT_TX_LSFR;
-}
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_scramble_block
- *
- * Purpose:	Scramble a block before adding RS parity.
- *
- * Inputs:	in		Array of bytes.
- *		len		Number of bytes both in and out.
- *
- * Outputs:	out		Array of bytes.
- *
- * In/Out:	lfsr_state	Current state of transmit LFSR.			----  FIXME  --- remove this
- *
- *--------------------------------------------------------------------------------*/
-
-void il2p_scramble_block (unsigned char *in, unsigned char *out, int len, int *lfsr_state)
-{
-	il2p_scramble_reset (lfsr_state);
-
-	memset (out, 0, len);
-
-	int skipping = 1;	// Discard the first 5 out.
-	int ob = 0;		// Index to output byte.
-	int om = 0x80;		// Output bit mask;
-	for (int ib = 0; ib < len; ib++) {
-	    for (int im = 0x80; im != 0; im >>= 1) {
-	        int s = scramble_bit((in[ib] & im) != 0, lfsr_state);
-	        if (ib == 0 && im == 0x04) skipping = 0;
-	        if ( ! skipping) {
-	            if (s) {
-	                out[ob] |= om;
-	            }
-	            om >>= 1;
-	            if (om == 0) {
-	                om = 0x80;
-	                ob++;
-	            }
-	        }
-	    }
-	}
-	// Flush it.
-
-	// Preserve the LSFR state from before flushing.
-	// This might be needed as the initial state for later payload blocks.
-	int x = *lfsr_state;
-	for (int n = 0; n < 5; n++) {
-	    int s = scramble_bit(0, &x);
-	    if (s) {
-	        out[ob] |= om;
-	    }
-	    om >>=1;
-	    if (om == 0) {
-	        om = 0x80;
-	        ob++;
-	    }
-	}
-
-}  // end il2p_scramble_block
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_descramble_reset
- *
- * Purpose:	Reset the RX LFSR register at the beginning of a packet or payload.
- *
- * Outputs:	lfsr_state	Current state of transmit LFSR.
- *				This is cummulative across the payload data blocks.
- *
- *--------------------------------------------------------------------------------*/
-
-void il2p_descramble_reset (int *lfsr_state)
-{
-	*lfsr_state = INIT_RX_LSFR;
-}
-
-
-
-/*--------------------------------------------------------------------------------
- *
- * Function:	il2p_descramble_block
- *
- * Purpose:	Unscramble a block after removing RS parity.
- *
- * Inputs:	in		Array of bytes.
- *		len		Number of bytes both in and out.
- *
- * Outputs:	out		Array of bytes.
- *
- * In/Out:	lfsr_state	Current state of receive LSFR.			--- FIXME - remove this.
- *
- *--------------------------------------------------------------------------------*/
-
-void il2p_descramble_block (unsigned char *in, unsigned char *out, int len, int *lfsr_state)
-{
-	memset (out, 0, len);
-
-	for (int b = 0; b < len; b++) {
-	    for (int m = 0x80; m != 0; m >>= 1) {
-	        int d = descramble_bit((in[b] & m) != 0, lfsr_state);
-	        if (d) {
-	            out[b] |= m;
-	        }
-	    }
-	}
-}
-
-// end il2p_scramble.c
diff --git a/src/il2p_test.c-bak16 b/src/il2p_test.c-bak16
deleted file mode 100644
index c66b488..0000000
--- a/src/il2p_test.c-bak16
+++ /dev/null
@@ -1,1030 +0,0 @@
-//
-//    This file is part of Dire Wolf, an amateur radio packet TNC.
-//
-//    Copyright (C) 2021  John Langner, WB2OSZ
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 2 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#include "direwolf.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include "textcolor.h"
-#include "il2p.h"
-#include "ax25_pad.h"
-#include "ax25_pad2.h"
-#include "multi_modem.h"
-
-
-static void test_scramble(void);
-static void test_rs(void);
-static void test_payload(void);
-static void test_example_headers(void);
-static void all_frame_types(void);
-static void test_serdes(void);
-static void decode_bitstream(void);
-
-/*-------------------------------------------------------------
- *
- * Name:	il2p_test.c
- *
- * Purpose:	Unit tests for IL2P protocol functions.
- *
- * Errors:	Die if anything goes wrong.
- *
- *--------------------------------------------------------------*/
-
-
-int main ()
-{
-	int enable_color = 1;
-	text_color_init (enable_color);
-
-	int enable_debug_out = 0;
-	il2p_init(enable_debug_out);
-
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("Begin IL2P unit tests.\n");
-
-// These start simple and later complex cases build upon earlier successes.
-
-// Test scramble and descramble.
-
-	test_scramble();
-
-// Test Reed Solomon error correction.
-
-	test_rs();
-
-// Test payload functions.
-
-	test_payload();
-
-// Try encoding the example headers in the protocol spec.
-
-	test_example_headers();
-
-// Convert all of the AX.25 frame types to IL2P and back again.
-
-	all_frame_types();
-
-// Use same serialize / deserialize functions used on the air.
-
-	test_serdes ();
-
-// Decode bitstream from demodulator if data file is available.
-// TODO:  Very large info parts.  Appropriate error if too long.
-// TODO:  More than 2 addresses.
-
-	decode_bitstream();
-
-	text_color_set(DW_COLOR_REC);
-	dw_printf ("\n----------\n\n");
-	dw_printf ("\nSUCCESS!\n");
-
-	return (EXIT_SUCCESS);
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test scrambling and descrambling.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-static void test_scramble(void)
-{
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("Test scrambling...\n");
-
-// First an example from the protocol specification to make sure I'm compatible.
-
-	static unsigned char scramin1[] = { 0x63, 0xf1, 0x40, 0x40, 0x40, 0x00, 0x6b, 0x2b, 0x54, 0x28, 0x25, 0x2a, 0x0f };
-	static unsigned char scramout1[] = { 0x6a, 0xea, 0x9c, 0xc2, 0x01, 0x11, 0xfc, 0x14, 0x1f, 0xda, 0x6e, 0xf2, 0x53 };
-	unsigned char scramout[sizeof(scramin1)];
-
-	int tx_lsfr;
-	il2p_scramble_reset (&tx_lsfr);
-	il2p_scramble_block (scramin1, scramout, sizeof(scramin1), &tx_lsfr);
-	assert (memcmp(scramout, scramout, sizeof(scramout1)) == 0);
-
-// Now try multiple blocks with LSFR state carried over.  --- FIXME -no carry over
-
-	static unsigned char msg1[] = "The quick brown fox jumps over the lazy dog.";
-	static unsigned char msg2[] = "The rain in Spain stays mainly on the plain.";
-	static unsigned char msg3[] = "Peter Piper picked a peck of pickled peppers.";
-
-	unsigned char scram1[sizeof(msg1)];
-	unsigned char scram2[sizeof(msg2)];
-	unsigned char scram3[sizeof(msg3)];
-	il2p_scramble_reset (&tx_lsfr);
-	il2p_scramble_block (msg1, scram1, sizeof(msg1), &tx_lsfr);
-	il2p_scramble_reset (&tx_lsfr);
-	il2p_scramble_block (msg2, scram2, sizeof(msg2), &tx_lsfr);
-	il2p_scramble_reset (&tx_lsfr);
-	il2p_scramble_block (msg3, scram3, sizeof(msg3), &tx_lsfr);
-
-	int rx_lsfr;
-	unsigned char un1[sizeof(msg1)];
-	unsigned char un2[sizeof(msg2)];
-	unsigned char un3[sizeof(msg3)];
-	il2p_descramble_reset (&rx_lsfr);
-	il2p_descramble_block (scram1, un1, sizeof(msg1), &rx_lsfr);
-	il2p_descramble_reset (&rx_lsfr);
-	il2p_descramble_block (scram2, un2, sizeof(msg2), &rx_lsfr);
-	il2p_descramble_reset (&rx_lsfr);
-	il2p_descramble_block (scram3, un3, sizeof(msg3), &rx_lsfr);
-
-	//dw_printf ("%s\n", un1);
-	//dw_printf ("%s\n", un2);
-	//dw_printf ("%s\n", un3);
-
-	assert (strcmp((char*)msg1,(char*)un1) == 0);
-	assert (strcmp((char*)msg2,(char*)un2) == 0);
-	assert (strcmp((char*)msg3,(char*)un3) == 0);
-
-}  // end test_scramble.
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test Reed Solomon encode/decode examples found in the protocol spec.
-//	The data part is scrambled but that does not matter here because.
-//	We are only concerned abound adding the parity and verifying.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-
-static void test_rs()
-{
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("Test Reed Solomon functions...\n");
-
-	static unsigned char example_s[] = { 0x26, 0x57, 0x4d, 0x57, 0xf1, 0x96, 0xcc, 0x85, 0x42, 0xe7, 0x24, 0xf7, 0x2e,
-						0x8a, 0x97 };
-	unsigned char parity_out[2];
-	il2p_encode_rs (example_s, 13, 2, parity_out);
-	//dw_printf ("DEBUG RS encode %02x %02x\n", parity_out[0], parity_out[1]);
-	assert (memcmp(parity_out, example_s + 13, 2) == 0);
-
-
-	static unsigned char example_u[] = { 0x6a, 0xea, 0x9c, 0xc2, 0x01, 0x11, 0xfc, 0x14, 0x1f, 0xda, 0x6e, 0xf2, 0x53,
-						 0x91, 0xbd };
-	il2p_encode_rs (example_u, 13, 2, parity_out);
-	//dw_printf ("DEBUG RS encode %02x %02x\n", parity_out[0], parity_out[1]);
-	assert (memcmp(parity_out, example_u + 13, 2) == 0);
-
-	// See if we can go the other way.
-	// FIXME: see if clobbered byte was fixed.
-
-	unsigned char received[15];
-	unsigned char corrected[15];
-	int e;
-
-	e = il2p_decode_rs (example_s, 13, 2, corrected);
-	assert (e == 0);
-	assert (memcmp(example_s, corrected, 13) == 0);
-
-	memcpy (received, example_s, 15);
-	received[0] = '?';
-	e = il2p_decode_rs (received, 13, 2, corrected);
-	assert (e == 1);
-	assert (memcmp(example_s, corrected, 13) == 0);
-
-	e = il2p_decode_rs (example_u, 13, 2, corrected);
-	assert (e == 0);
-	assert (memcmp(example_u, corrected, 13) == 0);
-
-	memcpy (received, example_u, 15);
-	received[12] = '?';
-	e = il2p_decode_rs (received, 13, 2, corrected);
-	assert (e == 1);
-	assert (memcmp(example_u, corrected, 13) == 0);
-
-	received[1] = '?';
-	received[2] = '?';
-	e = il2p_decode_rs (received, 13, 2, corrected);
-	assert (e == -1);
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test payload functions.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-static void test_payload(void) 
-{
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("Test payload functions...\n");
-
-	il2p_payload_properties_t ipp;
-	int e;
-
-// Examples in specification.
-
-	e = il2p_payload_compute (&ipp, 100, 0);
-	assert (ipp.small_block_size == 100);
-	assert (ipp.large_block_size == 101);
-	assert (ipp.large_block_count == 0);
-	assert (ipp.small_block_count == 1);
-	assert (ipp.parity_symbols_per_block == 4);
-	
-	e = il2p_payload_compute (&ipp, 236, 0);
-	assert (ipp.small_block_size == 236);
-	assert (ipp.large_block_size == 237);
-	assert (ipp.large_block_count == 0);
-	assert (ipp.small_block_count == 1);
-	assert (ipp.parity_symbols_per_block == 8);
-	
-	e = il2p_payload_compute (&ipp, 512, 0);
-	assert (ipp.small_block_size == 170);
-	assert (ipp.large_block_size == 171);
-	assert (ipp.large_block_count == 2);
-	assert (ipp.small_block_count == 1);
-	assert (ipp.parity_symbols_per_block == 6);
-	
-	e = il2p_payload_compute (&ipp, 1023, 0);
-	assert (ipp.small_block_size == 204);
-	assert (ipp.large_block_size == 205);
-	assert (ipp.large_block_count == 3);
-	assert (ipp.small_block_count == 2);
-	assert (ipp.parity_symbols_per_block == 8);
-
-// Now try all possible sizes for Baseline FEC Parity.
-
-	for (int n = 1; n <= IL2P_MAX_PAYLOAD_SIZE; n++) {
-	    e = il2p_payload_compute (&ipp, n, 0);
-	    //dw_printf ("bytecount=%d, smallsize=%d, largesize=%d, largecount=%d, smallcount=%d\n", n,
-	    //		ipp.small_block_size, ipp.large_block_size,
-	    //		ipp.large_block_count, ipp.small_block_count);
-	    //fflush (stdout);
-
-	    assert (ipp.payload_block_count >= 1 && ipp.payload_block_count <= IL2P_MAX_PAYLOAD_BLOCKS);
-	    assert (ipp.payload_block_count == ipp.small_block_count + ipp.large_block_count);
-	    assert (ipp.small_block_count * ipp.small_block_size + 
-			ipp.large_block_count * ipp.large_block_size == n);
-	    assert (ipp.parity_symbols_per_block == 2 ||
-			ipp.parity_symbols_per_block == 4 ||
-			ipp.parity_symbols_per_block == 6 ||
-			ipp.parity_symbols_per_block == 8);
-
-	    // Data and parity must fit in RS block size of 255.
-	    // Size test does not apply if block count is 0.
-	    assert (ipp.small_block_count == 0 || ipp.small_block_size + ipp.parity_symbols_per_block <= 255);
-	    assert (ipp.large_block_count == 0 || ipp.large_block_size + ipp.parity_symbols_per_block <= 255);
-	}
-
-// All sizes for MAX FEC.
-
-	for (int n = 1; n <= IL2P_MAX_PAYLOAD_SIZE; n++) {
-	    e = il2p_payload_compute (&ipp, n, 1);	// 1 for max fec.
-	    //dw_printf ("bytecount=%d, smallsize=%d, largesize=%d, largecount=%d, smallcount=%d\n", n,
-	    //		ipp.small_block_size, ipp.large_block_size,
-	    //		ipp.large_block_count, ipp.small_block_count);
-	    //fflush (stdout);
-
-	    assert (ipp.payload_block_count >= 1 && ipp.payload_block_count <= IL2P_MAX_PAYLOAD_BLOCKS);
-	    assert (ipp.payload_block_count == ipp.small_block_count + ipp.large_block_count);
-	    assert (ipp.small_block_count * ipp.small_block_size + 
-			ipp.large_block_count * ipp.large_block_size == n);
-	    assert (ipp.parity_symbols_per_block == 16);
-
-	    // Data and parity must fit in RS block size of 255.
-	    // Size test does not apply if block count is 0.
-	    assert (ipp.small_block_count == 0 || ipp.small_block_size + ipp.parity_symbols_per_block <= 255);
-	    assert (ipp.large_block_count == 0 || ipp.large_block_size + ipp.parity_symbols_per_block <= 255);
-	}
-
-// Now let's try encoding payloads and extracting original again.
-// This will also provide exercise for scrambling and Reed Solomon under more conditions.
-
-	unsigned char original_payload[IL2P_MAX_PAYLOAD_SIZE];
-	for (int n = 0; n < IL2P_MAX_PAYLOAD_SIZE; n++) {
-	    original_payload[n] = n & 0xff;
-	}
-	for (int max_fec = 0; max_fec <= 1; max_fec++) {
-	    for (int payload_length = 1; payload_length <= IL2P_MAX_PAYLOAD_SIZE; payload_length++) {
-	        //dw_printf ("\n--------- max_fec = %d, payload_length = %d\n", max_fec, payload_length);
-	        int tx_lsfr_state;
-	        il2p_scramble_reset(&tx_lsfr_state);
-	        unsigned char encoded[IL2P_MAX_ENCODED_SIZE];
-	        int k = il2p_encode_payload (original_payload, payload_length, max_fec, encoded);
-
-	        //dw_printf ("payload length %d %s -> %d\n", payload_length, max_fec ? "M" : "", k);
-	        assert (k > payload_length && k <= IL2P_MAX_ENCODED_SIZE);
-
-	        // Now extract.
-
-	        //int rx_lsfr_state;
-	        //il2p_descramble_reset(&rx_lsfr_state);
-	        unsigned char extracted[IL2P_MAX_PAYLOAD_SIZE];
-	        int symbols_corrected = 0;
-		int e = il2p_decode_payload (encoded, payload_length, max_fec, extracted, &symbols_corrected);
-	        //dw_printf ("e = %d, payload_length = %d\n", e, payload_length);
-		assert (e == payload_length);
-
-	        // if (memcmp (original_payload, extracted, payload_length) != 0) {
-	        //  dw_printf ("********** Received message not as expected. **********\n");
-	        //  fx_hex_dump(extracted, payload_length);
-	        // }
-	        assert (memcmp (original_payload, extracted, payload_length) == 0);
-	    }
-	}
-	(void)e;
-} // end test_payload
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test header examples found in protocol specification.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-static void test_example_headers()
-{
-
-//----------- Example 1:  AX.25 S-Frame   --------------
- 
-//	This frame sample only includes a 15 byte header, without PID field.
-//	Destination Callsign: ?KA2DEW-2
-//	Source Callsign: ?KK4HEJ-7
-//	N(R): 5
-//	P/F: 1
-//	C: 1
-//	Control Opcode: 00 (Receive Ready)
-//	
-//	AX.25 data:
-//	96 82 64 88 8a ae e4 96 96 68 90 8a 94 6f b1
-//	
-//	IL2P Data Prior to Scrambling and RS Encoding:
-//	2b a1 12 24 25 77 6b 2b 54 68 25 2a 27
-//	
-//	IL2P Data After Scrambling and RS Encoding:
-//	26 57 4d 57 f1 96 cc 85 42 e7 24 f7 2e 8a 97
-
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("Example 1: AX.25 S-Frame...\n");
-
-	static unsigned char example1[] = {0x96, 0x82, 0x64, 0x88, 0x8a, 0xae, 0xe4, 0x96, 0x96, 0x68, 0x90, 0x8a, 0x94, 0x6f, 0xb1};
-	static unsigned char header1[]  = {0x2b, 0xa1, 0x12, 0x24, 0x25, 0x77, 0x6b, 0x2b, 0x54, 0x68, 0x25, 0x2a, 0x27 };
-	unsigned char header[IL2P_HEADER_SIZE];
-	unsigned char sresult[32];
-	memset (header, 0, sizeof(header));
-	memset (sresult, 0, sizeof(sresult));
-	unsigned char check[2];
-	alevel_t alevel;
-	memset(&alevel, 0, sizeof(alevel));
-
-	packet_t pp = ax25_from_frame (example1, sizeof(example1), alevel);
-	assert (pp != NULL);
-	int e;
-	e = il2p_type_1_header (pp, 0, header);
-	assert (e == 0);
-	ax25_delete(pp);
-
-	//dw_printf ("Example 1 header:\n");
-	//for (int i = 0 ; i < sizeof(header); i++) {
-	//    dw_printf (" %02x", header[i]);
-	//}
-	///dw_printf ("\n");
-
-	assert (memcmp(header, header1, sizeof(header)) == 0);
-
-	int tx_lsfr_state;
-	il2p_scramble_reset(&tx_lsfr_state);
-	il2p_scramble_block (header, sresult, 13, &tx_lsfr_state);
-	//dw_printf ("Expect scrambled  26 57 4d 57 f1 96 cc 85 42 e7 24 f7 2e\n");
-	//for (int i = 0 ; i < sizeof(sresult); i++) {
-	//   dw_printf (" %02x", sresult[i]);
-	//}
-	//dw_printf ("\n");
-
-	il2p_encode_rs (sresult, 13, 2, check);
-
-	//dw_printf ("expect checksum = 8a 97\n");
-	//dw_printf ("check = ");
-	//for (int i = 0 ; i < sizeof(check); i++) {
-	//    dw_printf (" %02x", check[i]);
-	//}
-	//dw_printf ("\n");
-	assert (check[0] == 0x8a);
-	assert (check[1] == 0x97);
-
-// Can we go from IL2P back to AX.25?
-
-	pp = il2p_decode_header_type_1 (header, 0);
-	assert (pp != NULL);
-
-	char dst_addr[AX25_MAX_ADDR_LEN];
-	char src_addr[AX25_MAX_ADDR_LEN];
-
-	ax25_get_addr_with_ssid (pp, AX25_DESTINATION, dst_addr);
-	ax25_get_addr_with_ssid (pp, AX25_SOURCE, src_addr);
-
-	ax25_frame_type_t frame_type;
-	cmdres_t cr;			// command or response.
-	char description[64];
-	int pf;				// Poll/Final.
-	int nr, ns;			// Sequence numbers.
-
-	frame_type = ax25_frame_type (pp, &cr, description, &pf, &nr, &ns);
-	(void)frame_type;
-#if 1
-	dw_printf ("%s(): %s>%s: %s\n", __func__, src_addr, dst_addr, description);
-#endif
-// TODO: compare binary.
-	ax25_delete (pp);
-
-// FIXME: continue
-
-	dw_printf ("Example 1 header OK\n");
-
-
-// -------------- Example 2 - UI frame, no info part  ------------------
-
-//	This is an AX.25 Unnumbered Information frame, such as APRS.
-//	Destination Callsign: ?CQ    -0
-//	Source Callsign: ?KK4HEJ-15
-//	P/F: 0
-//	C: 0
-//	Control Opcode:  3 Unnumbered Information
-//	PID: 0xF0 No L3
-//
-//	AX.25 Data:
-//	86 a2 40 40 40 40 60 96 96 68 90 8a 94 7f 03 f0
-//
-//	IL2P Data Prior to Scrambling and RS Encoding:
-//	63 f1 40 40 40 00 6b 2b 54 28 25 2a 0f
-//
-//	IL2P Data After Scrambling and RS Encoding:
-//	6a ea 9c c2 01 11 fc 14 1f da 6e f2 53 91 bd
-
-
-	//dw_printf ("---------- example 2 ------------\n");
-	static unsigned char example2[] = { 0x86, 0xa2, 0x40, 0x40, 0x40, 0x40, 0x60, 0x96, 0x96, 0x68, 0x90, 0x8a, 0x94, 0x7f, 0x03, 0xf0 };
-	static unsigned char header2[]  = { 0x63, 0xf1, 0x40, 0x40, 0x40, 0x00, 0x6b, 0x2b, 0x54, 0x28, 0x25, 0x2a, 0x0f };
-	memset (header, 0, sizeof(header));
-	memset (sresult, 0, sizeof(sresult));
-	memset(&alevel, 0, sizeof(alevel));
-
-	pp = ax25_from_frame (example2, sizeof(example2), alevel);
-	assert (pp != NULL);
-	e = il2p_type_1_header (pp, 0, header);
-	assert (e == 0);
-	ax25_delete(pp);
-
-	//dw_printf ("Example 2 header:\n");
-	//for (int i = 0 ; i < sizeof(header); i++) {
-	//    dw_printf (" %02x", header[i]);
-	//}
-	//dw_printf ("\n");
-
-	assert (memcmp(header, header2, sizeof(header2)) == 0);
-
-	il2p_scramble_reset(&tx_lsfr_state);
-	il2p_scramble_block (header, sresult, 13, &tx_lsfr_state);
-	//dw_printf ("Expect scrambled  6a ea 9c c2 01 11 fc 14 1f da 6e f2 53\n");
-	//for (int i = 0 ; i < sizeof(sresult); i++) {
-	//   dw_printf (" %02x", sresult[i]);
-	//}
-	//dw_printf ("\n");
-
-	il2p_encode_rs (sresult, 13, 2, check);
-
-	//dw_printf ("expect checksum = 91 bd\n");
-	//dw_printf ("check = ");
-	//for (int i = 0 ; i < sizeof(check); i++) {
-	//    dw_printf (" %02x", check[i]);
-	//}
-	//dw_printf ("\n");
-	assert (check[0] == 0x91);
-	assert (check[1] == 0xbd);
-
-// Can we go from IL2P back to AX.25?
-
-	pp = il2p_decode_header_type_1 (header, 0);
-	assert (pp != NULL);
-
-	ax25_get_addr_with_ssid (pp, AX25_DESTINATION, dst_addr);
-	ax25_get_addr_with_ssid (pp, AX25_SOURCE, src_addr);
-
-	frame_type = ax25_frame_type (pp, &cr, description, &pf, &nr, &ns);
-	(void)frame_type;
-#if 1
-	dw_printf ("%s(): %s>%s: %s\n", __func__, src_addr, dst_addr, description);
-#endif
-// TODO: compare binary.
-
-	ax25_delete (pp);
-// FIXME: continue
-
-	dw_printf ("Example 2 header OK\n");
-
-
-// -------------- Example 3 - I Frame  ------------------
-
-//	This is an AX.25 I-Frame with 9 bytes of information after the 16 byte header.
-//
-//	Destination Callsign: ?KA2DEW-2
-//	Source Callsign: ?KK4HEJ-2
-//	P/F: 1
-//	C: 1
-//	N(R): 5
-//	N(S): 4
-//	AX.25 PID: 0xCF TheNET
-//	IL2P Payload Byte Count: 9
-//
-//	AX.25 Data:
-//	96 82 64 88 8a ae e4 96 96 68 90 8a 94 65 b8 cf 30 31 32 33 34 35 36 37 38
-//
-//	IL2P Scrambled and Encoded Data:
-//	26 13 6d 02 8c fe fb e8 aa 94 2d 6a 34 43 35 3c 69 9f 0c 75 5a 38 a1 7f f3 fc
-
-
-	//dw_printf ("---------- example 3 ------------\n");
-	static unsigned char example3[]  = { 0x96, 0x82, 0x64, 0x88, 0x8a, 0xae, 0xe4, 0x96, 0x96, 0x68, 0x90, 0x8a, 0x94, 0x65, 0xb8, 0xcf, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 };
-	static unsigned char header3[]   = { 0x2b, 0xe1, 0x52, 0x64, 0x25, 0x77, 0x6b, 0x2b, 0xd4, 0x68, 0x25, 0xaa, 0x22 };
-	static unsigned char complete3[] = { 0x26, 0x13, 0x6d, 0x02, 0x8c, 0xfe, 0xfb, 0xe8, 0xaa, 0x94, 0x2d, 0x6a, 0x34, 0x43, 0x35, 0x3c, 0x69, 0x9f, 0x0c, 0x75, 0x5a, 0x38, 0xa1, 0x7f, 0xf3, 0xfc };
-	memset (header, 0, sizeof(header));
-	memset (sresult, 0, sizeof(sresult));
-	memset(&alevel, 0, sizeof(alevel));
-
-	pp = ax25_from_frame (example3, sizeof(example3), alevel);
-	assert (pp != NULL);
-	e = il2p_type_1_header (pp, 0, header);
-	assert (e == 9);
-	ax25_delete(pp);
-
-	//dw_printf ("Example 3 header:\n");
-	//for (int i = 0 ; i < sizeof(header); i++) {
-	//    dw_printf (" %02x", header[i]);
-	//}
-	//dw_printf ("\n");
-
-	assert (memcmp(header, header3, sizeof(header)) == 0);
-
-	il2p_scramble_reset(&tx_lsfr_state);
-	il2p_scramble_block (header, sresult, 13, &tx_lsfr_state);
-	//dw_printf ("Expect scrambled  26 13 6d 02 8c fe fb e8 aa 94 2d 6a 34\n");
-	//for (int i = 0 ; i < sizeof(sresult); i++) {
-	//   dw_printf (" %02x", sresult[i]);
-	//}
-	//dw_printf ("\n");
-
-	il2p_encode_rs (sresult, 13, 2, check);
-
-	//dw_printf ("expect checksum = 43 35\n");
-	//dw_printf ("check = ");
-	//for (int i = 0 ; i < sizeof(check); i++) {
-	//    dw_printf (" %02x", check[i]);
-	//}
-	//dw_printf ("\n");
-
-	assert (check[0] == 0x43);
-	assert (check[1] == 0x35);
-
-	// That was only the header.  We will get to the info part in a later test.
-
-// Can we go from IL2P back to AX.25?
-
-	pp = il2p_decode_header_type_1 (header, 0);
-	assert (pp != NULL);
-
-	ax25_get_addr_with_ssid (pp, AX25_DESTINATION, dst_addr);
-	ax25_get_addr_with_ssid (pp, AX25_SOURCE, src_addr);
-
-	frame_type = ax25_frame_type (pp, &cr, description, &pf, &nr, &ns);
-	(void)frame_type;
-#if 1
-	dw_printf ("%s(): %s>%s: %s\n", __func__, src_addr, dst_addr, description);
-#endif
-// TODO: compare binary.
-
-	ax25_delete (pp);
-// FIXME: continue
-	dw_printf ("Example 3 header OK\n");
-
-// Example 3 again, this time the Information part is included.
-
-	pp = ax25_from_frame (example3, sizeof(example3), alevel);
-	assert (pp != NULL);
-
-	int max_fec = 0;
-	unsigned char iout[IL2P_MAX_PACKET_SIZE];
-	e = il2p_encode_frame (pp, max_fec, iout);
-
-	//dw_printf ("expected for example 3:\n");
-	//fx_hex_dump(complete3, sizeof(complete3));
-	//dw_printf ("actual result for example 3:\n");
-	//fx_hex_dump(iout, e);
-	// Does it match the example in the protocol spec?
-	assert (e == sizeof(complete3));
-	assert (memcmp(iout, complete3, sizeof(complete3)) == 0);
-	ax25_delete (pp);
-
-	dw_printf ("Example 3 with info OK\n");
-
-} // end test_example_headers
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test all of the frame types.
-//
-//	Encode to IL2P format, decode, and verify that the result is the same as the original.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-
-static void enc_dec_compare (packet_t pp1)
-{
-    for (int max_fec = 0; max_fec <= 1; max_fec++) {
-
-	unsigned char encoded[IL2P_MAX_PACKET_SIZE];
-	int enc_len;
-	enc_len = il2p_encode_frame (pp1, max_fec, encoded);
-	assert (enc_len >= 0);
-
-// FIXME:  add something like:  hdr_type=1, max_fec=0, payload_len=44, encoded_payload=99
-
-	packet_t pp2;
-	pp2 = il2p_decode_frame (encoded);
-	assert (pp2 != NULL);
-
-// Is it the same after encoding to IL2P and then decoding?
-
-	int len1 = ax25_get_frame_len (pp1);
-	unsigned char *data1 = ax25_get_frame_data_ptr (pp1);
-
-	int len2 = ax25_get_frame_len (pp2);
-	unsigned char *data2 = ax25_get_frame_data_ptr (pp2);
-
-	if (len1 != len2 || memcmp(data1, data2, len1) != 0) {
-
-	    dw_printf ("\nEncode/Decode Error.  Original:\n");
-	    ax25_hex_dump (pp1);
-
-	    dw_printf ("IL2P encoded as:\n");
-	    fx_hex_dump(encoded, enc_len);
-
-	    dw_printf ("Got turned into this:\n");
-	    ax25_hex_dump (pp2);
-	}
-
-	assert (len1 == len2 && memcmp(data1, data2, len1) == 0);
-
-	ax25_delete (pp2);
-    }
-// FIXME repeat with max_fec=1
-
-}
-
-static void all_frame_types(void)
-{
-	char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN];
-	int num_addr = 2;
-	cmdres_t cr;
-	ax25_frame_type_t ftype;
-	int pf = 0;
-	int pid = 0xf0;
-	int modulo;
-	int nr, ns;
-	unsigned char *pinfo = NULL;
-	int info_len = 0;
-	packet_t pp;
-
-	strcpy (addrs[0], "W2UB");
-	strcpy (addrs[1], "WB2OSZ-12");
-	num_addr = 2;
-
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("Testing all frame types.\n");
-
-/* U frame */
-
-	dw_printf ("\nU frames...\n");
-
-	for (ftype = frame_type_U_SABME; ftype <= frame_type_U_TEST; ftype++) {
-
-	  for (pf = 0; pf <= 1; pf++) {
-
- 	    int cmin = 0, cmax = 1;
-
-	    switch (ftype) {
-					// 0 = response, 1 = command
-	      case frame_type_U_SABME:	cmin = 1; cmax = 1; break;
-	      case frame_type_U_SABM:	cmin = 1; cmax = 1; break;
-	      case frame_type_U_DISC:	cmin = 1; cmax = 1; break;
-	      case frame_type_U_DM:	cmin = 0; cmax = 0; break;
-	      case frame_type_U_UA:	cmin = 0; cmax = 0; break;
-	      case frame_type_U_FRMR:	cmin = 0; cmax = 0; break;
-	      case frame_type_U_UI:	cmin = 0; cmax = 1; break;
-	      case frame_type_U_XID:	cmin = 0; cmax = 1; break;
-	      case frame_type_U_TEST:	cmin = 0; cmax = 1; break;
-	      default:			break;	// avoid compiler warning.		
-	    }
-	  
-	    for (cr = cmin; cr <= cmax; cr++) {
-
-	      text_color_set(DW_COLOR_INFO);
-	      dw_printf ("\nConstruct U frame, cr=%d, ftype=%d, pid=0x%02x\n", cr, ftype, pid);
-
-	      pp = ax25_u_frame (addrs, num_addr, cr, ftype, pf, pid, pinfo, info_len);
-	      ax25_hex_dump (pp);
-	      enc_dec_compare (pp);
-	      ax25_delete (pp);
-	    }
-	  }
-	}
-
-
-/* S frame */
-
-	//strcpy (addrs[2], "DIGI1-1");
-	//num_addr = 3;
-
-	dw_printf ("\nS frames...\n");
-
-	for (ftype = frame_type_S_RR; ftype <= frame_type_S_SREJ; ftype++) {
-
-	  for (pf = 0; pf <= 1; pf++) {
-
-	    modulo = 8;
-	    nr = modulo / 2 + 1;
-
-	    // SREJ can only be response.
-
- 	    for (cr = 0; cr <= (int)(ftype!=frame_type_S_SREJ); cr++) {
-
-	      text_color_set(DW_COLOR_INFO);
-	      dw_printf ("\nConstruct S frame, cmd=%d, ftype=%d, pid=0x%02x\n", cr, ftype, pid);
-
-	      pp = ax25_s_frame (addrs, num_addr, cr, ftype, modulo, nr, pf, NULL, 0);
-
-	      ax25_hex_dump (pp);
-	      enc_dec_compare (pp);
-	      ax25_delete (pp);
-	    }
-
-	    modulo = 128;
-	    nr = modulo / 2 + 1;
-
- 	    for (cr = 0; cr <= (int)(ftype!=frame_type_S_SREJ); cr++) {
-
-	      text_color_set(DW_COLOR_INFO);
-	      dw_printf ("\nConstruct S frame, cmd=%d, ftype=%d, pid=0x%02x\n", cr, ftype, pid);
-
-	      pp = ax25_s_frame (addrs, num_addr, cr, ftype, modulo, nr, pf, NULL, 0);
-
-	      ax25_hex_dump (pp);
-	      enc_dec_compare (pp);
-	      ax25_delete (pp);
-	    }
-	  }
-	}
-
-/* SREJ is only S frame which can have information part. */
-
-	static unsigned char srej_info[] = { 1<<1, 2<<1, 3<<1, 4<<1 };
-
-	ftype = frame_type_S_SREJ;
-	for (pf = 0; pf <= 1; pf++) {
-
-	  modulo = 128;
-	  nr = 127;
-	  cr = cr_res;
-
-	  text_color_set(DW_COLOR_INFO);
-	  dw_printf ("\nConstruct Multi-SREJ S frame, cmd=%d, ftype=%d, pid=0x%02x\n", cr, ftype, pid);
-
-	  pp = ax25_s_frame (addrs, num_addr, cr, ftype, modulo, nr, pf, srej_info, (int)(sizeof(srej_info)));
-
-	  ax25_hex_dump (pp);
-	  enc_dec_compare (pp);
-	  ax25_delete (pp);
-	}
-
-
-/* I frame */
-
-	dw_printf ("\nI frames...\n");
-
-	pinfo = (unsigned char*)"The rain in Spain stays mainly on the plain.";
-	info_len = strlen((char*)pinfo);
-
-	for (pf = 0; pf <= 1; pf++) {
-
-	  modulo = 8;
-	  nr = 0x55 & (modulo - 1);
-	  ns = 0xaa & (modulo - 1);
-
- 	  for (cr = 1; cr <= 1; cr++) {		// can only be command
-
-	    text_color_set(DW_COLOR_INFO);
-	    dw_printf ("\nConstruct I frame, cmd=%d, ftype=%d, pid=0x%02x\n", cr, ftype, pid);
-
-	    pp = ax25_i_frame (addrs, num_addr, cr, modulo, nr, ns, pf, pid, pinfo, info_len);
-
-	    ax25_hex_dump (pp);
-	    enc_dec_compare (pp);
-	    ax25_delete (pp);
-	  }
-
-	  modulo = 128;
-	  nr = 0x55 & (modulo - 1);
-	  ns = 0xaa & (modulo - 1);
-
- 	  for (cr = 1; cr <= 1; cr++) {
-
-	    text_color_set(DW_COLOR_INFO);
-	    dw_printf ("\nConstruct I frame, cmd=%d, ftype=%d, pid=0x%02x\n", cr, ftype, pid);
-
-	    pp = ax25_i_frame (addrs, num_addr, cr, modulo, nr, ns, pf, pid, pinfo, info_len);
-
-	    ax25_hex_dump (pp);
-	    enc_dec_compare (pp);
-	    ax25_delete (pp);
-	  }
-	}
-
-} // end all_frame_types 
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test bitstream tapped off from demodulator.
-//
-//	5 frames were sent to Nino TNC and a recording was made.
-//	This was demodulated and the resulting bit stream saved to a file.
-//
-//	No automatic test here - must be done manually with audio recording.
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-static int decoding_bitstream = 0;
-
-static void decode_bitstream(void)
-{
-	dw_printf("-----\nReading il2p-bitstream.txt if available...\n");
-
-	FILE *fp = fopen ("il2p-bitstream.txt", "r");
-	if (fp == NULL) {
-	  dw_printf ("Bitstream test file not available.\n");
-	  return;
-	}
-
-	decoding_bitstream = 1;
-	int save_previous = il2p_get_debug();
-	il2p_set_debug (1);
-
-	int ch;
-	while ( (ch = fgetc(fp)) != EOF) {
-
-	  if (ch == '0' || ch == '1') {
-	    il2p_rec_bit (0, 0, 0, ch - '0');
-	  }
-	}
-	fclose(fp);
-	il2p_set_debug (save_previous);
-	decoding_bitstream = 0;
-
-}  // end decode_bitstream
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-//
-//	Test serialize / deserialize.
-//
-//	This uses same functions used on the air.	
-//
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-static char addrs2[] = "AA1AAA-1>ZZ9ZZZ-9";
-static char addrs3[] = "AA1AAA-1>ZZ9ZZZ-9,DIGI*";
-static char text[] = 
-	"'... As I was saying, that seems to be done right - though I haven't time to look it over thoroughly just now - and that shows that there are three hundred and sixty-four days when you might get un-birthday presents -'"
-	"\n"
-	"'Certainly,' said Alice."
-	"\n"
-	"'And only one for birthday presents, you know. There's glory for you!'"
-	"\n"
-	"'I don't know what you mean by \"glory\",' Alice said."
-	"\n"
-	"Humpty Dumpty smiled contemptuously. 'Of course you don't - till I tell you. I meant \"there's a nice knock-down argument for you!\"'"
-	"\n"
-	"'But \"glory\" doesn't mean \"a nice knock-down argument\",' Alice objected."
-	"\n"
-	"'When I use a word,' Humpty Dumpty said, in rather a scornful tone, 'it means just what I choose it to mean - neither more nor less.'"
-	"\n"
-	"'The question is,' said Alice, 'whether you can make words mean so many different things.'"
-	"\n"
-	"'The question is,' said Humpty Dumpty, 'which is to be master - that's all.'"
-	"\n" ;
-
-
-static int rec_count = -1;	// disable deserialized packet test.
-static int polarity = 0;
-
-static void test_serdes (void)
-{
-	text_color_set(DW_COLOR_INFO);
-	dw_printf ("\nTest serialize / deserialize...\n");
-	rec_count = 0;
-
-	int max_fec = 1;
-
-	// try combinations of header type, max_fec, polarity, errors.
-
-	for (int hdr_type = 0; hdr_type <= 1; hdr_type++) {
-	    char packet[1024];
-	    snprintf (packet, sizeof(packet), "%s:%s", hdr_type ? addrs2 : addrs3, text);
-	    packet_t pp = ax25_from_text (packet, 1);
-	    assert (pp != NULL);
-
-	    int chan = 0;
-	
-
-	    for (max_fec = 0; max_fec <= 1; max_fec++) {
-	        for (polarity = 0; polarity <= 2; polarity++) {	// 2 means throw in some errors.
- 	            int num_bits_sent = il2p_send_frame (chan, pp, max_fec, polarity);
-	            dw_printf ("%d bits sent.\n", num_bits_sent);
-
-	            // Need extra bit at end to flush out state machine.
-	            il2p_rec_bit (0, 0, 0, 0);
-	        }
-	    }
-	    ax25_delete(pp);
-	}
-
-	dw_printf ("Serdes receive count = %d\n", rec_count);
-	assert (rec_count == 12);
-	rec_count = -1;		// disable deserialized packet test.
-}
-
-
-// Serializing calls this which then simulates the demodulator output.
-
-void tone_gen_put_bit (int chan, int data)
-{
-	il2p_rec_bit (chan, 0, 0, data);
-}
-
-// This is called when a complete frame has been deserialized.
-
-void multi_modem_process_rec_packet (int chan, int subchan, int slice, packet_t pp, alevel_t alevel, retry_t retries, int is_fx25)
-{
-	if (rec_count < 0) return;	// Skip check before serdes test.
-
-	rec_count++;
-
-	// Does it have the the expected content?
-	
-	unsigned char *pinfo;
-	int len = ax25_get_info(pp, &pinfo);
-	assert (len == strlen(text));
-	assert (strcmp(text, (char*)pinfo) == 0);
-
-	dw_printf ("Number of symbols corrected: %d\n", retries);
-	if (polarity == 2) {	// expecting errors corrrected.
-	    assert (retries == 10);
-	}
-	else {	// should be no errors.
-	    assert (retries == 0);
-	}
-
-	ax25_delete (pp);
-}
-
-alevel_t demod_get_audio_level (int chan, int subchan)
-{
-	alevel_t alevel;
-	memset (&alevel, 0, sizeof(alevel));
-	return (alevel);
-}
-
-// end il2p_test.c
\ No newline at end of file