📄 udp.lis
字号:
0280 .dbline 145
0280 6FEF ldi R22,65535
0282 7FEF ldi R23,255
0284 L33:
0284 .dbline 146
0284 ; UDP_Header->Checksum = htons(w); //
0284 8B01 movw R16,R22
0286 0E940000 xcall _htons
028A E0910000 lds R30,_UDP_Header
028E F0910100 lds R31,_UDP_Header+1
0292 1783 std z+7,R17
0294 0683 std z+6,R16
0296 .dbline 148
0296 ; //
0296 ; IP_EndPacket(); //
0296 0E940000 xcall _IP_EndPacket
029A .dbline 150
029A ; //
029A ; if (!PPP_SendPacket(false)) return false; // send it
029A 0027 clr R16
029C 0E940000 xcall _PPP_SendPacket
02A0 0023 tst R16
02A2 11F4 brne L35
02A4 .dbline 150
02A4 0027 clr R16
02A6 0EC0 xjmp L32
02A8 L35:
02A8 .dbline 153
02A8 ; //
02A8 ; #ifdef Debug //
02A8 ; IP_DisplayProtocol(true, (int)w2); //
02A8 9A01 movw R18,R20
02AA 01E0 ldi R16,1
02AC 0E940000 xcall _IP_DisplayProtocol
02B0 .dbline 154
02B0 ; IP_DisplayHeader(4, (int)w2); //
02B0 9A01 movw R18,R20
02B2 04E0 ldi R16,4
02B4 10E0 ldi R17,0
02B6 0E940000 xcall _IP_DisplayHeader
02BA .dbline 155
02BA ; UDP_DisplayHeader(4 + sizeof(T_IP_Header), (int)w2); //
02BA 9A01 movw R18,R20
02BC 08E1 ldi R16,24
02BE 10E0 ldi R17,0
02C0 9FDE xcall _UDP_DisplayHeader
02C2 .dbline 158
02C2 ; #endif //
02C2 ; //
02C2 ; return true; //
02C2 01E0 ldi R16,1
02C4 .dbline -2
02C4 L32:
02C4 0E940000 xcall pop_gset2
02C8 .dbline 0 ; func end
02C8 0895 ret
02CA .dbsym r w 22 s
02CA .dbsym r w2 20 s
02CA .dbend
02CA .dbfunc e UDP_In _UDP_In fV
02CA ; w -> R22,R23
02CA ; len -> R20,R21
.even
02CA _UDP_In::
02CA 0E940000 xcall push_gset2
02CE .dbline -1
02CE .dbline 165
02CE ; }
02CE ;
02CE ; //*********************************************************************************************************************
02CE ; // this is called when we have received a UDP packet
02CE ;
02CE ; void UDP_In(void)
02CE ; {
02CE .dbline 168
02CE ; u16 len, w;
02CE ;
02CE ; len = MainBufferWr_Rx - MainBufferRd_Rx; // length of data left
02CE 20900000 lds R2,_MainBufferRd_Rx
02D2 30900100 lds R3,_MainBufferRd_Rx+1
02D6 40910000 lds R20,_MainBufferWr_Rx
02DA 50910100 lds R21,_MainBufferWr_Rx+1
02DE 4219 sub R20,R2
02E0 5309 sbc R21,R3
02E2 .dbline 173
02E2 ;
02E2 ; // *******************
02E2 ; // UDP header
02E2 ;
02E2 ; UDP_Header = (T_UDP_Header*)(MainBuffer + MainBufferRd_Rx); // point to the UDP header
02E2 80E0 ldi R24,<_MainBuffer
02E4 90E0 ldi R25,>_MainBuffer
02E6 280E add R2,R24
02E8 391E adc R3,R25
02EA 30920100 sts _UDP_Header+1,R3
02EE 20920000 sts _UDP_Header,R2
02F2 .dbline 175
02F2 ; //
02F2 ; if ((!UDP_Header->Checksum) || (IP_Checksum2((char*)UDP_Header, len))) //
02F2 F101 movw R30,R2
02F4 2680 ldd R2,z+6
02F6 3780 ldd R3,z+7
02F8 2220 tst R2
02FA 11F4 brne X2
02FC 3320 tst R3
02FE 51F0 breq L40
0300 X2:
0300 9A01 movw R18,R20
0302 00910000 lds R16,_UDP_Header
0306 10910100 lds R17,_UDP_Header+1
030A 0E940000 xcall _IP_Checksum2
030E 0030 cpi R16,0
0310 0107 cpc R16,R17
0312 29F0 breq L38
0314 X3:
0314 L40:
0314 .dbline 176
0314 ; { // invalid checksum
0314 .dbline 178
0314 ; #ifdef Debug
0314 ; SendDebugRStr(udp_str7); //
0314 00E0 ldi R16,<_udp_str7
0316 10E0 ldi R17,>_udp_str7
0318 0E940000 xcall _SendDebugRStr
031C .dbline 180
031C ; #endif
031C ; return; //
031C 32C0 xjmp L37
031E L38:
031E .dbline 183
031E ; }
031E ; //
031E ; w = ntohs(UDP_Header->Length); //
031E E0910000 lds R30,_UDP_Header
0322 F0910100 lds R31,_UDP_Header+1
0326 0481 ldd R16,z+4
0328 1581 ldd R17,z+5
032A 0E940000 xcall _ntohs
032E B801 movw R22,R16
0330 .dbline 184
0330 ; if (w < sizeof(T_UDP_Header)) return; // hmmmmm
0330 0830 cpi R16,8
0332 E0E0 ldi R30,0
0334 1E07 cpc R17,R30
0336 08F4 brsh L41
0338 .dbline 184
0338 24C0 xjmp L37
033A L41:
033A .dbline 185
033A ; if (w > len) return; // hmmmmm
033A 4617 cp R20,R22
033C 5707 cpc R21,R23
033E 08F4 brsh L43
0340 .dbline 185
0340 20C0 xjmp L37
0342 L43:
0342 .dbline 188
0342 20910000 lds R18,_MainBufferWr_Rx
0346 30910100 lds R19,_MainBufferWr_Rx+1
034A 00910000 lds R16,_MainBufferRd_Rx
034E 10910100 lds R17,_MainBufferRd_Rx+1
0352 56DE xcall _UDP_DisplayHeader
0354 .dbline 191
0354 80910000 lds R24,_MainBufferRd_Rx
0358 90910100 lds R25,_MainBufferRd_Rx+1
035C 0896 adiw R24,8
035E 90930100 sts _MainBufferRd_Rx+1,R25
0362 80930000 sts _MainBufferRd_Rx,R24
0366 .dbline 192
0366 40910000 lds R20,_MainBufferWr_Rx
036A 50910100 lds R21,_MainBufferWr_Rx+1
036E 481B sub R20,R24
0370 590B sbc R21,R25
0372 .dbline 196
0372 0E940000 xcall _IP_FireWalled
0376 0023 tst R16
0378 21F0 breq L45
037A .dbline 197
037A .dbline 199
037A 00E0 ldi R16,<_udp_str6
037C 10E0 ldi R17,>_udp_str6
037E 0E940000 xcall _SendDebugRStr
0382 .dbline 201
0382 L45:
0382 .dbline -2
0382 L37:
0382 0E940000 xcall pop_gset2
0386 .dbline 0 ; func end
0386 0895 ret
0388 .dbsym r w 22 s
0388 .dbsym r len 20 s
0388 .dbend
0388 .dbfunc e UDP_10ms_Timer _UDP_10ms_Timer fV
.even
0388 _UDP_10ms_Timer::
0388 .dbline -1
0388 .dbline 221
0388 ; //
0388 ; #ifdef Debug
0388 ; UDP_DisplayHeader((int)MainBufferRd_Rx, (int)MainBufferWr_Rx); //
0388 ; #endif
0388 ;
0388 ; MainBufferRd_Rx += sizeof(T_UDP_Header); // update index
0388 ; len = MainBufferWr_Rx - MainBufferRd_Rx; // length of data left
0388 ; //
0388 ; // *******************
0388 ;
0388 ; if (IP_FireWalled())
0388 ; {
0388 ; #ifdef Debug
0388 ; SendDebugRStr(udp_str6);
0388 ; #endif
0388 ; return; // firewalled
0388 ; }
0388 ;
0388 ; // *******************
0388 ; // data
0388 ;
0388 ; #ifdef IncludeNTP
0388 ; if (ntohs(UDP_Header->DestPort) == 123)
0388 ; { // most likely an NTP reply then
0388 ; if (len >= sizeof(T_NTP)) NTP_DecodeSNTP(IP_Header->SourceIP.ip32, (T_NTP*)(MainBuffer + MainBufferRd_Rx));
0388 ; return;
0388 ; }
0388 ; #endif
0388 ;
0388 ; // *******************
0388 ; }
0388 ; // **************************************************************************
0388 ; // this is called every 10ms from the IP module
0388 ;
0388 ; void UDP_10ms_Timer(void)
0388 ; {
0388 .dbline -2
0388 L47:
0388 .dbline 0 ; func end
0388 0895 ret
038A .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
0000 _UDP_len::
0000 .blkb 2
0002 .dbsym e UDP_len _UDP_len s
.area data(ram, con, rel)
0002 .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
0002 L22:
0002 .blkb 4
.area idata
0002 25750A00 .byte 37,'u,10,0
.area data(ram, con, rel)
0006 .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
0006 L17:
0006 .blkb 5
.area idata
0006 2530347800 .byte 37,48,52,'x,0
.area data(ram, con, rel)
000B .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
000B L4:
000B .blkb 3
.area idata
000B 257500 .byte 37,'u,0
.area data(ram, con, rel)
000E .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -