电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

UNIX下用C寫(xiě)MODEM傳輸程序

瀏覽:76日期:2024-06-11 15:37:06

首先要打開(kāi)串口,然后通過(guò)串口來(lái)向modem發(fā)at指令來(lái)進(jìn)行通訊,編程的時(shí)候要特別注意要用適當(dāng)?shù)姆绞酱蜷_(kāi)串口,其實(shí)對(duì)TTY的操作跟一般的文件操作沒(méi)有特別的區(qū)別,區(qū)別就是在于串口通訊需要設(shè)置串口屬性.

/************************************************************** Function : open serial comport Param In : pszDevName : comport device name, eg.'/dev/tty1a' uiBaud : baudrate. 50 -- 9600 bParity : parity. NOPRAITY, ODDPARITY, EVENPARITY bByteSize : size of a byte. 5 - 8 bStopBits : stop bits. 1 - 2 bFlowControl : flow control. NOFLOW, CTSRTS, XONXOFF uiOutQueueLen : length of output buffer queue uiInQueueLen : length of input buffer queue iDefTimeOut : default timeout bOperFlag : OP_READ , OP_WRITE Param Out : none Return Code >=0 : success, handle of this comport <0 : serOpenMany serAllocMem serOpenInFp serOpenOutFp serFlowCtrlBad serBaudBad serByteSizeBad serStopBitsBad serParityBad serSetInBuffer serSetOutBuffer ***************************************************************/ int serOpen(char *pszDevName, uint uiBaud, uchar bParity, uchar bByteSize, uchar bStopBits, uchar bFlowControl, uint uiOutQueueLen, uint uiInQueueLen, int iDefTimeOut, uchar bOperFlag ) { struct serialDef *pSer; struct termio termioNew; int i, fdIn, fdOut; int serHandle;

if( iSerNum == -1 ) // initial struct pSerial { for( i=0; i<MAXSERIALNUM; i++ ) pSerial[i] = NULL; iSerNum = 0; }

if( iSerNum >= MAXSERIALNUM ) return (serOpenMany);

i = 0; while( i<MAXSERIALNUM && pSerial[i]!=NULL ) i++; if( i >= MAXSERIALNUM ) return (serOpenMany); pSerial[i] = (struct serialDef *)malloc(sizeof(struct serialDef)); if( pSerial[i] == NULL ) return (serAllocMem);

pSer = pSerial[i]; pSer->pusInBuffer = (uchar *)malloc(uiInQueueLen); if( pSer->pusInBuffer==NULL ) { free(pSer); return (serAllocMem); } pSer->pusOutBuffer = (uchar *)malloc(uiOutQueueLen); if( pSer->pusOutBuffer==NULL ) { free(pSer->pusInBuffer); free(pSer); return (serAllocMem); } pSer->uiInQueueLen = uiInQueueLen; pSer->uiOutQueueLen = uiOutQueueLen;

serHandle = i;

if( bOperFlag & OP_READ ) { if( (pSer->fpIn=fopen(pszDevName, 'rb')) == NULL ) return (serOpenInFp); fdIn = fileno(pSer->fpIn); ioctl( fdIn, TCGETA, &termioNew ); }

if( bOperFlag & OP_WRITE ) { if( (pSer->fpOut=fopen(pszDevName, 'wb')) == NULL ) return (serOpenOutFp); fdOut = fileno(pSer->fpOut); ioctl( fdOut, TCGETA, &termioNew ); }

pSer->iDefTimeOut = iDefTimeOut;

/* termioNew.c_iflag=0; termioNew.c_oflag=0; termioNew.c_lflag=0; termioNew.c_line=0; termioNew.c_cflag = ( 0x0CBD&~CBAUD | CTSFLOW | RTSFLOW ) ; termioNew.c_cc[VEOF]=1; termioNew.c_cc[VEOL]=0; */

termioNew.c_cflag = ( 0x0CBD&~CBAUD ) ; termioNew.c_cc[VMIN] = 1; // A read operation is not satisfIEd until receive // one character termioNew.c_cc[VTIME] = 0; // A read operation will waiting

switch( bFlowControl ) { case NOFLOW: break; case CTSRTS: termioNew.c_cflag |= CTSFLOW | RTSFLOW; break; case XONXOFF: termioNew.c_iflag |= IXON | IXOFF; break; default : return (serFlowCtrlBad); }//switch;

switch( uiBaud ) { case 50: termioNew.c_cflag|=B50; break; case 75: termioNew.c_cflag|=B75; break; case 110: termioNew.c_cflag|=B110; break; case 134: termioNew.c_cflag|=B134; break; case 150: termioNew.c_cflag|=B150; break; case 200: termioNew.c_cflag|=B200; break; case 300: termioNew.c_cflag|=B300; break; case 600: termioNew.c_cflag|=B600; break; case 1200: termioNew.c_cflag|=B1200; break; case 1800: termioNew.c_cflag|=B1800; break; case 2400: termioNew.c_cflag|=B2400; break; case 4800: termioNew.c_cflag|=B4800; break; case 9600: termioNew.c_cflag|=B9600; break; default: return (serBaudBad); }

switch( bByteSize ) { case 5: termioNew.c_cflag|=CS5; break; case 6: termioNew.c_cflag|=CS6; break; case 7: termioNew.c_cflag|=CS7; break; case 8: termioNew.c_cflag|=CS8; break; default: return (serByteSizeBad); }

switch( bStopBits ) { case 1: break; case 2: termioNew.c_cflag|=CSTOPB; break; default: return (serStopBitsBad); }

switch( bParity ) { case NOPARITY: break; case ODDPARITY: termioNew.c_cflag|=PARODD; break; case EVENPARITY: termioNew.c_cflag|=PARENB; break; default: return (serParityBad); } termioNew.c_cflag |= CLOCAL; if( bOperFlag & OP_WRITE ) { ioctl(fdOut, TCGETA, &pSer->termioOld); ioctl(fdOut, TCSETA, &termioNew); }

if(bOperFlag & OP_READ) { ioctl( fdIn, TCGETA, &pSer->termioOld ); termioNew.c_cflag|=CREAD; ioctl( fdIn, TCSETA, &termioNew); }

if(bOperFlag & OP_READ) { if( setvbuf( pSer->fpIn,(char *)pSer->pusInBuffer,_IOFBF,uiInQueueLen )) return (serSetInBuffer); fflush(pSer->fpIn); } if(bOperFlag & OP_WRITE) { if( setvbuf(pSer->fpOut,(char *)pSer->pusOutBuffer,_IOFBF,uiOutQueueLen )) return (serSetOutBuffer); fflush(pSer->fpOut); } pSer->bOperFlag = bOperFlag;

iSerNum++;

return (serHandle); }

