亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ax25.c

?? whereavr是一個用ATMEL M8實現的AX.25精簡協議棧,搜了很多資料,這個是對學習自動位置報告系統最好的實例
?? C
字號:
/*******************************************************************************
File:			AX25.C

				Routines for sending AX.25 Data.

Functions:	extern void ax25sendHeader(void);
				extern void ax25sendFooter(void);
				extern void ax25sendByte(char inbyte);
				extern void ax25crcBit(int txbyte);

				extern void ax25sendASCIIebyte(unsigned short value);
				extern void ax25sendString(char *address);
				extern void ax25sendEEPROMString(unsigned int address);

Revisions:	1.00	11/03/01 JAH	Original - John Hansen / Zack Clobes
				1.01	10/10/04	GND	Totally rewritten for AVR GNU GCC Compiler
				1.02	11/02/04	GND	Optimized for reading header out of EEPROM
				1.03	12/01/04	GND	Further optimized for tone generation
				1.04	06/23/05	GND	Converted to C++ comment style

Copyright:	(c)2005, Gary N. Dion (me@garydion.com). All rights reserved.
				This software is available only for non-commercial amateur radio
				or educational applications.  All other uses are prohibited.
				This software may be modified only if the resulting code be
				made available publicly and the original author(s) given credit.

				Many of the core functions were written for TAPR's PICe
				packet controller by John A. Hanson, W2FS (john@hansen.net).
				Some additions and modifications were made by Zack Clobes,
				W0ZC (zack@clobes.net).  I have further modified their code
				to compile on an Atmel ATmega8 using the freely available
				GNU GCC compiler, aka "WinAVR".

*******************************************************************************/

// Important! One global variable is used in this file: txtone

// OS headers
#include <avr/eeprom.h>
#include <avr/io.h>

// General purpose include files
#include "StdDefines.h"

// App required include files
#include "ax25.h"
#include "Main.h"
#include "Serial.h"

// Defines
#define BIT_DELAY 189					// Delay for 0.833 ms (189 for 14.7456 MHz)
#define TXDELAY 100						// Number of 6.7ms delay cycles (send flags)

// Global variables
static unsigned short	crc;

/******************************************************************************/
extern void ax25sendHeader(void)
/*******************************************************************************
* ABSTRACT:	This function keys the transmitter, sends the source and
*				destination address, and gets ready to send the actual data.
*
* INPUT:		None
* OUTPUT:	None
* RETURN:	None
*/
{
	static unsigned char	loop_delay;

	crc = 0xFFFF;							// Initialize the crc register

	// Transmit the Flag field to begin the UI-Frame
	// Adjust length for txdelay (each one takes 6.7ms)
	for (loop_delay = 0 ; loop_delay < TXDELAY ; loop_delay++)
	{
		(ax25sendByte(0x7E));
	}

	/* 		* * * THIS IS WHERE THE CALLSIGNS ARE DETERMINED * * *
	Each callsign character is shifted to use the high seven bits of the byte.
	Use the table below to determine the hex values for these characters.
	For callsigns less than six digits, pad the end of the callsign with spaces.
	For all bytes in header, except for the very last byte, bit0 must be clear.
	Yes, this means only the very last byte has bit0 set to 1 in the Station ID!

		Callsign byte lookup table
		 -----------------------------------------------------------
		| Letters:                    |   Numbers and SSID's:       |
		| A = 0x82       N = 0x9C     |   0 = 0x60       8 = 0x70   |
		| B = 0x84       O = 0x9E     |   1 = 0x62       9 = 0x72   |
		| C = 0x86       P = 0xA0     |   2 = 0x64       10 = 0x74  |
		| D = 0x88       Q = 0xA2     |   3 = 0x66       11 = 0x76  |
		| E = 0x8A       R = 0xA4     |   4 = 0x68       12 = 0x78  |
		| F = 0x8C       S = 0xA6     |   5 = 0x6A       13 = 0x7A  |
		| G = 0x8E       T = 0xA8     |   6 = 0x6C       14 = 0x7C  |
		| H = 0x90       U = 0xAA     |   7 = 0x6E       15 = 0x7E  |
		| I = 0x92       V = 0xAC     |   Space = 0x40              |
		| J = 0x94       W = 0xAE     |                             |
		| K = 0x96       X = 0xB0     |   REMEMBER!  Set bit0 in    |
		| L = 0x98       Y = 0xB2     |   the last SSID to one!     |
		| M = 0x9A       Z = 0xB4     |                             |
		 -----------------------------------------------------------
		End of lookup table */

/* To save on FLASH, the following was moved into EEPROM

	// Begin transmission of packet destination address (APxxxx0)
	ax25sendByte(0x82);						// A
	ax25sendByte(0xA0);						// P
	ax25sendByte(0x82);						// A
	ax25sendByte(0xAC);						// V
	ax25sendByte(0xA4);						// R
	ax25sendByte(0x60);						// 0
	ax25sendByte(0x60);						// SSID=0

	// Begin transmission of packet source address
	ax25sendByte(0x9C);						// Byte 1 (N)
	ax25sendByte(0x68);						// Byte 2 (4)
	ax25sendByte(0xA8);						// Byte 3 (T)
	ax25sendByte(0xB0);						// Byte 4 (X)
	ax25sendByte(0x92);						// Byte 5 (I)
	ax25sendByte(0x40);						// Byte 6 (Space)
	ax25sendByte(0x76);						// Station ID (11)

	ax25sendByte(0xA4);						// Byte 1 (R)
	ax25sendByte(0x8A);						// Byte 2 (E)
	ax25sendByte(0x98);						// Byte 3 (L)
	ax25sendByte(0x82);						// Byte 4 (A)
	ax25sendByte(0xB2);						// Byte 5 (Y)
	ax25sendByte(0x40);						// Byte 6 (Space)
	ax25sendByte(0x60);						// Station ID (0)

	ax25sendByte(0xAE);						// Byte 1 (W)
	ax25sendByte(0x92);						// Byte 2 (I)
	ax25sendByte(0x88);						// Byte 3 (D)
	ax25sendByte(0x8A);						// Byte 4 (E)
	ax25sendByte(0x64);						// Byte 5 (2)
	ax25sendByte(0x40);						// Byte 6 (Space)
	ax25sendByte(0x65);						// Station ID (2)

	// Finish out the header with two more bytes
	ax25sendByte(0x03);						// Control field - 0x03 is APRS UI-frame
	ax25sendByte(0xF0);						// Protocol ID - 0xF0 is no layer 3
*/

//	ax25sendEEPROMString(0);				// Send the header for use on 144.39 MHz
	ax25sendEEPROMString(31);				// Trimmed header for use in 144.34 MHz
	return;

}		// End ax25sendHeader(void)


/******************************************************************************/
extern void ax25sendFooter(void)
/*******************************************************************************
* ABSTRACT:	This function closes out the packet with the check-sum and a
*				final flag.
*
* INPUT:		None
* OUTPUT:	None
* RETURN:	None
*/
{
	static unsigned char	crchi;

	crchi = (crc >> 8)^0xFF;
	ax25sendByte(crc^0xFF); 				// Send the low byte of the crc
	ax25sendByte(crchi); 					// Send the high byte of the crc
	ax25sendByte(0x7E);			  			// Send a flag to end the packet
	return;

}		// End ax25sendFooter(void)


/******************************************************************************/
extern void ax25sendByte(unsigned char txbyte)
/*******************************************************************************
* ABSTRACT:	This function sends one byte by toggling the "tone" variable.
*
* INPUT:		txbyte	The byte to transmit
* OUTPUT:	None
* RETURN:	None
*/
{
	static char	loop;
	static char	bitbyte;
	static int	bit_zero;
	static unsigned char	sequential_ones;

	bitbyte = txbyte;							// Bitbyte will be rotated through

	for (loop = 0 ; loop < 8 ; loop++)	// Loop for eight bits in the byte
	{
		bit_zero = bitbyte & 0x01;			// Set aside the least significant bit

		if (txbyte == 0x7E)					// Is the transmit character a flag?
		{
			sequential_ones = 0;				// it is immune from sequential 1's
		}
		else										// The transmit character is not a flag
		{
			(ax25crcBit(bit_zero));			// So modify the checksum
		}

		if (!(bit_zero))						// Is the least significant bit low?
		{
			sequential_ones = 0;				// Clear the number of ones we have sent
			txtone = (txtone == MARK)? SPACE : MARK; // Toggle transmit tone
		}
		else										// Else, least significant bit is high
		{
			if (++sequential_ones == 5)	// Is this the 5th "1" in a row?
			{
				mainDelay(BIT_DELAY);		// Go ahead and send it
				txtone = (txtone == MARK)? SPACE : MARK; // Toggle transmit tone
				sequential_ones = 0;			// Clear the number of ones we have sent
			}

		}

		bitbyte >>= 1;							// Shift the reference byte one bit right
		mainDelay(BIT_DELAY);				// Pause for the bit to be sent
	}

	return;

}		// End ax25sendByte(unsigned char txbyte)


