Exemplo n.º 1
0
void VgaScreen::clear()
{
    alt_u16 x_col,y_col;

    for(y_col=0;y_col < 480; y_col++)
        for(x_col=0;x_col< 640; x_col++)
            Vga_Clr_Pixel(base,x_col,y_col);
}
Exemplo n.º 2
0
//**********************************************************************************************//
//*******************************    Receive Packet Handling   *********************************//
//**********************************************************************************************//
static void ethernet_interrupt_handler() {
	unsigned int receive_status;
	int i;
	int j;
	int k;
	int termination;
	int byte14;
	int byte15;
	int byte16;
	int byte17;
	int byte18;
	int byte19;
	int byte20;
	int byte21;
	int byte22;
	int byte23;
	int byte24;
	int byte25;
	int byte26;
	int byte27;
	int byte28;
	int byte29;
	int byte30;
	int byte31;
	int byte32;
	int byte33;
	int ip_header0;
	int ip_header1;
	int ip_header2;
	int ip_header3;
	int ip_header4;
	int ip_header5;
	int ip_header6;
	int ip_header7;
	int ip_header8;
	int ip_header9;
	int long crc_twos;
	int crc_carry;
	int crc_ones;
	unsigned int long checksum;
	alt_u32 checksum_32;
	receive_status = ReceivePacket(receive_buffer, &receive_buffer_length);
	if (receive_status == DMFE_SUCCESS) {
#if 1
		printf("\n\nReceive Packet Length = %d", receive_buffer_length);
		for (i = 411; i < 435; i++)
		{
			for (j = 0; j < 640; j++)
			{
				Vga_Clr_Pixel(VGA_0_BASE, j, i);
			}
		}
		for(i=0;i<receive_buffer_length;i++) {
			if (i%8==0) printf("\n");
			printf("0x%.2X,", receive_buffer[i]);
		}
		printf("\n");
#endif
		if (receive_buffer_length >= 14) {
			//  A real Ethernet packet
			if (receive_buffer[12] == 8 && receive_buffer[13] == 0 &&
					receive_buffer_length >= 34) {
				// An IP packet
				if (receive_buffer[23] == 0x11) {
					// A UDP packet
					if (receive_buffer_length >= UDP_PACKET_PAYLOAD_OFFSET) {

//**********************************************************************************************//
//*****************************    Incoming Checksum Validation   ******************************//
//**********************************************************************************************//
						byte14 = receive_buffer[14] << 8;
						byte15 = receive_buffer[15];
						byte16 = receive_buffer[16] << 8;
						byte17 = receive_buffer[17];
						byte18 = receive_buffer[18] << 8;
						byte19 = receive_buffer[19];
						byte20 = receive_buffer[20] << 8;
						byte21 = receive_buffer[21];
						byte22 = receive_buffer[22] << 8;
						byte23 = receive_buffer[23];
						byte24 = receive_buffer[24] << 8;
						byte25 = receive_buffer[25];
						byte26 = receive_buffer[26] << 8;
						byte27 = receive_buffer[27];
						byte28 = receive_buffer[28] << 8;
						byte29 = receive_buffer[29];
						byte30 = receive_buffer[30] << 8;
						byte31 = receive_buffer[31];
						byte32 = receive_buffer[32] << 8;
						byte33 = receive_buffer[33];
						ip_header0 = byte14 + byte15;
						ip_header1 = byte16 + byte17;
						ip_header2 = byte18 + byte19;
						ip_header3 = byte20 + byte21;
						ip_header4 = byte22 + byte23;
						ip_header5 = byte24 + byte25;
						ip_header6 = byte26 + byte27;
						ip_header7 = byte28 + byte29;
						ip_header8 = byte30 + byte31;
						ip_header9 = byte32 + byte33;
						crc_twos = ip_header0+ip_header1+ip_header2+ip_header3+ip_header4+ip_header5+ip_header6+ip_header7+ip_header8+ip_header9;
						printf("\n %hx twos: ", crc_twos);
						crc_carry = crc_twos >> 16;
						printf("\n %hx carry: ", crc_carry);
						crc_ones = crc_twos + crc_carry;
						printf("\n ones: %hx", crc_ones);
						checksum = (crc_ones ^ 0xFFFF) & 0xFFFF; // invert bits
						printf("\n %hx checksum: ", checksum);

//**********************************************************************************************//
//*******************************    Display Received Message   ********************************//
//**********************************************************************************************//
						if (!checksum)
						{
							put_vga_string("Message received.", 0, 26);
							printf("Received: %s\n",receive_buffer + UDP_PACKET_PAYLOAD_OFFSET);
							if (current_line < 25 && receive_buffer_length < 79)
							{
								for (i = UDP_PACKET_PAYLOAD_OFFSET; receive_buffer[i] != 0; i++)
									put_vga_char(receive_buffer[i], i-UDP_PACKET_PAYLOAD_OFFSET, current_line);
								current_line++;
							}
							else if (current_line < 24 && receive_buffer_length > 78)
							{
								for (i = UDP_PACKET_PAYLOAD_OFFSET; i < 79+UDP_PACKET_PAYLOAD_OFFSET; i++)
									put_vga_char(receive_buffer[i], i-UDP_PACKET_PAYLOAD_OFFSET, current_line);
								for (i = UDP_PACKET_PAYLOAD_OFFSET+79; receive_buffer[i] != 0; i++)
									put_vga_char(receive_buffer[i], i-UDP_PACKET_PAYLOAD_OFFSET-79, current_line+1);
								current_line++;
								current_line++;
							}
							else if (current_line == 25 && receive_buffer_length < 79)
							{
								for (k = 26; k < 409; k++)
								{
									for (j = 0; j < 640; j++)
									{
										Vga_Clr_Pixel(VGA_0_BASE, j, k);
									}
								}
								current_line = 2;
								for (i = UDP_PACKET_PAYLOAD_OFFSET; receive_buffer[i] != 0; i++)
									put_vga_char(receive_buffer[i], i-UDP_PACKET_PAYLOAD_OFFSET, current_line);
								current_line++;
							}
							else if (current_line = 24 && receive_buffer_length > 78)
							{
								for (k = 26; k < 409; k++)
								{
									for (j = 0; j < 640; j++)
									{
										Vga_Clr_Pixel(VGA_0_BASE, j, k);
									}
								}
								current_line = 2;
								for (i = UDP_PACKET_PAYLOAD_OFFSET; i < 79+UDP_PACKET_PAYLOAD_OFFSET; i++)
									put_vga_char(receive_buffer[i], i-UDP_PACKET_PAYLOAD_OFFSET, current_line);
								for (i = UDP_PACKET_PAYLOAD_OFFSET+79; receive_buffer[i] != 0; i++)
									put_vga_char(receive_buffer[i], i-UDP_PACKET_PAYLOAD_OFFSET-79, current_line+1);
								current_line++;
								current_line++;
							}
							printf("\n rcvd correct checksum: %hx", checksum);
						}
						else
							put_vga_string("Some slob tried to send you a message but his checksum was wrong.", 0, 26);
							printf("\n rcvd incorrect checksum: %hx", checksum);
					}
				} else {
					printf("Received non-UDP packet\n");
				}
			} else {