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

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

?? pubfunc.c

?? 這個程序是我們公司自己開發的modem卡的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************************
*	File name		: pubfunc.c
*	Subsystem	: modem卡驅動程序
*	Target env	: Linux
*	Author		: 謝紅偉
*	Last modified	: 2002/04/30
*	Description	: This file contains the public functions for utility
*	Copyright	: zjkj
*	Note			: 
**************************************************************************/
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/timeb.h>
#include <errno.h>
#include <newt.h>
#include "pubfunc.h"

/************************************************************************
* DEST : 將指定地址的數據倒過來存放
* RET  : 緩沖地址
************************************************************************/
char *ReversalBuf(char *in_buf,int bytes)
{
	char ch_tmp;
	int i,j;
	for (i=0,j=bytes-1; i<bytes/2; i++,j--)
	{
		ch_tmp = in_buf[i];in_buf[i] = in_buf[j];in_buf[j] = ch_tmp;
	}
	return in_buf;
}
	
/*************************************************************************
*DESC: 將表示時間的BCD碼一串數據轉成標準顯示的時間格式,如:2002-01-21 12:30:59
*RET : 轉換后的字節數
*************************************************************************/
int ConvertBCDToTimeStr(char *in_buf,int len,char *out_buf)
{
	int i;
	char tmp_buf[32],bcd_buf[32];
	memset(bcd_buf,0,sizeof(bcd_buf));
	memcpy(bcd_buf,in_buf,len);
	for (i=0; i<6; i++)
	{
		tmp_buf[i] = ConvertBCDToChar(bcd_buf[i]);
		if (tmp_buf[i]<0) break;
	}
	if (i<6)
		return sprintf(out_buf,"Time data empty or error!");
	else
		return sprintf(out_buf,"20%.2d-%.2d-%.2d %.2d:%.2d:%.2d",tmp_buf[0],tmp_buf[1],tmp_buf[2],
			tmp_buf[3],tmp_buf[4],tmp_buf[5]);
}

/*************************************************************************
*DESC: 求一個浮點數4舍5入后的整型結果
*RET : 求得的結果
*************************************************************************/
int FloatRoundToInt(float in_fdata,float *out_float)
{
	int i_res;
	float f_sub;
	i_res = (int)in_fdata;
	f_sub = in_fdata - (float)i_res;
	if (f_sub > 0.5)
	{
		if (out_float!=NULL) *out_float = (float)(i_res+1);
		return i_res+1;
	}
	else
	{
		if (out_float!=NULL) *out_float = (float)(i_res);
		return i_res;
	}
}

/*************************************************************************
func: ConvertStrToBCD
type: public
desc: 將一個十進制的表示數字的字符串str轉成BCD碼格式,結果存入buf中。
ret : returns the length of the BCD numeric string.
**************************************************************************/
int  ConvertStrToBCD(char *str, char *buf)
{
	int i, j, in_size;
	unsigned char ch_tmp;

	in_size = strlen(str);  /* 待處理緩沖區字符個數,不包括'\0' */
	for (i=0, j=0; i<in_size; i+=2)
	{
		if ((str[i] < '0') || (str[i] > '9')) break;
		ch_tmp = (str[i] - '0') << 4;
		if ((str[i+1] < '0') || (str[i+1] > '9'))
		{
			ch_tmp |= 0xf;
			buf[j++] = ch_tmp;
			break;
		}
		ch_tmp |= (str[i+1] - '0');
		buf[j++] = ch_tmp;
	}
	return  j;
}

