Browse Source

saving before switching branch

curiousmuch 4 years ago
parent
commit
bab8e6d28b
5 changed files with 136 additions and 124 deletions
  1. 16 32
      main/cc1200.c
  2. 1 1
      main/cc1200.h
  3. 31 21
      main/main.c
  4. 9 70
      main/tnc_kiss.c
  5. 79 0
      main/tnc_kiss.h

+ 16 - 32
main/cc1200.c

@@ -322,21 +322,6 @@ float const delta_phi_1 = (float) 1200 / SAMPLE_FREQUENCY * LUT_SIZE;
 float const delta_phi_2 = (float) 2200 / SAMPLE_FREQUENCY * LUT_SIZE;
 uint8_t data;
 
-//const uint8_t APRS_TEST_PACKET[] = {168,138,166,168, 64, 64,224,174,132,100,158,166,180,255,  3,240, 44, 84,
-//									 104,101, 32,113,117,105, 99,107, 32, 98,114,111,119,110, 32,102,111,120,
-//									  32,106,117,109,112,115, 32,111,118,101,114, 32,116,104,101, 32,108, 97,
-//									 122,121, 32,100,111,103, 33, 32, 32, 49, 32,111,102, 32, 52, 40,110};
-
-const uint8_t APRS_TEST_PACKET[] = { 0x82, 0x98, 0x98, 0x40, 0x40, 0x40, 0xe0, 0x96, 0x84, 0x66, 0xaa, 0x96, 0xac, 0xe0, 0xae, 0x92,
-									 0x88, 0x8a, 0x62, 0x40, 0x62, 0xae, 0x92, 0x88, 0x8a, 0x64, 0x40, 0x65, 0x03, 0xf0, 0x3a, 0x4b,
-									 0x42, 0x33, 0x55, 0x4b, 0x56, 0x2d, 0x32, 0x20, 0x3a, 0x48, 0x69, 0x21, 0x20, 0x54, 0x68, 0x69, 0x73,
-									 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x54, 0x65, 0x73, 0x74, 0x7b, 0x31, 0xad, 0xa1 };
-
-//#define APRS_TEST_PACKET fbuf
-
-extern unsigned char *fbuf;
-extern uint32_t flen;
-//const uint8_t APRS_TEST_PACKET[] = {0xFF, 0xFF, 0xFF};
 
 // The output needs to be continous phase.
 
@@ -354,7 +339,7 @@ aprs_flags_t DRAM_ATTR aprs_flags = {
 		.one_count = 0,
 		.sample_count = 0,
 		.byte = 0,
-		.packet_len = sizeof(APRS_TEST_PACKET)/sizeof(uint8_t),
+//		.packet_len = sizeof(APRS_TEST_PACKET)/sizeof(uint8_t),
 		.prev_bit = 0,
 		.cur_bit = 0,
 		.tone = 0
@@ -399,8 +384,7 @@ void cc1200_lut_init(void)
 #define PREAMBLE_LENGTH 20
 #define SUFFIX_LENGTH 1
 
-// test function to generate APRS s1 or s2
-void IRAM_ATTR cc1200_radio_APRSTXPacket(void)
+void IRAM_ATTR cc1200_radio_APRSTXPacket(uint8_t  *f, uint16_t f_len, uint8_t tx_delay, uint8_t tx_tail)
 {
 	// start CW transmission
 	cc1200_spi_write_byte(CC120X_FIFO, 0x12);
@@ -415,18 +399,20 @@ void IRAM_ATTR cc1200_radio_APRSTXPacket(void)
 	// acquire SPI bus for fastest possible SPI transactions
 	spi_device_acquire_bus(spi, portMAX_DELAY);
 
+
 	int16_t i,j;
+	uint16_t p_len = tx_delay * 12;
+	uint16_t t_len = tx_tail * 12;
 
-	while(1)
-	{
-		// start CW transmission
+		// Start CW transmission
 		cc1200_spi_write_byte(CC120X_FIFO, 0x12);
 		cc1200_spi_strobe(CC120X_STX);
 
 		sample_count = 0;
 		new_sample = 0;
-		/* Send Flag */
-		for (i = 0; i<PREAMBLE_LENGTH; i++)
+
+		// Send HDLC Flag for TX Delay Time
+		for (i = 0; i<p_len; i++)
 		{
 			aprs_flags.byte = 0x7E;
 			for(j=0; j<8; j++)
@@ -463,10 +449,11 @@ void IRAM_ATTR cc1200_radio_APRSTXPacket(void)
 		}
 		aprs_flags.one_count = 0;
 
-		/* Send Packet */
-		for (i=0;i<aprs_flags.packet_len;i++)
+		// Send Packet / Frame
+		//for (i=0;i<aprs_flags.packet_len;i++)
+		for (i=0;i<f_len;i++)
 		{
-			aprs_flags.byte = APRS_TEST_PACKET[i];
+			aprs_flags.byte = f[i];
 			for(j=0; j<8; j++)
 			{
 				aprs_flags.cur_bit = aprs_flags.byte & 0x01;	// bool of first bit
@@ -522,8 +509,8 @@ void IRAM_ATTR cc1200_radio_APRSTXPacket(void)
 		}
 		aprs_flags.one_count = 0;
 
-		/* Send Flag */
-		for (i = 0; i<SUFFIX_LENGTH; i++)
+		// Send HDLC Flag for TX Tail
+		for (i = 0; i<t_len; i++)
 		{
 			aprs_flags.byte = 0x7E;
 			for(j=0; j<8;j++)
@@ -558,12 +545,9 @@ void IRAM_ATTR cc1200_radio_APRSTXPacket(void)
 			}
 		}
 		cc1200_spi_strobe(CC120X_SIDLE);
-
-		vTaskDelay(10000/portTICK_PERIOD_MS);
-	}
 }
 
-extern RingbufHandle_t cfm_buf_handle;
+RingbufHandle_t cfm_buf_handle;
 
 static void IRAM_ATTR cc1200_aprs_rx_isr(void* arg)
 {

+ 1 - 1
main/cc1200.h

@@ -289,7 +289,7 @@ void cc1200_radio_init(const cc1200_reg_settings_t*, uint8_t);
 esp_err_t cc1200_radio_frequency(uint32_t);
 rf_status_t cc1200_radio_reset(void);
 esp_err_t cc1200_radio_sleep(void);
-void cc1200_radio_APRSTXPacket(void);
+void cc1200_radio_APRSTXPacket(uint8_t  *f, uint16_t f_len, uint8_t tx_delay, uint8_t tx_tail);
 void cc1200_radio_APRSRXPacket(void);
 
 

+ 31 - 21
main/main.c

@@ -8,36 +8,46 @@
 #include "driver/gpio.h"
 #include "sdkconfig.h"
 #include "esp_task_wdt.h"
-#include "cc1120.h"
-#include "cc1120_protocol.h"
+
+#include "cc1200.h"
+#include "cc1200_protocol.h"
 #include "board.h"
 
-#include "ax25_pad2.h"
-#include "ax25_pad.h"
+//#include "ax25_pad2.h"
+//#include "ax25_pad.h"
 #include "fcs_calc.h"
 
-extern uint8_t tx_symbol;
-extern uint8_t sample_count;
+uint8_t APRS_TEST_PACKET[] = { 0x82, 0x98, 0x98, 0x40, 0x40, 0x40, 0xe0, 0x96, 0x84, 0x66, 0xaa, 0x96, 0xac, 0xe0, 0xae, 0x92,
+									 0x88, 0x8a, 0x62, 0x40, 0x62, 0xae, 0x92, 0x88, 0x8a, 0x64, 0x40, 0x65, 0x03, 0xf0, 0x3a, 0x4b,
+									 0x42, 0x33, 0x55, 0x4b, 0x56, 0x2d, 0x32, 0x20, 0x3a, 0x48, 0x69, 0x21, 0x20, 0x54, 0x68, 0x69, 0x73,
+									 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x54, 0x65, 0x73, 0x74, 0x7b, 0x31, 0xad, 0xa1 };
 
 void IRAM_ATTR app_main()
 {
-	cc1120_radio_init(APRS_SETTINGS, sizeof(APRS_SETTINGS)/sizeof(cc1120_reg_settings_t));
+	cc1200_radio_init(APRS_SETTINGS, sizeof(APRS_SETTINGS)/sizeof(cc1200_reg_settings_t));
 	vTaskDelay(500/portTICK_PERIOD_MS);
 
-	// generate sample packet
-	packet_t pp;
-	unsigned char fbuf[AX25_MAX_PACKET_LEN+2];
-	uint32_t flen;
-	uint32_t c;
-
-	pp = ax25_from_text("WB2OSZ-15>TEST:,The quick brown fox jumps over the lazy dog!  1 of 4", 1);
-	flen = ax25_pack(pp, fbuf);
-
-	uint32_t fcs = fcs_calc(fbuf, flen);
-
-	ax25_hex_dump(pp);
-	printf("FCS: %x\n", fcs);
-
+//	// generate sample packet
+//	packet_t pp;
+//	unsigned char fbuf[AX25_MAX_PACKET_LEN+2];
+//	uint32_t flen;
+//	uint32_t c;
+//
+//	pp = ax25_from_text("WB2OSZ-15>TEST:,The quick brown fox jumps over the lazy dog!  1 of 4", 1);
+//	flen = ax25_pack(pp, fbuf);
+//
+//	uint32_t fcs = fcs_calc(fbuf, flen);
+//
+//	ax25_hex_dump(pp);
+//	printf("FCS: %x\n", fcs);
+
+
+	//while(1)
+	{
+
+		//cc1200_radio_APRSTXPacket(APRS_TEST_PACKET, sizeof(APRS_TEST_PACKET)/sizeof(uint8_t), 4, 2);
+		vTaskDelay(1000/portTICK_PERIOD_MS);
+	}
 
 	//cc1120_radio_APRSTXPacket();
 	//xTaskCreatePinnedToCore();

+ 9 - 70
main/tnc_kiss.c

@@ -12,52 +12,7 @@
 #include "freertos/ringbuf.h"
 #include "esp_log.h"
 #include <stdio.h>
-
-// Logging Tag
-#define TNC_TAG "KISS TNC"
-
-// Frame Buffer
-#define FRAME_BUFFER_SIZE 512
-
-// KISS Specific Characters
-#define KISS_FEND 	0xC0
-#define KISS_FESC 	0xDB
-#define KISS_TFEND 	0xDC
-#define KISS_TFESC 	0xDD
-
-// KISS Commands
-// command Structure: [ 4 bits ][ 4 bits ]
-//				 	  [ TNC #  ][   cmd  ]
-#define KISS_DATAFRAME			0x00		// data to be send on HDLC channel
-#define KISS_CMD_TXDELAY		0x01		// keyup delay in 10ms units. default is 50ms.
-#define KISS_CMD_P				0x02
-#define KISS_CMD_SLOTTIME		0x03
-#define KISS_CMD_TXTAIL 		0x04
-#define KISS_CMD_FULLDUPLEX		0x05
-#define KISS_CMD_SETHARDWARE	0x06
-#define KISS_CMD_RETURN			0xFF
-
- typedef struct {
-	uint8_t tx_delay;
-	uint8_t persistence;
-	uint8_t slot_time;
-	uint8_t tx_tail;
-	uint8_t full_duplex;
-	uint8_t tnc_number;
-//	uint8_t max_frame_size;
-} tnc_settings_t;
-
-typedef enum {
-	ESC_MODE = 0,
-	FRAME_ASS,
-	FRAME_END,
-} KISS_STATE_t;
-
-typedef struct {
-	uint8_t 	buf[FRAME_BUFFER_SIZE];
-	uint32_t 	max_len;
-	uint32_t 	index;
-} buffer_handle_t;
+#include "tnc_kiss.h"
 
 buffer_handle_t buffer_handle;
 tnc_settings_t tnc_settings;
@@ -87,10 +42,7 @@ void kiss_process_frame(void)
 {
     uint8_t data_byte, tnc_number;
     data_byte = buffer_handle.buf[0];
-    tnc_number = (data_byte >> 4) & 0x0F;
-
-    if (tnc_number != tnc_settings.tnc_number)					// ignore irrelevent TNC data
-    	return;
+    tnc_number = (data_byte >> 4) & 0x0F;	// TODO: Have KISS code respect TNC number
 
 	switch( data_byte ) {
 		case KISS_DATAFRAME: {
@@ -140,25 +92,12 @@ void kiss_process_frame(void)
 	return;
 }
 
-typedef struct {
-	uint8_t *data;
-	uint16_t len;
-} raw_kiss_frame_t;
-
-typedef struct {
-	uint8_t *data;
-	uint16_t len;
-} raw_ax25_frame_t;
 
-#define TNC_INPUT_QUEUE_LEN 1
-#define TNC_INPUT_QUEUE_ITEM_SIZE sizeof(raw_kiss_frame_t)
-#define TNC_OUTPUT_QUEUE_LEN 1
-#define TNC_INPUT_QUEUE_ITEM_SIZE sizeof(raw_ax25_frame_t)
 
 // TNC needs the ability to RX KISS frame, decode it, schedule it, and then send out via APRS or Arrow-Net
 // TNC needs the ability to switch to RX mode,
 
-void tnc_init(tnc_settings_t s)
+void tnc_init(void)
 {
 	buffer_handle.max_len = FRAME_BUFFER_SIZE;			// TODO: make frame buffer dynamic
 //	tnc_settings.max_frame_size = FRAME_BUFFER_SIZE;
@@ -166,12 +105,12 @@ void tnc_init(tnc_settings_t s)
 	// TODO: Store / retrieve default TNC settings from flash?
 
 	// set default TNC settings
-	tnc_settings.tx_delay = s.tx_delay;
-	tnc_settings.persistence = s.persistence;
-	tnc_settings.slot_time = s.slot_time;
-	tnc_settings.tx_tail = s.tx_tail;
-	tnc_settings.full_duplex = s.full_duplex;
-	tnc_settings.tnc_number = s.tnc_number;
+//	tnc_settings.tx_delay = s.tx_delay;
+//	tnc_settings.persistence = s.persistence;
+//	tnc_settings.slot_time = s.slot_time;
+//	tnc_settings.tx_tail = s.tx_tail;
+//	tnc_settings.full_duplex = s.full_duplex;
+//	tnc_settings.tnc_number = s.tnc_number;
 
 	// setup TNC task with queue
 }

+ 79 - 0
main/tnc_kiss.h

@@ -0,0 +1,79 @@
+/*
+ * tnc_kiss.h
+ *
+ *  Created on: Jun 12, 2019
+ *      Author: curiousmuch
+ */
+
+#ifndef MAIN_TNC_KISS_H_
+#define MAIN_TNC_KISS_H_
+
+// Logging Tag
+#define TNC_TAG "KISS TNC"
+
+// Frame Buffer
+#define FRAME_BUFFER_SIZE 512
+
+// KISS Specific Characters
+#define KISS_FEND 	0xC0
+#define KISS_FESC 	0xDB
+#define KISS_TFEND 	0xDC
+#define KISS_TFESC 	0xDD
+
+// KISS Commands
+// command Structure: [ 4 bits ][ 4 bits ]
+//				 	  [ TNC #  ][   cmd  ]
+#define KISS_DATAFRAME			0x00		// data to be send on HDLC channel
+#define KISS_CMD_TXDELAY		0x01		// keyup delay in 10ms units. default is 50ms.
+#define KISS_CMD_P				0x02
+#define KISS_CMD_SLOTTIME		0x03
+#define KISS_CMD_TXTAIL 		0x04
+#define KISS_CMD_FULLDUPLEX		0x05
+#define KISS_CMD_SETHARDWARE	0x06
+#define KISS_CMD_RETURN			0xFF
+
+
+
+// TXDELAY: TX keyup delay in 10 ms units. Default = 50 (500ms)
+// P: Persistence scaled 0 - 255. P = p *256 -1. Default = 63 (p = 0.25)
+// SlotTime: Slot interval in 10ms units. Default = 10 (100ms)
+// TXTail: Time to hold TX after FCS has been sent in 10ms units. Default = 0
+// FullDuplex: 0 = Half Duplex. >0 = Full Duplex. Default = 0
+// SetHardware: Custom
+// Return: Exit Kiss
+
+ typedef struct {
+	uint8_t tx_delay;
+	uint8_t persistence;
+	uint8_t slot_time;
+	uint8_t tx_tail;
+	uint8_t full_duplex;
+	uint8_t tnc_number;
+//	uint8_t max_frame_size;
+} tnc_settings_t;
+
+typedef enum {
+	ESC_MODE = 0,
+	FRAME_ASS,
+	FRAME_END,
+} KISS_STATE_t;
+
+typedef struct {
+	uint8_t 	buf[FRAME_BUFFER_SIZE];
+	uint32_t 	max_len;
+	uint32_t 	index;
+} buffer_handle_t;
+
+typedef struct {
+	uint8_t *data;
+	uint16_t len;
+} raw_kiss_frame_t;
+
+typedef struct {
+	uint8_t *data;
+	uint16_t len;
+} raw_ax25_frame_t;
+
+
+
+#endif /* MAIN_TNC_KISS_H_ */