/************************************************************** Function : receive bytes from serial comport Param In : iHandle : handle returned by serOpen uiRecvCnt: bytes of accii buffer iTimeOut : timeout if equals 0 use default timeout Param Out : psBuf : ascii buffer which will be received Return Code: =0 : OK <0 : serTimeOut serRecvFail ***************************************************************/ int serReceiveBuf( int iHandle, char *psBuf, uint uiRecvCnt, int iTimeOut ) { int iCnt, iRet; int fdIn;

fdIn = fileno( pSerial[iHandle]->fpIn );

if( setjmp(tohere2) ) return (serTimeOut); signal( SIGALRM, alrm2 ); if( iTimeOut>0 ) alarm(iTimeOut); else if( iTimeOut==0 ) alarm( pSerial[iHandle]->iDefTimeOut );

for( iCnt=0; iCnt<uiRecvCnt; iCnt++ ) { while( ( iRet=read(fdIn,psBuf+iCnt,1) ) == 0 ); if( iRet<0 ) { alarm(0); return (serRecvFail); } } alarm(0); return (serOK); }

標(biāo)簽: Unix系統(tǒng)
主站蜘蛛池模板: 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 蜘蛛车-登高车-高空作业平台-高空作业车-曲臂剪叉式升降机租赁-重庆海克斯公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 达利园物流科技集团-| 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 电动葫芦-河北悍象起重机械有限公司 | 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 厌氧反应器,IC厌氧反应器,厌氧三相分离器-山东创博环保科技有限公司 | 广州昊至泉水上乐园设备有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 精密模具-双色注塑模具加工-深圳铭洋宇通 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 |