/******************************************************************************/
extern void ax25crcBit(int lsb_int)
/*******************************************************************************
* ABSTRACT:	This function takes the latest transmit bit and modifies the crc.
*
* INPUT:		lsb_int	An integer with its least significant bit set of cleared
* OUTPUT:	None
* RETURN:	None
*/
{
	static unsigned short	xor_int;

	xor_int = crc ^ lsb_int;				// XOR lsb of CRC with the latest bit
	crc >>= 1;									// Shift 16-bit CRC one bit to the right

	if (xor_int & 0x0001)					// If XOR result from above has lsb set
	{
		crc ^= 0x8408;							// Shift 16-bit CRC one bit to the right
	}

	return;

}		// End ax25crcBit(int lsb_int)


/******************************************************************************/
extern void ax25sendASCIIebyte(unsigned short value)
/*******************************************************************************
* ABSTRACT:	This function sends an unsigned "extended" byte using ASCII.
*				"Extended" means that it is 10-bits only (values up to 999.)
*
* INPUT:		value		The "ebyte" to be converted into ASCII and sent.
* OUTPUT:	None
* RETURN:	None
*/
{
	static char count;

	if (value > 999) value = 999;

	count = 0;
	while (value >= 100)
	{
		value -= 100;
		count++;
	}
	ax25sendByte(count + 48);

	count = 0;
	while (value >= 10)
	{
		value -= 10;
		count++;
	}
	ax25sendByte(count + 48);
	ax25sendByte(value + 48);
	return;

}		// End ax25sendASCIIebyte(unsigned short value)


/******************************************************************************/
extern void ax25sendString(char *address)
/*******************************************************************************
* ABSTRACT:	This function sends a null-terminated string to the packet
*
* INPUT:		*szString	Pointer to string to send
* OUTPUT:	None
* RETURN:	None
*/
{
	while (*address != 0)
	{
		ax25sendByte(*address);
		address++;
	}

	return;

}		// End ax25sendString(char *address)


