int far pascal zTransmitCommChar( int pp1, char pp2 ) { int r; SaveRegs(); /* ** Log IN Parameters (No Create/Destroy Checking Yet!) */ LogIn( (LPSTR)"APICALL:TransmitCommChar int+char+", pp1, pp2 ); /* ** Call the API! */ RestoreRegs(); GrovelDS(); r = TransmitCommChar(pp1,pp2); UnGrovelDS(); SaveRegs(); /* ** Log Return Code & OUT Parameters (No Create/Destroy Checking Yet!) */ LogOut( (LPSTR)"APIRET:TransmitCommChar int+++", r, (short)0, (short)0 ); RestoreRegs(); return( r ); }
void CSerialPort::TransmitChar(char cChar) { ASSERT(IsOpen()); if (!TransmitCommChar(m_hComm, cChar)) { TRACE(_T("Failed in call to TransmitCommChar\n")); AfxThrowSerialException(); } }
virtual bool writeCommByte (unsigned char ucByte) { if (INVALID_HANDLE_VALUE == hComm) { SetLastError(ERROR_INVALID_HANDLE); return (FALSE); } if (!TransmitCommChar(hComm, ucByte)) return (FALSE); return (TRUE); }
void __fastcall TForm1::Memo1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { char coordenadas[15]; int i; if (Estado->Caption == "&Enviar") { memset(&coordenadas, '\0', sizeof(coordenadas)); strcat(coordenadas, concatena(Mouse->CursorPos.x, Mouse->CursorPos.y)); for (i=0; coordenadas[i] != '\0'; i++) { Sleep(5); TransmitCommChar(hComm, coordenadas[i]); } } }
//----------------------------------------------------------------- // DTRで符号送信用 void __fastcall CComm::OutData(BYTE d) { const BYTE tbl[]={ 0x00, 0x10, 0x08, 0x18, // 00000 10000 01000 11000 0x04, 0x14, 0x0c, 0x1c, // 00100 10100 01100 11100 0x02, 0x12, 0x0a, 0x1a, // 00010 10010 01010 11010 0x06, 0x16, 0x0e, 0x1e, // 00110 10110 01110 11110 0x01, 0x11, 0x09, 0x19, // 00001 10001 01001 11001 0x05, 0x15, 0x0d, 0x1d, // 00101 10101 01101 11101 0x03, 0x13, 0x0b, 0x1b, // 00011 10011 01011 11011 0x07, 0x17, 0x0f, 0x1f, // 00111 10111 01111 11111 }; if( m_CreateON == FALSE ) return; if( pMod->m_BitLen <= 6 ){ d = tbl[d & 0x001f]; } if( sys.m_TxdJob >= 2 ){ if( m_nextcount ){ while( m_nextcount >= ::GetTickCount() ){ if( m_Command == COMM_CLOSE ) return; ::Sleep(1); } } m_nextcount = ::GetTickCount() + m_addcount; } if( m_pEXT != NULL ){ m_pEXT->PutChar(d); } else { TransmitCommChar(m_fHnd, d); } #if BITDEBUG m_bitCountA = GetTickCount() - m_bitCount; m_bitCount = GetTickCount(); #endif }
DWORD WINAPI CommMonitor( LPSTR lpData) { //监控串口接收数据,并完成数据格式分析,将结果放入结果队列 CommData SYSTEMTIME SystemTime; int nItemCount,TrayNum,CupNum;//样本项目号,盘号,杯号 BYTE SampleIDLen ;//数据包功能号,样本ID长度 WORD wSampleNo; bool blogfile; int i,ByteRecieved; bool isdataPacket=FALSE; char DataBuffer[200];// 数据缓冲区! CHAR TempWorkingID[c_MaxWorkingIDLength+1];//样本号,chj char LSampleID[5]; Init() ResetOpPointer() ResetRxPointer() nItemCount =0; FillDevName() SetCommWaitMask(EV_RXCHAR) PurgeComm( hComm, PURGE_RXCLEAR ); blogfile=NewLogFile("Syn_ELISE.txt"); WriteCommChar(XON) while (TRUE) { WaitEvent(EV_RXCHAR) do { ReadFile(hComm, &RxChar, 1, &dwReadLength, NULL); if(RxChar==STX) isdataPacket=TRUE; if(isdataPacket) { DataBuffer[i]=RxChar; i++; } if(RxChar==ENQ||RxChar==EOT) { break; } if(((RxChar==ETX)|(RxChar==ETB))&(isdataPacket)) { //DataBuffer[i]=RxChar; ByteRecieved=i; break; } }while(dwReadLength==1); i=0; if((RxChar==ETX)) { while(DataBuffer[i]!=STX) i++; } lpOpPointer=&DataBuffer[i]; if (blogfile) { WriteLogData(hLogFile,lpOpPointer,ByteRecieved); } switch (RxChar) { case ENQ: // Sleep(300); TransmitCommChar(hComm,ACK); break; case ETB: case ETX: //先进行校验的计算,若为正常接受则进行结果处理! //目前,由于资料校验和的计算方法与结果包中数据不符!尚未加校验计算 /* 需要到仪器上读出数据包进行分析 */ switch(*(lpOpPointer+2)) { case 'H': break; case 'P': break; case 'O': nItemCount=0; TrayNum=(int)StrToInt(lpOpPointer+c_TrayNumEOff,c_TrayNumLen); CupNum=(int)StrToInt(lpOpPointer+c_CupNumEOff,c_CupNumLen); wSampleNo =(int)StrToInt(lpOpPointer+c_SequenceNoOff,c_SequenceNoLen); _itoa(wSampleNo,LSampleID,10); TempWorkingID[0]=lpDevice->DevItemType; memset(&TempWorkingID[1],0x30,5); SampleIDLen=strlen(LSampleID); strncpy(&TempWorkingID[6-SampleIDLen],&LSampleID[0],SampleIDLen); TempWorkingID[6]='\0'; break; //继续接收 case 'R': FillSampleID(nItemCount, wSampleNo) strncpy(OutResult[nItemCount].WorkingID,TempWorkingID,7);//填写工作单号 OutResult[nItemCount].ItemNo=nItemCount+1; FillItemName(nItemCount,lpOpPointer+c_ItemNameOff ,c_ItemNameLen) if (OutResult[nItemCount].ItemID[1]==124)//'|' 如果项目名称长度为1则添加字符串尾标志-ASCII 码值为 0 { OutResult[nItemCount].ItemID[1]='\0'; FillResult(nItemCount,lpOpPointer+c_ResultOff-2,c_ResultLen) } else FillResult(nItemCount,lpOpPointer+c_ResultOff,c_ResultLen) OutResult[nItemCount].ItemNo=nItemCount+1; //填日期 GetSystemTime(&SystemTime); FillDate(nItemCount, SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond) nItemCount++; (*lpResultProcessRoutine)(lpDevice->nDevNO, &OutResult[nItemCount-1], 1); lpDevice->dwRecordCount+=1; break; case 'L': break; } // Sleep(300); TransmitCommChar(hComm,ACK); break; case EOT: //结果入队列 default: TransmitCommChar(hComm,ACK); break; }