/*************************************************************************
func: ConvertBCDToStr
type: public
desc: 將一個BCD碼格式的數字串(若數字串長度為奇數,則最后一位BCD碼用F填充)
      轉換成字符串,結果存入buf中。
ret : returns the length of the numeric string.
**************************************************************************/
int  ConvertBCDToStr(char *buf, char *bcd_str, int len)
{
	int  i, j;

	for (i=0, j=0; i<len; i++)
	{
		buf[j] = '0' + (((unsigned char)bcd_str[i]) >> 4);
		if ((unsigned char)(buf[j] < '0') || (unsigned char)(buf[j] > '9')) break;
		j ++;
		buf[j] = '0' + (unsigned char)(bcd_str[i] & 0x0f);
		if ((unsigned char)(buf[j] < '0') || (unsigned char)(buf[j] > '9')) break;
		j ++;
	}
	buf[j] = '\0';
	return j;
}


/*************************************************************************
func: ConvertBCDToInt
type: public
desc: 將一個BCD碼格式的字符轉換成十進制的整數。
ret : returns the value of the BCD character.
**************************************************************************/
char  ConvertBCDToChar(char bcd_char)
{
	char t1, t2;
	t1 = bcd_char >> 4;
	t2 = bcd_char & 0xf;
	if (t1 > 9) return 0xff;
	else if (t2 > 9) return t1;
	return t1 * 10 + t2;
}

/*************************************************************************
func: ConvertStrToTime
type: public
desc: 將一個表示日期的字符串(按年、月、日、時、分、秒的順序,
      如"2001-08-09 18:03:30")轉成time_t格式.
arg : nosec為TRUE即將傳來的秒數置0;
ret : return the time_t value.
**************************************************************************/
time_t ConvertStrToTime(char *chtime,int nosec)
{
	int  i, j, k;
	char tmpbuf[8];
	int  value[6];
	struct tm  time1;

	memset((void *)value, 0, sizeof(value));
	memset((void *)&time1, 0, sizeof(time1));
	for (i=0, j=0, k=0; ; i++)
	{
		if (chtime[i]<'0' || chtime[i]>'9') /* 非數字字符 */
		{
			tmpbuf[j] = '\0';
			value[k++] = atoi(tmpbuf);
			j = 0;
			if ((k >= 6) || (chtime[i] == '\0')) break;
		}
		else if (j < 7) tmpbuf[j++] = chtime[i];
	}

	/********年(number of years since 1900)********/
	time1.tm_year = value[0] - TIME_START_YEAR;
	/*if (time1.tm_year < 0)  time1.tm_year = 0;*/

	/********月(0--11)********/
	time1.tm_mon = value[1] - 1;
	if (time1.tm_mon < 0 || time1.tm_mon > 11) time1.tm_mon = 0;

	/********日(1--31)********/
	time1.tm_mday = value[2];
	if (time1.tm_mday < 1 || time1.tm_mday > 31) time1.tm_mday = 1;

	/********時********/
	time1.tm_hour = value[3];
	if (time1.tm_hour < 0 || time1.tm_hour > 23) time1.tm_hour = 0;

	/********分********/
	time1.tm_min = value[4];
	if (time1.tm_min < 0 || time1.tm_min > 59) time1.tm_min = 0;

	/********秒********/
	if (nosec)
	{
		time1.tm_sec = 0;
	}
	else
	{
		time1.tm_sec = value[5];
		if (time1.tm_sec < 0 || time1.tm_sec > 59) time1.tm_sec = 0;
	}

	/* 將日期轉成time_t秒 */
	return  mktime(&time1);
}

/*************************************************************************
func: ConvertTimeToStr
type: public
desc: 將一個time_t格式的時間值轉換成相應的字符串(按年、月、日、時、分、秒
      的順序,年用四個字符,其他項用兩個字符表示,flag=0則是"2001-08-09 18:03:30")。
      flag=1 則是"20010809"。flag=2 則是"20010809100330"。flag=3則是"08-09 18:03:30"
ret : return the string length.
**************************************************************************/
int ConvertTimeToStr(time_t t, char *buf,int flag)
{
	struct tm *tm1;

	tm1 = localtime(&t);
	tm1->tm_year += TIME_START_YEAR;
	tm1->tm_mon += 1;
	if (flag==0)
		return sprintf(buf, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d", tm1->tm_year, tm1->tm_mon, 
			tm1->tm_mday, tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
	else if (flag==1)
		return sprintf(buf, "%.4d%.2d%.2d", tm1->tm_year, tm1->tm_mon,tm1->tm_mday);
	else if(flag == 2)
		return sprintf(buf, "%.4d%.2d%.2d%.2d%.2d%.2d", tm1->tm_year, tm1->tm_mon, 
			tm1->tm_mday, tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
	else if(flag == 3)
		return sprintf(buf, "%.2d-%.2d %.2d:%.2d:%.2d", tm1->tm_mon, 
			tm1->tm_mday, tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
}

/*************************************************************************
func: CalculateCRC
type: public
desc: 生成數據的CRC校驗碼
ret : 無返回值
**************************************************************************/
void CalculateCRC(char *data, int len, char *crc1, char *crc2)
{
	char  b1, b2, b3;
	char  c1, c2, c3;
	int  i, k;

	if (len <= 0) return;
	/* 取兩字節數據 */
	b1 = data[0];
	b2 = ((len>=2) ? data[1] : 0);
	i = 2;
	do {
		/* 取后一字節數據 */
		b3 = ((i<len) ? data[i] : 0);
		
		/* 處理一字節的數據 */
		for (k=0; k<8; k++)
		{
			/* 取高位 */
			c1 = b1 & 0x80;
			c2 = b2 & 0x80;
			c3 = b3 & 0x80;
			/* 左移一位 */
			b1 <<= 1;
			b2 <<= 1;
			b3 <<= 1;
			if (c2) b1 |= 1;
			if (c3) b2 |= 1;
			
			if (c1)
			{
				/* 16位的模2除法 */
				b1 ^= CRC_DIVIDER1;
				b2 ^= CRC_DIVIDER2;
			}
		}
		
		i ++;
	} while (i < (len+2));

	(*crc1) = b1;
	(*crc2) = b2;
}

/*************************************************************************
func: specifytty
type: public
desc: 指定modem驅動程序打印信息的輸出終端
ret : 失敗返回-1
**************************************************************************/
int specifytty(char tty)
{
	char bytes[2] = {11,0};	/* 11 is the TIOCLINUX cmd number */
	bytes[1] = tty;	/* the chosen console */
	if (ioctl(1,TIOCLINUX,bytes)<0)
	{
		fprintf(stderr,"ERROR:ioctl(stdin,TIOCLINUX): %s\r\n",strerror(errno));
		return -1;
	}
	else
	{
		printf("Set drive print console to %d sucessfully!\r\n",tty);
		return 0;
	}
}
/*********************************************************************
* 輸出日志信息
*********************************************************************/
void  Log( t_TdkMdmChl *p_tdk, char *how, ...)
{
	char lofile_name[32] = "mdmchl-tdk.log";
	char tmp_buf[32];
	FILE *fp;
	va_list  va;
	char  buf[LOG_BUFSIZE], *p;
	int   len;
	struct timeb tp;
	/* Get log filename */
	if(p_tdk)
		snprintf(lofile_name,31,"mdmchl-%d-%d.log",p_tdk->mdm_no,p_tdk->chl_no);
	/* log current day & time, and log level */
	ftime(&tp);
	ConvertTimeToStr(tp.time,buf,3);
	sprintf(tmp_buf,":%03d",tp.millitm);
	strcat(buf,tmp_buf);
	len = strlen(buf);
	p = &buf[len];
	if(p_tdk)
		p += sprintf(p," %d-%d] : ",p_tdk->mdm_no,p_tdk->chl_no);
	else
		p += sprintf(p," tdk] : ");
	va_start (va, how);
	vsnprintf (p, LOG_BUFSIZE-strlen(buf), how, va);
	len = strlen(buf);
	strcpy(&buf[len], "\r\n");
	len += 2;
	printf("%s",buf);
	fp = fopen(lofile_name,"ab+");
	if (fp == NULL)
	{
		printf("\r\nOpen log file error!\r\n");
	}
	else
	{
		//寫入磁盤
		fwrite(buf,sizeof(char),len,fp);
		fclose(fp);
	}
	return;
}

/******************************************
* 將進程間的通信標志數據寫入文件
******************************************/
void PutFlagToFile(int in_flag,char *filename)
{
	FILE *fp;
	fp = fopen(filename,"wb");
	if (fp!=NULL)
	{
		fwrite(&in_flag,sizeof(char),sizeof(in_flag),fp);
		fclose(fp);
	}
	return;
}

/******************************************
* 從文件中讀取標志
******************************************/
int GetFlagFromFile(char *filename)
{
	FILE *fp;
	int i_read;
	fp = fopen(filename,"rb");
	if (fp!=NULL)
	{
		fread(&i_read,sizeof(char),sizeof(i_read),fp);
		fclose(fp);
	}
	return i_read;
}

int xhw_strncmp(char *ch1,char *ch2,int size)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清精品久久久久| 欧美视频在线观看一区| 91久久精品网| 精品国产一区a| 一区二区三区在线免费视频| 国模一区二区三区白浆| 欧美四级电影网| 国产精品嫩草影院com| 久久成人免费电影| 欧美理论电影在线| 一级特黄大欧美久久久| 成人国产精品免费观看动漫| 精品欧美乱码久久久久久1区2区| 亚洲精品日韩综合观看成人91| 国内外成人在线| 日韩精品一区二区三区在线| 性感美女久久精品| 91久久精品网| 亚洲最大成人综合| 日本精品一区二区三区高清| 国产精品人成在线观看免费| 国产乱理伦片在线观看夜一区| 欧美一区二区免费| 视频在线在亚洲| 欧美乱妇15p| 首页欧美精品中文字幕| 欧美人妇做爰xxxⅹ性高电影 | 艳妇臀荡乳欲伦亚洲一区| 成人深夜福利app| 国产欧美精品国产国产专区| 国产精品一品视频| 国产欧美视频一区二区| 国产69精品久久久久毛片| 国产视频一区二区在线观看| 国产成人丝袜美腿| 久久久久久久久伊人| 国产成人av电影在线| 国产精品拍天天在线| 97se狠狠狠综合亚洲狠狠| 日本亚洲天堂网| 日韩欧美电影一区| 国产精品资源网站| 中文字幕精品一区二区三区精品| 成a人片亚洲日本久久| 国产精品久久久久四虎| 色噜噜狠狠一区二区三区果冻| 一区二区三区资源| 欧美一区二区三区在线看| 久久国产精品免费| 国产精品天美传媒| 在线国产亚洲欧美| 日韩高清不卡一区二区| 国产婷婷一区二区| 色狠狠桃花综合| 日本美女一区二区三区视频| 亚洲精品一区二区在线观看| a级高清视频欧美日韩| 天天操天天色综合| 久久久久久久综合日本| 91九色最新地址| 久久99国产精品久久99| 自拍偷在线精品自拍偷无码专区| 精品视频123区在线观看| 精品一区二区久久久| 专区另类欧美日韩| 日韩视频免费观看高清在线视频| 国产露脸91国语对白| 亚洲一二三四在线观看| 久久亚洲精品小早川怜子| 91视视频在线直接观看在线看网页在线看| 亚洲国产一区在线观看| 久久精品亚洲麻豆av一区二区| 91理论电影在线观看| 韩国女主播一区二区三区| 亚洲一区影音先锋| 国产精品三级在线观看| 91精品国产福利在线观看| 成人高清在线视频| 久久国产综合精品| 亚洲国产成人av网| 国产精品美女久久久久aⅴ国产馆| 欧美久久一区二区| av电影在线观看完整版一区二区| 奇米亚洲午夜久久精品| 亚洲激情在线激情| 天堂影院一区二区| 亚洲欧美激情小说另类| 国产日韩精品一区二区浪潮av| 欧美日韩黄色影视| 91小视频在线免费看| 国产精品影视网| 精品一区二区三区免费| 天天综合日日夜夜精品| 亚洲欧美一区二区久久| 国产精品美日韩| 国产喷白浆一区二区三区| 日韩精品一区二区三区在线观看 | 男人操女人的视频在线观看欧美| 亚洲欧美在线aaa| 国产亚洲婷婷免费| 日韩欧美成人一区| 欧美电影一区二区| 欧美三区在线视频| 在线观看av不卡| 在线亚洲人成电影网站色www| youjizz久久| 成人av先锋影音| 成人精品免费网站| 大美女一区二区三区| 国产激情视频一区二区在线观看 | 日本美女一区二区三区| 日韩成人午夜精品| 蜜桃精品视频在线观看| 麻豆国产一区二区| 老司机午夜精品99久久| 久久99在线观看| 国产在线观看免费一区| 国产黄色成人av| 国产不卡一区视频| 91在线视频免费观看| 91丨九色porny丨蝌蚪| 欧洲生活片亚洲生活在线观看| 欧美无砖专区一中文字| 欧美日韩国产区一| 日韩免费视频一区| 久久久久国色av免费看影院| 国产日本一区二区| 国产精品毛片久久久久久| 依依成人综合视频| 日韩不卡手机在线v区| 国内精品嫩模私拍在线| 日韩欧美aaaaaa| 久久婷婷久久一区二区三区| 国产亚洲成av人在线观看导航 | 粉嫩aⅴ一区二区三区四区五区 | 激情综合网最新| 国产精品亚洲人在线观看| 99视频精品免费视频| 欧美视频中文一区二区三区在线观看| 欧美性色黄大片手机版| 欧美一卡二卡在线| 国产精品欧美久久久久无广告| 伊人夜夜躁av伊人久久| 爽爽淫人综合网网站| 国产麻豆一精品一av一免费| 91亚洲国产成人精品一区二区三 | 国产精品99久久久| 91网上在线视频| 欧美二区在线观看| 国产精品狼人久久影院观看方式| 亚洲成人激情综合网| 国产成人免费在线观看| 色999日韩国产欧美一区二区| 91精品国产高清一区二区三区蜜臀| 国产色产综合产在线视频| 亚洲一区二区三区视频在线播放 | 欧美日本国产视频| 国产欧美日韩激情| 五月综合激情婷婷六月色窝| 国产成人精品在线看| 在线播放91灌醉迷j高跟美女| 久久久久久久久久久电影| 亚洲成a人在线观看| 成人黄色一级视频| 欧美第一区第二区| 亚洲午夜久久久久中文字幕久| 国产精品一区一区三区| 在线综合视频播放| 亚洲精品国产无天堂网2021| 国产成人精品aa毛片| 欧美一区二区三区的| 亚洲电影激情视频网站| 91丨国产丨九色丨pron| 国产午夜精品久久久久久免费视| 日日摸夜夜添夜夜添亚洲女人| 97久久超碰精品国产| 国产亚洲1区2区3区| 日本视频免费一区| 欧美日韩1234| 亚洲国产精品久久久久婷婷884 | 国产又黄又大久久| 欧美一区二区在线视频| 精品国产亚洲一区二区三区在线观看 | 精品女同一区二区| 日韩av电影天堂| 欧美性大战久久久久久久| 亚洲伦理在线精品| 91在线视频观看| 综合自拍亚洲综合图不卡区| av资源网一区| 中文字幕一区二区在线播放| 成人理论电影网| 成人免费视频在线观看| 成人av午夜影院| 国产精品免费网站在线观看| 国产成人av网站| 中文字幕日韩av资源站| 91免费版在线| 亚洲午夜一区二区| 欧美精品一卡二卡|