亚洲欧美第一页_禁久久精品乱码_粉嫩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精品国产欧美一区二区18| 久久精品人人做人人爽人人| 日本视频在线一区| 色视频一区二区| 国产精品久久久久久户外露出 | 99视频在线精品| 日韩欧美123| 天天综合天天做天天综合| 丁香网亚洲国际| 337p粉嫩大胆色噜噜噜噜亚洲| 一区二区日韩av| 99精品视频在线观看免费| 精品国产一区二区亚洲人成毛片 | 久久精品国产亚洲一区二区三区 | 成人免费视频免费观看| 91精品国产色综合久久不卡电影| 亚洲图片激情小说| 成人性生交大片免费看视频在线| 日韩欧美在线影院| 日韩**一区毛片| 精品视频在线免费观看| 一个色综合网站| 色哟哟国产精品| 亚洲色图欧洲色图| 91九色最新地址| 亚洲综合一区二区| 欧美在线视频你懂得| 亚洲精品你懂的| 欧美午夜精品久久久久久超碰 | 精品亚洲aⅴ乱码一区二区三区| 欧美精品高清视频| 欧美aaa在线| 日韩欧美aaaaaa| 国产一区二区三区免费看| 久久久久久久久一| 处破女av一区二区| 一区二区三区视频在线看| 日韩视频一区二区三区 | 91美女精品福利| 亚洲色图丝袜美腿| 欧美视频你懂的| 免费人成在线不卡| 精品裸体舞一区二区三区| 国产在线观看一区二区| 欧美经典一区二区三区| 99久久er热在这里只有精品15| 综合久久久久久| 欧美猛男男办公室激情| 精品一区二区三区欧美| 国产精品三级在线观看| 欧美最新大片在线看| 日韩精品电影一区亚洲| 久久久99免费| 91黄色在线观看| 精品一区二区三区在线视频| 国产精品白丝在线| 欧美一区二区三区四区高清| 国产精品18久久久久| 一个色在线综合| 26uuuu精品一区二区| 欧美在线观看视频一区二区三区 | 日韩一区二区三区精品视频| 国产伦精品一区二区三区免费| 中文字幕在线观看不卡| 欧美一区国产二区| 成人精品视频.| 麻豆精品精品国产自在97香蕉| 欧美国产精品一区二区三区| 欧美群妇大交群中文字幕| 成人黄色电影在线 | 午夜激情久久久| 欧美国产日韩一二三区| 欧美蜜桃一区二区三区| 成人avav影音| 国内外成人在线| 香蕉成人啪国产精品视频综合网 | eeuss鲁片一区二区三区在线观看| 亚洲成av人影院在线观看网| 国产午夜精品久久久久久久| 在线播放中文一区| 成人av免费网站| 国产在线精品视频| 日日夜夜一区二区| 一区二区三区日韩精品| 午夜精品一区二区三区免费视频| 欧美激情一区三区| 久久综合色天天久久综合图片| 欧美日韩午夜在线| 97se亚洲国产综合自在线| 国产乱码一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲综合一区二区三区| 成人欧美一区二区三区小说| 中国色在线观看另类| 日韩一卡二卡三卡国产欧美| 欧美精品一二三四| 欧美日韩中文字幕精品| 欧美在线观看禁18| 在线亚洲一区观看| av亚洲产国偷v产偷v自拍| 成人激情动漫在线观看| 成人夜色视频网站在线观看| 国产激情精品久久久第一区二区| 激情综合五月天| 六月丁香婷婷久久| 日本欧美大码aⅴ在线播放| 日韩精品每日更新| 蜜桃视频第一区免费观看| 琪琪一区二区三区| 美女视频网站黄色亚洲| 久久成人久久鬼色| 国产大片一区二区| 成人午夜在线播放| 成人v精品蜜桃久久一区| 97久久精品人人澡人人爽| 99re66热这里只有精品3直播 | 丁香六月久久综合狠狠色| 国产一区二区精品久久91| 国产一区二区福利| 国产a视频精品免费观看| 成人网男人的天堂| 91年精品国产| 色88888久久久久久影院按摩 | 青青草原综合久久大伊人精品| 五月天婷婷综合| 九九九精品视频| 国产高清精品网站| 色呦呦国产精品| 欧美日韩高清不卡| 久久亚洲精品小早川怜子| 国产嫩草影院久久久久| 亚洲少妇30p| 天天色天天操综合| 国产一区二区精品久久91| 不卡一区二区在线| 777欧美精品| 国产欧美va欧美不卡在线| 亚洲精品国产a久久久久久| 日本美女一区二区| 懂色av一区二区三区免费观看| 日本道在线观看一区二区| 欧美电影免费观看高清完整版在线| 久久久久久黄色| 亚洲国产中文字幕| 国产传媒一区在线| 欧美猛男超大videosgay| 日本一二三不卡| 亚洲成人久久影院| 成人综合婷婷国产精品久久| 欧美性猛交xxxx乱大交退制版| www欧美成人18+| 午夜精品久久久久久久久久| 九一九一国产精品| 欧美最猛黑人xxxxx猛交| 久久久精品免费网站| 亚洲v日本v欧美v久久精品| 成人免费视频视频在线观看免费| 欧美日韩免费观看一区三区| 国产精品看片你懂得| 日韩国产在线一| 色视频一区二区| 丝袜亚洲另类欧美综合| 成人午夜在线免费| 日韩免费性生活视频播放| 亚洲自拍都市欧美小说| 菠萝蜜视频在线观看一区| 久久这里只有精品6| 五月婷婷色综合| 日本国产一区二区| 国产精品无人区| 国产综合色在线| 日韩免费高清视频| 三级成人在线视频| 欧美三电影在线| 亚洲精品第1页| 91蝌蚪porny成人天涯| 国产区在线观看成人精品| 久久99深爱久久99精品| 欧美日韩另类一区| 亚洲一区二区三区小说| 99精品视频在线免费观看| 国产精品欧美久久久久无广告 | 欧美一区二区三区免费视频| 亚洲综合另类小说| 日本电影欧美片| 一区二区高清免费观看影视大全 | 欧美一级电影网站| 午夜一区二区三区在线观看| 91福利资源站| 亚洲自拍偷拍欧美| 欧美无砖砖区免费| 亚洲高清久久久| 欧美久久久久久久久久| 亚洲成人av在线电影| 欧美人伦禁忌dvd放荡欲情| 婷婷久久综合九色综合绿巨人| 精品视频在线看|