av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

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

瀏覽:64日期: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)
主站蜘蛛池模板: 国产精品免费一区二区三区四区 | 精品在线一区二区三区 | 成在线人视频免费视频 | 在线不卡视频 | 日韩av美女电影 | 久久天堂网 | 国产精品美女www爽爽爽 | 久久久精品久 | 国产欧美精品在线 | 日韩一级 | 成人在线免费视频 | 在线观看亚洲精品 | 国产成人免费在线观看 | 在线91| 亚洲精品一二三区 | 日本一区精品 | 在线观看毛片网站 | 久久久久久久久久久一区二区 | 在线不卡视频 | 精品国产91| 日韩精品一区二区三区四区视频 | 国产成人精品免高潮在线观看 | 国产免费一区二区三区 | 欧美日韩综合 | 久久在看| 亚洲欧美日韩精品久久亚洲区 | 亚洲高清在线观看 | 天堂色区 | 嫩草懂你的影院入口 | 超碰免费在线 | 亚洲天堂久久 | 四虎影 | 日韩在线视频一区 | 秋霞a级毛片在线看 | 日韩三级电影一区二区 | 99成人在线视频 | 国产一区二区三区在线 | 欧美国产一区二区 | 色一级 | 色婷婷婷婷色 | 亚洲专区在线 |