/******************************************************************************/
extern void ax25sendEEPROMString(unsigned int address)
/*******************************************************************************
* ABSTRACT:	This function sends a null-terminated string found in EEPROM
*				at the address given
*
* INPUT:		address	Starting address for the string
* OUTPUT:	None
* RETURN:	None
*/
{
	static unsigned char temp_char;

	temp_char = eeprom_read_byte ((uint8_t *)(address));
	while (temp_char)
	{
		ax25sendByte(temp_char);
		temp_char = eeprom_read_byte ((uint8_t *)(++address));
	}

	return;

}		// End ax25sendEEPROMString(unsigned int address)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级欧美一级| 欧美三级在线看| 亚洲无人区一区| 久久免费电影网| 欧美三级视频在线| 成人看片黄a免费看在线| 婷婷激情综合网| 亚洲色图清纯唯美| 精品成人私密视频| 欧美日韩在线观看一区二区 | 国产午夜亚洲精品理论片色戒| 色8久久人人97超碰香蕉987| 国产一区二区三区蝌蚪| 一级精品视频在线观看宜春院 | 欧美乱妇20p| 不卡一区二区中文字幕| 久久9热精品视频| 亚洲成av人片在线观看| 亚洲婷婷综合色高清在线| 精品动漫一区二区三区在线观看| 精品视频1区2区3区| 91在线精品秘密一区二区| 国产美女视频一区| 老司机免费视频一区二区三区| 亚洲一区二区视频在线观看| 国产精品护士白丝一区av| 久久久久久一级片| 制服丝袜成人动漫| 在线免费亚洲电影| 一本大道久久a久久综合婷婷 | 欧美在线看片a免费观看| 成人免费三级在线| 懂色av一区二区三区免费看| 国产一区二区女| 精品一区二区三区在线播放视频| 亚洲123区在线观看| 亚洲国产成人porn| 性欧美大战久久久久久久久| 亚洲在线中文字幕| 亚洲欧美视频一区| 一区二区三区在线观看动漫| 亚洲精品欧美二区三区中文字幕| 亚洲天堂免费看| 亚洲六月丁香色婷婷综合久久| 亚洲裸体xxx| 亚洲影视在线播放| 亚洲chinese男男1069| 日韩精品福利网| 蜜桃视频在线观看一区| 黑人巨大精品欧美一区| 国产v综合v亚洲欧| 成人av免费在线播放| 色哟哟亚洲精品| 欧美少妇bbb| 欧美一区二区三区婷婷月色| 精品欧美久久久| 久久久精品免费观看| 国产精品成人免费在线| 亚洲欧洲综合另类在线| 亚洲午夜视频在线观看| 日韩av电影免费观看高清完整版 | 久久综合色天天久久综合图片| 精品国产不卡一区二区三区| 国产视频一区二区在线| 国产精品伦理在线| 一个色综合网站| 精品一区二区三区在线播放| 国产91对白在线观看九色| 99精品视频一区| 欧美日韩日日夜夜| 欧美岛国在线观看| 中文幕一区二区三区久久蜜桃| 亚洲免费观看在线观看| 日本va欧美va瓶| 国产成人精品亚洲午夜麻豆| 在线欧美日韩精品| www国产精品av| 亚洲精品日日夜夜| 精品在线视频一区| 91香蕉国产在线观看软件| 51精品视频一区二区三区| 久久免费国产精品| 亚洲午夜一二三区视频| 国产一二精品视频| 在线观看国产日韩| 久久精品亚洲一区二区三区浴池| 亚洲女子a中天字幕| 久久国产婷婷国产香蕉| av在线这里只有精品| 欧美一区二区不卡视频| 国产精品久久久久一区二区三区共| 亚洲成人资源网| 成人性视频网站| 日韩视频免费观看高清完整版 | 亚洲午夜免费福利视频| 国产麻豆精品视频| 欧美日韩亚洲综合| 国产精品久久久久久亚洲毛片 | 99精品视频在线观看| 日韩欧美一级二级| 亚洲三级电影网站| 久久99精品久久久久久国产越南| 欧洲精品在线观看| 中文字幕日本乱码精品影院| 伦理电影国产精品| 在线日韩av片| 国产精品你懂的在线欣赏| 国内国产精品久久| 欧美精三区欧美精三区| 一区在线观看视频| 国产精品一区二区男女羞羞无遮挡| 欧美丰满美乳xxx高潮www| 国产日韩欧美精品电影三级在线| 亚洲成人av免费| 欧美影院一区二区| 亚洲欧美国产77777| 成人精品一区二区三区四区| 久久日韩粉嫩一区二区三区| 一片黄亚洲嫩模| 99精品欧美一区| 国产欧美日韩不卡| 久久爱www久久做| 欧美一区二区免费| 一区二区三区影院| 99久久精品国产观看| 国产午夜精品久久久久久久 | 国产福利91精品一区二区三区| 欧美嫩在线观看| 亚洲第一狼人社区| 欧美日韩国产高清一区二区三区 | 日本亚洲电影天堂| 欧美日韩一级片在线观看| 亚洲国产精品欧美一二99| 91麻豆文化传媒在线观看| 国产精品国产三级国产普通话蜜臀 | 国产精品国产自产拍高清av | 在线免费观看视频一区| 亚洲人成网站影音先锋播放| 99久久精品国产精品久久| 亚洲特黄一级片| 色乱码一区二区三区88 | 99re成人在线| 136国产福利精品导航| 9色porny自拍视频一区二区| 亚洲日本韩国一区| 91国产视频在线观看| 亚洲激情欧美激情| 欧美日韩大陆一区二区| 日韩av电影天堂| 久久色在线视频| 成人激情黄色小说| 亚洲欧美激情视频在线观看一区二区三区 | 一色桃子久久精品亚洲| 91麻豆精品在线观看| 亚洲国产人成综合网站| 欧美一区二区三区视频在线| 九九久久精品视频| 欧美激情在线看| 成人av在线资源| 亚洲国产视频a| 精品久久久久久久久久久久包黑料| 国产一区91精品张津瑜| 亚洲九九爱视频| 欧美日韩一区二区三区四区五区| 免费观看成人鲁鲁鲁鲁鲁视频| 久久综合狠狠综合久久综合88| 成年人午夜久久久| 亚洲高清在线视频| 2023国产精品| 91麻豆免费在线观看| 免费看精品久久片| 欧美国产一区在线| 欧美调教femdomvk| 国产精品888| 亚洲不卡一区二区三区| 久久亚洲综合色| 欧美在线不卡一区| 国产一区视频网站| 亚洲综合色区另类av| 精品国产乱码久久久久久闺蜜| 91丨九色porny丨蝌蚪| 欧美96一区二区免费视频| 国产精品久久久久久久久免费桃花 | 久久国产生活片100| 综合激情网...| 精品噜噜噜噜久久久久久久久试看| 成人av影视在线观看| 石原莉奈一区二区三区在线观看| 国产精品人成在线观看免费 | 26uuuu精品一区二区| 在线观看国产91| 国产成人精品在线看| 轻轻草成人在线| 一区二区三区色| 欧美国产一区二区在线观看| 欧美一区二区三区免费大片 | 久久精品欧美日韩精品| 欧美三级电影在线观看| 成人黄页毛片网站| 久久99国产精品免费|