⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 ENC system full - ENC28J60
💻 LSS
📖 第 1 页 / 共 5 页
字号:
			//softuart_puts_progmem("RX\n");
			//packet type
			type = (buffer[12]<<8) + buffer[13];
    21ee:	d0 91 88 00 	lds	r29, 0x0088
    21f2:	c0 e0       	ldi	r28, 0x00	; 0
    21f4:	80 91 89 00 	lds	r24, 0x0089
    21f8:	9e 01       	movw	r18, r28
    21fa:	28 0f       	add	r18, r24
    21fc:	31 1d       	adc	r19, r1
    21fe:	c9 01       	movw	r24, r18

			
			if(type == ETHERNET_TYPE_ARP){
    2200:	38 e0       	ldi	r19, 0x08	; 8
    2202:	86 30       	cpi	r24, 0x06	; 6
    2204:	93 07       	cpc	r25, r19
    2206:	29 f4       	brne	.+10     	; 0x2212 <main+0x98>
				///ARP packet
				arp_packet_in(buffer,len);
    2208:	8c e7       	ldi	r24, 0x7C	; 124
    220a:	90 e0       	ldi	r25, 0x00	; 0
    220c:	0e 94 c4 12 	call	0x2588	; 0x2588 <arp_packet_in>
    2210:	1e c0       	rjmp	.+60     	; 0x224e <main+0xd4>
				//check if we have to call ntp_client:

			}else if (type == ETHERNET_TYPE_IP){
    2212:	80 50       	subi	r24, 0x00	; 0
    2214:	98 40       	sbci	r25, 0x08	; 8
    2216:	d9 f4       	brne	.+54     	; 0x224e <main+0xd4>
				///IP packet

				//ip protocol:
				unsigned char ip_protocol = buffer[IP_POS_IPTYPE];
    2218:	10 91 93 00 	lds	r17, 0x0093

				switch (ip_protocol){
    221c:	16 30       	cpi	r17, 0x06	; 6
    221e:	49 f0       	breq	.+18     	; 0x2232 <main+0xb8>
    2220:	11 31       	cpi	r17, 0x11	; 17
    2222:	a9 f0       	breq	.+42     	; 0x224e <main+0xd4>
    2224:	11 30       	cpi	r17, 0x01	; 1
    2226:	51 f4       	brne	.+20     	; 0x223c <main+0xc2>
					///icmp packet:
					case (IP_PROTOCOL_ICMP):
						icmp_packet_in(&buffer[0],len);
    2228:	8c e7       	ldi	r24, 0x7C	; 124
    222a:	90 e0       	ldi	r25, 0x00	; 0
    222c:	0e 94 ed 16 	call	0x2dda	; 0x2dda <icmp_packet_in>
    2230:	0e c0       	rjmp	.+28     	; 0x224e <main+0xd4>
						break;
	
					///tcp packet:
					case(IP_PROTOCOL_TCP):
						//port = (buffer[TCP_POS_DST_PORT]<<8) + buffer[TCP_POS_DST_PORT+1];
						tcp_packet_in(buffer,len);
    2232:	8c e7       	ldi	r24, 0x7C	; 124
    2234:	90 e0       	ldi	r25, 0x00	; 0
    2236:	0e 94 76 1e 	call	0x3cec	; 0x3cec <tcp_packet_in>
    223a:	09 c0       	rjmp	.+18     	; 0x224e <main+0xd4>
						
						break;

					///unknown:
					default:
						softuart_puts("??? : ip proto ");
    223c:	80 e6       	ldi	r24, 0x60	; 96
    223e:	90 e0       	ldi	r25, 0x00	; 0
    2240:	0e 94 e9 17 	call	0x2fd2	; 0x2fd2 <softuart_puts>
						softuart_put_uint8(ip_protocol);
    2244:	81 2f       	mov	r24, r17
    2246:	0e 94 0b 18 	call	0x3016	; 0x3016 <softuart_put_uint8>
						softuart_putnewline();
    224a:	0e 94 06 18 	call	0x300c	; 0x300c <softuart_putnewline>
			}
			
		}

		//calc new time:
		clock_do();
    224e:	0e 94 91 17 	call	0x2f22	; 0x2f22 <clock_do>

		//every new second:
		if (CLOCK_TEST_FLAG(CLOCK_SEC)){
    2252:	80 91 a4 04 	lds	r24, 0x04A4
    2256:	82 ff       	sbrs	r24, 2
    2258:	c0 cf       	rjmp	.-128    	; 0x21da <main+0x60>
			if (clock[CLOCK_SEC]&0x01)
    225a:	80 91 a8 04 	lds	r24, 0x04A8
    225e:	80 ff       	sbrs	r24, 0
    2260:	02 c0       	rjmp	.+4      	; 0x2266 <main+0xec>
				LED_STATUS_ON();
    2262:	ab 9a       	sbi	0x15, 3	; 21
    2264:	01 c0       	rjmp	.+2      	; 0x2268 <main+0xee>
			else
				LED_STATUS_OFF();
    2266:	ab 98       	cbi	0x15, 3	; 21
			//call tcp cleanup:
			tcp_ttl_cleanup();
    2268:	0e 94 1b 1e 	call	0x3c36	; 0x3c36 <tcp_ttl_cleanup>

			//call mca25 cleanup:
			mca25_cleanup();
    226c:	0e 94 20 38 	call	0x7040	; 0x7040 <mca25_cleanup>

			//call templogger:
			logger_do();
    2270:	0e 94 94 37 	call	0x6f28	; 0x6f28 <logger_do>

			//clear flag:
			CLOCK_CLEAR_FLAG(CLOCK_SEC);
    2274:	80 91 a4 04 	lds	r24, 0x04A4
    2278:	8b 7f       	andi	r24, 0xFB	; 251
    227a:	80 93 a4 04 	sts	0x04A4, r24
    227e:	ad cf       	rjmp	.-166    	; 0x21da <main+0x60>

00002280 <ip_generate_packet>:
void ip_generate_packet(unsigned char *buffer,
                        uint32_t *dest_ip,
                        unsigned char *dest_mac, 
                        unsigned int source_port, unsigned int dest_port, 
                        unsigned char ip_packettype,
                        unsigned int data_length){
    2280:	cf 92       	push	r12
    2282:	df 92       	push	r13
    2284:	ef 92       	push	r14
    2286:	0f 93       	push	r16
    2288:	1f 93       	push	r17
    228a:	cf 93       	push	r28
    228c:	df 93       	push	r29
    228e:	ec 01       	movw	r28, r24
    2290:	8b 01       	movw	r16, r22
    2292:	b6 01       	movw	r22, r12
	unsigned int res16;
	unsigned int c;
	
	//datalength = datalength + ip header:
	data_length = data_length + (IP_HEADER_LENGTH<<2);
    2294:	6c 5e       	subi	r22, 0xEC	; 236
    2296:	7f 4f       	sbci	r23, 0xFF	; 255
    2298:	dc 01       	movw	r26, r24
    229a:	20 e0       	ldi	r18, 0x00	; 0
    229c:	30 e0       	ldi	r19, 0x00	; 0
	
	//generate ethernet packet:
	for (c=0; c<6; c++){
		//set destination mac address:
		buffer[c]   = dest_mac[c];
    229e:	fa 01       	movw	r30, r20
    22a0:	e2 0f       	add	r30, r18
    22a2:	f3 1f       	adc	r31, r19
    22a4:	80 81       	ld	r24, Z
    22a6:	8c 93       	st	X, r24
		//set source mac address:
		buffer[c+6] = nic_mac[c];
    22a8:	f9 01       	movw	r30, r18
    22aa:	ec 56       	subi	r30, 0x6C	; 108
    22ac:	fb 4f       	sbci	r31, 0xFB	; 251
    22ae:	80 81       	ld	r24, Z
    22b0:	16 96       	adiw	r26, 0x06	; 6
    22b2:	8c 93       	st	X, r24
    22b4:	16 97       	sbiw	r26, 0x06	; 6
	
	//datalength = datalength + ip header:
	data_length = data_length + (IP_HEADER_LENGTH<<2);
	
	//generate ethernet packet:
	for (c=0; c<6; c++){
    22b6:	2f 5f       	subi	r18, 0xFF	; 255
    22b8:	3f 4f       	sbci	r19, 0xFF	; 255
    22ba:	11 96       	adiw	r26, 0x01	; 1
    22bc:	26 30       	cpi	r18, 0x06	; 6
    22be:	31 05       	cpc	r19, r1
    22c0:	71 f7       	brne	.-36     	; 0x229e <ip_generate_packet+0x1e>
		//set source mac address:
		buffer[c+6] = nic_mac[c];
	}

	//set ethernet packettype to IP
	buffer[12] = 0x08;
    22c2:	88 e0       	ldi	r24, 0x08	; 8
    22c4:	8c 87       	std	Y+12, r24	; 0x0c
	buffer[13] = 0x00;
    22c6:	1d 86       	std	Y+13, r1	; 0x0d

	//now generate ip packet:

	//set ipv4 & set length:
	buffer[IP_POS_VERSION] = IP_V4 | IP_HEADER_LENGTH;
    22c8:	85 e4       	ldi	r24, 0x45	; 69
    22ca:	8e 87       	std	Y+14, r24	; 0x0e

	//set TOS to default 0x00 (?)
	buffer[IP_POS_TOS] = 0x00;
    22cc:	1f 86       	std	Y+15, r1	; 0x0f

	//set total length:
	buffer[IP_POS_PKTLEN+0] = (data_length>>8)&0xFF;
    22ce:	78 8b       	std	Y+16, r23	; 0x10
	buffer[IP_POS_PKTLEN+1] = (data_length   )&0xFF;
    22d0:	69 8b       	std	Y+17, r22	; 0x11

	//set packet identification
	buffer[IP_POS_IDENTIFICATIION+0] = (ip_identification>>8)&0xFF;
    22d2:	80 91 64 04 	lds	r24, 0x0464
    22d6:	90 91 65 04 	lds	r25, 0x0465
    22da:	9a 8b       	std	Y+18, r25	; 0x12
	buffer[IP_POS_IDENTIFICATIION+1] = (ip_identification   )&0xFF;
    22dc:	80 91 64 04 	lds	r24, 0x0464
    22e0:	90 91 65 04 	lds	r25, 0x0465
    22e4:	8b 8b       	std	Y+19, r24	; 0x13
	ip_identification++;
    22e6:	80 91 64 04 	lds	r24, 0x0464
    22ea:	90 91 65 04 	lds	r25, 0x0465
    22ee:	01 96       	adiw	r24, 0x01	; 1
    22f0:	90 93 65 04 	sts	0x0465, r25
    22f4:	80 93 64 04 	sts	0x0464, r24

	//set dont fragment flags:
	buffer[IP_POS_FRAGMENTATION_FLAGS+0] = 0x40;
    22f8:	80 e4       	ldi	r24, 0x40	; 64
    22fa:	8c 8b       	std	Y+20, r24	; 0x14
	buffer[IP_POS_FRAGMENTATION_FLAGS+1] = 0x00;
    22fc:	1d 8a       	std	Y+21, r1	; 0x15
	
	//set TTL to 128
	buffer[IP_POS_TTL] = 0x80;
    22fe:	80 e8       	ldi	r24, 0x80	; 128
    2300:	8e 8b       	std	Y+22, r24	; 0x16
	
	//set ip packettype to tcp/udp/...
	buffer[IP_POS_IPTYPE] = ip_packettype;
    2302:	ef 8a       	std	Y+23, r14	; 0x17

	//set dest ip:
	nic_ip_to_buffer(&buffer[IP_POS_DST_IP], *dest_ip);
    2304:	f8 01       	movw	r30, r16
    2306:	40 81       	ld	r20, Z
    2308:	51 81       	ldd	r21, Z+1	; 0x01
    230a:	62 81       	ldd	r22, Z+2	; 0x02
    230c:	73 81       	ldd	r23, Z+3	; 0x03
    230e:	ce 01       	movw	r24, r28
    2310:	4e 96       	adiw	r24, 0x1e	; 30
    2312:	0e 94 4c 14 	call	0x2898	; 0x2898 <nic_ip_to_buffer>
	
	//set source ip:
	nic_ip_to_buffer(&buffer[IP_POS_SRC_IP], nic_ip);
    2316:	40 91 9a 04 	lds	r20, 0x049A
    231a:	50 91 9b 04 	lds	r21, 0x049B
    231e:	60 91 9c 04 	lds	r22, 0x049C
    2322:	70 91 9d 04 	lds	r23, 0x049D
    2326:	ce 01       	movw	r24, r28
    2328:	4a 96       	adiw	r24, 0x1a	; 26
    232a:	0e 94 4c 14 	call	0x2898	; 0x2898 <nic_ip_to_buffer>

	//set checksum to zero before running crc calc:
	buffer[IP_POS_CHECKSUM+0] = 0x00;
    232e:	18 8e       	std	Y+24, r1	; 0x18
	buffer[IP_POS_CHECKSUM+1] = 0x00;
    2330:	19 8e       	std	Y+25, r1	; 0x19
	buffer[13] = 0x00;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -