示例#1
0
文件: tucomm.c 项目: mingpen/OpenNT
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 );
}
示例#2
0
void CSerialPort::TransmitChar(char cChar)
{
  ASSERT(IsOpen());

  if (!TransmitCommChar(m_hComm, cChar))
  {
    TRACE(_T("Failed in call to TransmitCommChar\n"));
    AfxThrowSerialException();
  }
}
示例#3
0
文件: SerialPort.cpp 项目: berak/e6
		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);
		}
示例#4
0
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]);
        }
    }
}
示例#5
0
文件: Comm.cpp 项目: ja7ude/mmtty
//-----------------------------------------------------------------
// 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
}
示例#6
0
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;
		}