Esempio n. 1
0
void COM_task()
{
	UINT8 uartData = 0;


#if(defined __18F8722_H) ||(defined __18F46K22_H)
	if( UART1_hasData() )
	{
		uartData = UART1_read();	

		UART1_write(uartData);
		UART1_transmit();

#ifdef  UART2_ACTIVE
		UART2_write(uartData);
		UART2_transmit();
#endif
		return;

	}
#else
	if( UART_hasData() )
	{
		uartData = UART_read();	

		UART_write(uartData);
		UART_transmit();
		return;

	}

#endif

}
Esempio n. 2
0
void APP_task(void)
{
	UINT8 data;
	
	if (UART1_hasData())
	{
		data = UART1_read();
		UART2_write(data);
		UART2_transmit();
	}

}
Esempio n. 3
0
void COM1_task(void)
{
	volatile UINT8 uartData = 0,i;
	communication[0].curAppTime = GetAppTime();
	if(RCSTA1bits.OERR == 1)
	{
		RCSTA1bits.CREN = 0;
		Delay10us(1);
		RCSTA1bits.CREN = 1;
	}
#ifdef  UART2_ACTIVE

	if(RCSTA2bits.OERR == 1)
	{
		RCSTA2bits.CREN = 0;
		Delay10us(1);
		RCSTA2bits.CREN = 1;
	}
#endif

for(i = 0 ; i < ACTIVE_USARTS ; i++ )
{
	if( communication[i].prevAppTime != communication[i].curAppTime)
	{
		if( communication[i].prevState == communication[i].state && (communication[i].state == COM_IN_PACKET_COLLECTION))
		{
			--communication[i].timeout ;
			if( communication[i].timeout == 0)
			{
				COM1_restart();
				return;
			}
			
		}
		
		communication[i].prevAppTime = communication[i].curAppTime;
	}

	switch( communication[i].state)
	{
		case COM_START:
		if( i == UART1)
		{
			if( UART1_hasData() == FALSE )
					return;
			
				uartData = UART1_read();
			#ifdef	PASS_THROUGH
				UART2_write(uartData);
				UART2_transmit();
			#endif	

		}
		else if( i == UART2)
		{
			if( UART2_hasData() == FALSE )
				return;

			uartData = UART2_read();	

		}
			
		if( uartData == communication[i].rx_sop )
		{
			communication[i].rxPacketIndex = 0;
			communication[i].state = COM_IN_PACKET_COLLECTION;
		}
		break;

		case COM_IN_PACKET_COLLECTION:

			if( i == UART1)
			{
				if( UART1_hasData() == FALSE )
						return;
				
					uartData = UART1_read();
				#ifdef	PASS_THROUGH
					UART2_write(uartData);
					UART2_transmit();
				#endif	
	
			}
			else if( i == UART2)
			{
				if( UART2_hasData() == FALSE )
					return;
	
				uartData = UART2_read();	
	
			}
		
			if(uartData == communication[i].rx_eop )
			{
				UINT8 parseResult = 0;
				COM_RESP_CODE txCode = COM_RESP_NONE;
				UINT8 *txData ;

#ifdef __NO_CHECKSUM__
				parseResult = PARSE_SUCCESS;
#else				
				parseResult = parse1Packet((&txCode), i);		//parse packet 
#endif

				switch( parseResult)
				{
					case IGNORE:
					COM1_reset();	
					return;
					
					case PARSE_SUCCESS:
											
					if( communication[i].callBack != 0 )
					{
						communication[i].txPacketLength = 
							communication[i].callBack(&communication[i].rxPacketBuffer[COM_RX_DATA_START_INDEX], 
											&communication[i].txCode,
													  &txData);
						if(communication[i].txCode == COM_RESP_NONE )
						{
								COM1_reset();
								return;
						}
						communication[i].txPacketBuffer[COM_DEVICE_ADDRESS_INDEX] = DEVICE_ADDRESS;	//store device address
						++communication[i].txPacketLength;

						communication[i].txPacketBuffer[COM_TX_CODE_INDEX] = communication[i].txCode;	//store tx code
						++communication[i].txPacketLength;

						for( i = COM_TX_DATA_START_INDEX ; i < communication[i].txPacketLength ; i++)	//store data
						{
							communication[i].txPacketBuffer[i] = *txData;
							txData++;
						}

					}

					else
					{
						COM1_reset();
					}

					break;
					
					case PARSE_FAILURE:
					{

						communication[i].txPacketBuffer[COM_DEVICE_ADDRESS_INDEX] = DEVICE_ADDRESS;	//store device address
						++communication[i].txPacketLength;
						
						communication[i].txPacketBuffer[COM_TX_CODE_INDEX] = txCode;		//store tx code
						++communication[i].txPacketLength;
						
					}
					
					break;
					
					default:
					break;
					}
					communication[i].state = COM_IN_TX_DATA;
				}
				else
				{
					communication[i].rxPacketBuffer[communication[0].rxPacketIndex++]=uartData;
					communication[i].timeout = 0;
					if( communication[i].rxPacketIndex >= RX_PACKET_SIZE)
					{
						communication[i].txPacketBuffer[COM_DEVICE_ADDRESS_INDEX] = DEVICE_ADDRESS;	//store device address
						++communication[i].txPacketLength;
	
						communication[i].txPacketBuffer[COM_TX_CODE_INDEX] = COM_RESP_OVERRUN;		//store tx code
						++communication[i].txPacketLength;
						
						communication[i].state = COM_IN_TX_DATA;
						
					}
				}
				break;
	
			case COM_IN_TX_DATA:
	
				COM_txData();
	
				COM1_reset();
		
			break;
	
			default:
				COM1_reset();
			break;

		}
		communication[i].prevState = communication[i].state;

	}
}