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

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

?? pocsag.c

?? 多種LINUX系統下程序
?? C
字號:
/* *      pocsag.c -- POCSAG protocol decoder * *      Copyright (C) 1996   *          Thomas Sailer (sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu) * *      POCSAG (Post Office Code Standard Advisory Group) *      Radio Paging Decoder * *	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, write to the Free Software *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* ---------------------------------------------------------------------- */#include "multimon.h"#include <string.h>/* ---------------------------------------------------------------------- */#define CHARSET_LATIN1/* ---------------------------------------------------------------------- *//* * the code used by POCSAG is a (n=31,k=21) BCH Code with dmin=5, * thus it could correct two bit errors in a 31-Bit codeword. * It is a systematic code. * The generator polynomial is:  *   g(x) = x^10+x^9+x^8+x^6+x^5+x^3+1 * The parity check polynomial is:  *   h(x) = x^21+x^20+x^18+x^16+x^14+x^13+x^12+x^11+x^8+x^5+x^3+1 * g(x) * h(x) = x^n+1 */#define BCH_POLY 03551 /* octal */#define BCH_N    31#define BCH_K    21/* * some codewords with special POCSAG meaning */#define POCSAG_SYNC     0x7cd215d8#define POCSAG_SYNCINFO 0x7cf21436#define POCSAG_IDLE     0x7a89c197#define POCSAG_SYNC_WORDS ((2000000 >> 3) << 13)/* ---------------------------------------------------------------------- */static unsigned char service_mask = 0x87;/* ---------------------------------------------------------------------- */static inline unsigned char even_parity(unsigned long data) {	unsigned int temp = data ^ (data >> 16);		temp = temp ^ (temp >> 8);	temp = temp ^ (temp >> 4);	temp = temp ^ (temp >> 2);	temp = temp ^ (temp >> 1);	return temp & 1;}/* ---------------------------------------------------------------------- */static unsigned long pocsag_code(unsigned long data) {	unsigned long ret = data << (BCH_N-BCH_K), shreg = ret;	unsigned long mask = 1L << (BCH_N-1), coeff = BCH_POLY << (BCH_K-1);	int n = BCH_K;		for(; n > 0; mask >>= 1, coeff >>= 1, n--)		if (shreg & mask)			shreg ^= coeff;	ret ^= shreg;	ret = (ret << 1) | even_parity(ret);	verbprintf(9, "BCH coder: data: %08lx shreg: %08lx ret: %08lx\n", 		   data, shreg, ret);	return ret;}/* ---------------------------------------------------------------------- */static unsigned int pocsag_syndrome(unsigned long data) {	unsigned long shreg = data >> 1; /* throw away parity bit */	unsigned long mask = 1L << (BCH_N-1), coeff = BCH_POLY << (BCH_K-1);	int n = BCH_K;		for(; n > 0; mask >>= 1, coeff >>= 1, n--)		if (shreg & mask)			shreg ^= coeff;	if (even_parity(data))		shreg |= (1 << (BCH_N - BCH_K));	verbprintf(9, "BCH syndrome: data: %08lx syn: %08lx\n", data, shreg);	return shreg;}/* ---------------------------------------------------------------------- */static void print_msg_numeric(struct l2_pocsag_rx *rx) {	static const char *conv_table = "084 2.6]195-3U7[";	unsigned char *bp = rx->buffer;	int len = rx->numnibbles;	char buf[256], *cp = buf;       	if (len >= sizeof(buf)) 		len = sizeof(buf)-1;	for (; len > 0; bp++, len -= 2) {		*cp++ = conv_table[(*bp >> 4) & 0xf];		if (len > 1)			*cp++ = conv_table[*bp & 0xf];	}	*cp = '\0';	verbprintf(0, "%s\n", buf);}/* ---------------------------------------------------------------------- */static char *translate_alpha(unsigned char chr) {	static const struct trtab {		unsigned char code;		char *str;	} trtab[] = {{  0, "<NUL>" },		     {  1, "<SOH>" }, 		     {  2, "<STX>" }, 		     {  3, "<ETX>" }, 		     {  4, "<EOT>" }, 		     {  5, "<ENQ>" }, 		     {  6, "<ACK>" }, 		     {  7, "<BEL>" }, 		     {  8, "<BS>" }, 		     {  9, "<HT>" }, 		     { 10, "<LF>" }, 		     { 11, "<VT>" }, 		     { 12, "<FF>" }, 		     { 13, "<CR>" }, 		     { 14, "<SO>" }, 		     { 15, "<SI>" }, 		     { 16, "<DLE>" }, 		     { 17, "<DC1>" }, 		     { 18, "<DC2>" }, 		     { 19, "<DC3>" }, 		     { 20, "<DC4>" }, 		     { 21, "<NAK>" }, 		     { 22, "<SYN>" }, 		     { 23, "<ETB>" }, 		     { 24, "<CAN>" }, 		     { 25, "<EM>" }, 		     { 26, "<SUB>" }, 		     { 27, "<ESC>" }, 		     { 28, "<FS>" }, 		     { 29, "<GS>" }, 		     { 30, "<RS>" }, 		     { 31, "<US>" }, #ifdef CHARSET_LATIN1		     { 0x5b, "\304" }, /* upper case A dieresis */		     { 0x5c, "\326" }, /* upper case O dieresis */		     { 0x5d, "\334" }, /* upper case U dieresis */ 		     { 0x7b, "\344" }, /* lower case a dieresis */		     { 0x7c, "\366" }, /* lower case o dieresis */ 		     { 0x7d, "\374" }, /* lower case u dieresis */ 		     { 0x7e, "\337" }}; /* sharp s */#else /* CHARSET_LATIN1 */		     { 0x5b, "AE" }, /* upper case A dieresis */		     { 0x5c, "OE" }, /* upper case O dieresis */		     { 0x5d, "UE" }, /* upper case U dieresis */ 		     { 0x7b, "ae" }, /* lower case a dieresis */		     { 0x7c, "oe" }, /* lower case o dieresis */ 		     { 0x7d, "ue" }, /* lower case u dieresis */ 		     { 0x7e, "ss" }}; /* sharp s */#endif /* CHARSET_LATIN1 */	int min = 0, max = (sizeof(trtab) / sizeof(trtab[0])) - 1;		/*	 * binary search, list must be ordered!	 */	for (;;) {		int mid = (min+max) >> 1;		const struct trtab *tb = trtab + mid;		int cmp = ((int) tb->code) - ((int) chr);		if (!cmp)			return tb->str;		if (cmp < 0) {			min = mid+1;			if (min > max)				return NULL;		}		if (cmp > 0) {			max = mid-1;			if (max < min)				return NULL;		}	}}				/* ---------------------------------------------------------------------- */static void print_msg_alpha(struct l2_pocsag_rx *rx) {	unsigned long data = 0;	int datalen = 0;	unsigned char *bp = rx->buffer;	int len = rx->numnibbles;	char buf[256], *cp = buf;	int buffree = sizeof(buf)-1;	unsigned char curchr;	char *tstr;		while (len > 0) {		while (datalen < 7 && len > 0) {			if (len == 1) {				data = (data << 4) | ((*bp >> 4) & 0xf);				datalen += 4;				len = 0;			} else {				data = (data << 8) | *bp++;				datalen += 8;				len -= 2;			}		}		if (datalen < 7)			continue;		datalen -= 7;		curchr = ((data >> datalen) & 0x7f) << 1;		curchr = ((curchr & 0xf0) >> 4) | ((curchr & 0x0f) << 4);		curchr = ((curchr & 0xcc) >> 2) | ((curchr & 0x33) << 2);		curchr = ((curchr & 0xaa) >> 1) | ((curchr & 0x55) << 1);		tstr = translate_alpha(curchr);		if (tstr) {			int tlen = strlen(tstr);			if (buffree >= tlen) {				memcpy(cp, tstr, tlen);				cp += tlen;				buffree -= tlen;			}		} else if (buffree > 0) {			*cp++ = curchr;			buffree--;		}	}	*cp = '\0';	verbprintf(0, "%s\n", buf);}/* ---------------------------------------------------------------------- */static void print_msg_skyper(struct l2_pocsag_rx *rx) {	unsigned long data = 0;	int datalen = 0;	unsigned char *bp = rx->buffer;	int len = rx->numnibbles;	char buf[256], *cp = buf;	int buffree = sizeof(buf)-1;	unsigned char curchr;	char *tstr;		while (len > 0) {		while (datalen < 7 && len > 0) {			if (len == 1) {				data = (data << 4) | ((*bp >> 4) & 0xf);				datalen += 4;				len = 0;			} else {				data = (data << 8) | *bp++;				datalen += 8;				len -= 2;			}		}		if (datalen < 7)			continue;		datalen -= 7;		curchr = ((data >> datalen) & 0x7f) << 1;		curchr = ((curchr & 0xf0) >> 4) | ((curchr & 0x0f) << 4);		curchr = ((curchr & 0xcc) >> 2) | ((curchr & 0x33) << 2);		curchr = ((curchr & 0xaa) >> 1) | ((curchr & 0x55) << 1);		tstr = translate_alpha(curchr-1);		if (tstr) {			int tlen = strlen(tstr);			if (buffree >= tlen) {				memcpy(cp, tstr, tlen);				cp += tlen;				buffree -= tlen;			}		} else if (buffree > 0) {			*cp++ = curchr-1;			buffree--;		}	}	*cp = '\0';	verbprintf(0, "%s\n", buf);}/* ---------------------------------------------------------------------- */static void pocsag_printmessage(struct demod_state *s, struct l2_pocsag_rx *rx, 				const char *add_name) {	verbprintf(0, "%s%s: Address: %7lu  Function: %1u\n",		   s->dem_par->name, add_name, rx->adr, rx->func);	if (!rx->numnibbles)		return;	if (service_mask & (0x01 << rx->func)) {		verbprintf(0, "%s%s: Numeric: ", s->dem_par->name, add_name);		print_msg_numeric(rx);	}	if (service_mask & (0x10 << rx->func)) {		if (rx->func == 3 && rx->adr >= 4000 &&		    rx->adr <= 5000) {			verbprintf(0, "%s%s: Alpha (SKYPER): ", s->dem_par->name, add_name);			print_msg_skyper(rx);		} else {			verbprintf(0, "%s%s: Alpha: ", s->dem_par->name, add_name);			print_msg_alpha(rx);		}	}}/* ---------------------------------------------------------------------- */void pocsag_init(struct demod_state *s){	memset(&s->l2.pocsag, 0, sizeof(s->l2.pocsag));}/* ---------------------------------------------------------------------- */static void do_one_bit(struct demod_state *s, struct l2_pocsag_rx *rx, 		       unsigned long rx_data, const char *add_name){	unsigned char rxword;	if (!rx->rx_sync) {		if (rx_data == POCSAG_SYNC || rx_data == POCSAG_SYNCINFO) {			rx->rx_sync = 2;			rx->rx_bit = rx->rx_word = 0;			rx->func = -1;			return;		}		return;	}   		if ((++(rx->rx_bit)) < 32) 		return;	/*	 * one complete word received	 */	rx->rx_bit = 0;	/*	 * check codeword	 */	if (pocsag_syndrome(rx_data)) {		/*		 * codeword not valid		 */		rx->rx_sync--;		verbprintf(7, "%s: Bad codeword: %08lx%s\n", 			   s->dem_par->name, rx_data, 			   rx->rx_sync ? "" : "sync lost");		if (!(rx->func & (~3))) {			verbprintf(0, "%s%s: Warning: message garbled\n",				   s->dem_par->name, add_name);			pocsag_printmessage(s, rx, add_name);		}		rx->func = -1; /* invalidate message */		return;	}	/* do something with the data */	verbprintf(8, "%s%s: Codeword: %08lx\n", s->dem_par->name, add_name, rx_data);	rxword = rx->rx_word++;	if (rxword >= 16) {		/*		 * received word shoud be a		 * frame synch		 */		rx->rx_word = 0;		if ((rx_data == POCSAG_SYNC) ||		    (rx_data == POCSAG_SYNCINFO))			rx->rx_sync = 10;		else			rx->rx_sync -= 2;		return;		}	if (rx_data == POCSAG_IDLE) {		/*		 * it seems that we can output the message right here		 */		if (!(rx->func & (~3)))			pocsag_printmessage(s, rx, add_name);		rx->func = -1; /* invalidate message */		return;	}	if (rx_data & 0x80000000) {		/*		 * this is a data word		 */		unsigned long data;		unsigned char *bp;				if (rx->func & (~3)) { 			/*			 * no message being received 			 */			verbprintf(7, "%s%s: Lonesome data codeword: %08lx\n",				   s->dem_par->name, add_name, rx_data);			return;		}		if (rx->numnibbles > sizeof(rx->buffer)*2 - 5) {			verbprintf(0, "%s%s: Warning: Message too long\n",				   s->dem_par->name, add_name);			pocsag_printmessage(s, rx, add_name);			rx->func = -1;			return;		}		bp = rx->buffer + (rx->numnibbles >> 1);		data = rx_data >> 11; 		if (rx->numnibbles & 1) {			bp[0] = (bp[0] & 0xf0) | ((data >> 16) & 0xf);			bp[1] = data >> 8;			bp[2] = data;		} else {			bp[0] = data >> 12;			bp[1] = data >> 4;			bp[2] = data << 4;		}		rx->numnibbles += 5;		return;	}	/*	 * process address codeword	 */	if (rx_data >= POCSAG_SYNC_WORDS) {		unsigned char func = (rx_data >> 11) & 3;		unsigned long adr = ((rx_data >> 10) & 0x1ffff8) | 			((rxword >> 1) & 7);		verbprintf(0, "%s%s: Nonstandard address codeword: %08lx "			   "func %1u adr %08lx\n", s->dem_par->name, add_name, rx_data, 			   func, adr);		return;	}	if (!(rx->func & (~3))) 		pocsag_printmessage(s, rx, add_name);	rx->func = (rx_data >> 11) & 3;	rx->adr = ((rx_data >> 10) & 0x1ffff8) | ((rxword >> 1) & 7);	rx->numnibbles = 0;}/* ---------------------------------------------------------------------- */void pocsag_rxbit(struct demod_state *s, int bit){	s->l2.pocsag.rx_data <<= 1;	s->l2.pocsag.rx_data |= !bit;	verbprintf(9, " %c ", '1'-(s->l2.pocsag.rx_data & 1));	do_one_bit(s, s->l2.pocsag.rx, ~(s->l2.pocsag.rx_data), "+");	do_one_bit(s, s->l2.pocsag.rx+1, s->l2.pocsag.rx_data, "-");}/* ---------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女网站色91| 亚洲人成网站影音先锋播放| 亚洲一本大道在线| 欧美体内she精高潮| 一区二区三区在线免费播放| 色综合久久综合| 亚洲黄色免费电影| 欧美日韩国产欧美日美国产精品| 五月天亚洲婷婷| 欧美va亚洲va香蕉在线| 国产精品88av| 亚洲品质自拍视频| 91精品久久久久久久久99蜜臂| 日韩精品亚洲专区| 久久久天堂av| 91蝌蚪porny| 视频精品一区二区| 2020国产精品| 91在线一区二区| 日本欧美韩国一区三区| 久久久亚洲精品石原莉奈| 99热99精品| 日韩vs国产vs欧美| 中文字幕av一区二区三区免费看| 91影院在线观看| 日韩黄色免费电影| 午夜一区二区三区视频| 欧美日本高清视频在线观看| 韩国精品主播一区二区在线观看| 国产精品国产三级国产三级人妇| 欧美日本高清视频在线观看| 国产91高潮流白浆在线麻豆 | 91精品国产91久久综合桃花| 韩日av一区二区| 亚洲综合在线五月| 久久综合网色—综合色88| 91久久精品一区二区| 国产在线不卡一卡二卡三卡四卡| 亚洲人成精品久久久久久| 日韩欧美久久一区| 欧美性猛交xxxxxx富婆| 国产精品亚洲专一区二区三区| 亚洲国产精品一区二区久久| 国产欧美日韩卡一| 欧美福利视频一区| 日本精品一区二区三区四区的功能| 国产在线一区观看| 亚洲国产精品嫩草影院| 中文字幕五月欧美| 久久影音资源网| 欧美一区二区在线不卡| 日本韩国欧美一区二区三区| 国产a区久久久| 免费观看在线色综合| 一区二区三区视频在线看| 亚洲国产高清不卡| 精品国产伦理网| 日韩一级二级三级| 欧美人伦禁忌dvd放荡欲情| 色综合久久综合| 9久草视频在线视频精品| 国产成人精品免费网站| 欧美二区乱c少妇| 91久久线看在观草草青青| 成人久久视频在线观看| 国产精品自在欧美一区| 美女任你摸久久| 美国精品在线观看| 日韩高清一级片| 天天综合色天天综合色h| 一级日本不卡的影视| 亚洲精品成人a在线观看| 亚洲欧洲成人自拍| 日韩一区在线免费观看| 一区免费观看视频| 亚洲同性同志一二三专区| 国产精品欧美极品| 中文字幕在线不卡视频| 亚洲欧洲另类国产综合| 国产精品传媒在线| 综合久久一区二区三区| 中文字幕一区二区在线播放| 亚洲欧洲日本在线| 樱花草国产18久久久久| 夜夜嗨av一区二区三区| 亚洲成av人综合在线观看| 三级一区在线视频先锋| 免费看黄色91| 国产一区二区三区黄视频| 韩国午夜理伦三级不卡影院| 国产精品一区二区在线观看网站| 国产白丝网站精品污在线入口| 成人午夜大片免费观看| 91丝袜国产在线播放| 欧美日韩一区高清| 日韩一二三区不卡| 久久亚洲一级片| 六月丁香婷婷久久| 精品无人区卡一卡二卡三乱码免费卡| 狠狠色综合播放一区二区| 国产99精品国产| 91黄色小视频| 欧美一区二区三区婷婷月色| 久久亚洲精品小早川怜子| 国产精品福利一区| 亚洲成人动漫av| 国产一区二区三区免费看| 97精品久久久久中文字幕| 欧美精品在线观看一区二区| 欧美精品一区二区三区久久久| 国产精品乱人伦一区二区| 丝袜亚洲精品中文字幕一区| 国内外成人在线| 色猫猫国产区一区二在线视频| 欧美性猛交xxxx黑人交| 欧美精品一区二区三区久久久| 一区在线播放视频| 日产精品久久久久久久性色| 国产激情视频一区二区三区欧美| 欧亚洲嫩模精品一区三区| 欧美videossexotv100| 成人欧美一区二区三区视频网页 | 亚洲自拍偷拍麻豆| 精品一区二区在线观看| 色屁屁一区二区| 久久久五月婷婷| 亚洲大尺度视频在线观看| 国产成人在线免费观看| 欧美精品tushy高清| 国产精品国产成人国产三级 | 中文字幕中文字幕一区| 秋霞影院一区二区| 色噜噜狠狠色综合中国| 欧美精品一区视频| 99久久精品国产精品久久| 日韩欧美国产综合在线一区二区三区 | 久久久国产精华| 午夜精品久久久久久久蜜桃app| 丁香天五香天堂综合| 日韩一区二区视频| 亚洲网友自拍偷拍| 99精品久久99久久久久| 国产视频在线观看一区二区三区 | 91精品国产手机| 一区二区三区日本| 顶级嫩模精品视频在线看| 日韩欧美一级片| 日韩黄色小视频| 欧美色倩网站大全免费| 亚洲三级在线观看| 粉嫩av一区二区三区| 欧美白人最猛性xxxxx69交| 天天亚洲美女在线视频| 欧美在线观看一区| 亚洲天堂久久久久久久| 成人免费视频视频在线观看免费 | 久久精品人人爽人人爽| 久久99国产精品久久99| 日韩亚洲欧美综合| 日韩成人伦理电影在线观看| 欧美色图免费看| 亚洲午夜激情网站| 欧美视频在线一区| 午夜私人影院久久久久| 欧美日韩不卡在线| 午夜欧美电影在线观看| 欧美日韩成人一区| 日韩综合在线视频| 91麻豆精品国产91久久久久久久久 | 蜜臀99久久精品久久久久久软件| 欧美日韩高清在线播放| 亚瑟在线精品视频| 欧美久久久久中文字幕| 丝袜美腿亚洲一区| 欧美成人猛片aaaaaaa| 久久精品72免费观看| 欧美精品一区二区三区久久久| 国产一区二区三区高清播放| 国产片一区二区三区| av激情成人网| 亚洲一区av在线| 91精品在线一区二区| 激情图区综合网| 亚洲国产成人自拍| 91久久精品一区二区三| 午夜成人在线视频| 精品国产三级电影在线观看| 国产精品99久久久久久久vr| 国产精品免费看片| 91成人免费电影| 蜜臀久久99精品久久久久久9 | 国产在线国偷精品产拍免费yy | 成人av在线一区二区三区| 亚洲日本在线看| 555www色欧美视频| 国产精品白丝jk黑袜喷水| 中文字幕综合网| 91精品国产综合久久久久久 | 成人精品gif动图一区| 亚洲精品乱码久久久久久日本蜜臀|