From 1842dcd021921c94bc69526a5759a4b7caa93586 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Sat, 5 Oct 2013 23:22:36 +0200 Subject: [PATCH] give the touchpad some delay after changing the operating mode, absolute mode now working, emulated uart a little buggy --- firmware/USBtoSerial.c | 120 +- firmware/USBtoSerial.c~ | 119 +- firmware/USBtoSerial.elf | Bin 148581 -> 148444 bytes firmware/USBtoSerial.hex | 700 +++--- firmware/USBtoSerial.lss | 4872 +++++++++++++++++++------------------- firmware/USBtoSerial.map | 565 ++--- firmware/USBtoSerial.o | Bin 40656 -> 39972 bytes firmware/USBtoSerial.sym | 203 +- 8 files changed, 3276 insertions(+), 3303 deletions(-) diff --git a/firmware/USBtoSerial.c b/firmware/USBtoSerial.c index 961e898..9dc597a 100644 --- a/firmware/USBtoSerial.c +++ b/firmware/USBtoSerial.c @@ -400,40 +400,10 @@ int main(void) // // end of keypad mode demo block // // #elif DEMO_MODE == ABSOLUTE_MODE -// // begin of keypad mode demo block -// // uart_puts("you selected the absolute position demo modus:\n\r"); -// touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" -// while (1) { -// -// Usb2SerialTask(); -// loopcounter++; -// if(loopcounter) { -// continue; -// } -// -// touchpad_read(); // read data from the touchpad -// uart_puts("x_pos: "); -// my_uitoa(x_abs(),stringbuffer,4);// x_abs returns current x position of your finger -// uart_puts(stringbuffer); -// uart_puts("\ty_pos: "); -// my_uitoa(y_abs(),stringbuffer,4);// y_abs returns current y position of your finger -// uart_puts(stringbuffer); -// uart_puts("\tz_pressure: ");// z_pressure returns current "pressure" (contact area) of your finger -// my_uitoa(z_pressure(),stringbuffer,4); -// uart_puts(stringbuffer); -// uart_puts("\r"); -// -// } -// // end of absolute mode demo block -// -// #elif DEMO_MODE == RELATIVE_MODE - // begin of relative mode demo block -// uart_puts("you selected the relative position demo modus:\n\r"); -// touchpad_set_rel_mode_100dpi();// use touchpad in relative mode - touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution - uint8_t x, y = 0; - int8_t dx, dy = 0; - + // begin of keypad mode demo block +// uart_puts("you selected the absolute position demo modus:\n\r"); + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" + _delay_ms(500); while (1) { Usb2SerialTask(); @@ -442,37 +412,69 @@ int main(void) continue; } - touchpad_read(); // read data from touchpad - - dx = delta_x();// returns the amount your finger has moved in x direction since last readout - dy = delta_y();// returns the amount your finger has moved in y direction since last readout - - // increment/decrement some dummy variables with the - if (x + dx > 255) { - x = 255; - } else if (x + dx < 0) { - x = 0; - } else { - x = (x + dx); - } - - if (y + dy > 255) { - y = 255; - } else if (y + dy < 0) { - y = 0; - } else { - y = (y + dy); - } - + touchpad_read(); // read data from the touchpad uart_puts("x_pos: "); - my_uitoa(x, stringbuffer, 4); + my_uitoa(x_abs(),stringbuffer,4);// x_abs returns current x position of your finger uart_puts(stringbuffer); - uart_puts("\ty_pos: "); - my_uitoa(y, stringbuffer, 4); + uart_puts(" y_pos: "); + my_uitoa(y_abs(),stringbuffer,4);// y_abs returns current y position of your finger + uart_puts(stringbuffer); + uart_puts(" z_pressure: ");// z_pressure returns current "pressure" (contact area) of your finger + my_uitoa(z_pressure(),stringbuffer,4); uart_puts(stringbuffer); uart_puts("\r"); } + // end of absolute mode demo block +// +// #elif DEMO_MODE == RELATIVE_MODE + // begin of relative mode demo block +// uart_puts("you selected the relative position demo modus:\n\r"); +// touchpad_set_rel_mode_100dpi();// use touchpad in relative mode +// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution +// touchpad_set_abs_mode(); +// uint8_t x, y = 0; +// int8_t dx, dy = 0; +// +// while (1) { +// +// Usb2SerialTask(); +// loopcounter++; +// if(loopcounter) { +// continue; +// } +// +// touchpad_read(); // read data from touchpad +// +// dx = delta_x();// returns the amount your finger has moved in x direction since last readout +// dy = delta_y();// returns the amount your finger has moved in y direction since last readout +// +// // increment/decrement some dummy variables with the +// if (x + dx > 255) { +// x = 255; +// } else if (x + dx < 0) { +// x = 0; +// } else { +// x = (x + dx); +// } +// +// if (y + dy > 255) { +// y = 255; +// } else if (y + dy < 0) { +// y = 0; +// } else { +// y = (y + dy); +// } +// +// uart_puts("x_pos: "); +// my_uitoa(x, stringbuffer, 4); +// uart_puts(stringbuffer); +// uart_puts(" y_pos: "); +// my_uitoa(y, stringbuffer, 4); +// uart_puts(stringbuffer); +// uart_puts("\r"); +// +// } // end of relative mode demo block // #endif diff --git a/firmware/USBtoSerial.c~ b/firmware/USBtoSerial.c~ index f28d0a2..f545a08 100644 --- a/firmware/USBtoSerial.c~ +++ b/firmware/USBtoSerial.c~ @@ -400,40 +400,9 @@ int main(void) // // end of keypad mode demo block // // #elif DEMO_MODE == ABSOLUTE_MODE -// // begin of keypad mode demo block -// // uart_puts("you selected the absolute position demo modus:\n\r"); -// touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" -// while (1) { -// -// Usb2SerialTask(); -// loopcounter++; -// if(loopcounter) { -// continue; -// } -// -// touchpad_read(); // read data from the touchpad -// uart_puts("x_pos: "); -// my_uitoa(x_abs(),stringbuffer,4);// x_abs returns current x position of your finger -// uart_puts(stringbuffer); -// uart_puts("\ty_pos: "); -// my_uitoa(y_abs(),stringbuffer,4);// y_abs returns current y position of your finger -// uart_puts(stringbuffer); -// uart_puts("\tz_pressure: ");// z_pressure returns current "pressure" (contact area) of your finger -// my_uitoa(z_pressure(),stringbuffer,4); -// uart_puts(stringbuffer); -// uart_puts("\r"); -// -// } -// // end of absolute mode demo block -// -// #elif DEMO_MODE == RELATIVE_MODE - // begin of relative mode demo block -// uart_puts("you selected the relative position demo modus:\n\r"); - touchpad_set_rel_mode_100dpi();// use touchpad in relative mode -// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution - uint8_t x, y = 0; - int8_t dx, dy = 0; - + // begin of keypad mode demo block +// uart_puts("you selected the absolute position demo modus:\n\r"); + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" while (1) { Usb2SerialTask(); @@ -442,37 +411,69 @@ int main(void) continue; } - touchpad_read(); // read data from touchpad - - dx = delta_x();// returns the amount your finger has moved in x direction since last readout - dy = delta_y();// returns the amount your finger has moved in y direction since last readout - - // increment/decrement some dummy variables with the - if (x + dx > 255) { - x = 255; - } else if (x + dx < 0) { - x = 0; - } else { - x = (x + dx); - } - - if (y + dy > 255) { - y = 255; - } else if (y + dy < 0) { - y = 0; - } else { - y = (y + dy); - } - + touchpad_read(); // read data from the touchpad uart_puts("x_pos: "); - my_uitoa(x, stringbuffer, 4); + my_uitoa(x_abs(),stringbuffer,4);// x_abs returns current x position of your finger + uart_puts(stringbuffer); + uart_puts(" y_pos: "); + my_uitoa(y_abs(),stringbuffer,4);// y_abs returns current y position of your finger uart_puts(stringbuffer); - uart_puts("\ty_pos: "); - my_uitoa(y, stringbuffer, 4); + uart_puts(" z_pressure: ");// z_pressure returns current "pressure" (contact area) of your finger + my_uitoa(z_pressure(),stringbuffer,4); uart_puts(stringbuffer); uart_puts("\r"); } + // end of absolute mode demo block +// +// #elif DEMO_MODE == RELATIVE_MODE + // begin of relative mode demo block +// uart_puts("you selected the relative position demo modus:\n\r"); +// touchpad_set_rel_mode_100dpi();// use touchpad in relative mode +// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution +// touchpad_set_abs_mode(); +// uint8_t x, y = 0; +// int8_t dx, dy = 0; +// +// while (1) { +// +// Usb2SerialTask(); +// loopcounter++; +// if(loopcounter) { +// continue; +// } +// +// touchpad_read(); // read data from touchpad +// +// dx = delta_x();// returns the amount your finger has moved in x direction since last readout +// dy = delta_y();// returns the amount your finger has moved in y direction since last readout +// +// // increment/decrement some dummy variables with the +// if (x + dx > 255) { +// x = 255; +// } else if (x + dx < 0) { +// x = 0; +// } else { +// x = (x + dx); +// } +// +// if (y + dy > 255) { +// y = 255; +// } else if (y + dy < 0) { +// y = 0; +// } else { +// y = (y + dy); +// } +// +// uart_puts("x_pos: "); +// my_uitoa(x, stringbuffer, 4); +// uart_puts(stringbuffer); +// uart_puts(" y_pos: "); +// my_uitoa(y, stringbuffer, 4); +// uart_puts(stringbuffer); +// uart_puts("\r"); +// +// } // end of relative mode demo block // #endif diff --git a/firmware/USBtoSerial.elf b/firmware/USBtoSerial.elf index 348bf3b5652f020984d5717cf1c6b0607de9df45..30b40f5b20a9814d20fdd7006bd86b6f0e11a44e 100755 GIT binary patch delta 38806 zcmc(|d3Y5?+CE&>XGwrSHb_E9NJv81lduN}dqCEJY_e|x280k6As})BA|N6V8aRjw zh=_=YY!U_$GcJgTh=_=a5RhTeaTJwN#zFb+ySlq_$jtj2U*A8zzOK%5KTAEec6E2v z(?xHc@vFDB+!J)^=lebiSrZ;& z8pf7-xyH&-g(m(Mg{}%c61pm3Rm|GOuVfVE8i}QKLmS7xD}&cY9S&QaYrb#PuH33p zVrj;;oYMYRs;qg&ylo_OP?FMK*ZNUXamlYge9(9O;0=Gicvu#et}3mv#?p7YqEaY* z$C6{Er%J`OOKG=LR{q5t>8jcD-Y|3rI@IY8=XqJJ@MTK-JbmIgOaPKOT*EMG3hZ2mzG{j`@W&L zR_|isfAsn{^Ko~))m)|BzEO>17Q1`r@Y=_|EHpCHbrJ*R5TjzO;^i?UJ>18?#xH`gQ<^^zGyz2(Z+3yXTl zRYg5z-RM?9-LF4#xu|r^Cx@l~S69ixD@CQA3+b>fEIKDEuPXXfroS%y^83W1RP#ko zLibbhdeMiHNk%Vt_iT9IrOEYftoWv=^q*gZColNfO4tj|d#iNauhZe*zF1XsOsu_q z>w`k`q+nX_CnaX2w^8_zH-py(uchSvqx^f=yxZHzOMffAFeg+=GPika8k>ikN4?z| zy!%OFX|v1O-wnBP>}*dtT)ra@$k#u4Qtp&*%l$GH+Kkc;*G7GL@a$5vRZw#ey+oNa zf*zHL=C4838w8aclf`nYH04j9j2@Buu)}@#$sD;%ezvBTKX}bE!Fz%~`R#()CAg07 z_UceG!MtdGV7^~`p?I`E^uWzE7hVrN^8V|`FR)g5SEiM|cAmLR`unufgXas@-27tY zcTZg1erZA9RUI~Wxb(9q5u#wtZ~sAhJ7t9o9hK0h*M%R~eD(8{FA7VGN^>p-U$8F2 z?J}iwXuFHYWS5Ieq3ComHb9XBd8>;LUn(kXaq%x-tXI^D9wU^fys>J09AprYo$c%s2alb@AlG z>ooI;u&HvoSs}b__en;f`8{l}i50U8&1+)V7d1+jCck@Q6@0GF*p8Z96H9#5tTHDV zy}l?c`p-3-ZmtY}D15q+Q8dHgg;C-9dX;m0L@l&g`-qA7`$EL9Mt}XZ7UX%xf+k-D z_?~l~bwJ6CCmvh+*hzWjR25p8jU%hc{C#&tcJag{CMM1ql|OYx>qG%KcU1oL@iS&T zFn#>K)iJR_-3zMXCV?Yc)Dv?xt{;FKhQr!?*o zfV+x~T7H+mc}E*QH@86V;YYV$2FcR zPH3DjPHH?&oYHu@IIZyvaRyk`KU>TcXSL!1aZck|;xmnBi}M;6hzlCe5v3Z>6_+)B zP+ZY?p17*Prz8oz{7kxF(5dAc6ECy)YL=4innHa2bb1_uomSVWZt;9%;TZ_>ew-IA4%;~YM z7^fBO0&sgVLCZUeT#Y*g;Lc)_mS>B}8g~(S8s8=IHSQ*+Yurc7tfr^OzG9YE+${<; z?kDDI++WPocz~F%@jy|i@gT8K<9oy+jR%Xx8V?am9n9%*nZsauT(0p5u|ngKVwJ|D z#A=Plh&39I73(y(7uz(RBDQOs zCw6E&RqWI_U+mI&n%J%Jbg@_C89uRJGc&~jjUNyPHJ&97X*^pT)_9IMqVZf&qVa>` z4UOlEw>0*NqZ${AV+yP3aiKV_6%UIO8ZQzjHGV{#(s+qDt?^QEM&n1tS&f&8a~eM; zKGXPdabDvU;zHT=8^jH*cv}3V@g{LoG~Ob9)A(6oPj6F5u@>L5ewWB%MatM8=<%h zc#$x7)sOX2#UopE6>%DO6E!vNE)q5FDUvkqB~mo*EmAek5p^~0BkF71Pc+oHzeuw% z=fD9XLn{V~CK?YC%{0D8w9t64$kcdh+kz8X&v{WQ)K12oPTgEXEd20Pd%ri-BtBW8%<8qX9X zH7*dNHJ&5JYCKnr)A&I#LF0KMSL27oB#q~b$r}4a9j;)2GLMXAP9#bu52#TAXGiK`k<7uPhNA->jl zrufGEK0V#{jh1AIZ#8Z!u4~**{Gf3MaYN&d;wOzeiJKaC7QbkmEpBPtMf|35S0SR+ z9Lyo#O&Asf++Dae?jgJy_Y}bz_YxH~&JiIR_YqYz?kmDHzFS0S+)q^1cz}qC)|25t z5u+9Nh**sWi#Uykh?*J?6^R-T6GJ5qK%lVah8~;aa%E8<94D@;|^k>#vR2X z^O%_b zK#TM-$F!uLIIeO10Ng;F(DH`jq{fZJDUH*_X^qpx8I3chmqMD@3fV);q5 zzz$&v=rzzZ&=7$V<1(xIiCX#Uh8L3T8wI!=^*&BBfehP$HqOvfzW z<4v99hft_IB&l0Th-J2$hM>E_v%cSgPO#-9)EVMTYbQNrtnYvjfk7d}TcGw`k1Amm z=PF!T#XSqXmrtbU2|zD{_QShM{VL|PPE}<$b8)AZW6pGQ>^GyLr`eG9VO9UGevW=@ zxYf>g>NER0`f<=_I!e%nI1TZTS+jF``M7);D4g+zHteEevynajcy~**Q2{NmL2!4?smbDkDJqa?viKB z#9m$GRdYhGX=vATy*5;0yUwT}#H()Mzy6#|GB@>}Dep3?=A_6>vsF%xe8^myQy{+-I{U$@td9`tyJ!I{@vtqw8^^4<$kun77qoCUqK~Qc zPbu-npc;nv1D8mK--qDCEh+_t48_5Fb7hMj^9h8zuCL zpxtKFz{L1B;H~lmODHN-K#3~nwnK6wSys4c_8<7JTwulznozwKQX93U`~k^bksmVm z2~xVMMw?F!>RNpfQpg?DiKtk5G#0`>I>=-GYfugOtQmbzLfRSFc-BhE7IMXIVdKCb zb9OC5l4?UA2MAtUQ-E)5|BqI0`>FNOEn2}HfKSEf&vSEI8PZQb8j2j#meH(K5 z$O4+&4h3Aim?n$NK7*^tW#;(7P30oDD{jg^AawK`EW zmTS#RLt=1s{4yj%W|<9!rpXEB(4oyjIq`Fnr&R{#$ft+K+0Vw7thua>W^+}sDnm=& z3TWM2deIE72q{M)LrQsbur&W*nrKTyDQ^pwra5imq^yTD&S7a9QBwz+2uBV|RSR5{ zJ%+_aCbKfxs!=_zkw&3tS=XF1tZCv%I=@Sm!s8kadA-4OS-yq~QomK$}Wp2t2 zJ56i2lsi%mf+fr%`(o`kz-9w7L-}%}Q!WuIh9WhOb^{=sVD1a#Vu|rsC5TQ&z?;FaDaDI6B5Rf)#D6u14lx?@99QB`u8Qvi>)a%hB9b1)^?h5Q>x=J-VlW6%ljsrvV)-MB;UHuul2{ zQaj@RIkl*ggL=iIY@xgbhl(m}#YPSvEPA-0cjeGR${rr%;p#&ZFqt5(z5|q|CuPaC zQ7WIiA@2enHDx3>Wuel;lpseIisS)+?k1K6FW}^BD89S7W$_sVJ@(O}4LeZEUIDp# zT%(La(JP<`9#<|U0p;+xCT39-;KSpp4Xm$-b^*`*`9xBKl(DmMKjW!Imc9pRWe-?&54+SI?z@AHjDv$DoKv8$dN&>XKwZ`DZ0sM@ zGiD_9bt{;exi!6Y0n;j&!*gSdEgo}L?uWJ3z>8hc7bEYiXeq|yjBxXBW0E`nPc?P% z*~^$eg|+=}l|DIfiEG#^EOZOppJWQlISIv%oPvC1?NQL&1#eZkgPhQBrvW;rc2hj0r}0;XDGfW`5*D#AR9}T z))!)Sp4zO_#}Hd?dMY=SalKn^`l@8j$tyQ^E50{*<))uW`2CzZ{wr^XHY z720S%_a&pWlO&59h9Ob|R2>PU@hTuED^Dp<@Hm6h5QS)Vdw@I%o4_j}813+Jj5#L1 zc7wNR`};<}xhMa=#9zz2Zba7vdcBDYx|x|dEyc%C=luiM7aVxh^LB8~0hH@^J#PmE z2R-XS`vm`t;sia%2HN-ew1yJzKEX3Ore~u~!l&V_UpCl|QY{A?akVkDXz%ZHy}W#Ro!r?}I2H zllRD$WfF;tARv=AWXm#nm~2_uizCg=b2H5QXQlTpg(kpjFs`ituN}Y!c+DkS=9S@7 z0bYNp3a?Gf>a$aOC*$G|@Y;rKSy>+j8{qXtvSnU>BwJS2I#FnlM04ltnDD;1W+FHn zyY6BS6hxW33!;t3qRek+H|)**p@1y8c@mIi74$|xmMzGZWyw{>fGm$i+gVmHR~3YY zeNSy!w$;s-3u0tL^H@QnUhOf!12VmbY*{@wfepy?9kOMahGHlMWZK#6IH!5V$q;hP zdaNoNcIloIcug zhq5=6k$lsoek)FQoA@1YxgBsP+4c>PAm$)M55UyQ?-&&H)EoTcH!=s1V`pW&USY;?pYq1pODy%gt+Q0(Ofv|Ae})##wXVESlNgKyTu zadxF2K6AR;cSn2N3sW`axZAUNmVy;(B+-_SVD9$!B83`BPg1GMHXjOR?2M!y6;bLO z3ap{j39u_!Ybdn_Y-hey7#q4vx!|DL2-z0%Y++jZ3CIEl%@wc#&C@U$Y+3URNH&`; zsBJu&Yz|!zYdoK9&RS3}`~%u>-n1%lBiY=&poR=GPb?T@#HL`hR5M#GOij;Bxg(># zU;{E*Pqr+hk`!~r!rJkocEIrbl{eI~i!jnWwXnX?rnVZH?H-Oaa%!u*avx4jAA@uO zm6`)KAg@1@Ez9ex+U9Ey*REMFH6X8sypfjWm6fV4g~UY_jB%+d!zqg*joGOxL;s@G z%wFgEI_VVwO)q^xERek3ciZk;>abO0ORrT}c* zF}Mllt+UL{X1W<`?5ksDEN)h7DJKo+8nZz!N$A_4ElI1GG(69?Nho4xrbRclJCNTb>LoEa^ zjeHzECmRtSg>@uvRWgm$x&XFD3z%-f8HX2+43_y8r18N9>H=vgQpx7At-&@PQ4iUt z19c(bg6j~1>Ht#!qPhH8vkSNd;HsZO2J_%yIZoqD>?N>kAg|%bYJLOBc1UXe4Ddxg z^YF4R@!|D_sKshJhn({kysD~Zm^B}(>0`~fMa9}Rz|e}h8yS{B@D@(_NX#g(#{kce zeJo}o*v|kjkX;!w8|-C3dXNb0mS3{xHmI9DW!%)FXD+No<*=ciW|QD;LEywQ7#$L7zW2Db z{^R*0^G=-==?&Fn#wa;y3b zL@p8e5(uTcsQE`(UN`yJo{|XbG|A#~>u~SL4c) z2Mc!~A&`bC&5zJT-3!s61{fSw^MR^DQIkqve=dMVJp|b#rKQtEXi})1SszN})MYv4 zI(0*(xr@o@biPXVC{P9zt*M+fj>>fqtyW6T;Z$T(IeP(>FGI8q%6cN2w;gJ7sGSr2 zHdw;GWap_$4gef%j$T{MHymg*6-&-K`5$5y(H|hyI4CAl`B?N{!A=L9M|P#EGT~yf zMcnpOH9o0}PQ@xJ%`_@m^vk;FRBWJfjjt!QEc;I?*YAP0K(me7CsbMY10E#1WhQJ@ z+qtc_I}B-w(iG7P+pc0mr$gR?;v|(@cTvgysHv4_p(v%&_riOQwu#cR*{S)O+8tcc zR%P$1lx%h?ZczE62SY{`eW+6Y1|=1@sC=m}m3))RgEFc%z(RspfOQ0+06Q8Y?jpuX zQ@ssDN9an#G9&u&Vsy$qDwESnQ$yZe3nGt{9Jrg!41Zj94$xp42Fd-%HTn`fa4DZM z&#xkW0Q?dUr%eU<0c@&`g$y@))|TQ4<|=G2tyMFH^;cA+M>(%6q zHDI~k+_wIfakZhj^@-+jRT`nB=_pPr0G4a4Bl<2#+L`}&qFML^$Rir0pzMP$L%5=m z*?L1p`~fG~$$v|BwUN1GL%sAWX->K+OxJ?!_buQikJrXXvJ$nFQ_0RtGcRsvFmR<# zQ@}LEWcQ*5a!w(xwu@k^a}`29$Ong@^ne0ae~f0nM_?8UdG(Lzx{&p5Vvc$;dQcAt zRW-*3rc%|M3ki>~68s4==vqvzzTYS>I)iigEcst=o#qQqC(Byq`%g#9X!9>mCtw=)YV~yp2=W)&flfWJNdtt2dTnFg}8jg^$P^vs<(NoeJ@JY=^YDdYW zQ{Z<1?V3g^GjA_;SmrXQVA>RX0C35y|`;D{zrvKo?=kl;vd z2WL#p0=aG{_X4}cQmNLW_$i$78U_TL?=YC76okm6o$zx4ShY_)rmXlEP|fp@+@eLU zZ$0X#+)#FvveWSyNc1(}w`9*OWeYGc;1y;XcMv&Hag)lAMe1Jo6XDiHD5oe_!C)hB z$~WQ;AYCG03fcFNoR=@J*A^7aic@b!t%0-27sPP@6Xuv}whrryUkwm-e@uiXZ3z_8 z&3iyaxU6@)8|UNkd#JbGxpbTfWU^_u_3fm$UlszRd>Q zTTv%#tIqTLw(87Rx6Q#6-u(H2K31RMmTZC=$Ub}&2Gj%y*5QOtJC_bT|XpBy()&q!&WmI+zpG@Obz$&}$ z%CMA%IHE5l!X~+qHA<#nOvDU^b#y#m<5RfJh{2P`p^}RxG(1(%Upk?jm=ZryBHy^ebFz}l=2O;#g2ONqB(lUR^!LUruW4;2{oFa@rH(=P@^(X z_%yO#qZo2D*^cJM7o&{Kw}V zHZhy+>|&g5Vm`Pt+4xHnbMww5=`r8jnIdD%YdfDtblT#VS|{?8Ub_`G;c+zZ`60%O z>DnxPDSiawLR}B`hF3c-)MX95QIOmjg`r{-T=NU4_%E>u9EBeD$n)mP_hZcIyK1Y5 zPWQMcku>Nu{$PzS0-a{9@in#9_^j1JPflkl{_AStKX?5U#_jjud^v>$N*0wHo3~%K z!Y+entA!#X*(<8-HXH5!RE1quoWLfArI%rs6?4xkPI@nz$$J=*dwS0iTnR;c+xmDF z{D6k%mEePIA|szA5H&8TftY-!PPTFHIm)>LMlag=XS zS!*2pQjtw%J5|DdfWyglt(6Du1i(pTyCuy7n+G_bY)%TF8d4m-_HHQQ@HLRd&@ZD+ zAH^;QTt&98VpjvMBYSr(zND=O+(Nd$%6%{3VX`9>dk*k2*@*}pMYDz)+^b8K{qZ<2 zlV`|N=vwvw1HRb{#kv<}uouoXHS_j2sK*%g#MDYivNil@ zGt-f3$0)d73O0#Zj)eIHobu(b;7nz^4LVWlI+RpQqH<5YJdlMrQ{c9~dYO2Iqw)}J zRi{xOUqIV^q7Fv~jTe)D6(d84_nVtHUTNSfg?*!kusMeq7={Y}#=KJHCwMEDudBh& z@-r-+b*Ndvsl)56Ln>Z_ti0c1-XqEOV8g%1W}gODRcRMeAHXS(UP572m0o}j!=EFR znnTncQ&l_y_y*bcR5b`skbPgVX8|vhJtGpNhgmI=EL>bwtALDrw;Fi~3;3>61V$o+ z;gpZx3ky|*ODsYqb&*k1wW?XSxKaE+oD@*1LtZ@Wq=+}C7w7nx)hwKBk4+Vw?0#f+ zja#AtI3voNosf74Sk(Y6VBQX={N-*WP`N(|olw^g6`iQOh4#R!0ALTYzp0BM2e2R6 z+iBDeW$e^Q@=~Vp>KF^0XZAao5%DrSrmM_5Nap@YOLNV^hT)-^j<|&qw=_RISl{TA zY5oc_JJYQ9r{_GZPJ#K+pXw$S;LXUM>4&7NjNEtktH}~G z>jQ_|VwT-^c!Kd*rdi{)dI|eb$7+i>ELw0JUL;%0Mruj6l6miIsj`8&?6rD5+qXhb zL#B@UXuoQl`DCB&5DbUT@}ge9W|CE2?xvR|WY5yL-)BhoR4enh*XkI%TbXr^Tr=Kk zWrn|A$M~j|+4}W*vZ^`m^?pO@wnl<2XhgYlB(8?8WY_U}e~Iiou+j5z%XAL;CoH6h znB@?ygib^s4^$qGr;>Zb&$c#0OX?cMt<6>?S+yF)>i%-0l!15V5~OH8_W!xmV&90> zeeb{Ah|OCi){dNe+$xmLy2pBRDx)g@^&Y#g;Ll%3JlPC-a}j#)^EdBB@3ntxsd1*Y z`R-eTj9abET5oriHO$<%XUfjz7jM@v?r&rM@^*d0*Tzge+Q9I)G5a5_Z@k#X^c`(u zyxztBA_JD)-t{hk)WQ;rCFJsO_8T}GOtU#@HV-+crv7Jqyo zT5QJgY_!#qGVWiJL>P2B-{a-bf`GIQRGH9pKTC%rec z;a{|J1eJ~2^2s@HWQ}?iE~2|a)WN*|-d!~(|C>d-1dMlOv8b&%@I;&N^)RvWpYjS+ zr`np&oQRdd=HV0Bi5sy2W;cEuF2le9IT-h|Vl(mm6cx1kpPrZhm*dgy1~ne-ZU|y) zs}0|B4}*ML`0oQX?PQAAc*AYBc{3KRKlRKtwEp0a6XcnF1s~Ti@NL$bPrCVbw8I=; z7nMmlgxgt6dvG1d9R=3`T*`+4g9*+9dZ z#{}I0crQq53sBA6aW1}XeX`%c%W8nSr2t81@aG7{3@NJE+45S?abABZZj^G=Tuk>bG}hSK*Yues3d_dxsd{eOE8mm| zh9}>He)h>k6eT~~oby?IV|}*y+-D;jAJo<#E9>jp`mC%0>zFQBAyC8qoO({_U^e@_ zfibd+Ip*_W@qH8ZFszQ*G;kR9neoTBO6Qijy{DYp$Nvv*x0bnGR?h8v%I)26quqc1 zVuZc!aI(zptL5BQFn6D?@yER0Ec5zJIj?v9aj!|WbcfY$b7zM=^2fdQD)V|zIj?Wh z>mS=NpH=2{c{#80fj>UDHkY}5y`0zBL$Z#1U2Ui;6 zk$6bz>Jg12<8TGt)eHcaAqn~J3g8ymqnU73Xfwgu_~51 z5zN;qb22m!@mREpqEQ}$U(;FkptOGy1-z6Xqy42Qpem&d_1EeutE2F)ZU2+fzrCV- z&PQi%_hjUgNn~8MQ8Z|4Nc!27JU^?eVNO%ADI;+q`H1iz=V5vz_>O(5K<6zkJ{Nm2-%>_DVOU_$nFZ)>f z%eL?eDBG56tJc6Ea=V|iWz>CZ+wzM%caZD#igXahbr9rw>;a3ja^-h;mK!3sdp|6R z=!T!;Svn%O`;aZ8j$h?jIwH5b#Fnw1-1Q;l2YHqak=yM%ZVOr6M2JZFeV%1RXL3~W5`=K@+4jKu5EGV<**M?SdA|zj?lCQDVn?ad;D`*(#UQizg{{aBf z63}qaW1uuV0U7~%(&o>BhJwEU%I3IY%ddg58b8_8jVH(|;H!YL+!3Jhp!}xMDjyNb z_q3tLaX)Y@{{T>yVpe)Q*o8Mv6gEl>E(>H8-%BE** z`k76?w&}Mv&u1zyQS(7H9E^K7rjsZjuS)lB|4mO_++8lf@&?pZ;-wOU|Su&ycMueHrja_uDJcKKDgc7tIf?FD6%90X-~kASk#@oM2?aUNDlPeY2NS5(q-w&?}XW-#SD z2{XH5(`%qe`H?Cu-&~OLc~#o$U^o%o0Ci#O$z$9EV%l4vX`r~fDBb||uv6W|Rnp}% zvbaG5ImA$5{%+MH4ESgHgF)FNF`#tFrzJXM{5}d{^@s}OcX}klwrF8fhR4Iw>XCM2 z+%Bs}7)K9{)guh3FYA#Wmdff86?*UV2!sBu9#NtHPLJ>d0G5k^{qSk^h>GxcyVj{@ z9SaR>G{L61pzN7EP}Xc_Mf3=}hT;EkVfBpq4#4S|6}IUbQ1;9^P-eQpri}VWN~>qK zka2ou8yNP?4p6ISb^$T%UQqVT0no}6@QZ!+%pvwnYy}@Z(8}OH1LZY(9+cT!0Oh248PsiD0b*1(-0fHH7`5#-KH&_; z;BClDl-vzQjSHJH*c(;0?gWhbhUHB)7^{MDjb_V60g*DE+bTJux?y-pxl94W`vrF) zVnG?yZB64uKF-e!&*qfX0hBX;HYh961C*n)AE?{d2{g#o39Iuq4|^2Fi_iSzi%ty`D+()rO55#0Q^ZM;|++fdJ)Y_&N=<1CAdc$R zpvvp_DNNH1s6Hs8!rjJ?KsiLxwM>!tw#w4IOh$J8R8F6g&8c|N7LW+!HVu$3WE4m6}mpry9OWot0Vg;n=%)k^2jjW*M;BO!b1kd(zRW=>*oW< zHX1;waUN)}rGH)Nhb!^(5RbORe^=shWL#fBoD0PCj0%QV>!p-&!N~cxD*ik&hU;UM zkWs++IU6Kk$S;1b#s|pAU$<-z#7JMadkhfcec|tb8W_95FwI_24v_s+8gBtH4j5)< zmGi?&yb9tHOT0*>eoKi5L(K4BSa+bW)4(XW&tT}U+u(>Q1+ogqm|m+98I0@p%!iiY zx2VS!<&$x^ZaDzrV4$&}48OI;3z6#)tJP`dsRT9SZ(TE(F(YrAfHKV1Z49#=GSt@X zJqS4wE6KoHPU@s6^lp_eBXHdwx?#XAigQ)foFTSu52vzu%9_{o<|@|1XPsyv6v68T~9zz&32}|p_kfD>j&d%C2 z7(sa~c?c+rSQYf|pop3DsaY%$0uB~NOTy)78Zkc7^`jaoO(=Hmu#A(0%@EpT0lxvt zXvlX#dw|jpBO{TZ^g$X807J^KNY~HGVICl>P!NjCj0qM&z}hoZk|kelQwB&Pv;C@# z84t<9$e2jCYz?%)nULf8t7z^ooPW8b_K<2^tN7vs~{)~KdEvD9IlmfF3 zjCDkrH>#P6!Ht}J7|!T+amK@~9$EYghyjc+d{-HUD6wm`8dZ#Cgyy=^Fq+Xy%9uuo zcd1G=1mhaO_Fy>U%e>4OsOUmaChiqLEGh#I-R^sA#I9q^A)ls5$@c~2ARJ6fm+N1u zri?pevog?-tvJc1d7yNg56Z-|Z27V<^uG&VKjW&0$nEC!LPR4*AF?G$-Ns^|r-)Dw zl@}u|8$ftisXqW>WFpj`C^bV9t!E|%C_=nSH40-9(Vriy=3-Ey532Pl#n+bVtWq%! z(X~-E7{d`^v{D(}qI|8A4$B4!KRFDLggP-DHz%08phGW_$H*?tcvmr7&fzkt#;U&Y8Lc@Vfi9J@&5+!0%i*s z3x%YAn@c~8e?pS$$~^<2pea%XV(b$%-zg1)prBc;G~E7&=3Av7t~b8Fe#)srOL*5DQNc0Q^S=ZQ&4@NRE(X1YOgBmYD;rcY1UbqeM-YXDx|Uc zYm24%RcW?@Vc~axvYvY_OY6Op!B+5Ytpps2z%@?O<93o$b`r*6!MSxQUbd3#QuV%K zTYh6({s3y-L5Y^Y*G*71h8J55^j#5@e27iMYW8@Sx->E7vbPAdu zm4-1?(5zOPWnf&>=zKX4ufa8u{? zP?mskQdYwgJ!wm*xdEPeGfK*BJORXrsHZ`zQsTVJ#(<%DTvdPPVREI4gtG7HHEmT2 zC_ORa$!#r%zQa803V~tGg6~o!pY9jCF!^vub7rJ;DBxs?#7am0>Z| zvQTeABkL)P42T&7>k-#uKh$7Pbg_iHlTHx#UMaNmwUgM*)q?IrIN=Rhn)E(t9R5j@IC z#qGOsIK3j*#P6C);_-@~V9NVU)X+M(DaXAuct0l#Z6Th4DW8W^im@a#33Ojz%aANp zI>``oYl~4R+ZBJ4Sn#{Sa>aMV@b6f%LAh;)XCR%Lqn2AzhG@LWvE$BCf1I-HC#N}B zH{*0_OMKD)%n=#sSXxTB7ZV~znsSthf4nKjm{RS| zD5>>30OQopPI9lNX0U(3yE4Y-cta!7MH8r8Vy4tBwG~1ygi?$kNwlC-7H+(7Q-v)< z$_*7MMv-u51JJP~n}daKr+IC;PuWos(BHJ>h6ufK1B9C&#N6cIHU=>%_bj}KJC#$* z24i4a`e1sO2yUkwWq@H~QabaB469xKvu8`^)F4eIDlYu9d?{LOmyA>%?(7^Ei5n(f zyK}f{vO9n$<_3eKC+70L!#kOA^Cef=S%o0pu6R{lpCrRg4wqQr+oX0ol$SdjgI>5p z!#b04s{|c=41^g2I{61&L-V2GW(_)odlx@h&?y*Q?5%JYOKjDAF9auWI=o}Z0#aw7 zfR2p2C)aSYuTfm1qJQ&Q+1}sgUCd$EKbNuo-CxNn>#oZf|K?Izr8xd`S;N`~2~(B3 zv#Hr^+zD}-j=Le;PjGl*?ie^cG4B=*?-VK+GVVt>BZ=6uvzt25Fbzt!Ch1U|Xg6+A z&^MryML=tE2d16U=5oJbrv)9CbdihGX*}YE0X*!+C|eqqFC>js_dDLW-$G$P_Wwb| zjgpPZDwq2l2mjxl;72D+DSr8){LZCzKjLs-MfY)^Kz*rDHcPY3j#z$4tc`|=B-}cX zVxm(_?uu|HM2h<^Xv6#H(K5WxG32(1WjL0GK5l8CZY12$z+C!wCl#@i?5s{UzRdr4 z$5M*%j$uGC%e1a2DaL`cRlmyy%*~l)me}!LmMU`-Q`5wYkEZ$KGsG(^`N#YyBmKiaz@K0LA{+Re zpRmE?JZ=;BKe#sm=Ok%3U1E`M6G10SPNFs-C@0{f9PFJEI4+#7p&xE-IHe$Nrg$}t z_+$$(nPmdWU5~5)p1U6%0(hqYjzgA#`yft++zVlu9NsCI+O&ZjBbQmyEufwgxmcfw z(-6%!IZ3Mi2N~Dmxo&QVrrM4R@#SS)lDA|{v>g}L_p7v8=2O3=QBJ6SP@}wzYv-1% zEMqQyb1m8s&2%PQ`7STxaLeq3tqt#$~dM z-!Fq7b#S3QxJvQvYx20^<7)J~IGtO8(;r;N<{CDy2}i~?&orF4oVXfTYC*2$h2Z%= z;3DI~G(Y5LV$vj>c#`Fpz=T|$=7b93<1#eONY#hp%l?CiYou%f%v6%=ja(%pc3SEHbR{^Q3xoJQ z#ozfJ(aQ%Rmtb9DxktA%7lnu8G(@{iT;rCOonf}~S#;_Fys z^5O^M<&?5VR<1F2!HG7*dVqD*FO%V0DC^+zp>0>)k#XVBmc=?UE@=G{fsJt|V=y8! z(*MCN8RyTqDf9e&ugi04eX1K?Mjb2S2NiEUL~>Dy%Sq)g27XOQJKXCWlYrMKu5M9_ z$38s(=7HzpRlr5Dklz|GIgTTkB6kU{;v-LXh50}Q6kTu{c7L5aI!)2@L=qRU* zOv8iAR@JNeU;jb&P-{|&0XD>3>?vRF7Lf5b!(F1n?M(!Ol#zAcB<50+QW9`k$+`Pj zdE%wgmZOAt+q4h=*T)gUoL?#{`V+sxvvtqcWSGCk&v?M@a8p+Chh2xF@U*P5HW82D z0Ac<zBaMO5YyDdwf0)-uDE{0qPDpP)R-*ptrKEUkZ z_+z($|3fm-|96iOFFX1xd5s<3$D5+qwo!f+Bi_F@#AxJC3^JN#t-=>wj9HgexJki=DbM(S z3pUQy=f81!^FK;mRESY?sfAD5EBw7vX2DjF5N4-JHg$8v^BRQIo_Xy9KK6$e!^ z`buvK9#iL*tKw3*vAAYsqp_5^{=QX=i?UvEMyTf#?BVf0UP{x^-?G@5Y5k*kb6xw^=+g~vZF(umDt6ggK8 zd2+>&Cszu2a;=3YR|a` z>UphS*ClSEUU>K#z_$aw?KlTt9QX!OUfu#ShDGu5dlgRS_@Cr_X5}NK^XTZ<^HmD3 z6!)q34X$K52QeRc%zy z#aJWUa|pM;PX2$y8g-1+7=O(gMomvAStxG#JJvAj$Xou2Buo88B%k>I1Y(4C@n5cC zqGhxr2YUX>w$hy{4vmz0sLp+JAk*+OYtT69PovpO#ch$X90Y; z6#kDAj48Deki%Gg=f%qc@aO=(tN+6U6n3~pCR=2IMb=v61&i#p$YDhqzYia7{U~CH zFTj6|PerZ65Z{4M3DEy$rLO2-kb>;c(j*Nn(%vF{Ei%y}4_ah}MK)Mur$r80T}RhwEwYd9uOJULSD6aRvMS4@s=P#sGC_zTO# z3>$zCEKp1EJ*uJIZTk)Yyu!JG!2=^#9rAxnajHIH^CjS0*ewOY|}rCj*xFb@0w+5A~mccXnvV{|$VuuHpB${}qs)W5|ova<W{=#B1Q43a|^_0?&i_tAX?b1kOKkWsCd*KClMd=lBM;7T84VfF?#m zsRE>x)3*li6o>`n@4SKM__sfd`dcH^N)b%??v%o z1^A_lvnR|9H-Hyn0slbn7SDs96{YHLCD^A7lwLV_4ZKrgHsR;soy}i5{26>;3%GE} z@$SVV3?0W!7CvG)Ez*E`Yt$?MO~G6356V8_?oFV>KIQmf;JHA;N^)j=5ImnhGQqPz zOTasQ%obP+p3g)RZ2e2%1O5LAyl*l_C7(U$;2j7$1vKGV@+dJIhWd-(2LxP3UxDX; zRN=u4|DnJe$Y@GO;!U*!cnjKFbFJRbMSmJ#_d5Bpgs7& zE*V67v(?G|8{lz@K<2}L#tALt+rJl`2$qVzf7 z1N(S*IX)M>b8sHvLN@=ICl9uOAG{Me!Tfw%Ah-r4n}pZ(9`J#q_#pVQna(X<10Ptx zW99fW;Bx~;`6Z?gX!2X&lk9s3S{Ppw;}V&U+vi*qfF%m$1#Ta#K~wPj$v|h+_XB?+ zV9<>MzaDlRBdkC^cs@Zp4;)Lt$HM<$WrKMEycf=_3giC21p=o;9L3wg2i9;uc&7$x z43yLJ8V|JRG%NzNYS(2Ld99Z18Q18cxI^gxI8!SkIo!>&OG@N-c^ z9xQNo@Dl?v7y|yd{~s-kZ)9fimo1I1UeBCSW5(jw3i?zn&TeP)m+k`a#cSIe?WF(n o4#q|QCmoH;73Yr1pFV!Zj0dKVFFx4GcvSikQ4!_um~Eu|f8f)=0ssI2 delta 38920 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 I?`)*}e@f$1egFUf diff --git a/firmware/USBtoSerial.hex b/firmware/USBtoSerial.hex index 7732aa6..1746c77 100644 --- a/firmware/USBtoSerial.hex +++ b/firmware/USBtoSerial.hex @@ -1,9 +1,9 @@ :100000009AC00000B4C00000B2C00000B0C0000040 :10001000AEC00000ACC00000AAC00000A8C0000034 -:10002000A6C00000A4C00000A2C000003FC600009F -:10003000E1C600009CC000009AC0000098C000000B +:10002000A6C00000A4C00000A2C000005AC6000084 +:10003000FCC600009CC000009AC0000098C00000F0 :1000400096C0000094C0000092C0000090C0000064 -:100050008EC00000D6C000008AC00000B0C2000000 +:100050008EC00000D6C000008AC00000E2C20000CE :1000600086C0000084C0000082C0000080C0000084 :100070007EC000007CC000007AC0000078C0000094 :1000800076C0000074C0000072C0000070C00000A4 @@ -18,9 +18,9 @@ :1001100020005500530042002D00520053003200D1 :100120003300320020004100640061007000740060 :1001300065007200000011241FBECFEFD4E0DEBFC7 -:10014000CDBF11E0A0E0B1E0E0EFF7E102C0059023 -:100150000D92A033B107D9F712E0A0E3B1E001C0DE -:100160001D92A436B107E1F737D30C94F60B48CFB4 +:10014000CDBF11E0A0E0B1E0E6E2F8E102C0059029 +:100150000D92A234B107D9F712E0A2E4B1E001C0D8 +:100160001D92A637B107E1F767D30C94110C48CF65 :10017000FC01A081B1816C93808191810196918372 :100180008083268137818217930721F484819581AA :10019000918380832FB7F894828593850196938706 @@ -31,357 +31,363 @@ :1001E0006083738362837583648360587F4F7783F2 :1001F000668380E890E091878087138612862FBF00 :1002000008951F920F920FB60F9211248F93809131 -:1002100056028F5F809356028F910F900FBE0F9002 -:100220001F90189586B53091560220E0280F311D99 -:10023000C901089516BC109256020895DF92EF92FC +:1002100068028F5F809368028F910F900FBE0F90DE +:100220001F90189586B53091680220E0280F311D87 +:10023000C901089516BC109268020895DF92EF92EA :10024000FF920F931F93CF93DF9383E085BDF2DF7F -:10025000509A5898E7DFBC0180E090E00E941E0BA6 -:1002600020E030E84EE053E40E94860A87FDF2CF9A +:10025000509A5898E7DFBC0180E090E00E94390B8B +:1002600020E030E84EE053E40E94A10A87FDF2CF7F :1002700082E085BDDD24D39410E0DCDF509A5898ED -:10028000D1DFBC0180E090E00E941E0B20E030E056 -:100290004CE852E40E94860A87FDF2CF5098589AA3 -:1002A000C1DFBC0180E090E00E941E0B20E030E046 -:1002B00048E453E40E94860A87FDF2CF41C0C8E0BB -:1002C000D0E000E8E12EFF248DE492E0E80EF91E74 +:10028000D1DFBC0180E090E00E94390B20E030E03B +:100290004CE852E40E94A10A87FDF2CF5098589A88 +:1002A000C1DFBC0180E090E00E94390B20E030E02B +:1002B00048E453E40E94A10A87FDF2CF41C0C8E0A0 +:1002C000D0E000E8E12EFF248FE592E0E80EF91E71 :1002D000B1DF509A5898F7018081802379F0A2DF2E -:1002E000BC0180E090E00E941E0B20E030E04CE872 -:1002F00052E40E94860A87FDF2CF0EC093DFBC0154 -:1003000080E090E00E941E0B20E030E042E053E4E9 -:100310000E94860A87FDF2CF5098589A83DFBC016D -:1003200080E090E00E941E0B20E030E048E453E4BF -:100330000E94860A87FDF2CF0695219749F61F5F36 +:1002E000BC0180E090E00E94390B20E030E04CE857 +:1002F00052E40E94A10A87FDF2CF0EC093DFBC0139 +:1003000080E090E00E94390B20E030E042E053E4CE +:100310000E94A10A87FDF2CF5098589A83DFBC0152 +:1003200080E090E00E94390B20E030E048E453E4A4 +:100330000E94A10A87FDF2CF0695219749F61F5F1B :100340001D1508F4BCCF76DF509A58986BDFBC01BE -:1003500080E090E00E941E0B20E030E042E053E499 -:100360000E94860A87FDF2CF5098589A5BDFBC0145 -:1003700080E090E00E941E0B20E030E048E453E46F -:100380000E94860A87FDF2CF80914D028B3329F0BF +:1003500080E090E00E94390B20E030E042E053E47E +:100360000E94A10A87FDF2CF5098589A5BDFBC012A +:1003700080E090E00E94390B20E030E048E453E454 +:100380000E94A10A87FDF2CF80915F028B3329F092 :10039000893341F429E0D22E02C093E0D92E1130E6 :1003A00009F46BCF47DF3EDFBC0180E090E00E94A4 -:1003B0001E0B20E030E04AEF53E40E94D00B1816E9 -:1003C0000CF442C04899EFCF489BFECFCEE4D2E078 +:1003B000390B20E030E04AEF53E40E94EB0B1816B3 +:1003C0000CF442C04899EFCF489BFECFC0E6D2E084 :1003D00011E001C0182F188288E0E82EF12C00E807 -:1003E00029DF20DFBC0180E090E00E941E0B20E0AE -:1003F00030E048E453E40E94D00B181614F4115076 +:1003E00029DF20DFBC0180E090E00E94390B20E093 +:1003F00030E048E453E40E94EB0B181614F411505B :1004000024C04899EECF16DF489BFECF0BDFBC011E -:1004100080E090E00E941E0B20E030E048EC52E4C7 -:100420000E94860A87FF03C08881800F8883069513 +:1004100080E090E00E94390B20E030E048EC52E4AC +:100420000E94A10A87FF03C08881800F88830695F8 :100430000894E108F108E114F10491F6812F8F5F2F :100440002196893039F601C010E0812FDF91CF91DC :100450001F910F91FF90EF90DF9008955098589A58 :10046000EEE6F0E080818160808308958CE38093E4 -:100470004D02E4DE809357028091570208958BE38A -:1004800080934D0283E680934E0282E080934F0278 -:10049000D5CE80915702882351F080914E0286FF7D -:1004A00004C081958F73819508958F73089580E0BE -:1004B000089580915702882351F080914F0286FF62 -:1004C00004C081958F73819508958F73089580E09E -:1004D00008951F938FB7F89420913A0130913B0112 -:1004E0008FBF80913801909139012817390749F061 -:1004F00083E191E078D7BC0197FD03C080E391E0F0 -:1005000037DE2FB7F8948091C6019091C7012FBFB5 -:10051000009701F1209114012F702093E9002091A0 -:10052000E80020FF17C08031910510F08FE090E0C7 -:10053000182F0EC0E091BE01F091BF0183E191E060 -:100540006081E0D61150882329F48CEB91E02BDEFA -:10055000112381F72FB7F89480913A0190913B01D4 -:100560002FBF009749F080E391E01DDE9091C80015 -:1005700095FFFCCF8093CE0083E191E01DD7D7D5C6 -:100580001F91089584B7877F84BF88E10FB6F894E0 -:1005900080936000109260000FBE90E080E80FB67C -:1005A000F89480936100909361000FBE70C308952A -:1005B000089583E191E082C683E191E0D3C51F9263 -:1005C0000F920FB60F9211242F933F934F935F9387 -:1005D0006F937F938F939F93AF93BF93EF93FF930B -:1005E0006091CE008EB3843019F48CEB91E0C0DDC5 -:1005F000FF91EF91BF91AF919F918F917F916F91FB -:100600005F914F913F912F910F900FBE0F901F90D0 -:1006100018958F929F92AF92BF92CF92DF92EF92F6 -:10062000FF921F93FC01A18DA150A23028F4B0E0ED -:10063000A25DBE4F1C9101C010E0808D823009F494 -:100640001860828D873031F0883031F0863029F49F -:10065000126003C0146001C016601092C9001092AD -:10066000C8001092CA00C488D588E688F788C701F8 -:10067000B6019695879577956795E0D720E034E2A7 -:1006800044EF59E4DFD64B015C01C701B601D6D770 -:100690009B01AC01C501B4013DD720E030E040E84A -:1006A0005FE3CFD69FD77093CD006093CC001093BB -:1006B000CA0082E08093C80088E98093C9001F9136 -:1006C000FF90EF90DF90CF90BF90AF909F908F9072 -:1006D0000895682F8EB3843019F48CEB91E048CDE7 -:1006E0000895EF92FF92CF93DF93E82EE7017E010A -:1006F000F92EE70101C0EDDF89918823E1F7DF9151 -:10070000CF91FF90EF9008952F923F924F925F927A -:100710006F927F928F929F92AF92BF92CF92DF9211 -:10072000EF92FF920F931F93CF93DF937B018C0186 -:10073000822F90E0FA01E80FF91F1082D22EDA948E -:100740004D2C552447FC5094EA01C40DD51DAA2414 -:10075000BB24BAE06B2E712C812C912C1C010894C7 -:1007600021083108A0E2CA2E22C0E114F1040105DB -:10077000110541F4C501840D951D8215930514F4EE -:10078000C88208C0C801B701A40193010E94D40B1C -:10079000605D6883C801B701A40193010E94D40B76 -:1007A00079018A01DA9421970894A108B108D7FE4B -:1007B000DCCFDF91CF911F910F91FF90EF90DF90F1 -:1007C000CF90BF90AF909F908F907F906F905F90F1 -:1007D0004F903F902F900895CF92DF92EF92FF922B -:1007E0000F931F93DF93CF93CDB7DEB760970FB60C -:1007F000F894DEBF0FBECDBFC5DE80E391E06CE3B1 -:1008000071E0EADC8CEB91E068EC71E0E5DC789477 -:1008100025DE8FEF99E6A8E181509040A040E1F7F6 -:1008200000C0000078942BDEFF24DD248E010F5FD2 -:100830001F4F4FDED394E9F719DE3BDEC82E29DEC9 -:100840002C2D332727FD30952E0D311D2F3F3105DF -:1008500009F024F437FD05C0EC0C04C0EE24EA9442 -:1008600001C0EE24282F332727FD30952F0D311D91 -:100870002F3F310509F024F437FD05C0F80E04C000 -:10088000FF24FA9401C0FF2480E091E02ADF6E2D5E -:1008900070E080E090E0A80124E036DFC80121DFAD -:1008A00088E091E01EDF6F2D70E080E090E0A8010D -:1008B00024E02ADFC80115DF81E191E012DFB9CF22 -:1008C000923029F0933041F09130E9F417C02EE3D3 -:1008D00030E0EAEAF0E01BC0813041F0813018F0EE -:1008E000823089F406C0E8EEF0E005C0ECEEF0E0FE -:1008F00002C0E6E0F1E0249130E009C022E130E0FE -:10090000E8E9F0E004C020E030E0E0E0F0E0DA0107 -:100910001196FC93EE93C9010895282F392FF90100 -:1009200080916202909163028617970718F4BC01C8 -:1009300020E034C061157105D9F78091E8008E7709 -:100940008093E800F5CF8EB38823E9F18530B9F1C3 -:100950008091E80083FD35C08091E80082FD29C0C8 -:100960008091E80080FF1AC08091F20090E006C0FC -:1009700021912093F100615070400196611571053D -:1009800019F088309105A0F321E08830910509F035 -:1009900020E08091E8008E778093E8006115710572 -:1009A00091F6222381F605C08EB3882361F085304D -:1009B00061F08091E80082FFF7CF80E0089583E046 -:1009C000089581E0089582E0089583E00895E82F76 -:1009D000F92F80916202909163028617970718F4AD -:1009E000BC0120E036C061157105D9F78091E8009F -:1009F0008E778093E800F5CF8EB3882309F43EC04C -:100A00008530C1F18091E80083FD36C08091E80017 -:100A100082FD2AC08091E80080FF1BC08091F20017 -:100A200090E007C024912093F1003196615070400E -:100A300001966115710519F08830910598F321E050 -:100A40008830910509F020E08091E8008E7780934E -:100A5000E8006115710581F6222371F605C08EB399 -:100A6000882361F0853061F08091E80082FFF7CF44 -:100A700080E0089583E0089581E0089582E008957C -:100A800083E00895982F2CC0292F2F702093E90020 -:100A9000981739F07091EC002091ED005091F00022 -:100AA00003C0242F762F50E021FF19C03091EB00B6 -:100AB0003E7F3093EB003091ED003D7F3093ED00B1 -:100AC0003091EB0031603093EB007093EC00209399 -:100AD000ED005093F0002091EE0027FF08C09F5FCB -:100AE000953090F28F708093E90081E0089580E066 -:100AF0000895EF92FF920F931F93CF93DF93162FDA -:100B0000E82EE7017E01F92EE70100E02AC0988176 -:100B1000992329F16B81E981FA812C81892F8F70CA -:100B2000853018F56295660F660F607C991F9927CE -:100B3000991F692B223010F096E001C092E028E066 -:100B400030E040E003C04F5F220F331F2E173F07F6 -:100B5000D0F34295407F492B95DF882331F00F5F1A -:100B600025960117A0F281E001C080E0DF91CF91CE -:100B70001F910F91FF90EF90089580915C0287FF85 -:100B800011C003C08EB38823B1F08091E80082FFCA -:100B9000F9CF8091E8008B778093E80008958EB3B9 -:100BA000882349F08091E80080FFF9CF8091E80028 -:100BB0008E778093E80008958091E4009091E5009D -:100BC00044E62091EC0020FF25C02091E80020FDA4 -:100BD00015C02EB32223A1F02530A1F02091EB0007 -:100BE00025FD12C02091E4003091E5002817390757 -:100BF00041F3442359F04150C901E3CF80E0089507 -:100C000082E0089583E0089581E0089584E00895E6 -:100C100080E008952091E80022FFDBCFF9CF40D09B -:100C200042D08091D8008F778093D8008091D800EF -:100C300080688093D8008091D8008F7D8093D80001 -:100C400084E089BD86E089BD09B400FEFDCF1EBAEF -:100C50001092580210925A021092590280E060E0FD -:100C600042E010DF8091E1008E7F8093E10080916F -:100C7000E20081608093E2008091E20088608093CE -:100C8000E2008091E0008E7F8093E0000895E3E62B -:100C9000F0E080818E7F808381E080935B02BFCF14 -:100CA0001092E20008951092E10008951F920F92B1 -:100CB0000FB60F9211242F933F934F935F936F932F -:100CC0007F938F939F93AF93BF93EF93FF93809105 -:100CD000E10082FF0AC08091E20082FF06C080919D -:100CE000E1008B7F8093E10021D28091E10080FFC1 -:100CF00016C08091E20080FF12C08091E2008E7FDA -:100D00008093E2008091E20080618093E200809114 -:100D1000D80080628093D80019BC1EBA49DC80914B -:100D2000E10084FF2CC08091E20084FF28C084E0B1 -:100D300089BD86E089BD09B400FEFDCF8091D80051 -:100D40008F7D8093D8008091E1008F7E8093E100B9 -:100D50008091E2008F7E8093E2008091E2008160CA -:100D60008093E20080915802882321F48091E3006F -:100D700087FF02C084E001C081E08EBB18DC809157 -:100D8000E10083FF26C08091E20083FF22C08091B2 -:100D9000E100877F8093E10082E08EBB10925802D1 -:100DA0008091E1008E7F8093E1008091E2008E7F50 -:100DB0008093E2008091E20080618093E20080E015 -:100DC00060E042E05FDE8091F00088608093F00098 -:100DD000ADD1FF91EF91BF91AF919F918F917F9195 -:100DE0006F915F914F913F912F910F900FBE0F9098 -:100DF0001F9018951F920F920FB60F9211241F93F8 -:100E00002F933F934F935F936F937F938F939F9312 -:100E1000AF93BF93EF93FF931091E9001F70809100 -:100E2000EC001092E9008091F000877F8093F00041 -:100E300078941BD01092E9008091F0008860809334 -:100E4000F0001093E900FF91EF91BF91AF919F9156 -:100E50008F917F916F915F914F913F912F911F9152 -:100E60000F900FBE0F901F9018951F93DF93CF9395 -:100E7000CDB7DEB7AC970FB6F894DEBF0FBECDBFCF -:100E8000ECE5F2E08091F100819322E0E436F20794 -:100E9000C9F792DB8091E80083FF30C180915C024A -:100EA00020915D02253009F484C0263040F42130C1 -:100EB000A1F1213070F0233009F020C12EC028307C -:100EC00009F4EFC0293009F4FEC0263009F016C13C -:100ED00092C0803821F0823809F010C108C080919A -:100EE000590290915A02992371F082600CC080914E -:100EF00060028F708093E9009091EB0081E095FF94 -:100F000080E01092E9009091E800977F9093E800CC -:100F10008093F1001092F100CFC0882319F0823045 -:100F200009F0ECC090E08F719070009729F082304A -:100F3000910509F0E3C00BC080915E02813009F099 -:100F4000DDC0233009F080E080935A022CC08091EC -:100F50005E02882341F5209160022F7009F4CEC013 -:100F60002093E9008091EB0080FF1DC080915D021D -:100F7000833021F48091EB00806213C08091EB00FC -:100F800080618093EB0081E090E002C0880F991FA0 -:100F90002A95E2F78093EA001092EA008091EB0034 -:100FA00088608093EB001092E9008091E800877FD1 -:100FB00086C0882309F0A2C010915E021F7780913D -:100FC000E3008078812B8093E3008091E800877FA5 -:100FD0008093E800D2DD8091E80080FFFCCF809113 -:100FE000E30080688093E300112311F083E001C0E7 -:100FF00082E08EBB83C08058823008F07FC0809131 -:101000005E0290915F0223E08C3D920791F583E0B0 -:101010008C838AE28B835FB7F894DE01159680E0BB -:1010200090E04EE061E2E42FF0E060935700E4913D -:1010300080FF03C0E295EF704F5FEF702E2F30E01E -:10104000EA3018F0295C3F4F02C0205D3F4F2D93DE -:101050003D9301968431910531F75FBF8091E8009F -:10106000877F8093E800CE0103966AE270E055DC4A -:1010700012C060916002AE014F5F5F4F21DCBC0186 -:10108000009709F43BC08091E800877F8093E800D7 -:1010900089819A819CDC8091E8008B778093E800BD -:1010A0002DC0803859F58091E800877F8093E80053 -:1010B000809158028093F1008091E8008E778093B0 -:1010C000E8005BDD1BC08823C9F490915E0292307A -:1010D000A8F48091E800877F8093E80090935802FD -:1010E0004CDD80915802882321F48091E30087FF32 -:1010F00002C084E001C081E08EBB5BDA8091E80031 -:1011000083FF0AC08091E800877F8093E800809188 -:10111000EB0080628093EB00AC960FB6F894DEBFD4 -:101120000FBECDBFCF91DF911F91089508951F93FA -:101130008EB38823A9F08091E9008F709091EC0024 -:1011400090FF02C010E801C010E0182B1092E900D7 -:101150008091E80083FF01C088DE1F701093E900D2 -:101160001F910895CF93DF93EC018091E80083FFF6 -:10117000A2C0888190E0209160023091610228171E -:10118000390709F098C080915D02813269F082329E -:1011900020F4803209F08FC03CC0823209F46AC06A -:1011A000833209F088C079C080915C02813A09F0ED -:1011B00082C08091E800877F8093E8008091E800FA -:1011C00080FFFCCF8C899D89AE89BF898093F10017 -:1011D000292F3A2F4B2F55272093F1009D014427AB -:1011E00055272093F1008B2F9927AA27BB2780939F -:1011F000F100888D8093F100898D8093F1008A8DB4 -:101200008093F1008091E8008E778093E800B5DC50 -:1012100052C080915C02813209F04DC08091E8009B -:10122000877F8093E80004C08EB3882309F443C00D -:101230008091E80082FFF8CF3091F1002091F10019 -:101240009091F1008091F1003C8B2D8B9E8B8F8BC8 -:101250008091F100888F8091F100898F8091F10059 -:101260008A8F8091E8008B778093E80086DCCE013E -:10127000D0D921C080915C028132E9F48091E800EC -:10128000877F8093E80079DC80915E0290915F0215 -:10129000998B888BCE01D4D00EC080915C028132B4 -:1012A00051F48091E800877F8093E80066DCCE01EE -:1012B00060915E02C5D0DF91CF910895CF93DF9307 -:1012C000EC014096FC018BE0DF011D928A95E9F765 -:1012D00082E08C83898783E08E87CE01019661E06E -:1012E00008DC882359F0CE01069661E002DC8823F1 -:1012F00029F0CE010B9661E0FCDB01C080E0DF91BC -:10130000CF910895DF93CF930F92CDB7DEB7FC0155 -:101310008EB38430F9F4248935894689578921159B -:10132000310541055105B1F081818F708093E9004D -:101330008091E80085FD0AC08091E8008E77809357 -:10134000E800698339DC6981882329F46093F1001E -:1013500080E001C082E00F90CF91DF910895FC0101 -:101360008EB3843019F5248935894689578921152A -:10137000310541055105D1F081818F708093E900DD -:101380008091F2008823A1F09091E8008091E8001C -:101390008E778093E80095FD0DC00EDC882359F40C -:1013A0009091E8009E779093E800089582E0089578 -:1013B00080E0089580E008952EB3243099F4FC0174 -:1013C00024893589468957892115310541055105FB -:1013D00049F021812F702093E9002091E80020FF3F -:1013E00001C0BDCF0895FC018EB3843029F5248956 -:1013F0003589468957892115310541055105E1F0A7 -:1014000086818F708093E9008091E80082FF14C08C -:101410008091F200882321F02091F10030E002C099 -:101420002FEF3FEF8091F200882341F48091E80094 -:101430008B778093E80002C02FEF3FEFC90108953A -:1014400008955058BB27AA270ED070C161D130F043 -:1014500066D120F031F49F3F11F41EF456C10EF412 -:10146000E095E7FB4CC1E92F72D180F3BA17620710 -:1014700073078407950718F071F49EF58AC10EF47E -:10148000E0950B2EBA2FA02D0B01B90190010C0194 -:10149000CA01A0011124FF27591B99F0593F50F4AC -:1014A000503E68F11A16F040A22F232F342F442704 -:1014B000585FF3CF469537952795A795F0405395FC -:1014C000C9F77EF41F16BA0B620B730B840BBAF0CC -:1014D0009150A1F0FF0FBB1F661F771F881FC2F737 -:1014E0000EC0BA0F621F731F841F48F4879577954B -:1014F0006795B795F7959E3F08F0B3CF9395880F02 -:1015000008F09927EE0F979587950895D4D008F4A1 -:1015100081E008950CD00AC102D140F0F9D030F03A -:1015200021F45F3F19F0EBC0511134C1EEC00FD16F -:1015300098F39923C9F35523B1F3951B550BBB279A -:10154000AA2762177307840738F09F5F5F4F220F47 -:10155000331F441FAA1FA9F333D00E2E3AF0E0E840 -:1015600030D091505040E695001CCAF729D0FE2F8C -:1015700027D0660F771F881FBB1F2617370748071E -:10158000AB07B0E809F0BB0B802DBF01FF279358D4 -:101590005F4F2AF09E3F510568F0B1C0FBC05F3F2E -:1015A000ECF3983EDCF3869577956795B795F795BC -:1015B0009F5FC9F7880F911D9695879597F90895B4 -:1015C000E1E0660F771F881FBB1F62177307840750 -:1015D000BA0720F0621B730B840BBA0BEE1F88F75F -:1015E000E0950895BCD088F09F5790F0B92F9927C7 -:1015F000B751A0F0D1F0660F771F881F991F1AF01E -:10160000BA95C9F712C0B13081F0C3D0B1E00895E6 -:10161000C0C0672F782F8827B85F39F0B93FCCF367 -:10162000869577956795B395D9F73EF49095809513 -:10163000709561957F4F8F4F9F4F0895E89409C033 -:1016400097FB3EF490958095709561957F4F8F4FF5 -:101650009F4F9923A9F0F92F96E9BB279395F6950B -:10166000879577956795B795F111F8CFFAF4BB0F89 -:1016700011F460FF1BC06F5F7F4F8F4F9F4F16C0ED -:10168000882311F096E911C0772321F09EE8872F77 -:10169000762F05C0662371F096E8862F70E060E033 -:1016A0002AF09A95660F771F881FDAF7880F9695AC -:1016B000879597F90895990F0008550FAA0BE0E850 -:1016C000FEEF16161706E807F907C0F01216130604 -:1016D000E407F50798F0621B730B840B950B39F444 -:1016E0000A2661F0232B242B252B21F408950A26AA -:1016F00009F4A140A6958FEF811D811D089597F9EA -:101700009F6780E870E060E008959FEF80EC0895A7 -:1017100000240A94161617061806090608950024D0 -:101720000A9412161306140605060895092E03944A -:10173000000C11F4882352F0BB0F40F4BF2B11F4BE -:1017400060FF04C06F5F7F4F8F4F9F4F089557FD1D -:101750009058440F551F59F05F3F71F04795880F1F -:1017600097FB991F61F09F3F79F0879508951216B6 -:1017700013061406551FF2CF4695F1DF08C0161662 -:1017800017061806991FF1CF869571056105089413 -:101790000895E894BB2766277727CB0197F908952A -:1017A0008ADF08F48FEF0895A1E21A2EAA1BBB1B53 -:1017B000FD010DC0AA1FBB1FEE1FFF1FA217B3071D -:1017C000E407F50720F0A21BB30BE40BF50B661F33 -:1017D000771F881F991F1A9469F7609570958095F7 -:1017E00090959B01AC01BD01CF010895F894FFCF06 -:1017F000785F706F733A200009795F706F733A20D9 -:10180000000D000083100000010410000001820898 -:101810000000010000000000000000000000302077 +:100470005F02E4DE809369028091690208958BE354 +:1004800080935F0283E68093600284E08093610240 +:10049000D5DE8DE380935F02D1DE89E380935F0236 +:1004A00010926602CBCE80916402282F30E0207734 +:1004B0003070359527958770822B089520916302BF +:1004C00030E027703070322F2227330F330F8091A6 +:1004D000620290E0877090709695982F8827979584 +:1004E0008795282B392B8091610290E08F7790704F +:1004F000282B392BC90108952091630230E0207721 +:100500003070E6E0220F331FEA95E1F78091620236 +:1005100090E08077907073E0880F991F7A95E1F7EB +:10052000282B392B8091600290E08F779070282BD8 +:10053000392BC90108951F938FB7F89420914C016E +:1005400030914D018FBF80914A0190914B01281746 +:10055000390749F085E291E061D7BC0197FD03C0FE +:1005600082E491E005DE2FB7F8948091D801909154 +:10057000D9012FBF009701F1209126012F70209300 +:10058000E9002091E80020FF17C08031910510F0AC +:100590008FE090E0182F0EC0E091D001F091D101D2 +:1005A00085E291E06081C9D61150882329F48EEC50 +:1005B00091E0F9DD112381F72FB7F89480914C0178 +:1005C00090914D012FBF009749F082E491E0EBDD5F +:1005D0009091C80095FFFCCF8093CE0085E291E01A +:1005E00006D7C0D51F91089584B7877F84BF88E15F +:1005F0000FB6F89480936000109260000FBE90E0F8 +:1006000080E80FB6F89480936100909361000FBE6C +:1006100059C30895089585E291E06BC685E291E0A3 +:10062000BCC51F920F920FB60F9211242F933F93C8 +:100630004F935F936F937F938F939F93AF93BF93EA +:10064000EF93FF936091CE008EB3843019F48EEC5B +:1006500091E08EDDFF91EF91BF91AF919F918F91CE +:100660007F916F915F914F913F912F910F900FBEAE +:100670000F901F9018958F929F92AF92BF92CF923A +:10068000DF92EF92FF921F93FC01A18DA150A23047 +:1006900028F4B0E0A05CBE4F1C9101C010E0808D3A +:1006A000823009F41860828D873031F0883031F063 +:1006B000863029F4126003C0146001C016601092E5 +:1006C000C9001092C8001092CA00C488D588E68874 +:1006D000F788C701B6019695879577956795C9D72D +:1006E00020E034E244EF59E4C8D64B015C01C70175 +:1006F000B601BFD79B01AC01C501B40126D720E0EC +:1007000030E040E85FE3B8D688D77093CD006093BF +:10071000CC001093CA0082E08093C80088E98093DF +:10072000C9001F91FF90EF90DF90CF90BF90AF90E6 +:100730009F908F900895682F8EB3843019F48EECBB +:1007400091E016CD0895EF92FF92CF93DF93E82EBC +:10075000E7017E01F92EE70101C0EDDF89918823D1 +:10076000E1F7DF91CF91FF90EF9008952F923F92A4 +:100770004F925F926F927F928F929F92AF92BF92B1 +:10078000CF92DF92EF92FF920F931F93CF93DF935D +:100790007B018C01822F90E0FA01E80FF91F108293 +:1007A000D22EDA944D2C552447FC5094EA01C40D06 +:1007B000D51DAA24BB24BAE06B2E712C812C912C60 +:1007C0001C01089421083108A0E2CA2E20C0E114BF +:1007D000F1040105110541F4C501840D951D821533 +:1007E000930514F4C88207C0C801B701A40193019E +:1007F000F6D7605D6883C801B701A4019301EFD704 +:1008000079018A01DA9421970894A108B108D7FEEA +:10081000DECFDF91CF911F910F91FF90EF90DF908E +:10082000CF90BF90AF909F908F907F906F905F9090 +:100830004F903F902F900895FF920F931F93DF9357 +:10084000CF93CDB7DEB760970FB6F894DEBF0FBE7B +:10085000CDBFCADE82E491E06EE471E0BDDC8EECD7 +:1008600091E06AED71E0B8DC7894F8DD8FEF99E6FD +:10087000A8E181509040A040E1F700C000007894CA +:10088000FEDD8FEF99E6A8E181509040A040E1F7AE +:1008900000C00000FF248E010F5F1F4F4CDEF39459 +:1008A000E9F7E4DD80E091E04EDF08DEBC0180E0A6 +:1008B00090E0A80124E05ADFC80145DF88E091E01C +:1008C00042DF1ADEBC0180E090E0A80124E04EDFA8 +:1008D000C80139DF83E191E036DFE5DD682F70E0A4 +:1008E00080E090E0A80124E041DFC8012CDF83E232 +:1008F00091E029DFD3CF923029F0933041F091304D +:10090000E9F417C02EE330E0EAEAF0E01BC08130E2 +:1009100041F0813018F0823089F406C0E8EEF0E052 +:1009200005C0ECEEF0E002C0E6E0F1E0249130E03A +:1009300009C022E130E0E8E9F0E004C020E030E066 +:10094000E0E0F0E0DA011196FC93EE93C90108951E +:10095000282F392FF9018091740290917502861722 +:10096000970718F4BC0120E034C061157105D9F770 +:100970008091E8008E778093E800F5CF8EB38823CE +:10098000E9F18530B9F18091E80083FD35C08091AF +:10099000E80082FD29C08091E80080FF1AC08091A4 +:1009A000F20090E006C021912093F1006150704068 +:1009B00001966115710519F088309105A0F321E0C9 +:1009C0008830910509F020E08091E8008E778093CF +:1009D000E8006115710591F6222381F605C08EB3FA +:1009E000882361F0853061F08091E80082FFF7CFC5 +:1009F00080E0089583E0089581E0089582E00895FD +:100A000083E00895E82FF92F809174029091750288 +:100A10008617970718F4BC0120E036C061157105F0 +:100A2000D9F78091E8008E778093E800F5CF8EB3F8 +:100A3000882309F43EC08530C1F18091E80083FD30 +:100A400036C08091E80082FD2AC08091E80080FFD6 +:100A50001BC08091F20090E007C024912093F10028 +:100A600031966150704001966115710519F088301A +:100A7000910598F321E08830910509F020E08091FC +:100A8000E8008E778093E8006115710581F62223D6 +:100A900071F605C08EB3882361F0853061F08091D6 +:100AA000E80082FFF7CF80E0089583E0089581E0B9 +:100AB000089582E0089583E00895982F2CC0292F8F +:100AC0002F702093E900981739F07091EC00209175 +:100AD000ED005091F00003C0242F762F50E021FF4D +:100AE00019C03091EB003E7F3093EB003091ED0068 +:100AF0003D7F3093ED003091EB0031603093EB009F +:100B00007093EC002093ED005093F0002091EE00E4 +:100B100027FF08C09F5F953090F28F708093E900A7 +:100B200081E0089580E00895EF92FF920F931F9364 +:100B3000CF93DF93162FE82EE7017E01F92EE70110 +:100B400000E02AC09881992329F16B81E981FA811B +:100B50002C81892F8F70853018F56295660F660F8E +:100B6000607C991F9927991F692B223010F096E01D +:100B700001C092E028E030E040E003C04F5F220F68 +:100B8000331F2E173F07D0F34295407F492B95DF47 +:100B9000882331F00F5F25960117A0F281E001C094 +:100BA00080E0DF91CF911F910F91FF90EF9008951A +:100BB00080916E0287FF11C003C08EB38823B1F00D +:100BC0008091E80082FFF9CF8091E8008B778093D5 +:100BD000E80008958EB3882349F08091E80080FFF3 +:100BE000F9CF8091E8008E778093E8000895809196 +:100BF000E4009091E50044E62091EC0020FF25C040 +:100C00002091E80020FD15C02EB32223A1F025304D +:100C1000A1F02091EB0025FD12C02091E40030915D +:100C2000E5002817390741F3442359F04150C90121 +:100C3000E3CF80E0089582E0089583E0089581E0A5 +:100C4000089584E0089580E008952091E80022FF4F +:100C5000DBCFF9CF40D042D08091D8008F778093FE +:100C6000D8008091D80080688093D8008091D80007 +:100C70008F7D8093D80084E089BD86E089BD09B46A +:100C800000FEFDCF1EBA10926A0210926C02109202 +:100C90006B0280E060E042E010DF8091E1008E7F37 +:100CA0008093E1008091E20081608093E200809176 +:100CB000E20088608093E2008091E0008E7F809364 +:100CC000E0000895E3E6F0E080818E7F808381E09C +:100CD00080936D02BFCF1092E20008951092E10060 +:100CE00008951F920F920FB60F9211242F933F93E6 +:100CF0004F935F936F937F938F939F93AF93BF9324 +:100D0000EF93FF938091E10082FF0AC08091E2009F +:100D100082FF06C08091E1008B7F8093E10021D2A9 +:100D20008091E10080FF16C08091E20080FF12C038 +:100D30008091E2008E7F8093E2008091E2008061EA +:100D40008093E2008091D80080628093D80019BC23 +:100D50001EBA60DC8091E10084FF2CC08091E2002B +:100D600084FF28C084E089BD86E089BD09B400FE07 +:100D7000FDCF8091D8008F7D8093D8008091E100D5 +:100D80008F7E8093E1008091E2008F7E8093E2006D +:100D90008091E20081608093E20080916A02882362 +:100DA00021F48091E30087FF02C084E001C081E06C +:100DB0008EBB2FDC8091E10083FF26C08091E20092 +:100DC00083FF22C08091E100877F8093E10082E071 +:100DD0008EBB10926A028091E1008E7F8093E100C9 +:100DE0008091E2008E7F8093E2008091E20080613A +:100DF0008093E20080E060E042E05FDE8091F000FE +:100E000088608093F000ADD1FF91EF91BF91AF91D9 +:100E10009F918F917F916F915F914F913F912F9112 +:100E20000F900FBE0F901F9018951F920F920FB644 +:100E30000F9211241F932F933F934F935F936F93C0 +:100E40007F938F939F93AF93BF93EF93FF931091F3 +:100E5000E9001F708091EC001092E9008091F00091 +:100E6000877F8093F00078941BD01092E9008091E6 +:100E7000F00088608093F0001093E900FF91EF91FB +:100E8000BF91AF919F918F917F916F915F914F91A2 +:100E90003F912F911F910F900FBE0F901F901895AB +:100EA0001F93DF93CF93CDB7DEB7AC970FB6F8940F +:100EB000DEBF0FBECDBFEEE6F2E08091F100819380 +:100EC00022E0E637F207C9F7A9DB8091E80083FF4B +:100ED00030C180916E0220916F02253009F484C0E8 +:100EE000263040F42130A1F1213070F0233009F098 +:100EF00020C12EC0283009F4EFC0293009F4FEC00B +:100F0000263009F016C192C0803821F0823809F0ED +:100F100010C108C080916B0290916C02992371F00E +:100F200082600CC0809172028F708093E900909172 +:100F3000EB0081E095FF80E01092E9009091E800DD +:100F4000977F9093E8008093F1001092F100CFC05A +:100F5000882319F0823009F0ECC090E08F71907016 +:100F6000009729F08230910509F0E3C00BC0809111 +:100F70007002813009F0DDC0233009F080E08093F9 +:100F80006C022CC080917002882341F5209172027E +:100F90002F7009F4CEC02093E9008091EB0080FF10 +:100FA0001DC080916F02833021F48091EB0080623C +:100FB00013C08091EB0080618093EB0081E090E0B2 +:100FC00002C0880F991F2A95E2F78093EA001092D9 +:100FD000EA008091EB0088608093EB001092E900BA +:100FE0008091E800877F86C0882309F0A2C0109115 +:100FF00070021F778091E3008078812B8093E3005B +:101000008091E800877F8093E800D2DD8091E8003E +:1010100080FFFCCF8091E30080688093E300112380 +:1010200011F083E001C082E08EBB83C08058823023 +:1010300008F07FC0809170029091710223E08C3D96 +:10104000920791F583E08C838AE28B835FB7F894F3 +:10105000DE01159680E090E04EE061E2E42FF0E0E2 +:1010600060935700E49180FF03C0E295EF704F5FFB +:10107000EF702E2F30E0EA3018F0295C3F4F02C0AD +:10108000205D3F4F2D933D9301968431910531F7BB +:101090005FBF8091E800877F8093E800CE010396D0 +:1010A0006AE270E055DC12C060917202AE014F5FDF +:1010B0005F4F21DCBC01009709F43BC08091E80040 +:1010C000877F8093E80089819A819CDC8091E80089 +:1010D0008B778093E8002DC0803859F58091E80027 +:1010E000877F8093E80080916A028093F10080916D +:1010F000E8008E778093E8005BDD1BC08823C9F48D +:10110000909170029230A8F48091E800877F8093DC +:10111000E80090936A024CDD80916A02882321F4F2 +:101120008091E30087FF02C084E001C081E08EBBB4 +:1011300072DA8091E80083FF0AC08091E800877F1F +:101140008093E8008091EB0080628093EB00AC9686 +:101150000FB6F894DEBF0FBECDBFCF91DF911F91C8 +:10116000089508951F938EB38823A9F08091E90014 +:101170008F709091EC0090FF02C010E801C010E069 +:10118000182B1092E9008091E80083FF01C088DEEF +:101190001F701093E9001F910895CF93DF93EC0126 +:1011A0008091E80083FFA2C0888190E020917202C4 +:1011B000309173022817390709F098C080916F02A7 +:1011C000813269F0823220F4803209F08FC03CC055 +:1011D000823209F46AC0833209F088C079C08091F4 +:1011E0006E02813A09F082C08091E800877F809387 +:1011F000E8008091E80080FFFCCF8C899D89AE8952 +:10120000BF898093F100292F3A2F4B2F5527209328 +:10121000F1009D01442755272093F1008B2F99273A +:10122000AA27BB278093F100888D8093F100898DD8 +:101230008093F1008A8D8093F1008091E8008E7791 +:101240008093E800B5DC52C080916E02813209F0D3 +:101250004DC08091E800877F8093E80004C08EB382 +:10126000882309F443C08091E80082FFF8CF3091D1 +:10127000F1002091F1009091F1008091F1003C8B00 +:101280002D8B9E8B8F8B8091F100888F8091F10048 +:10129000898F8091F1008A8F8091E8008B7780930D +:1012A000E80086DCCE01E7D921C080916E02813250 +:1012B000E9F48091E800877F8093E80079DC8091F1 +:1012C000700290917102998B888BCE01D4D00EC0A0 +:1012D00080916E02813251F48091E800877F809383 +:1012E000E80066DCCE0160917002C5D0DF91CF913D +:1012F0000895CF93DF93EC014096FC018BE0DF0172 +:101300001D928A95E9F782E08C83898783E08E8736 +:10131000CE01019661E008DC882359F0CE010696E3 +:1013200061E002DC882329F0CE010B9661E0FCDB52 +:1013300001C080E0DF91CF910895DF93CF930F92AA +:10134000CDB7DEB7FC018EB38430F9F4248935893A +:10135000468957892115310541055105B1F0818133 +:101360008F708093E9008091E80085FD0AC080912C +:10137000E8008E778093E800698339DC69818823EF +:1013800029F46093F10080E001C082E00F90CF91DA +:10139000DF910895FC018EB3843019F524893589D5 +:1013A000468957892115310541055105D1F08181C3 +:1013B0008F708093E9008091F2008823A1F09091D2 +:1013C000E8008091E8008E778093E80095FD0DC0DD +:1013D0000EDC882359F49091E8009E779093E80002 +:1013E000089582E0089580E0089580E008952EB386 +:1013F000243099F4FC0124893589468957892115BF +:1014000031054105510549F021812F702093E900F4 +:101410002091E80020FF01C0BDCF0895FC018EB3EC +:10142000843029F524893589468957892115310564 +:1014300041055105E1F086818F708093E90080912C +:10144000E80082FF14C08091F200882321F02091EF +:10145000F10030E002C02FEF3FEF8091F2008823CF +:1014600041F48091E8008B778093E80002C02FEF71 +:101470003FEFC901089508955058BB27AA270ED001 +:1014800070C161D130F066D120F031F49F3F11F48A +:101490001EF456C10EF4E095E7FB4CC1E92F72D162 +:1014A00080F3BA17620773078407950718F071F481 +:1014B0009EF58AC10EF4E0950B2EBA2FA02D0B01DC +:1014C000B90190010C01CA01A0011124FF27591B89 +:1014D00099F0593F50F4503E68F11A16F040A22F8F +:1014E000232F342F4427585FF3CF46953795279500 +:1014F000A795F0405395C9F77EF41F16BA0B620BFF +:10150000730B840BBAF09150A1F0FF0FBB1F661F45 +:10151000771F881FC2F70EC0BA0F621F731F841F88 +:1015200048F4879577956795B795F7959E3F08F0AE +:10153000B3CF9395880F08F09927EE0F979587956D +:101540000895D4D008F481E008950CD00AC102D1E6 +:1015500040F0F9D030F021F45F3F19F0EBC05111A9 +:1015600034C1EEC00FD198F39923C9F35523B1F3D9 +:10157000951B550BBB27AA2762177307840738F002 +:101580009F5F5F4F220F331F441FAA1FA9F333D061 +:101590000E2E3AF0E0E830D091505040E695001C15 +:1015A000CAF729D0FE2F27D0660F771F881FBB1FD1 +:1015B000261737074807AB07B0E809F0BB0B802DAB +:1015C000BF01FF2793585F4F2AF09E3F510568F0F7 +:1015D000B1C0FBC05F3FECF3983EDCF38695779596 +:1015E0006795B795F7959F5FC9F7880F911D9695F9 +:1015F000879597F90895E1E0660F771F881FBB1F55 +:10160000621773078407BA0720F0621B730B840B01 +:10161000BA0BEE1F88F7E0950895BCD088F09F576D +:1016200090F0B92F9927B751A0F0D1F0660F771F2E +:10163000881F991F1AF0BA95C9F712C0B13081F00E +:10164000C3D0B1E00895C0C0672F782F8827B85F56 +:1016500039F0B93FCCF3869577956795B395D9F76F +:101660003EF490958095709561957F4F8F4F9F4F79 +:101670000895E89409C097FB3EF490958095709585 +:1016800061957F4F8F4F9F4F9923A9F0F92F96E9CE +:10169000BB279395F695879577956795B795F11143 +:1016A000F8CFFAF4BB0F11F460FF1BC06F5F7F4FE0 +:1016B0008F4F9F4F16C0882311F096E911C07723F2 +:1016C00021F09EE8872F762F05C0662371F096E8FB +:1016D000862F70E060E02AF09A95660F771F881FCA +:1016E000DAF7880F9695879597F90895990F00086E +:1016F000550FAA0BE0E8FEEF16161706E807F907E4 +:10170000C0F012161306E407F50798F0621B730B7E +:10171000840B950B39F40A2661F0232B242B252BFF +:1017200021F408950A2609F4A140A6958FEF811DA2 +:10173000811D089597F99F6780E870E060E0089543 +:101740009FEF80EC089500240A94161617061806D9 +:101750000906089500240A941216130614060506B5 +:101760000895092E0394000C11F4882352F0BB0F46 +:1017700040F4BF2B11F460FF04C06F5F7F4F8F4FA9 +:101780009F4F089557FD9058440F551F59F05F3FE4 +:1017900071F04795880F97FB991F61F09F3F79F093 +:1017A00087950895121613061406551FF2CF469515 +:1017B000F1DF08C0161617061806991FF1CF869597 +:1017C0007105610508940895E894BB27662777277B +:1017D000CB0197F908958ADF08F48FEF0895A1E20D +:1017E0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F9B +:1017F000FF1FA217B307E407F50720F0A21BB30BE6 +:10180000E40BF50B661F771F881F991F1A9469F761 +:1018100060957095809590959B01AC01BD01CF01BD +:061820000895F894FFCFCB +:10182600785F706F733A2000202020795F706F73A5 +:101836003A20002020207A5F707265737375726596 +:101846003A20000D00008310000001041000000182 +:1018560082080000010000000000000000000000F7 +:02186600302030 :00000001FF diff --git a/firmware/USBtoSerial.lss b/firmware/USBtoSerial.lss index c0381d3..e1da980 100644 --- a/firmware/USBtoSerial.lss +++ b/firmware/USBtoSerial.lss @@ -3,35 +3,35 @@ USBtoSerial.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000030 00800100 000017f0 00001884 2**0 + 0 .data 00000042 00800100 00001826 000018ba 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 000017f0 00000000 00000000 00000094 2**1 + 1 .text 00001826 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000134 00800130 00800130 000018b4 2**0 + 2 .bss 00000134 00800142 00800142 000018fc 2**0 ALLOC - 3 .stab 0000228c 00000000 00000000 000018b4 2**2 + 3 .stab 0000228c 00000000 00000000 000018fc 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 0000044f 00000000 00000000 00003b40 2**0 + 4 .stabstr 0000044f 00000000 00000000 00003b88 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 00000538 00000000 00000000 00003f8f 2**0 + 5 .debug_aranges 00000538 00000000 00000000 00003fd7 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000e11 00000000 00000000 000044c7 2**0 + 6 .debug_pubnames 00000e11 00000000 00000000 0000450f 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00008caa 00000000 00000000 000052d8 2**0 + 7 .debug_info 00008cb1 00000000 00000000 00005320 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 000021b9 00000000 00000000 0000df82 2**0 + 8 .debug_abbrev 000021ca 00000000 00000000 0000dfd1 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 000075c3 00000000 00000000 0001013b 2**0 + 9 .debug_line 0000757d 00000000 00000000 0001019b 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000830 00000000 00000000 00017700 2**2 + 10 .debug_frame 00000830 00000000 00000000 00017718 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00003bf7 00000000 00000000 00017f30 2**0 + 11 .debug_str 00003bf7 00000000 00000000 00017f48 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 0000462f 00000000 00000000 0001bb27 2**0 + 12 .debug_loc 0000457e 00000000 00000000 0001bb3f 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_pubtypes 00001111 00000000 00000000 00020156 2**0 + 13 .debug_pubtypes 00001111 00000000 00000000 000200bd 2**0 CONTENTS, READONLY, DEBUGGING - 14 .debug_ranges 00000790 00000000 00000000 00021267 2**0 + 14 .debug_ranges 00000790 00000000 00000000 000211ce 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -71,9 +71,9 @@ Disassembly of section .text: 26: 00 00 nop 28: a2 c0 rjmp .+324 ; 0x16e <__bad_interrupt> 2a: 00 00 nop - 2c: 3f c6 rjmp .+3198 ; 0xcac <__vector_11> + 2c: 5a c6 rjmp .+3252 ; 0xce2 <__vector_11> 2e: 00 00 nop - 30: e1 c6 rjmp .+3522 ; 0xdf4 <__vector_12> + 30: fc c6 rjmp .+3576 ; 0xe2a <__vector_12> 32: 00 00 nop 34: 9c c0 rjmp .+312 ; 0x16e <__bad_interrupt> 36: 00 00 nop @@ -95,7 +95,7 @@ Disassembly of section .text: 56: 00 00 nop 58: 8a c0 rjmp .+276 ; 0x16e <__bad_interrupt> 5a: 00 00 nop - 5c: b0 c2 rjmp .+1376 ; 0x5be <__vector_23> + 5c: e2 c2 rjmp .+1476 ; 0x622 <__vector_23> 5e: 00 00 nop 60: 86 c0 rjmp .+268 ; 0x16e <__bad_interrupt> 62: 00 00 nop @@ -160,18 +160,18 @@ Disassembly of section .text: 142: 11 e0 ldi r17, 0x01 ; 1 144: a0 e0 ldi r26, 0x00 ; 0 146: b1 e0 ldi r27, 0x01 ; 1 - 148: e0 ef ldi r30, 0xF0 ; 240 - 14a: f7 e1 ldi r31, 0x17 ; 23 + 148: e6 e2 ldi r30, 0x26 ; 38 + 14a: f8 e1 ldi r31, 0x18 ; 24 14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10> 14e: 05 90 lpm r0, Z+ 150: 0d 92 st X+, r0 - 152: a0 33 cpi r26, 0x30 ; 48 + 152: a2 34 cpi r26, 0x42 ; 66 154: b1 07 cpc r27, r17 156: d9 f7 brne .-10 ; 0x14e <__do_copy_data+0xc> 00000158 <__do_clear_bss>: 158: 12 e0 ldi r17, 0x02 ; 2 - 15a: a0 e3 ldi r26, 0x30 ; 48 + 15a: a2 e4 ldi r26, 0x42 ; 66 15c: b1 e0 ldi r27, 0x01 ; 1 15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start> @@ -179,11 +179,11 @@ Disassembly of section .text: 160: 1d 92 st X+, r1 00000162 <.do_clear_bss_start>: - 162: a4 36 cpi r26, 0x64 ; 100 + 162: a6 37 cpi r26, 0x76 ; 118 164: b1 07 cpc r27, r17 166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop> - 168: 37 d3 rcall .+1646 ; 0x7d8
- 16a: 0c 94 f6 0b jmp 0x17ec ; 0x17ec <_exit> + 168: 67 d3 rcall .+1742 ; 0x838
+ 16a: 0c 94 11 0c jmp 0x1822 ; 0x1822 <_exit> 0000016e <__bad_interrupt>: 16e: 48 cf rjmp .-368 ; 0x0 <__vectors> @@ -394,9 +394,9 @@ ISR( TIMER0_OVF_vect) { 20a: 11 24 eor r1, r1 20c: 8f 93 push r24 t0ovfcount++; - 20e: 80 91 56 02 lds r24, 0x0256 + 20e: 80 91 68 02 lds r24, 0x0268 212: 8f 5f subi r24, 0xFF ; 255 - 214: 80 93 56 02 sts 0x0256, r24 + 214: 80 93 68 02 sts 0x0268, r24 } 218: 8f 91 pop r24 21a: 0f 90 pop r0 @@ -410,7 +410,7 @@ ISR( TIMER0_OVF_vect) { uint16_t t0ext(void) { return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value 224: 86 b5 in r24, 0x26 ; 38 - 226: 30 91 56 02 lds r19, 0x0256 + 226: 30 91 68 02 lds r19, 0x0268 22a: 20 e0 ldi r18, 0x00 ; 0 22c: 28 0f add r18, r24 22e: 31 1d adc r19, r1 @@ -425,7 +425,7 @@ void t0rst(void) { TCNT0 = 0; // set counter to zero 234: 16 bc out 0x26, r1 ; 38 t0ovfcount = 0; // set overflow counter to zero - 236: 10 92 56 02 sts 0x0256, r1 + 236: 10 92 68 02 sts 0x0268, r1 } 23a: 08 95 ret @@ -463,12 +463,12 @@ u08 adb(void) { 256: bc 01 movw r22, r24 258: 80 e0 ldi r24, 0x00 ; 0 25a: 90 e0 ldi r25, 0x00 ; 0 - 25c: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 25c: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 260: 20 e0 ldi r18, 0x00 ; 0 262: 30 e8 ldi r19, 0x80 ; 128 264: 4e e0 ldi r20, 0x0E ; 14 266: 53 e4 ldi r21, 0x43 ; 67 - 268: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 268: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 26c: 87 fd sbrc r24, 7 26e: f2 cf rjmp .-28 ; 0x254 ; // Warteschleife @@ -495,12 +495,12 @@ u08 adb(void) { 282: bc 01 movw r22, r24 284: 80 e0 ldi r24, 0x00 ; 0 286: 90 e0 ldi r25, 0x00 ; 0 - 288: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 288: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 28c: 20 e0 ldi r18, 0x00 ; 0 28e: 30 e0 ldi r19, 0x00 ; 0 290: 4c e8 ldi r20, 0x8C ; 140 292: 52 e4 ldi r21, 0x42 ; 66 - 294: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 294: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 298: 87 fd sbrc r24, 7 29a: f2 cf rjmp .-28 ; 0x280 ; @@ -513,12 +513,12 @@ u08 adb(void) { 2a2: bc 01 movw r22, r24 2a4: 80 e0 ldi r24, 0x00 ; 0 2a6: 90 e0 ldi r25, 0x00 ; 0 - 2a8: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 2a8: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 2ac: 20 e0 ldi r18, 0x00 ; 0 2ae: 30 e0 ldi r19, 0x00 ; 0 2b0: 48 e4 ldi r20, 0x48 ; 72 2b2: 53 e4 ldi r21, 0x43 ; 67 - 2b4: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 2b4: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 2b8: 87 fd sbrc r24, 7 2ba: f2 cf rjmp .-28 ; 0x2a0 2bc: 41 c0 rjmp .+130 ; 0x340 @@ -535,7 +535,7 @@ u08 adb(void) { if (adb_werte[z_byte] & bitpos) 2c4: e1 2e mov r14, r17 2c6: ff 24 eor r15, r15 - 2c8: 8d e4 ldi r24, 0x4D ; 77 + 2c8: 8f e5 ldi r24, 0x5F ; 95 2ca: 92 e0 ldi r25, 0x02 ; 2 2cc: e8 0e add r14, r24 2ce: f9 1e adc r15, r25 @@ -560,12 +560,12 @@ u08 adb(void) { 2e0: bc 01 movw r22, r24 2e2: 80 e0 ldi r24, 0x00 ; 0 2e4: 90 e0 ldi r25, 0x00 ; 0 - 2e6: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 2e6: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 2ea: 20 e0 ldi r18, 0x00 ; 0 2ec: 30 e0 ldi r19, 0x00 ; 0 2ee: 4c e8 ldi r20, 0x8C ; 140 2f0: 52 e4 ldi r21, 0x42 ; 66 - 2f2: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 2f2: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 2f6: 87 fd sbrc r24, 7 2f8: f2 cf rjmp .-28 ; 0x2de 2fa: 0e c0 rjmp .+28 ; 0x318 @@ -576,12 +576,12 @@ u08 adb(void) { 2fe: bc 01 movw r22, r24 300: 80 e0 ldi r24, 0x00 ; 0 302: 90 e0 ldi r25, 0x00 ; 0 - 304: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 304: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 308: 20 e0 ldi r18, 0x00 ; 0 30a: 30 e0 ldi r19, 0x00 ; 0 30c: 42 e0 ldi r20, 0x02 ; 2 30e: 53 e4 ldi r21, 0x43 ; 67 - 310: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 310: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 314: 87 fd sbrc r24, 7 316: f2 cf rjmp .-28 ; 0x2fc ; @@ -594,12 +594,12 @@ u08 adb(void) { 31e: bc 01 movw r22, r24 320: 80 e0 ldi r24, 0x00 ; 0 322: 90 e0 ldi r25, 0x00 ; 0 - 324: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 324: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 328: 20 e0 ldi r18, 0x00 ; 0 32a: 30 e0 ldi r19, 0x00 ; 0 32c: 48 e4 ldi r20, 0x48 ; 72 32e: 53 e4 ldi r21, 0x43 ; 67 - 330: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 330: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 334: 87 fd sbrc r24, 7 336: f2 cf rjmp .-28 ; 0x31c ADB_POUT |= ADB_BIT; @@ -637,12 +637,12 @@ u08 adb(void) { 34e: bc 01 movw r22, r24 350: 80 e0 ldi r24, 0x00 ; 0 352: 90 e0 ldi r25, 0x00 ; 0 - 354: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 354: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 358: 20 e0 ldi r18, 0x00 ; 0 35a: 30 e0 ldi r19, 0x00 ; 0 35c: 42 e0 ldi r20, 0x02 ; 2 35e: 53 e4 ldi r21, 0x43 ; 67 - 360: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 360: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 364: 87 fd sbrc r24, 7 366: f2 cf rjmp .-28 ; 0x34c ; @@ -655,19 +655,19 @@ u08 adb(void) { 36e: bc 01 movw r22, r24 370: 80 e0 ldi r24, 0x00 ; 0 372: 90 e0 ldi r25, 0x00 ; 0 - 374: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 374: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 378: 20 e0 ldi r18, 0x00 ; 0 37a: 30 e0 ldi r19, 0x00 ; 0 37c: 48 e4 ldi r20, 0x48 ; 72 37e: 53 e4 ldi r21, 0x43 ; 67 - 380: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 380: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 384: 87 fd sbrc r24, 7 386: f2 cf rjmp .-28 ; 0x36c ; // Entscheidung, ob noch weitere Daten übertragen werden if (adb_werte[0] == COM_LISTEN3) - 388: 80 91 4d 02 lds r24, 0x024D + 388: 80 91 5f 02 lds r24, 0x025F 38c: 8b 33 cpi r24, 0x3B ; 59 38e: 29 f0 breq .+10 ; 0x39a anzahl_out = 2 + 1; @@ -706,12 +706,12 @@ u08 adb(void) { 3a8: bc 01 movw r22, r24 3aa: 80 e0 ldi r24, 0x00 ; 0 3ac: 90 e0 ldi r25, 0x00 ; 0 - 3ae: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 3ae: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 3b2: 20 e0 ldi r18, 0x00 ; 0 3b4: 30 e0 ldi r19, 0x00 ; 0 3b6: 4a ef ldi r20, 0xFA ; 250 3b8: 53 e4 ldi r21, 0x43 ; 67 - 3ba: 0e 94 d0 0b call 0x17a0 ; 0x17a0 <__gesf2> + 3ba: 0e 94 eb 0b call 0x17d6 ; 0x17d6 <__gesf2> 3be: 18 16 cp r1, r24 3c0: 0c f4 brge .+2 ; 0x3c4 3c2: 42 c0 rjmp .+132 ; 0x448 @@ -723,7 +723,7 @@ u08 adb(void) { while (!(ADB_PIN & ADB_BIT)) 3c8: 48 9b sbis 0x09, 0 ; 9 3ca: fe cf rjmp .-4 ; 0x3c8 - 3cc: ce e4 ldi r28, 0x4E ; 78 + 3cc: c0 e6 ldi r28, 0x60 ; 96 3ce: d2 e0 ldi r29, 0x02 ; 2 3d0: 11 e0 ldi r17, 0x01 ; 1 3d2: 01 c0 rjmp .+2 ; 0x3d6 @@ -756,12 +756,12 @@ u08 adb(void) { 3e4: bc 01 movw r22, r24 3e6: 80 e0 ldi r24, 0x00 ; 0 3e8: 90 e0 ldi r25, 0x00 ; 0 - 3ea: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 3ea: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 3ee: 20 e0 ldi r18, 0x00 ; 0 3f0: 30 e0 ldi r19, 0x00 ; 0 3f2: 48 e4 ldi r20, 0x48 ; 72 3f4: 53 e4 ldi r21, 0x43 ; 67 - 3f6: 0e 94 d0 0b call 0x17a0 ; 0x17a0 <__gesf2> + 3f6: 0e 94 eb 0b call 0x17d6 ; 0x17d6 <__gesf2> 3fa: 18 16 cp r1, r24 3fc: 14 f4 brge .+4 ; 0x402 return (z_byte - 1); @@ -782,12 +782,12 @@ u08 adb(void) { 40e: bc 01 movw r22, r24 410: 80 e0 ldi r24, 0x00 ; 0 412: 90 e0 ldi r25, 0x00 ; 0 - 414: 0e 94 1e 0b call 0x163c ; 0x163c <__floatunsisf> + 414: 0e 94 39 0b call 0x1672 ; 0x1672 <__floatunsisf> 418: 20 e0 ldi r18, 0x00 ; 0 41a: 30 e0 ldi r19, 0x00 ; 0 41c: 48 ec ldi r20, 0xC8 ; 200 41e: 52 e4 ldi r21, 0x42 ; 66 - 420: 0e 94 86 0a call 0x150c ; 0x150c <__cmpsf2> + 420: 0e 94 a1 0a call 0x1542 ; 0x1542 <__cmpsf2> 424: 87 ff sbrs r24, 7 426: 03 c0 rjmp .+6 ; 0x42e adb_werte[z_byte] += bitpos; @@ -874,4855 +874,4817 @@ void touchpad_init(void) { uint8_t touchpad_read(void) { adb_werte[0] = COM_TALK0; 46c: 8c e3 ldi r24, 0x3C ; 60 - 46e: 80 93 4d 02 sts 0x024D, r24 + 46e: 80 93 5f 02 sts 0x025F, r24 adb_data_length = adb(); 472: e4 de rcall .-568 ; 0x23c - 474: 80 93 57 02 sts 0x0257, r24 + 474: 80 93 69 02 sts 0x0269, r24 return adb_data_length; - 478: 80 91 57 02 lds r24, 0x0257 + 478: 80 91 69 02 lds r24, 0x0269 } 47c: 08 95 ret -0000047e : +0000047e : -} - -void touchpad_set_rel_mode_200dpi(void) { - // Auf Relativmodus umschalten +void touchpad_set_abs_mode(void) { + // Auf Absolutmodus umschalten adb_werte[0] = COM_LISTEN3; 47e: 8b e3 ldi r24, 0x3B ; 59 - 480: 80 93 4d 02 sts 0x024D, r24 + 480: 80 93 5f 02 sts 0x025F, r24 adb_werte[1] = BITS(0110,0011); 484: 83 e6 ldi r24, 0x63 ; 99 - 486: 80 93 4e 02 sts 0x024E, r24 - adb_werte[2] = 2; //200 dpi mouse - 48a: 82 e0 ldi r24, 0x02 ; 2 - 48c: 80 93 4f 02 sts 0x024F, r24 + 486: 80 93 60 02 sts 0x0260, r24 + adb_werte[2] = 4; //CDM Modus + 48a: 84 e0 ldi r24, 0x04 ; 4 + 48c: 80 93 61 02 sts 0x0261, r24 + adb(); + 490: d5 de rcall .-598 ; 0x23c + + adb_werte[0] = COM_TALK1; + 492: 8d e3 ldi r24, 0x3D ; 61 + 494: 80 93 5f 02 sts 0x025F, r24 + adb(); // Werte holen + 498: d1 de rcall .-606 ; 0x23c + + adb_werte[0] = COM_LISTEN1; + 49a: 89 e3 ldi r24, 0x39 ; 57 + 49c: 80 93 5f 02 sts 0x025F, r24 + adb_werte[7] = 0x00; //Absolutmodus + 4a0: 10 92 66 02 sts 0x0266, r1 adb(); - } - 490: d5 ce rjmp .-598 ; 0x23c + 4a4: cb ce rjmp .-618 ; 0x23c -00000492 : - return ((adb_werte[4] & 0b01110000) << 6) - | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); -} +000004a6 : + adb(); -int8_t delta_y(void) { - if(adb_data_length ==0) { - 492: 80 91 57 02 lds r24, 0x0257 - 496: 88 23 and r24, r24 - 498: 51 f0 breq .+20 ; 0x4ae - return 0; - } - if (adb_werte[1] & 0b01000000) { - 49a: 80 91 4e 02 lds r24, 0x024E - 49e: 86 ff sbrs r24, 6 - 4a0: 04 c0 rjmp .+8 ; 0x4aa - return -((128 - adb_werte[1]) & 0b00111111); - 4a2: 81 95 neg r24 - 4a4: 8f 73 andi r24, 0x3F ; 63 - 4a6: 81 95 neg r24 - 4a8: 08 95 ret - } else { - return adb_werte[1] & 0b00111111; - 4aa: 8f 73 andi r24, 0x3F ; 63 - 4ac: 08 95 ret - | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); } -int8_t delta_y(void) { - if(adb_data_length ==0) { - return 0; - 4ae: 80 e0 ldi r24, 0x00 ; 0 - if (adb_werte[1] & 0b01000000) { - return -((128 - adb_werte[1]) & 0b00111111); - } else { - return adb_werte[1] & 0b00111111; - } +uint8_t z_pressure(void) { + return ((adb_werte[5] & 0b01110000) >> 1) | (adb_werte[5] & 0b00000111); + 4a6: 80 91 64 02 lds r24, 0x0264 + 4aa: 28 2f mov r18, r24 + 4ac: 30 e0 ldi r19, 0x00 ; 0 + 4ae: 20 77 andi r18, 0x70 ; 112 + 4b0: 30 70 andi r19, 0x00 ; 0 + 4b2: 35 95 asr r19 + 4b4: 27 95 ror r18 + 4b6: 87 70 andi r24, 0x07 ; 7 } - 4b0: 08 95 ret - -000004b2 : - -int8_t delta_x(void) { - if(adb_data_length ==0) { - 4b2: 80 91 57 02 lds r24, 0x0257 - 4b6: 88 23 and r24, r24 - 4b8: 51 f0 breq .+20 ; 0x4ce - return 0; - } - if (adb_werte[2] & 0b01000000) { - 4ba: 80 91 4f 02 lds r24, 0x024F - 4be: 86 ff sbrs r24, 6 - 4c0: 04 c0 rjmp .+8 ; 0x4ca - return -((128 - adb_werte[2]) & 0b00111111); - 4c2: 81 95 neg r24 - 4c4: 8f 73 andi r24, 0x3F ; 63 - 4c6: 81 95 neg r24 - 4c8: 08 95 ret - } else { - return adb_werte[2] & 0b00111111; - 4ca: 8f 73 andi r24, 0x3F ; 63 - 4cc: 08 95 ret - } + 4b8: 82 2b or r24, r18 + 4ba: 08 95 ret + +000004bc : + +uint16_t x_abs(void) { + return ((adb_werte[4] & 0b111) << 10) | ((adb_werte[3] & 0b111) << 7) + 4bc: 20 91 63 02 lds r18, 0x0263 + 4c0: 30 e0 ldi r19, 0x00 ; 0 + 4c2: 27 70 andi r18, 0x07 ; 7 + 4c4: 30 70 andi r19, 0x00 ; 0 + 4c6: 32 2f mov r19, r18 + 4c8: 22 27 eor r18, r18 + 4ca: 33 0f add r19, r19 + 4cc: 33 0f add r19, r19 + 4ce: 80 91 62 02 lds r24, 0x0262 + 4d2: 90 e0 ldi r25, 0x00 ; 0 + 4d4: 87 70 andi r24, 0x07 ; 7 + 4d6: 90 70 andi r25, 0x00 ; 0 + 4d8: 96 95 lsr r25 + 4da: 98 2f mov r25, r24 + 4dc: 88 27 eor r24, r24 + 4de: 97 95 ror r25 + 4e0: 87 95 ror r24 + 4e2: 28 2b or r18, r24 + 4e4: 39 2b or r19, r25 + | (adb_werte[2] & 0b01111111); + 4e6: 80 91 61 02 lds r24, 0x0261 + 4ea: 90 e0 ldi r25, 0x00 ; 0 + 4ec: 8f 77 andi r24, 0x7F ; 127 + 4ee: 90 70 andi r25, 0x00 ; 0 + 4f0: 28 2b or r18, r24 + 4f2: 39 2b or r19, r25 } + 4f4: c9 01 movw r24, r18 + 4f6: 08 95 ret -int8_t delta_x(void) { - if(adb_data_length ==0) { - return 0; - 4ce: 80 e0 ldi r24, 0x00 ; 0 - if (adb_werte[2] & 0b01000000) { - return -((128 - adb_werte[2]) & 0b00111111); - } else { - return adb_werte[2] & 0b00111111; - } +000004f8 : + +uint16_t y_abs(void) { + return ((adb_werte[4] & 0b01110000) << 6) + 4f8: 20 91 63 02 lds r18, 0x0263 + 4fc: 30 e0 ldi r19, 0x00 ; 0 + 4fe: 20 77 andi r18, 0x70 ; 112 + 500: 30 70 andi r19, 0x00 ; 0 + 502: e6 e0 ldi r30, 0x06 ; 6 + 504: 22 0f add r18, r18 + 506: 33 1f adc r19, r19 + 508: ea 95 dec r30 + 50a: e1 f7 brne .-8 ; 0x504 <__stack+0x5> + | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); + 50c: 80 91 62 02 lds r24, 0x0262 + 510: 90 e0 ldi r25, 0x00 ; 0 + 512: 80 77 andi r24, 0x70 ; 112 + 514: 90 70 andi r25, 0x00 ; 0 + 516: 73 e0 ldi r23, 0x03 ; 3 + 518: 88 0f add r24, r24 + 51a: 99 1f adc r25, r25 + 51c: 7a 95 dec r23 + 51e: e1 f7 brne .-8 ; 0x518 <__stack+0x19> + 520: 28 2b or r18, r24 + 522: 39 2b or r19, r25 + 524: 80 91 60 02 lds r24, 0x0260 + 528: 90 e0 ldi r25, 0x00 ; 0 + 52a: 8f 77 andi r24, 0x7F ; 127 + 52c: 90 70 andi r25, 0x00 ; 0 + 52e: 28 2b or r18, r24 + 530: 39 2b or r19, r25 } - 4d0: 08 95 ret + 532: c9 01 movw r24, r18 + 534: 08 95 ret -000004d2 : +00000536 : void Usb2SerialTask(void) { - 4d2: 1f 93 push r17 + 536: 1f 93 push r17 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 4d4: 8f b7 in r24, 0x3f ; 63 + 538: 8f b7 in r24, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 4d6: f8 94 cli + 53a: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 4d8: 20 91 3a 01 lds r18, 0x013A - 4dc: 30 91 3b 01 lds r19, 0x013B + 53c: 20 91 4c 01 lds r18, 0x014C + 540: 30 91 4d 01 lds r19, 0x014D static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 4e0: 8f bf out 0x3f, r24 ; 63 + 544: 8f bf out 0x3f, r24 ; 63 /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) - 4e2: 80 91 38 01 lds r24, 0x0138 - 4e6: 90 91 39 01 lds r25, 0x0139 - 4ea: 28 17 cp r18, r24 - 4ec: 39 07 cpc r19, r25 - 4ee: 49 f0 breq .+18 ; 0x502 <__stack+0x3> + 546: 80 91 4a 01 lds r24, 0x014A + 54a: 90 91 4b 01 lds r25, 0x014B + 54e: 28 17 cp r18, r24 + 550: 39 07 cpc r19, r25 + 552: 49 f0 breq .+18 ; 0x566 { int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - 4f0: 83 e1 ldi r24, 0x13 ; 19 - 4f2: 91 e0 ldi r25, 0x01 ; 1 - 4f4: 78 d7 rcall .+3824 ; 0x13e6 - 4f6: bc 01 movw r22, r24 + 554: 85 e2 ldi r24, 0x25 ; 37 + 556: 91 e0 ldi r25, 0x01 ; 1 + 558: 61 d7 rcall .+3778 ; 0x141c + 55a: bc 01 movw r22, r24 /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ if (!(ReceivedByte < 0)) - 4f8: 97 fd sbrc r25, 7 - 4fa: 03 c0 rjmp .+6 ; 0x502 <__stack+0x3> + 55c: 97 fd sbrc r25, 7 + 55e: 03 c0 rjmp .+6 ; 0x566 RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - 4fc: 80 e3 ldi r24, 0x30 ; 48 - 4fe: 91 e0 ldi r25, 0x01 ; 1 - 500: 37 de rcall .-914 ; 0x170 + 560: 82 e4 ldi r24, 0x42 ; 66 + 562: 91 e0 ldi r25, 0x01 ; 1 + 564: 05 de rcall .-1014 ; 0x170 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 502: 2f b7 in r18, 0x3f ; 63 + 566: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 504: f8 94 cli - 506: 80 91 c6 01 lds r24, 0x01C6 - 50a: 90 91 c7 01 lds r25, 0x01C7 + 568: f8 94 cli + 56a: 80 91 d8 01 lds r24, 0x01D8 + 56e: 90 91 d9 01 lds r25, 0x01D9 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 50e: 2f bf out 0x3f, r18 ; 63 + 572: 2f bf out 0x3f, r18 ; 63 } /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */ uint16_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer); if (BufferCount) - 510: 00 97 sbiw r24, 0x00 ; 0 - 512: 01 f1 breq .+64 ; 0x554 <__stack+0x55> + 574: 00 97 sbiw r24, 0x00 ; 0 + 576: 01 f1 breq .+64 ; 0x5b8 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 514: 20 91 14 01 lds r18, 0x0114 - 518: 2f 70 andi r18, 0x0F ; 15 - 51a: 20 93 e9 00 sts 0x00E9, r18 + 578: 20 91 26 01 lds r18, 0x0126 + 57c: 2f 70 andi r18, 0x0F ; 15 + 57e: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 51e: 20 91 e8 00 lds r18, 0x00E8 + 582: 20 91 e8 00 lds r18, 0x00E8 { Endpoint_SelectEndpoint(VirtualSerial_CDC_Interface.Config.DataINEndpoint.Address); /* Check if a packet is already enqueued to the host - if so, we shouldn't try to send more data * until it completes as there is a chance nothing is listening and a lengthy timeout could occur */ if (Endpoint_IsINReady()) - 522: 20 ff sbrs r18, 0 - 524: 17 c0 rjmp .+46 ; 0x554 <__stack+0x55> + 586: 20 ff sbrs r18, 0 + 588: 17 c0 rjmp .+46 ; 0x5b8 { /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); - 526: 80 31 cpi r24, 0x10 ; 16 - 528: 91 05 cpc r25, r1 - 52a: 10 f0 brcs .+4 ; 0x530 <__stack+0x31> - 52c: 8f e0 ldi r24, 0x0F ; 15 - 52e: 90 e0 ldi r25, 0x00 ; 0 - 530: 18 2f mov r17, r24 + 58a: 80 31 cpi r24, 0x10 ; 16 + 58c: 91 05 cpc r25, r1 + 58e: 10 f0 brcs .+4 ; 0x594 + 590: 8f e0 ldi r24, 0x0F ; 15 + 592: 90 e0 ldi r25, 0x00 ; 0 + 594: 18 2f mov r17, r24 /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 532: 0e c0 rjmp .+28 ; 0x550 <__stack+0x51> + 596: 0e c0 rjmp .+28 ; 0x5b4 * \return Next data element stored in the buffer. */ static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1); static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) { return *Buffer->Out; - 534: e0 91 be 01 lds r30, 0x01BE - 538: f0 91 bf 01 lds r31, 0x01BF + 598: e0 91 d0 01 lds r30, 0x01D0 + 59c: f0 91 d1 01 lds r31, 0x01D1 { /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, - 53c: 83 e1 ldi r24, 0x13 ; 19 - 53e: 91 e0 ldi r25, 0x01 ; 1 - 540: 60 81 ld r22, Z - 542: e0 d6 rcall .+3520 ; 0x1304 - 544: 11 50 subi r17, 0x01 ; 1 - 546: 88 23 and r24, r24 - 548: 29 f4 brne .+10 ; 0x554 <__stack+0x55> + 5a0: 85 e2 ldi r24, 0x25 ; 37 + 5a2: 91 e0 ldi r25, 0x01 ; 1 + 5a4: 60 81 ld r22, Z + 5a6: c9 d6 rcall .+3474 ; 0x133a + 5a8: 11 50 subi r17, 0x01 ; 1 + 5aa: 88 23 and r24, r24 + 5ac: 29 f4 brne .+10 ; 0x5b8 { break; } /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ RingBuffer_Remove(&USARTtoUSB_Buffer); - 54a: 8c eb ldi r24, 0xBC ; 188 - 54c: 91 e0 ldi r25, 0x01 ; 1 - 54e: 2b de rcall .-938 ; 0x1a6 + 5ae: 8e ec ldi r24, 0xCE ; 206 + 5b0: 91 e0 ldi r25, 0x01 ; 1 + 5b2: f9 dd rcall .-1038 ; 0x1a6 /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 550: 11 23 and r17, r17 - 552: 81 f7 brne .-32 ; 0x534 <__stack+0x35> + 5b4: 11 23 and r17, r17 + 5b6: 81 f7 brne .-32 ; 0x598 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 554: 2f b7 in r18, 0x3f ; 63 + 5b8: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 556: f8 94 cli + 5ba: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 558: 80 91 3a 01 lds r24, 0x013A - 55c: 90 91 3b 01 lds r25, 0x013B + 5bc: 80 91 4c 01 lds r24, 0x014C + 5c0: 90 91 4d 01 lds r25, 0x014D static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 560: 2f bf out 0x3f, r18 ; 63 + 5c4: 2f bf out 0x3f, r18 ; 63 } } } /* Load the next byte from the USART transmit buffer into the USART */ if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { - 562: 00 97 sbiw r24, 0x00 ; 0 - 564: 49 f0 breq .+18 ; 0x578 <__stack+0x79> + 5c6: 00 97 sbiw r24, 0x00 ; 0 + 5c8: 49 f0 breq .+18 ; 0x5dc Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer)); - 566: 80 e3 ldi r24, 0x30 ; 48 - 568: 91 e0 ldi r25, 0x01 ; 1 - 56a: 1d de rcall .-966 ; 0x1a6 + 5ca: 82 e4 ldi r24, 0x42 ; 66 + 5cc: 91 e0 ldi r25, 0x01 ; 1 + 5ce: eb dd rcall .-1066 ; 0x1a6 * \param[in] DataByte Byte to transmit through the USART. */ static inline void Serial_SendByte(const char DataByte) ATTR_ALWAYS_INLINE; static inline void Serial_SendByte(const char DataByte) { while (!(UCSR1A & (1 << UDRE1))); - 56c: 90 91 c8 00 lds r25, 0x00C8 - 570: 95 ff sbrs r25, 5 - 572: fc cf rjmp .-8 ; 0x56c <__stack+0x6d> + 5d0: 90 91 c8 00 lds r25, 0x00C8 + 5d4: 95 ff sbrs r25, 5 + 5d6: fc cf rjmp .-8 ; 0x5d0 UDR1 = DataByte; - 574: 80 93 ce 00 sts 0x00CE, r24 + 5d8: 80 93 ce 00 sts 0x00CE, r24 // dummy = RingBuffer_Remove(&USBtoUSART_Buffer); // sendPayload(&dummy,1,0); } CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 578: 83 e1 ldi r24, 0x13 ; 19 - 57a: 91 e0 ldi r25, 0x01 ; 1 - 57c: 1d d7 rcall .+3642 ; 0x13b8 + 5dc: 85 e2 ldi r24, 0x25 ; 37 + 5de: 91 e0 ldi r25, 0x01 ; 1 + 5e0: 06 d7 rcall .+3596 ; 0x13ee USB_USBTask(); - 57e: d7 d5 rcall .+2990 ; 0x112e + 5e2: c0 d5 rcall .+2944 ; 0x1164 } - 580: 1f 91 pop r17 - 582: 08 95 ret + 5e4: 1f 91 pop r17 + 5e6: 08 95 ret -00000584 : +000005e8 : /** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ MCUSR &= ~(1 << WDRF); - 584: 84 b7 in r24, 0x34 ; 52 - 586: 87 7f andi r24, 0xF7 ; 247 - 588: 84 bf out 0x34, r24 ; 52 + 5e8: 84 b7 in r24, 0x34 ; 52 + 5ea: 87 7f andi r24, 0xF7 ; 247 + 5ec: 84 bf out 0x34, r24 ; 52 wdt_disable(); - 58a: 88 e1 ldi r24, 0x18 ; 24 - 58c: 0f b6 in r0, 0x3f ; 63 - 58e: f8 94 cli - 590: 80 93 60 00 sts 0x0060, r24 - 594: 10 92 60 00 sts 0x0060, r1 - 598: 0f be out 0x3f, r0 ; 63 + 5ee: 88 e1 ldi r24, 0x18 ; 24 + 5f0: 0f b6 in r0, 0x3f ; 63 + 5f2: f8 94 cli + 5f4: 80 93 60 00 sts 0x0060, r24 + 5f8: 10 92 60 00 sts 0x0060, r1 + 5fc: 0f be out 0x3f, r0 ; 63 The type of x is clock_div_t. */ void clock_prescale_set(clock_div_t __x) { uint8_t __tmp = _BV(CLKPCE); __asm__ __volatile__ ( - 59a: 90 e0 ldi r25, 0x00 ; 0 - 59c: 80 e8 ldi r24, 0x80 ; 128 - 59e: 0f b6 in r0, 0x3f ; 63 - 5a0: f8 94 cli - 5a2: 80 93 61 00 sts 0x0061, r24 - 5a6: 90 93 61 00 sts 0x0061, r25 - 5aa: 0f be out 0x3f, r0 ; 63 + 5fe: 90 e0 ldi r25, 0x00 ; 0 + 600: 80 e8 ldi r24, 0x80 ; 128 + 602: 0f b6 in r0, 0x3f ; 63 + 604: f8 94 cli + 606: 80 93 61 00 sts 0x0061, r24 + 60a: 90 93 61 00 sts 0x0061, r25 + 60e: 0f be out 0x3f, r0 ; 63 clock_prescale_set(clock_div_1); /* Hardware Initialization */ // LEDs_Init(); USB_Init(); } - 5ac: 70 c3 rjmp .+1760 ; 0xc8e + 610: 59 c3 rjmp .+1714 ; 0xcc4 -000005ae : +00000612 : /** Event handler for the library USB Connection event. */ void EVENT_USB_Device_Connect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } - 5ae: 08 95 ret + 612: 08 95 ret -000005b0 : +00000614 : /** Event handler for the library USB Disconnection event. */ void EVENT_USB_Device_Disconnect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } - 5b0: 08 95 ret + 614: 08 95 ret -000005b2 : +00000616 : /** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); - 5b2: 83 e1 ldi r24, 0x13 ; 19 - 5b4: 91 e0 ldi r25, 0x01 ; 1 + 616: 85 e2 ldi r24, 0x25 ; 37 + 618: 91 e0 ldi r25, 0x01 ; 1 // LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } - 5b6: 82 c6 rjmp .+3332 ; 0x12bc + 61a: 6b c6 rjmp .+3286 ; 0x12f2 -000005b8 : +0000061c : /** Event handler for the library USB Control Request reception event. */ void EVENT_USB_Device_ControlRequest(void) { CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 5b8: 83 e1 ldi r24, 0x13 ; 19 - 5ba: 91 e0 ldi r25, 0x01 ; 1 + 61c: 85 e2 ldi r24, 0x25 ; 37 + 61e: 91 e0 ldi r25, 0x01 ; 1 } - 5bc: d3 c5 rjmp .+2982 ; 0x1164 + 620: bc c5 rjmp .+2936 ; 0x119a -000005be <__vector_23>: +00000622 <__vector_23>: /** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer * for later transmission to the host. */ ISR(USART1_RX_vect, ISR_BLOCK) { - 5be: 1f 92 push r1 - 5c0: 0f 92 push r0 - 5c2: 0f b6 in r0, 0x3f ; 63 - 5c4: 0f 92 push r0 - 5c6: 11 24 eor r1, r1 - 5c8: 2f 93 push r18 - 5ca: 3f 93 push r19 - 5cc: 4f 93 push r20 - 5ce: 5f 93 push r21 - 5d0: 6f 93 push r22 - 5d2: 7f 93 push r23 - 5d4: 8f 93 push r24 - 5d6: 9f 93 push r25 - 5d8: af 93 push r26 - 5da: bf 93 push r27 - 5dc: ef 93 push r30 - 5de: ff 93 push r31 + 622: 1f 92 push r1 + 624: 0f 92 push r0 + 626: 0f b6 in r0, 0x3f ; 63 + 628: 0f 92 push r0 + 62a: 11 24 eor r1, r1 + 62c: 2f 93 push r18 + 62e: 3f 93 push r19 + 630: 4f 93 push r20 + 632: 5f 93 push r21 + 634: 6f 93 push r22 + 636: 7f 93 push r23 + 638: 8f 93 push r24 + 63a: 9f 93 push r25 + 63c: af 93 push r26 + 63e: bf 93 push r27 + 640: ef 93 push r30 + 642: ff 93 push r31 uint8_t ReceivedByte = UDR1; - 5e0: 60 91 ce 00 lds r22, 0x00CE + 644: 60 91 ce 00 lds r22, 0x00CE if (USB_DeviceState == DEVICE_STATE_Configured) - 5e4: 8e b3 in r24, 0x1e ; 30 - 5e6: 84 30 cpi r24, 0x04 ; 4 - 5e8: 19 f4 brne .+6 ; 0x5f0 <__vector_23+0x32> + 648: 8e b3 in r24, 0x1e ; 30 + 64a: 84 30 cpi r24, 0x04 ; 4 + 64c: 19 f4 brne .+6 ; 0x654 <__vector_23+0x32> RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); - 5ea: 8c eb ldi r24, 0xBC ; 188 - 5ec: 91 e0 ldi r25, 0x01 ; 1 - 5ee: c0 dd rcall .-1152 ; 0x170 + 64e: 8e ec ldi r24, 0xCE ; 206 + 650: 91 e0 ldi r25, 0x01 ; 1 + 652: 8e dd rcall .-1252 ; 0x170 } - 5f0: ff 91 pop r31 - 5f2: ef 91 pop r30 - 5f4: bf 91 pop r27 - 5f6: af 91 pop r26 - 5f8: 9f 91 pop r25 - 5fa: 8f 91 pop r24 - 5fc: 7f 91 pop r23 - 5fe: 6f 91 pop r22 - 600: 5f 91 pop r21 - 602: 4f 91 pop r20 - 604: 3f 91 pop r19 - 606: 2f 91 pop r18 - 608: 0f 90 pop r0 - 60a: 0f be out 0x3f, r0 ; 63 - 60c: 0f 90 pop r0 - 60e: 1f 90 pop r1 - 610: 18 95 reti - -00000612 : + 654: ff 91 pop r31 + 656: ef 91 pop r30 + 658: bf 91 pop r27 + 65a: af 91 pop r26 + 65c: 9f 91 pop r25 + 65e: 8f 91 pop r24 + 660: 7f 91 pop r23 + 662: 6f 91 pop r22 + 664: 5f 91 pop r21 + 666: 4f 91 pop r20 + 668: 3f 91 pop r19 + 66a: 2f 91 pop r18 + 66c: 0f 90 pop r0 + 66e: 0f be out 0x3f, r0 ; 63 + 670: 0f 90 pop r0 + 672: 1f 90 pop r1 + 674: 18 95 reti + +00000676 : /** Event handler for the CDC Class driver Line Encoding Changed event. * * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced */ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 612: 8f 92 push r8 - 614: 9f 92 push r9 - 616: af 92 push r10 - 618: bf 92 push r11 - 61a: cf 92 push r12 - 61c: df 92 push r13 - 61e: ef 92 push r14 - 620: ff 92 push r15 - 622: 1f 93 push r17 - 624: fc 01 movw r30, r24 + 676: 8f 92 push r8 + 678: 9f 92 push r9 + 67a: af 92 push r10 + 67c: bf 92 push r11 + 67e: cf 92 push r12 + 680: df 92 push r13 + 682: ef 92 push r14 + 684: ff 92 push r15 + 686: 1f 93 push r17 + 688: fc 01 movw r30, r24 uint8_t ConfigMask = 0; switch (CDCInterfaceInfo->State.LineEncoding.ParityType) - 626: a1 8d ldd r26, Z+25 ; 0x19 - 628: a1 50 subi r26, 0x01 ; 1 - 62a: a2 30 cpi r26, 0x02 ; 2 - 62c: 28 f4 brcc .+10 ; 0x638 - 62e: b0 e0 ldi r27, 0x00 ; 0 - 630: a2 5d subi r26, 0xD2 ; 210 - 632: be 4f sbci r27, 0xFE ; 254 - 634: 1c 91 ld r17, X - 636: 01 c0 rjmp .+2 ; 0x63a - 638: 10 e0 ldi r17, 0x00 ; 0 + 68a: a1 8d ldd r26, Z+25 ; 0x19 + 68c: a1 50 subi r26, 0x01 ; 1 + 68e: a2 30 cpi r26, 0x02 ; 2 + 690: 28 f4 brcc .+10 ; 0x69c + 692: b0 e0 ldi r27, 0x00 ; 0 + 694: a0 5c subi r26, 0xC0 ; 192 + 696: be 4f sbci r27, 0xFE ; 254 + 698: 1c 91 ld r17, X + 69a: 01 c0 rjmp .+2 ; 0x69e + 69c: 10 e0 ldi r17, 0x00 ; 0 case CDC_PARITY_Even: ConfigMask = (1 << UPM11); break; } if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) - 63a: 80 8d ldd r24, Z+24 ; 0x18 - 63c: 82 30 cpi r24, 0x02 ; 2 - 63e: 09 f4 brne .+2 ; 0x642 + 69e: 80 8d ldd r24, Z+24 ; 0x18 + 6a0: 82 30 cpi r24, 0x02 ; 2 + 6a2: 09 f4 brne .+2 ; 0x6a6 ConfigMask |= (1 << USBS1); - 640: 18 60 ori r17, 0x08 ; 8 + 6a4: 18 60 ori r17, 0x08 ; 8 switch (CDCInterfaceInfo->State.LineEncoding.DataBits) - 642: 82 8d ldd r24, Z+26 ; 0x1a - 644: 87 30 cpi r24, 0x07 ; 7 - 646: 31 f0 breq .+12 ; 0x654 - 648: 88 30 cpi r24, 0x08 ; 8 - 64a: 31 f0 breq .+12 ; 0x658 - 64c: 86 30 cpi r24, 0x06 ; 6 - 64e: 29 f4 brne .+10 ; 0x65a + 6a6: 82 8d ldd r24, Z+26 ; 0x1a + 6a8: 87 30 cpi r24, 0x07 ; 7 + 6aa: 31 f0 breq .+12 ; 0x6b8 + 6ac: 88 30 cpi r24, 0x08 ; 8 + 6ae: 31 f0 breq .+12 ; 0x6bc + 6b0: 86 30 cpi r24, 0x06 ; 6 + 6b2: 29 f4 brne .+10 ; 0x6be { case 6: ConfigMask |= (1 << UCSZ10); - 650: 12 60 ori r17, 0x02 ; 2 + 6b4: 12 60 ori r17, 0x02 ; 2 break; - 652: 03 c0 rjmp .+6 ; 0x65a + 6b6: 03 c0 rjmp .+6 ; 0x6be case 7: ConfigMask |= (1 << UCSZ11); - 654: 14 60 ori r17, 0x04 ; 4 + 6b8: 14 60 ori r17, 0x04 ; 4 break; - 656: 01 c0 rjmp .+2 ; 0x65a + 6ba: 01 c0 rjmp .+2 ; 0x6be case 8: ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); - 658: 16 60 ori r17, 0x06 ; 6 + 6bc: 16 60 ori r17, 0x06 ; 6 break; } /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ UCSR1B = 0; - 65a: 10 92 c9 00 sts 0x00C9, r1 + 6be: 10 92 c9 00 sts 0x00C9, r1 UCSR1A = 0; - 65e: 10 92 c8 00 sts 0x00C8, r1 + 6c2: 10 92 c8 00 sts 0x00C8, r1 UCSR1C = 0; - 662: 10 92 ca 00 sts 0x00CA, r1 + 6c6: 10 92 ca 00 sts 0x00CA, r1 /* Set the new baud rate before configuring the USART */ UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 666: c4 88 ldd r12, Z+20 ; 0x14 - 668: d5 88 ldd r13, Z+21 ; 0x15 - 66a: e6 88 ldd r14, Z+22 ; 0x16 - 66c: f7 88 ldd r15, Z+23 ; 0x17 - 66e: c7 01 movw r24, r14 - 670: b6 01 movw r22, r12 - 672: 96 95 lsr r25 - 674: 87 95 ror r24 - 676: 77 95 ror r23 - 678: 67 95 ror r22 - 67a: e0 d7 rcall .+4032 ; 0x163c <__floatunsisf> - 67c: 20 e0 ldi r18, 0x00 ; 0 - 67e: 34 e2 ldi r19, 0x24 ; 36 - 680: 44 ef ldi r20, 0xF4 ; 244 - 682: 59 e4 ldi r21, 0x49 ; 73 - 684: df d6 rcall .+3518 ; 0x1444 <__addsf3> - 686: 4b 01 movw r8, r22 - 688: 5c 01 movw r10, r24 - 68a: c7 01 movw r24, r14 - 68c: b6 01 movw r22, r12 - 68e: d6 d7 rcall .+4012 ; 0x163c <__floatunsisf> - 690: 9b 01 movw r18, r22 - 692: ac 01 movw r20, r24 - 694: c5 01 movw r24, r10 - 696: b4 01 movw r22, r8 - 698: 3d d7 rcall .+3706 ; 0x1514 <__divsf3> - 69a: 20 e0 ldi r18, 0x00 ; 0 - 69c: 30 e0 ldi r19, 0x00 ; 0 - 69e: 40 e8 ldi r20, 0x80 ; 128 - 6a0: 5f e3 ldi r21, 0x3F ; 63 - 6a2: cf d6 rcall .+3486 ; 0x1442 <__subsf3> - 6a4: 9f d7 rcall .+3902 ; 0x15e4 <__fixunssfsi> - 6a6: 70 93 cd 00 sts 0x00CD, r23 - 6aa: 60 93 cc 00 sts 0x00CC, r22 + 6ca: c4 88 ldd r12, Z+20 ; 0x14 + 6cc: d5 88 ldd r13, Z+21 ; 0x15 + 6ce: e6 88 ldd r14, Z+22 ; 0x16 + 6d0: f7 88 ldd r15, Z+23 ; 0x17 + 6d2: c7 01 movw r24, r14 + 6d4: b6 01 movw r22, r12 + 6d6: 96 95 lsr r25 + 6d8: 87 95 ror r24 + 6da: 77 95 ror r23 + 6dc: 67 95 ror r22 + 6de: c9 d7 rcall .+3986 ; 0x1672 <__floatunsisf> + 6e0: 20 e0 ldi r18, 0x00 ; 0 + 6e2: 34 e2 ldi r19, 0x24 ; 36 + 6e4: 44 ef ldi r20, 0xF4 ; 244 + 6e6: 59 e4 ldi r21, 0x49 ; 73 + 6e8: c8 d6 rcall .+3472 ; 0x147a <__addsf3> + 6ea: 4b 01 movw r8, r22 + 6ec: 5c 01 movw r10, r24 + 6ee: c7 01 movw r24, r14 + 6f0: b6 01 movw r22, r12 + 6f2: bf d7 rcall .+3966 ; 0x1672 <__floatunsisf> + 6f4: 9b 01 movw r18, r22 + 6f6: ac 01 movw r20, r24 + 6f8: c5 01 movw r24, r10 + 6fa: b4 01 movw r22, r8 + 6fc: 26 d7 rcall .+3660 ; 0x154a <__divsf3> + 6fe: 20 e0 ldi r18, 0x00 ; 0 + 700: 30 e0 ldi r19, 0x00 ; 0 + 702: 40 e8 ldi r20, 0x80 ; 128 + 704: 5f e3 ldi r21, 0x3F ; 63 + 706: b8 d6 rcall .+3440 ; 0x1478 <__subsf3> + 708: 88 d7 rcall .+3856 ; 0x161a <__fixunssfsi> + 70a: 70 93 cd 00 sts 0x00CD, r23 + 70e: 60 93 cc 00 sts 0x00CC, r22 /* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */ UCSR1C = ConfigMask; - 6ae: 10 93 ca 00 sts 0x00CA, r17 + 712: 10 93 ca 00 sts 0x00CA, r17 UCSR1A = (1 << U2X1); - 6b2: 82 e0 ldi r24, 0x02 ; 2 - 6b4: 80 93 c8 00 sts 0x00C8, r24 + 716: 82 e0 ldi r24, 0x02 ; 2 + 718: 80 93 c8 00 sts 0x00C8, r24 UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); - 6b8: 88 e9 ldi r24, 0x98 ; 152 - 6ba: 80 93 c9 00 sts 0x00C9, r24 + 71c: 88 e9 ldi r24, 0x98 ; 152 + 71e: 80 93 c9 00 sts 0x00C9, r24 } - 6be: 1f 91 pop r17 - 6c0: ff 90 pop r15 - 6c2: ef 90 pop r14 - 6c4: df 90 pop r13 - 6c6: cf 90 pop r12 - 6c8: bf 90 pop r11 - 6ca: af 90 pop r10 - 6cc: 9f 90 pop r9 - 6ce: 8f 90 pop r8 - 6d0: 08 95 ret + 722: 1f 91 pop r17 + 724: ff 90 pop r15 + 726: ef 90 pop r14 + 728: df 90 pop r13 + 72a: cf 90 pop r12 + 72c: bf 90 pop r11 + 72e: af 90 pop r10 + 730: 9f 90 pop r9 + 732: 8f 90 pop r8 + 734: 08 95 ret -000006d2 : +00000736 : void uart_putc(unsigned char data) { - 6d2: 68 2f mov r22, r24 + 736: 68 2f mov r22, r24 if (USB_DeviceState == DEVICE_STATE_Configured){ - 6d4: 8e b3 in r24, 0x1e ; 30 - 6d6: 84 30 cpi r24, 0x04 ; 4 - 6d8: 19 f4 brne .+6 ; 0x6e0 + 738: 8e b3 in r24, 0x1e ; 30 + 73a: 84 30 cpi r24, 0x04 ; 4 + 73c: 19 f4 brne .+6 ; 0x744 RingBuffer_Insert(&USARTtoUSB_Buffer, data); - 6da: 8c eb ldi r24, 0xBC ; 188 - 6dc: 91 e0 ldi r25, 0x01 ; 1 - 6de: 48 cd rjmp .-1392 ; 0x170 - 6e0: 08 95 ret + 73e: 8e ec ldi r24, 0xCE ; 206 + 740: 91 e0 ldi r25, 0x01 ; 1 + 742: 16 cd rjmp .-1492 ; 0x170 + 744: 08 95 ret -000006e2 : +00000746 : } } void uart_puts(const char *s ) { - 6e2: ef 92 push r14 - 6e4: ff 92 push r15 - 6e6: cf 93 push r28 - 6e8: df 93 push r29 - 6ea: e8 2e mov r14, r24 - 6ec: e7 01 movw r28, r14 - 6ee: 7e 01 movw r14, r28 - 6f0: f9 2e mov r15, r25 - 6f2: e7 01 movw r28, r14 + 746: ef 92 push r14 + 748: ff 92 push r15 + 74a: cf 93 push r28 + 74c: df 93 push r29 + 74e: e8 2e mov r14, r24 + 750: e7 01 movw r28, r14 + 752: 7e 01 movw r14, r28 + 754: f9 2e mov r15, r25 + 756: e7 01 movw r28, r14 while (*s) - 6f4: 01 c0 rjmp .+2 ; 0x6f8 + 758: 01 c0 rjmp .+2 ; 0x75c uart_putc(*s++); - 6f6: ed df rcall .-38 ; 0x6d2 + 75a: ed df rcall .-38 ; 0x736 } void uart_puts(const char *s ) { while (*s) - 6f8: 89 91 ld r24, Y+ - 6fa: 88 23 and r24, r24 - 6fc: e1 f7 brne .-8 ; 0x6f6 + 75c: 89 91 ld r24, Y+ + 75e: 88 23 and r24, r24 + 760: e1 f7 brne .-8 ; 0x75a uart_putc(*s++); }/* uart_puts */ - 6fe: df 91 pop r29 - 700: cf 91 pop r28 - 702: ff 90 pop r15 - 704: ef 90 pop r14 - 706: 08 95 ret + 762: df 91 pop r29 + 764: cf 91 pop r28 + 766: ff 90 pop r15 + 768: ef 90 pop r14 + 76a: 08 95 ret -00000708 : +0000076c : // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 708: 2f 92 push r2 - 70a: 3f 92 push r3 - 70c: 4f 92 push r4 - 70e: 5f 92 push r5 - 710: 6f 92 push r6 - 712: 7f 92 push r7 - 714: 8f 92 push r8 - 716: 9f 92 push r9 - 718: af 92 push r10 - 71a: bf 92 push r11 - 71c: cf 92 push r12 - 71e: df 92 push r13 - 720: ef 92 push r14 - 722: ff 92 push r15 - 724: 0f 93 push r16 - 726: 1f 93 push r17 - 728: cf 93 push r28 - 72a: df 93 push r29 - 72c: 7b 01 movw r14, r22 - 72e: 8c 01 movw r16, r24 + 76c: 2f 92 push r2 + 76e: 3f 92 push r3 + 770: 4f 92 push r4 + 772: 5f 92 push r5 + 774: 6f 92 push r6 + 776: 7f 92 push r7 + 778: 8f 92 push r8 + 77a: 9f 92 push r9 + 77c: af 92 push r10 + 77e: bf 92 push r11 + 780: cf 92 push r12 + 782: df 92 push r13 + 784: ef 92 push r14 + 786: ff 92 push r15 + 788: 0f 93 push r16 + 78a: 1f 93 push r17 + 78c: cf 93 push r28 + 78e: df 93 push r29 + 790: 7b 01 movw r14, r22 + 792: 8c 01 movw r16, r24 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator - 730: 82 2f mov r24, r18 - 732: 90 e0 ldi r25, 0x00 ; 0 - 734: fa 01 movw r30, r20 - 736: e8 0f add r30, r24 - 738: f9 1f adc r31, r25 - 73a: 10 82 st Z, r1 + 794: 82 2f mov r24, r18 + 796: 90 e0 ldi r25, 0x00 ; 0 + 798: fa 01 movw r30, r20 + 79a: e8 0f add r30, r24 + 79c: f9 1f adc r31, r25 + 79e: 10 82 st Z, r1 for (i = (no_digits - 1); i >= 0; i--) { - 73c: d2 2e mov r13, r18 - 73e: da 94 dec r13 + 7a0: d2 2e mov r13, r18 + 7a2: da 94 dec r13 }/* uart_puts */ // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 740: 4d 2c mov r4, r13 - 742: 55 24 eor r5, r5 - 744: 47 fc sbrc r4, 7 - 746: 50 94 com r5 - 748: ea 01 movw r28, r20 - 74a: c4 0d add r28, r4 - 74c: d5 1d adc r29, r5 + 7a4: 4d 2c mov r4, r13 + 7a6: 55 24 eor r5, r5 + 7a8: 47 fc sbrc r4, 7 + 7aa: 50 94 com r5 + 7ac: ea 01 movw r28, r20 + 7ae: c4 0d add r28, r4 + 7b0: d5 1d adc r29, r5 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 74e: aa 24 eor r10, r10 - 750: bb 24 eor r11, r11 + 7b2: aa 24 eor r10, r10 + 7b4: bb 24 eor r11, r11 if (zahl == 0 && i < (no_digits - 1)) { string[i] = ' '; } else { string[i] = (zahl % 10) + '0'; - 752: ba e0 ldi r27, 0x0A ; 10 - 754: 6b 2e mov r6, r27 - 756: 71 2c mov r7, r1 - 758: 81 2c mov r8, r1 - 75a: 91 2c mov r9, r1 + 7b6: ba e0 ldi r27, 0x0A ; 10 + 7b8: 6b 2e mov r6, r27 + 7ba: 71 2c mov r7, r1 + 7bc: 81 2c mov r8, r1 + 7be: 91 2c mov r9, r1 void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - 75c: 1c 01 movw r2, r24 - 75e: 08 94 sec - 760: 21 08 sbc r2, r1 - 762: 31 08 sbc r3, r1 + 7c0: 1c 01 movw r2, r24 + 7c2: 08 94 sec + 7c4: 21 08 sbc r2, r1 + 7c6: 31 08 sbc r3, r1 string[i] = ' '; - 764: a0 e2 ldi r26, 0x20 ; 32 - 766: ca 2e mov r12, r26 + 7c8: a0 e2 ldi r26, 0x20 ; 32 + 7ca: ca 2e mov r12, r26 // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 768: 22 c0 rjmp .+68 ; 0x7ae + 7cc: 20 c0 rjmp .+64 ; 0x80e if (zahl == 0 && i < (no_digits - 1)) { - 76a: e1 14 cp r14, r1 - 76c: f1 04 cpc r15, r1 - 76e: 01 05 cpc r16, r1 - 770: 11 05 cpc r17, r1 - 772: 41 f4 brne .+16 ; 0x784 + 7ce: e1 14 cp r14, r1 + 7d0: f1 04 cpc r15, r1 + 7d2: 01 05 cpc r16, r1 + 7d4: 11 05 cpc r17, r1 + 7d6: 41 f4 brne .+16 ; 0x7e8 }/* uart_puts */ // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 774: c5 01 movw r24, r10 - 776: 84 0d add r24, r4 - 778: 95 1d adc r25, r5 + 7d8: c5 01 movw r24, r10 + 7da: 84 0d add r24, r4 + 7dc: 95 1d adc r25, r5 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - 77a: 82 15 cp r24, r2 - 77c: 93 05 cpc r25, r3 - 77e: 14 f4 brge .+4 ; 0x784 + 7de: 82 15 cp r24, r2 + 7e0: 93 05 cpc r25, r3 + 7e2: 14 f4 brge .+4 ; 0x7e8 string[i] = ' '; - 780: c8 82 st Y, r12 - 782: 08 c0 rjmp .+16 ; 0x794 + 7e4: c8 82 st Y, r12 + 7e6: 07 c0 rjmp .+14 ; 0x7f6 } else { string[i] = (zahl % 10) + '0'; - 784: c8 01 movw r24, r16 - 786: b7 01 movw r22, r14 - 788: a4 01 movw r20, r8 - 78a: 93 01 movw r18, r6 - 78c: 0e 94 d4 0b call 0x17a8 ; 0x17a8 <__udivmodsi4> - 790: 60 5d subi r22, 0xD0 ; 208 - 792: 68 83 st Y, r22 + 7e8: c8 01 movw r24, r16 + 7ea: b7 01 movw r22, r14 + 7ec: a4 01 movw r20, r8 + 7ee: 93 01 movw r18, r6 + 7f0: f6 d7 rcall .+4076 ; 0x17de <__udivmodsi4> + 7f2: 60 5d subi r22, 0xD0 ; 208 + 7f4: 68 83 st Y, r22 } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; - 794: c8 01 movw r24, r16 - 796: b7 01 movw r22, r14 - 798: a4 01 movw r20, r8 - 79a: 93 01 movw r18, r6 - 79c: 0e 94 d4 0b call 0x17a8 ; 0x17a8 <__udivmodsi4> - 7a0: 79 01 movw r14, r18 - 7a2: 8a 01 movw r16, r20 + 7f6: c8 01 movw r24, r16 + 7f8: b7 01 movw r22, r14 + 7fa: a4 01 movw r20, r8 + 7fc: 93 01 movw r18, r6 + 7fe: ef d7 rcall .+4062 ; 0x17de <__udivmodsi4> + 800: 79 01 movw r14, r18 + 802: 8a 01 movw r16, r20 // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 7a4: da 94 dec r13 - 7a6: 21 97 sbiw r28, 0x01 ; 1 - 7a8: 08 94 sec - 7aa: a1 08 sbc r10, r1 - 7ac: b1 08 sbc r11, r1 - 7ae: d7 fe sbrs r13, 7 - 7b0: dc cf rjmp .-72 ; 0x76a + 804: da 94 dec r13 + 806: 21 97 sbiw r28, 0x01 ; 1 + 808: 08 94 sec + 80a: a1 08 sbc r10, r1 + 80c: b1 08 sbc r11, r1 + 80e: d7 fe sbrs r13, 7 + 810: de cf rjmp .-68 ; 0x7ce string[i] = (zahl % 10) + '0'; } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; } } - 7b2: df 91 pop r29 - 7b4: cf 91 pop r28 - 7b6: 1f 91 pop r17 - 7b8: 0f 91 pop r16 - 7ba: ff 90 pop r15 - 7bc: ef 90 pop r14 - 7be: df 90 pop r13 - 7c0: cf 90 pop r12 - 7c2: bf 90 pop r11 - 7c4: af 90 pop r10 - 7c6: 9f 90 pop r9 - 7c8: 8f 90 pop r8 - 7ca: 7f 90 pop r7 - 7cc: 6f 90 pop r6 - 7ce: 5f 90 pop r5 - 7d0: 4f 90 pop r4 - 7d2: 3f 90 pop r3 - 7d4: 2f 90 pop r2 - 7d6: 08 95 ret - -000007d8
: + 812: df 91 pop r29 + 814: cf 91 pop r28 + 816: 1f 91 pop r17 + 818: 0f 91 pop r16 + 81a: ff 90 pop r15 + 81c: ef 90 pop r14 + 81e: df 90 pop r13 + 820: cf 90 pop r12 + 822: bf 90 pop r11 + 824: af 90 pop r10 + 826: 9f 90 pop r9 + 828: 8f 90 pop r8 + 82a: 7f 90 pop r7 + 82c: 6f 90 pop r6 + 82e: 5f 90 pop r5 + 830: 4f 90 pop r4 + 832: 3f 90 pop r3 + 834: 2f 90 pop r2 + 836: 08 95 ret + +00000838
: /** Main program entry point. This routine contains the overall program flow, including initial * setup of all components and the main program loop. */ int main(void) { - 7d8: cf 92 push r12 - 7da: df 92 push r13 - 7dc: ef 92 push r14 - 7de: ff 92 push r15 - 7e0: 0f 93 push r16 - 7e2: 1f 93 push r17 - 7e4: df 93 push r29 - 7e6: cf 93 push r28 - 7e8: cd b7 in r28, 0x3d ; 61 - 7ea: de b7 in r29, 0x3e ; 62 - 7ec: 60 97 sbiw r28, 0x10 ; 16 - 7ee: 0f b6 in r0, 0x3f ; 63 - 7f0: f8 94 cli - 7f2: de bf out 0x3e, r29 ; 62 - 7f4: 0f be out 0x3f, r0 ; 63 - 7f6: cd bf out 0x3d, r28 ; 61 + 838: ff 92 push r15 + 83a: 0f 93 push r16 + 83c: 1f 93 push r17 + 83e: df 93 push r29 + 840: cf 93 push r28 + 842: cd b7 in r28, 0x3d ; 61 + 844: de b7 in r29, 0x3e ; 62 + 846: 60 97 sbiw r28, 0x10 ; 16 + 848: 0f b6 in r0, 0x3f ; 63 + 84a: f8 94 cli + 84c: de bf out 0x3e, r29 ; 62 + 84e: 0f be out 0x3f, r0 ; 63 + 850: cd bf out 0x3d, r28 ; 61 char dummy; uint8_t field_val = 0; SetupHardware(); - 7f8: c5 de rcall .-630 ; 0x584 + 852: ca de rcall .-620 ; 0x5e8 RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - 7fa: 80 e3 ldi r24, 0x30 ; 48 - 7fc: 91 e0 ldi r25, 0x01 ; 1 - 7fe: 6c e3 ldi r22, 0x3C ; 60 - 800: 71 e0 ldi r23, 0x01 ; 1 - 802: ea dc rcall .-1580 ; 0x1d8 + 854: 82 e4 ldi r24, 0x42 ; 66 + 856: 91 e0 ldi r25, 0x01 ; 1 + 858: 6e e4 ldi r22, 0x4E ; 78 + 85a: 71 e0 ldi r23, 0x01 ; 1 + 85c: bd dc rcall .-1670 ; 0x1d8 RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - 804: 8c eb ldi r24, 0xBC ; 188 - 806: 91 e0 ldi r25, 0x01 ; 1 - 808: 68 ec ldi r22, 0xC8 ; 200 - 80a: 71 e0 ldi r23, 0x01 ; 1 - 80c: e5 dc rcall .-1590 ; 0x1d8 + 85e: 8e ec ldi r24, 0xCE ; 206 + 860: 91 e0 ldi r25, 0x01 ; 1 + 862: 6a ed ldi r22, 0xDA ; 218 + 864: 71 e0 ldi r23, 0x01 ; 1 + 866: b8 dc rcall .-1680 ; 0x1d8 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - 80e: 78 94 sei + 868: 78 94 sei // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - 810: 25 de rcall .-950 ; 0x45c + 86a: f8 dd rcall .-1040 ; 0x45c #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 812: 8f ef ldi r24, 0xFF ; 255 - 814: 99 e6 ldi r25, 0x69 ; 105 - 816: a8 e1 ldi r26, 0x18 ; 24 - 818: 81 50 subi r24, 0x01 ; 1 - 81a: 90 40 sbci r25, 0x00 ; 0 - 81c: a0 40 sbci r26, 0x00 ; 0 - 81e: e1 f7 brne .-8 ; 0x818 - 820: 00 c0 rjmp .+0 ; 0x822 - 822: 00 00 nop + 86c: 8f ef ldi r24, 0xFF ; 255 + 86e: 99 e6 ldi r25, 0x69 ; 105 + 870: a8 e1 ldi r26, 0x18 ; 24 + 872: 81 50 subi r24, 0x01 ; 1 + 874: 90 40 sbci r25, 0x00 ; 0 + 876: a0 40 sbci r26, 0x00 ; 0 + 878: e1 f7 brne .-8 ; 0x872 + 87a: 00 c0 rjmp .+0 ; 0x87c + 87c: 00 00 nop _delay_ms(500); sei(); - 824: 78 94 sei + 87e: 78 94 sei +// // end of keypad mode demo block // -// #elif DEMO_MODE == RELATIVE_MODE - // begin of relative mode demo block -// uart_puts("you selected the relative position demo modus:\n\r"); -// touchpad_set_rel_mode_100dpi();// use touchpad in relative mode - touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution - 826: 2b de rcall .-938 ; 0x47e - uint8_t x, y = 0; - 828: ff 24 eor r15, r15 +// #elif DEMO_MODE == ABSOLUTE_MODE + // begin of keypad mode demo block +// uart_puts("you selected the absolute position demo modus:\n\r"); + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" + 880: fe dd rcall .-1028 ; 0x47e + 882: 8f ef ldi r24, 0xFF ; 255 + 884: 99 e6 ldi r25, 0x69 ; 105 + 886: a8 e1 ldi r26, 0x18 ; 24 + 888: 81 50 subi r24, 0x01 ; 1 + 88a: 90 40 sbci r25, 0x00 ; 0 + 88c: a0 40 sbci r26, 0x00 ; 0 + 88e: e1 f7 brne .-8 ; 0x888 + 890: 00 c0 rjmp .+0 ; 0x892 + 892: 00 00 nop // _delay_ms(1000); // end uint8_t loopcounter=0; - 82a: dd 24 eor r13, r13 - } else { - y = (y + dy); + 894: ff 24 eor r15, r15 + continue; } + touchpad_read(); // read data from the touchpad uart_puts("x_pos: "); - my_uitoa(x, stringbuffer, 4); - 82c: 8e 01 movw r16, r28 - 82e: 0f 5f subi r16, 0xFF ; 255 - 830: 1f 4f sbci r17, 0xFF ; 255 - uint8_t x, y = 0; - int8_t dx, dy = 0; - + my_uitoa(x_abs(),stringbuffer,4);// x_abs returns current x position of your finger + 896: 8e 01 movw r16, r28 + 898: 0f 5f subi r16, 0xFF ; 255 + 89a: 1f 4f sbci r17, 0xFF ; 255 +// uart_puts("you selected the absolute position demo modus:\n\r"); + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" + _delay_ms(500); while (1) { Usb2SerialTask(); - 832: 4f de rcall .-866 ; 0x4d2 + 89c: 4c de rcall .-872 ; 0x536 loopcounter++; - 834: d3 94 inc r13 + 89e: f3 94 inc r15 if(loopcounter) { - 836: e9 f7 brne .-6 ; 0x832 + 8a0: e9 f7 brne .-6 ; 0x89c continue; } - touchpad_read(); // read data from touchpad - 838: 19 de rcall .-974 ; 0x46c - - dx = delta_x();// returns the amount your finger has moved in x direction since last readout - 83a: 3b de rcall .-906 ; 0x4b2 - 83c: c8 2e mov r12, r24 - dy = delta_y();// returns the amount your finger has moved in y direction since last readout - 83e: 29 de rcall .-942 ; 0x492 - - // increment/decrement some dummy variables with the - if (x + dx > 255) { - 840: 2c 2d mov r18, r12 - 842: 33 27 eor r19, r19 - 844: 27 fd sbrc r18, 7 - 846: 30 95 com r19 - 848: 2e 0d add r18, r14 - 84a: 31 1d adc r19, r1 - 84c: 2f 3f cpi r18, 0xFF ; 255 - 84e: 31 05 cpc r19, r1 - 850: 09 f0 breq .+2 ; 0x854 - 852: 24 f4 brge .+8 ; 0x85c - x = 255; - } else if (x + dx < 0) { - 854: 37 fd sbrc r19, 7 - 856: 05 c0 rjmp .+10 ; 0x862 - x = 0; - } else { - x = (x + dx); - 858: ec 0c add r14, r12 - 85a: 04 c0 rjmp .+8 ; 0x864 - dx = delta_x();// returns the amount your finger has moved in x direction since last readout - dy = delta_y();// returns the amount your finger has moved in y direction since last readout - - // increment/decrement some dummy variables with the - if (x + dx > 255) { - x = 255; - 85c: ee 24 eor r14, r14 - 85e: ea 94 dec r14 - 860: 01 c0 rjmp .+2 ; 0x864 - } else if (x + dx < 0) { - x = 0; - 862: ee 24 eor r14, r14 - } else { - x = (x + dx); - } - - if (y + dy > 255) { - 864: 28 2f mov r18, r24 - 866: 33 27 eor r19, r19 - 868: 27 fd sbrc r18, 7 - 86a: 30 95 com r19 - 86c: 2f 0d add r18, r15 - 86e: 31 1d adc r19, r1 - 870: 2f 3f cpi r18, 0xFF ; 255 - 872: 31 05 cpc r19, r1 - 874: 09 f0 breq .+2 ; 0x878 - 876: 24 f4 brge .+8 ; 0x880 - y = 255; - } else if (y + dy < 0) { - 878: 37 fd sbrc r19, 7 - 87a: 05 c0 rjmp .+10 ; 0x886 - y = 0; - } else { - y = (y + dy); - 87c: f8 0e add r15, r24 - 87e: 04 c0 rjmp .+8 ; 0x888 - } else { - x = (x + dx); - } - - if (y + dy > 255) { - y = 255; - 880: ff 24 eor r15, r15 - 882: fa 94 dec r15 - 884: 01 c0 rjmp .+2 ; 0x888 - } else if (y + dy < 0) { - y = 0; - 886: ff 24 eor r15, r15 - } else { - y = (y + dy); - } - + touchpad_read(); // read data from the touchpad + 8a2: e4 dd rcall .-1080 ; 0x46c uart_puts("x_pos: "); - 888: 80 e0 ldi r24, 0x00 ; 0 - 88a: 91 e0 ldi r25, 0x01 ; 1 - 88c: 2a df rcall .-428 ; 0x6e2 - my_uitoa(x, stringbuffer, 4); - 88e: 6e 2d mov r22, r14 - 890: 70 e0 ldi r23, 0x00 ; 0 - 892: 80 e0 ldi r24, 0x00 ; 0 - 894: 90 e0 ldi r25, 0x00 ; 0 - 896: a8 01 movw r20, r16 - 898: 24 e0 ldi r18, 0x04 ; 4 - 89a: 36 df rcall .-404 ; 0x708 + 8a4: 80 e0 ldi r24, 0x00 ; 0 + 8a6: 91 e0 ldi r25, 0x01 ; 1 + 8a8: 4e df rcall .-356 ; 0x746 + my_uitoa(x_abs(),stringbuffer,4);// x_abs returns current x position of your finger + 8aa: 08 de rcall .-1008 ; 0x4bc + 8ac: bc 01 movw r22, r24 + 8ae: 80 e0 ldi r24, 0x00 ; 0 + 8b0: 90 e0 ldi r25, 0x00 ; 0 + 8b2: a8 01 movw r20, r16 + 8b4: 24 e0 ldi r18, 0x04 ; 4 + 8b6: 5a df rcall .-332 ; 0x76c + uart_puts(stringbuffer); + 8b8: c8 01 movw r24, r16 + 8ba: 45 df rcall .-374 ; 0x746 + uart_puts(" y_pos: "); + 8bc: 88 e0 ldi r24, 0x08 ; 8 + 8be: 91 e0 ldi r25, 0x01 ; 1 + 8c0: 42 df rcall .-380 ; 0x746 + my_uitoa(y_abs(),stringbuffer,4);// y_abs returns current y position of your finger + 8c2: 1a de rcall .-972 ; 0x4f8 + 8c4: bc 01 movw r22, r24 + 8c6: 80 e0 ldi r24, 0x00 ; 0 + 8c8: 90 e0 ldi r25, 0x00 ; 0 + 8ca: a8 01 movw r20, r16 + 8cc: 24 e0 ldi r18, 0x04 ; 4 + 8ce: 4e df rcall .-356 ; 0x76c uart_puts(stringbuffer); - 89c: c8 01 movw r24, r16 - 89e: 21 df rcall .-446 ; 0x6e2 - uart_puts("\ty_pos: "); - 8a0: 88 e0 ldi r24, 0x08 ; 8 - 8a2: 91 e0 ldi r25, 0x01 ; 1 - 8a4: 1e df rcall .-452 ; 0x6e2 - my_uitoa(y, stringbuffer, 4); - 8a6: 6f 2d mov r22, r15 - 8a8: 70 e0 ldi r23, 0x00 ; 0 - 8aa: 80 e0 ldi r24, 0x00 ; 0 - 8ac: 90 e0 ldi r25, 0x00 ; 0 - 8ae: a8 01 movw r20, r16 - 8b0: 24 e0 ldi r18, 0x04 ; 4 - 8b2: 2a df rcall .-428 ; 0x708 + 8d0: c8 01 movw r24, r16 + 8d2: 39 df rcall .-398 ; 0x746 + uart_puts(" z_pressure: ");// z_pressure returns current "pressure" (contact area) of your finger + 8d4: 83 e1 ldi r24, 0x13 ; 19 + 8d6: 91 e0 ldi r25, 0x01 ; 1 + 8d8: 36 df rcall .-404 ; 0x746 + my_uitoa(z_pressure(),stringbuffer,4); + 8da: e5 dd rcall .-1078 ; 0x4a6 + 8dc: 68 2f mov r22, r24 + 8de: 70 e0 ldi r23, 0x00 ; 0 + 8e0: 80 e0 ldi r24, 0x00 ; 0 + 8e2: 90 e0 ldi r25, 0x00 ; 0 + 8e4: a8 01 movw r20, r16 + 8e6: 24 e0 ldi r18, 0x04 ; 4 + 8e8: 41 df rcall .-382 ; 0x76c uart_puts(stringbuffer); - 8b4: c8 01 movw r24, r16 - 8b6: 15 df rcall .-470 ; 0x6e2 + 8ea: c8 01 movw r24, r16 + 8ec: 2c df rcall .-424 ; 0x746 uart_puts("\r"); - 8b8: 81 e1 ldi r24, 0x11 ; 17 - 8ba: 91 e0 ldi r25, 0x01 ; 1 - 8bc: 12 df rcall .-476 ; 0x6e2 - 8be: b9 cf rjmp .-142 ; 0x832 + 8ee: 83 e2 ldi r24, 0x23 ; 35 + 8f0: 91 e0 ldi r25, 0x01 ; 1 + 8f2: 29 df rcall .-430 ; 0x746 + 8f4: d3 cf rjmp .-90 ; 0x89c -000008c0 : +000008f6 : const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) - 8c0: 92 30 cpi r25, 0x02 ; 2 - 8c2: 29 f0 breq .+10 ; 0x8ce - 8c4: 93 30 cpi r25, 0x03 ; 3 - 8c6: 41 f0 breq .+16 ; 0x8d8 - 8c8: 91 30 cpi r25, 0x01 ; 1 - 8ca: e9 f4 brne .+58 ; 0x906 - 8cc: 17 c0 rjmp .+46 ; 0x8fc + 8f6: 92 30 cpi r25, 0x02 ; 2 + 8f8: 29 f0 breq .+10 ; 0x904 + 8fa: 93 30 cpi r25, 0x03 ; 3 + 8fc: 41 f0 breq .+16 ; 0x90e + 8fe: 91 30 cpi r25, 0x01 ; 1 + 900: e9 f4 brne .+58 ; 0x93c + 902: 17 c0 rjmp .+46 ; 0x932 Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); - 8ce: 2e e3 ldi r18, 0x3E ; 62 - 8d0: 30 e0 ldi r19, 0x00 ; 0 + 904: 2e e3 ldi r18, 0x3E ; 62 + 906: 30 e0 ldi r19, 0x00 ; 0 case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; - 8d2: ea ea ldi r30, 0xAA ; 170 - 8d4: f0 e0 ldi r31, 0x00 ; 0 + 908: ea ea ldi r30, 0xAA ; 170 + 90a: f0 e0 ldi r31, 0x00 ; 0 Size = sizeof(USB_Descriptor_Configuration_t); break; - 8d6: 1b c0 rjmp .+54 ; 0x90e + 90c: 1b c0 rjmp .+54 ; 0x944 case DTYPE_String: switch (DescriptorNumber) - 8d8: 81 30 cpi r24, 0x01 ; 1 - 8da: 41 f0 breq .+16 ; 0x8ec - 8dc: 81 30 cpi r24, 0x01 ; 1 - 8de: 18 f0 brcs .+6 ; 0x8e6 - 8e0: 82 30 cpi r24, 0x02 ; 2 - 8e2: 89 f4 brne .+34 ; 0x906 - 8e4: 06 c0 rjmp .+12 ; 0x8f2 + 90e: 81 30 cpi r24, 0x01 ; 1 + 910: 41 f0 breq .+16 ; 0x922 + 912: 81 30 cpi r24, 0x01 ; 1 + 914: 18 f0 brcs .+6 ; 0x91c + 916: 82 30 cpi r24, 0x02 ; 2 + 918: 89 f4 brne .+34 ; 0x93c + 91a: 06 c0 rjmp .+12 ; 0x928 { case 0x00: Address = &LanguageString; Size = pgm_read_byte(&LanguageString.Header.Size); - 8e6: e8 ee ldi r30, 0xE8 ; 232 - 8e8: f0 e0 ldi r31, 0x00 ; 0 - 8ea: 05 c0 rjmp .+10 ; 0x8f6 + 91c: e8 ee ldi r30, 0xE8 ; 232 + 91e: f0 e0 ldi r31, 0x00 ; 0 + 920: 05 c0 rjmp .+10 ; 0x92c break; case 0x01: Address = &ManufacturerString; Size = pgm_read_byte(&ManufacturerString.Header.Size); - 8ec: ec ee ldi r30, 0xEC ; 236 - 8ee: f0 e0 ldi r31, 0x00 ; 0 - 8f0: 02 c0 rjmp .+4 ; 0x8f6 + 922: ec ee ldi r30, 0xEC ; 236 + 924: f0 e0 ldi r31, 0x00 ; 0 + 926: 02 c0 rjmp .+4 ; 0x92c break; case 0x02: Address = &ProductString; Size = pgm_read_byte(&ProductString.Header.Size); - 8f2: e6 e0 ldi r30, 0x06 ; 6 - 8f4: f1 e0 ldi r31, 0x01 ; 1 - 8f6: 24 91 lpm r18, Z+ - 8f8: 30 e0 ldi r19, 0x00 ; 0 + 928: e6 e0 ldi r30, 0x06 ; 6 + 92a: f1 e0 ldi r31, 0x01 ; 1 + 92c: 24 91 lpm r18, Z+ + 92e: 30 e0 ldi r19, 0x00 ; 0 break; - 8fa: 09 c0 rjmp .+18 ; 0x90e + 930: 09 c0 rjmp .+18 ; 0x944 switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); - 8fc: 22 e1 ldi r18, 0x12 ; 18 - 8fe: 30 e0 ldi r19, 0x00 ; 0 + 932: 22 e1 ldi r18, 0x12 ; 18 + 934: 30 e0 ldi r19, 0x00 ; 0 uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; - 900: e8 e9 ldi r30, 0x98 ; 152 - 902: f0 e0 ldi r31, 0x00 ; 0 - 904: 04 c0 rjmp .+8 ; 0x90e + 936: e8 e9 ldi r30, 0x98 ; 152 + 938: f0 e0 ldi r31, 0x00 ; 0 + 93a: 04 c0 rjmp .+8 ; 0x944 { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - 906: 20 e0 ldi r18, 0x00 ; 0 - 908: 30 e0 ldi r19, 0x00 ; 0 + 93c: 20 e0 ldi r18, 0x00 ; 0 + 93e: 30 e0 ldi r19, 0x00 ; 0 const void** const DescriptorAddress) { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; - 90a: e0 e0 ldi r30, 0x00 ; 0 - 90c: f0 e0 ldi r31, 0x00 ; 0 + 940: e0 e0 ldi r30, 0x00 ; 0 + 942: f0 e0 ldi r31, 0x00 ; 0 } break; } *DescriptorAddress = Address; - 90e: da 01 movw r26, r20 - 910: 11 96 adiw r26, 0x01 ; 1 - 912: fc 93 st X, r31 - 914: ee 93 st -X, r30 + 944: da 01 movw r26, r20 + 946: 11 96 adiw r26, 0x01 ; 1 + 948: fc 93 st X, r31 + 94a: ee 93 st -X, r30 return Size; } - 916: c9 01 movw r24, r18 - 918: 08 95 ret + 94c: c9 01 movw r24, r18 + 94e: 08 95 ret -0000091a : +00000950 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 91a: 28 2f mov r18, r24 - 91c: 39 2f mov r19, r25 - 91e: f9 01 movw r30, r18 + 950: 28 2f mov r18, r24 + 952: 39 2f mov r19, r25 + 954: f9 01 movw r30, r18 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 920: 80 91 62 02 lds r24, 0x0262 - 924: 90 91 63 02 lds r25, 0x0263 - 928: 86 17 cp r24, r22 - 92a: 97 07 cpc r25, r23 - 92c: 18 f4 brcc .+6 ; 0x934 - 92e: bc 01 movw r22, r24 - 930: 20 e0 ldi r18, 0x00 ; 0 - 932: 34 c0 rjmp .+104 ; 0x99c + 956: 80 91 74 02 lds r24, 0x0274 + 95a: 90 91 75 02 lds r25, 0x0275 + 95e: 86 17 cp r24, r22 + 960: 97 07 cpc r25, r23 + 962: 18 f4 brcc .+6 ; 0x96a + 964: bc 01 movw r22, r24 + 966: 20 e0 ldi r18, 0x00 ; 0 + 968: 34 c0 rjmp .+104 ; 0x9d2 Length = USB_ControlRequest.wLength; else if (!(Length)) - 934: 61 15 cp r22, r1 - 936: 71 05 cpc r23, r1 - 938: d9 f7 brne .-10 ; 0x930 + 96a: 61 15 cp r22, r1 + 96c: 71 05 cpc r23, r1 + 96e: d9 f7 brne .-10 ; 0x966 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 93a: 80 91 e8 00 lds r24, 0x00E8 - 93e: 8e 77 andi r24, 0x7E ; 126 - 940: 80 93 e8 00 sts 0x00E8, r24 - 944: f5 cf rjmp .-22 ; 0x930 + 970: 80 91 e8 00 lds r24, 0x00E8 + 974: 8e 77 andi r24, 0x7E ; 126 + 976: 80 93 e8 00 sts 0x00E8, r24 + 97a: f5 cf rjmp .-22 ; 0x966 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 946: 8e b3 in r24, 0x1e ; 30 + 97c: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 948: 88 23 and r24, r24 - 94a: e9 f1 breq .+122 ; 0x9c6 + 97e: 88 23 and r24, r24 + 980: e9 f1 breq .+122 ; 0x9fc return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 94c: 85 30 cpi r24, 0x05 ; 5 - 94e: b9 f1 breq .+110 ; 0x9be + 982: 85 30 cpi r24, 0x05 ; 5 + 984: b9 f1 breq .+110 ; 0x9f4 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 950: 80 91 e8 00 lds r24, 0x00E8 + 986: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - 954: 83 fd sbrc r24, 3 - 956: 35 c0 rjmp .+106 ; 0x9c2 + 98a: 83 fd sbrc r24, 3 + 98c: 35 c0 rjmp .+106 ; 0x9f8 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 958: 80 91 e8 00 lds r24, 0x00E8 + 98e: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - 95c: 82 fd sbrc r24, 2 - 95e: 29 c0 rjmp .+82 ; 0x9b2 + 992: 82 fd sbrc r24, 2 + 994: 29 c0 rjmp .+82 ; 0x9e8 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 960: 80 91 e8 00 lds r24, 0x00E8 + 996: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - 964: 80 ff sbrs r24, 0 - 966: 1a c0 rjmp .+52 ; 0x99c + 99a: 80 ff sbrs r24, 0 + 99c: 1a c0 rjmp .+52 ; 0x9d2 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 968: 80 91 f2 00 lds r24, 0x00F2 - 96c: 90 e0 ldi r25, 0x00 ; 0 + 99e: 80 91 f2 00 lds r24, 0x00F2 + 9a2: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 96e: 06 c0 rjmp .+12 ; 0x97c + 9a4: 06 c0 rjmp .+12 ; 0x9b2 { TEMPLATE_TRANSFER_BYTE(DataStream); - 970: 21 91 ld r18, Z+ + 9a6: 21 91 ld r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 972: 20 93 f1 00 sts 0x00F1, r18 + 9a8: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; - 976: 61 50 subi r22, 0x01 ; 1 - 978: 70 40 sbci r23, 0x00 ; 0 + 9ac: 61 50 subi r22, 0x01 ; 1 + 9ae: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - 97a: 01 96 adiw r24, 0x01 ; 1 + 9b0: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 97c: 61 15 cp r22, r1 - 97e: 71 05 cpc r23, r1 - 980: 19 f0 breq .+6 ; 0x988 - 982: 88 30 cpi r24, 0x08 ; 8 - 984: 91 05 cpc r25, r1 - 986: a0 f3 brcs .-24 ; 0x970 + 9b2: 61 15 cp r22, r1 + 9b4: 71 05 cpc r23, r1 + 9b6: 19 f0 breq .+6 ; 0x9be + 9b8: 88 30 cpi r24, 0x08 ; 8 + 9ba: 91 05 cpc r25, r1 + 9bc: a0 f3 brcs .-24 ; 0x9a6 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - 988: 21 e0 ldi r18, 0x01 ; 1 - 98a: 88 30 cpi r24, 0x08 ; 8 - 98c: 91 05 cpc r25, r1 - 98e: 09 f0 breq .+2 ; 0x992 - 990: 20 e0 ldi r18, 0x00 ; 0 + 9be: 21 e0 ldi r18, 0x01 ; 1 + 9c0: 88 30 cpi r24, 0x08 ; 8 + 9c2: 91 05 cpc r25, r1 + 9c4: 09 f0 breq .+2 ; 0x9c8 + 9c6: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 992: 80 91 e8 00 lds r24, 0x00E8 - 996: 8e 77 andi r24, 0x7E ; 126 - 998: 80 93 e8 00 sts 0x00E8, r24 + 9c8: 80 91 e8 00 lds r24, 0x00E8 + 9cc: 8e 77 andi r24, 0x7E ; 126 + 9ce: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - 99c: 61 15 cp r22, r1 - 99e: 71 05 cpc r23, r1 - 9a0: 91 f6 brne .-92 ; 0x946 - 9a2: 22 23 and r18, r18 - 9a4: 81 f6 brne .-96 ; 0x946 - 9a6: 05 c0 rjmp .+10 ; 0x9b2 + 9d2: 61 15 cp r22, r1 + 9d4: 71 05 cpc r23, r1 + 9d6: 91 f6 brne .-92 ; 0x97c + 9d8: 22 23 and r18, r18 + 9da: 81 f6 brne .-96 ; 0x97c + 9dc: 05 c0 rjmp .+10 ; 0x9e8 } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 9a8: 8e b3 in r24, 0x1e ; 30 + 9de: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 9aa: 88 23 and r24, r24 - 9ac: 61 f0 breq .+24 ; 0x9c6 + 9e0: 88 23 and r24, r24 + 9e2: 61 f0 breq .+24 ; 0x9fc return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 9ae: 85 30 cpi r24, 0x05 ; 5 - 9b0: 61 f0 breq .+24 ; 0x9ca + 9e4: 85 30 cpi r24, 0x05 ; 5 + 9e6: 61 f0 breq .+24 ; 0xa00 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 9b2: 80 91 e8 00 lds r24, 0x00E8 + 9e8: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - 9b6: 82 ff sbrs r24, 2 - 9b8: f7 cf rjmp .-18 ; 0x9a8 + 9ec: 82 ff sbrs r24, 2 + 9ee: f7 cf rjmp .-18 ; 0x9de return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - 9ba: 80 e0 ldi r24, 0x00 ; 0 - 9bc: 08 95 ret + 9f0: 80 e0 ldi r24, 0x00 ; 0 + 9f2: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 9be: 83 e0 ldi r24, 0x03 ; 3 - 9c0: 08 95 ret + 9f4: 83 e0 ldi r24, 0x03 ; 3 + 9f6: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - 9c2: 81 e0 ldi r24, 0x01 ; 1 - 9c4: 08 95 ret + 9f8: 81 e0 ldi r24, 0x01 ; 1 + 9fa: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - 9c6: 82 e0 ldi r24, 0x02 ; 2 - 9c8: 08 95 ret + 9fc: 82 e0 ldi r24, 0x02 ; 2 + 9fe: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - 9ca: 83 e0 ldi r24, 0x03 ; 3 + a00: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - 9cc: 08 95 ret + a02: 08 95 ret -000009ce : +00000a04 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 9ce: e8 2f mov r30, r24 - 9d0: f9 2f mov r31, r25 + a04: e8 2f mov r30, r24 + a06: f9 2f mov r31, r25 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 9d2: 80 91 62 02 lds r24, 0x0262 - 9d6: 90 91 63 02 lds r25, 0x0263 - 9da: 86 17 cp r24, r22 - 9dc: 97 07 cpc r25, r23 - 9de: 18 f4 brcc .+6 ; 0x9e6 - 9e0: bc 01 movw r22, r24 - 9e2: 20 e0 ldi r18, 0x00 ; 0 - 9e4: 36 c0 rjmp .+108 ; 0xa52 + a08: 80 91 74 02 lds r24, 0x0274 + a0c: 90 91 75 02 lds r25, 0x0275 + a10: 86 17 cp r24, r22 + a12: 97 07 cpc r25, r23 + a14: 18 f4 brcc .+6 ; 0xa1c + a16: bc 01 movw r22, r24 + a18: 20 e0 ldi r18, 0x00 ; 0 + a1a: 36 c0 rjmp .+108 ; 0xa88 Length = USB_ControlRequest.wLength; else if (!(Length)) - 9e6: 61 15 cp r22, r1 - 9e8: 71 05 cpc r23, r1 - 9ea: d9 f7 brne .-10 ; 0x9e2 + a1c: 61 15 cp r22, r1 + a1e: 71 05 cpc r23, r1 + a20: d9 f7 brne .-10 ; 0xa18 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 9ec: 80 91 e8 00 lds r24, 0x00E8 - 9f0: 8e 77 andi r24, 0x7E ; 126 - 9f2: 80 93 e8 00 sts 0x00E8, r24 - 9f6: f5 cf rjmp .-22 ; 0x9e2 + a22: 80 91 e8 00 lds r24, 0x00E8 + a26: 8e 77 andi r24, 0x7E ; 126 + a28: 80 93 e8 00 sts 0x00E8, r24 + a2c: f5 cf rjmp .-22 ; 0xa18 Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 9f8: 8e b3 in r24, 0x1e ; 30 + a2e: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 9fa: 88 23 and r24, r24 - 9fc: 09 f4 brne .+2 ; 0xa00 - 9fe: 3e c0 rjmp .+124 ; 0xa7c + a30: 88 23 and r24, r24 + a32: 09 f4 brne .+2 ; 0xa36 + a34: 3e c0 rjmp .+124 ; 0xab2 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a00: 85 30 cpi r24, 0x05 ; 5 - a02: c1 f1 breq .+112 ; 0xa74 + a36: 85 30 cpi r24, 0x05 ; 5 + a38: c1 f1 breq .+112 ; 0xaaa * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - a04: 80 91 e8 00 lds r24, 0x00E8 + a3a: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - a08: 83 fd sbrc r24, 3 - a0a: 36 c0 rjmp .+108 ; 0xa78 + a3e: 83 fd sbrc r24, 3 + a40: 36 c0 rjmp .+108 ; 0xaae * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - a0c: 80 91 e8 00 lds r24, 0x00E8 + a42: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - a10: 82 fd sbrc r24, 2 - a12: 2a c0 rjmp .+84 ; 0xa68 + a46: 82 fd sbrc r24, 2 + a48: 2a c0 rjmp .+84 ; 0xa9e * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - a14: 80 91 e8 00 lds r24, 0x00E8 + a4a: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - a18: 80 ff sbrs r24, 0 - a1a: 1b c0 rjmp .+54 ; 0xa52 + a4e: 80 ff sbrs r24, 0 + a50: 1b c0 rjmp .+54 ; 0xa88 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - a1c: 80 91 f2 00 lds r24, 0x00F2 - a20: 90 e0 ldi r25, 0x00 ; 0 + a52: 80 91 f2 00 lds r24, 0x00F2 + a56: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a22: 07 c0 rjmp .+14 ; 0xa32 + a58: 07 c0 rjmp .+14 ; 0xa68 { TEMPLATE_TRANSFER_BYTE(DataStream); - a24: 24 91 lpm r18, Z+ + a5a: 24 91 lpm r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - a26: 20 93 f1 00 sts 0x00F1, r18 + a5c: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); - a2a: 31 96 adiw r30, 0x01 ; 1 + a60: 31 96 adiw r30, 0x01 ; 1 Length--; - a2c: 61 50 subi r22, 0x01 ; 1 - a2e: 70 40 sbci r23, 0x00 ; 0 + a62: 61 50 subi r22, 0x01 ; 1 + a64: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - a30: 01 96 adiw r24, 0x01 ; 1 + a66: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a32: 61 15 cp r22, r1 - a34: 71 05 cpc r23, r1 - a36: 19 f0 breq .+6 ; 0xa3e - a38: 88 30 cpi r24, 0x08 ; 8 - a3a: 91 05 cpc r25, r1 - a3c: 98 f3 brcs .-26 ; 0xa24 + a68: 61 15 cp r22, r1 + a6a: 71 05 cpc r23, r1 + a6c: 19 f0 breq .+6 ; 0xa74 + a6e: 88 30 cpi r24, 0x08 ; 8 + a70: 91 05 cpc r25, r1 + a72: 98 f3 brcs .-26 ; 0xa5a TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - a3e: 21 e0 ldi r18, 0x01 ; 1 - a40: 88 30 cpi r24, 0x08 ; 8 - a42: 91 05 cpc r25, r1 - a44: 09 f0 breq .+2 ; 0xa48 - a46: 20 e0 ldi r18, 0x00 ; 0 + a74: 21 e0 ldi r18, 0x01 ; 1 + a76: 88 30 cpi r24, 0x08 ; 8 + a78: 91 05 cpc r25, r1 + a7a: 09 f0 breq .+2 ; 0xa7e + a7c: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - a48: 80 91 e8 00 lds r24, 0x00E8 - a4c: 8e 77 andi r24, 0x7E ; 126 - a4e: 80 93 e8 00 sts 0x00E8, r24 + a7e: 80 91 e8 00 lds r24, 0x00E8 + a82: 8e 77 andi r24, 0x7E ; 126 + a84: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - a52: 61 15 cp r22, r1 - a54: 71 05 cpc r23, r1 - a56: 81 f6 brne .-96 ; 0x9f8 - a58: 22 23 and r18, r18 - a5a: 71 f6 brne .-100 ; 0x9f8 - a5c: 05 c0 rjmp .+10 ; 0xa68 + a88: 61 15 cp r22, r1 + a8a: 71 05 cpc r23, r1 + a8c: 81 f6 brne .-96 ; 0xa2e + a8e: 22 23 and r18, r18 + a90: 71 f6 brne .-100 ; 0xa2e + a92: 05 c0 rjmp .+10 ; 0xa9e } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - a5e: 8e b3 in r24, 0x1e ; 30 + a94: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a60: 88 23 and r24, r24 - a62: 61 f0 breq .+24 ; 0xa7c + a96: 88 23 and r24, r24 + a98: 61 f0 breq .+24 ; 0xab2 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a64: 85 30 cpi r24, 0x05 ; 5 - a66: 61 f0 breq .+24 ; 0xa80 + a9a: 85 30 cpi r24, 0x05 ; 5 + a9c: 61 f0 breq .+24 ; 0xab6 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - a68: 80 91 e8 00 lds r24, 0x00E8 + a9e: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - a6c: 82 ff sbrs r24, 2 - a6e: f7 cf rjmp .-18 ; 0xa5e + aa2: 82 ff sbrs r24, 2 + aa4: f7 cf rjmp .-18 ; 0xa94 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - a70: 80 e0 ldi r24, 0x00 ; 0 - a72: 08 95 ret + aa6: 80 e0 ldi r24, 0x00 ; 0 + aa8: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - a74: 83 e0 ldi r24, 0x03 ; 3 - a76: 08 95 ret + aaa: 83 e0 ldi r24, 0x03 ; 3 + aac: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - a78: 81 e0 ldi r24, 0x01 ; 1 - a7a: 08 95 ret + aae: 81 e0 ldi r24, 0x01 ; 1 + ab0: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - a7c: 82 e0 ldi r24, 0x02 ; 2 - a7e: 08 95 ret + ab2: 82 e0 ldi r24, 0x02 ; 2 + ab4: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - a80: 83 e0 ldi r24, 0x03 ; 3 + ab6: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - a82: 08 95 ret + ab8: 08 95 ret -00000a84 : +00000aba : UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - a84: 98 2f mov r25, r24 - a86: 2c c0 rjmp .+88 ; 0xae0 + aba: 98 2f mov r25, r24 + abc: 2c c0 rjmp .+88 ; 0xb16 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - a88: 29 2f mov r18, r25 - a8a: 2f 70 andi r18, 0x0F ; 15 - a8c: 20 93 e9 00 sts 0x00E9, r18 + abe: 29 2f mov r18, r25 + ac0: 2f 70 andi r18, 0x0F ; 15 + ac2: 20 93 e9 00 sts 0x00E9, r18 uint8_t UECFG1XTemp; uint8_t UEIENXTemp; Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) - a90: 98 17 cp r25, r24 - a92: 39 f0 breq .+14 ; 0xaa2 + ac6: 98 17 cp r25, r24 + ac8: 39 f0 breq .+14 ; 0xad8 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; } else { UECFG0XTemp = UECFG0X; - a94: 70 91 ec 00 lds r23, 0x00EC + aca: 70 91 ec 00 lds r23, 0x00EC UECFG1XTemp = UECFG1X; - a98: 20 91 ed 00 lds r18, 0x00ED + ace: 20 91 ed 00 lds r18, 0x00ED UEIENXTemp = UEIENX; - a9c: 50 91 f0 00 lds r21, 0x00F0 - aa0: 03 c0 rjmp .+6 ; 0xaa8 + ad2: 50 91 f0 00 lds r21, 0x00F0 + ad6: 03 c0 rjmp .+6 ; 0xade Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; UECFG1XTemp = UECFG1XData; - aa2: 24 2f mov r18, r20 + ad8: 24 2f mov r18, r20 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; - aa4: 76 2f mov r23, r22 + ada: 76 2f mov r23, r22 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; - aa6: 50 e0 ldi r21, 0x00 ; 0 + adc: 50 e0 ldi r21, 0x00 ; 0 UECFG0XTemp = UECFG0X; UECFG1XTemp = UECFG1X; UEIENXTemp = UEIENX; } if (!(UECFG1XTemp & (1 << ALLOC))) - aa8: 21 ff sbrs r18, 1 - aaa: 19 c0 rjmp .+50 ; 0xade + ade: 21 ff sbrs r18, 1 + ae0: 19 c0 rjmp .+50 ; 0xb14 * to and from a host. */ static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_DisableEndpoint(void) { UECONX &= ~(1 << EPEN); - aac: 30 91 eb 00 lds r19, 0x00EB - ab0: 3e 7f andi r19, 0xFE ; 254 - ab2: 30 93 eb 00 sts 0x00EB, r19 + ae2: 30 91 eb 00 lds r19, 0x00EB + ae6: 3e 7f andi r19, 0xFE ; 254 + ae8: 30 93 eb 00 sts 0x00EB, r19 continue; Endpoint_DisableEndpoint(); UECFG1X &= ~(1 << ALLOC); - ab6: 30 91 ed 00 lds r19, 0x00ED - aba: 3d 7f andi r19, 0xFD ; 253 - abc: 30 93 ed 00 sts 0x00ED, r19 + aec: 30 91 ed 00 lds r19, 0x00ED + af0: 3d 7f andi r19, 0xFD ; 253 + af2: 30 93 ed 00 sts 0x00ED, r19 * \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint(). */ static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_EnableEndpoint(void) { UECONX |= (1 << EPEN); - ac0: 30 91 eb 00 lds r19, 0x00EB - ac4: 31 60 ori r19, 0x01 ; 1 - ac6: 30 93 eb 00 sts 0x00EB, r19 + af6: 30 91 eb 00 lds r19, 0x00EB + afa: 31 60 ori r19, 0x01 ; 1 + afc: 30 93 eb 00 sts 0x00EB, r19 Endpoint_EnableEndpoint(); UECFG0X = UECFG0XTemp; - aca: 70 93 ec 00 sts 0x00EC, r23 + b00: 70 93 ec 00 sts 0x00EC, r23 UECFG1X = UECFG1XTemp; - ace: 20 93 ed 00 sts 0x00ED, r18 + b04: 20 93 ed 00 sts 0x00ED, r18 UEIENX = UEIENXTemp; - ad2: 50 93 f0 00 sts 0x00F0, r21 + b08: 50 93 f0 00 sts 0x00F0, r21 * \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise. */ static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsConfigured(void) { return ((UESTA0X & (1 << CFGOK)) ? true : false); - ad6: 20 91 ee 00 lds r18, 0x00EE + b0c: 20 91 ee 00 lds r18, 0x00EE if (!(Endpoint_IsConfigured())) - ada: 27 ff sbrs r18, 7 - adc: 08 c0 rjmp .+16 ; 0xaee + b10: 27 ff sbrs r18, 7 + b12: 08 c0 rjmp .+16 ; 0xb24 UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - ade: 9f 5f subi r25, 0xFF ; 255 - ae0: 95 30 cpi r25, 0x05 ; 5 - ae2: 90 f2 brcs .-92 ; 0xa88 + b14: 9f 5f subi r25, 0xFF ; 255 + b16: 95 30 cpi r25, 0x05 ; 5 + b18: 90 f2 brcs .-92 ; 0xabe */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - ae4: 8f 70 andi r24, 0x0F ; 15 - ae6: 80 93 e9 00 sts 0x00E9, r24 + b1a: 8f 70 andi r24, 0x0F ; 15 + b1c: 80 93 e9 00 sts 0x00E9, r24 if (!(Endpoint_IsConfigured())) return false; } Endpoint_SelectEndpoint(Number); return true; - aea: 81 e0 ldi r24, 0x01 ; 1 - aec: 08 95 ret + b20: 81 e0 ldi r24, 0x01 ; 1 + b22: 08 95 ret UECFG0X = UECFG0XTemp; UECFG1X = UECFG1XTemp; UEIENX = UEIENXTemp; if (!(Endpoint_IsConfigured())) return false; - aee: 80 e0 ldi r24, 0x00 ; 0 + b24: 80 e0 ldi r24, 0x00 ; 0 } Endpoint_SelectEndpoint(Number); return true; #endif } - af0: 08 95 ret + b26: 08 95 ret -00000af2 : +00000b28 : uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { - af2: ef 92 push r14 - af4: ff 92 push r15 - af6: 0f 93 push r16 - af8: 1f 93 push r17 - afa: cf 93 push r28 - afc: df 93 push r29 - afe: 16 2f mov r17, r22 + b28: ef 92 push r14 + b2a: ff 92 push r15 + b2c: 0f 93 push r16 + b2e: 1f 93 push r17 + b30: cf 93 push r28 + b32: df 93 push r29 + b34: 16 2f mov r17, r22 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - b00: e8 2e mov r14, r24 - b02: e7 01 movw r28, r14 - b04: 7e 01 movw r14, r28 - b06: f9 2e mov r15, r25 - b08: e7 01 movw r28, r14 + b36: e8 2e mov r14, r24 + b38: e7 01 movw r28, r14 + b3a: 7e 01 movw r14, r28 + b3c: f9 2e mov r15, r25 + b3e: e7 01 movw r28, r14 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - b0a: 00 e0 ldi r16, 0x00 ; 0 - b0c: 2a c0 rjmp .+84 ; 0xb62 + b40: 00 e0 ldi r16, 0x00 ; 0 + b42: 2a c0 rjmp .+84 ; 0xb98 { if (!(Table[i].Address)) - b0e: 98 81 ld r25, Y - b10: 99 23 and r25, r25 - b12: 29 f1 breq .+74 ; 0xb5e + b44: 98 81 ld r25, Y + b46: 99 23 and r25, r25 + b48: 29 f1 breq .+74 ; 0xb94 continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - b14: 6b 81 ldd r22, Y+3 ; 0x03 - b16: e9 81 ldd r30, Y+1 ; 0x01 - b18: fa 81 ldd r31, Y+2 ; 0x02 - b1a: 2c 81 ldd r18, Y+4 ; 0x04 + b4a: 6b 81 ldd r22, Y+3 ; 0x03 + b4c: e9 81 ldd r30, Y+1 ; 0x01 + b4e: fa 81 ldd r31, Y+2 ; 0x02 + b50: 2c 81 ldd r18, Y+4 ; 0x04 static inline bool Endpoint_ConfigureEndpoint(const uint8_t Address, const uint8_t Type, const uint16_t Size, const uint8_t Banks) { uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - b1c: 89 2f mov r24, r25 - b1e: 8f 70 andi r24, 0x0F ; 15 + b52: 89 2f mov r24, r25 + b54: 8f 70 andi r24, 0x0F ; 15 if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - b20: 85 30 cpi r24, 0x05 ; 5 - b22: 18 f5 brcc .+70 ; 0xb6a + b56: 85 30 cpi r24, 0x05 ; 5 + b58: 18 f5 brcc .+70 ; 0xba0 return false; return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)), - b24: 62 95 swap r22 - b26: 66 0f add r22, r22 - b28: 66 0f add r22, r22 - b2a: 60 7c andi r22, 0xC0 ; 192 - b2c: 99 1f adc r25, r25 - b2e: 99 27 eor r25, r25 - b30: 99 1f adc r25, r25 + b5a: 62 95 swap r22 + b5c: 66 0f add r22, r22 + b5e: 66 0f add r22, r22 + b60: 60 7c andi r22, 0xC0 ; 192 + b62: 99 1f adc r25, r25 + b64: 99 27 eor r25, r25 + b66: 99 1f adc r25, r25 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - b32: 69 2b or r22, r25 - b34: 22 30 cpi r18, 0x02 ; 2 - b36: 10 f0 brcs .+4 ; 0xb3c - b38: 96 e0 ldi r25, 0x06 ; 6 - b3a: 01 c0 rjmp .+2 ; 0xb3e - b3c: 92 e0 ldi r25, 0x02 ; 2 + b68: 69 2b or r22, r25 + b6a: 22 30 cpi r18, 0x02 ; 2 + b6c: 10 f0 brcs .+4 ; 0xb72 + b6e: 96 e0 ldi r25, 0x06 ; 6 + b70: 01 c0 rjmp .+2 ; 0xb74 + b72: 92 e0 ldi r25, 0x02 ; 2 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; - b3e: 28 e0 ldi r18, 0x08 ; 8 - b40: 30 e0 ldi r19, 0x00 ; 0 + b74: 28 e0 ldi r18, 0x08 ; 8 + b76: 30 e0 ldi r19, 0x00 ; 0 /* Inline Functions: */ static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; - b42: 40 e0 ldi r20, 0x00 ; 0 - b44: 03 c0 rjmp .+6 ; 0xb4c + b78: 40 e0 ldi r20, 0x00 ; 0 + b7a: 03 c0 rjmp .+6 ; 0xb82 uint16_t CheckBytes = 8; while (CheckBytes < Bytes) { MaskVal++; - b46: 4f 5f subi r20, 0xFF ; 255 + b7c: 4f 5f subi r20, 0xFF ; 255 CheckBytes <<= 1; - b48: 22 0f add r18, r18 - b4a: 33 1f adc r19, r19 + b7e: 22 0f add r18, r18 + b80: 33 1f adc r19, r19 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; while (CheckBytes < Bytes) - b4c: 2e 17 cp r18, r30 - b4e: 3f 07 cpc r19, r31 - b50: d0 f3 brcs .-12 ; 0xb46 + b82: 2e 17 cp r18, r30 + b84: 3f 07 cpc r19, r31 + b86: d0 f3 brcs .-12 ; 0xb7c { MaskVal++; CheckBytes <<= 1; } return (MaskVal << EPSIZE0); - b52: 42 95 swap r20 - b54: 40 7f andi r20, 0xF0 ; 240 + b88: 42 95 swap r20 + b8a: 40 7f andi r20, 0xF0 ; 240 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - b56: 49 2b or r20, r25 - b58: 95 df rcall .-214 ; 0xa84 - b5a: 88 23 and r24, r24 - b5c: 31 f0 breq .+12 ; 0xb6a + b8c: 49 2b or r20, r25 + b8e: 95 df rcall .-214 ; 0xaba + b90: 88 23 and r24, r24 + b92: 31 f0 breq .+12 ; 0xba0 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - b5e: 0f 5f subi r16, 0xFF ; 255 - b60: 25 96 adiw r28, 0x05 ; 5 - b62: 01 17 cp r16, r17 - b64: a0 f2 brcs .-88 ; 0xb0e + b94: 0f 5f subi r16, 0xFF ; 255 + b96: 25 96 adiw r28, 0x05 ; 5 + b98: 01 17 cp r16, r17 + b9a: a0 f2 brcs .-88 ; 0xb44 if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; } return true; - b66: 81 e0 ldi r24, 0x01 ; 1 - b68: 01 c0 rjmp .+2 ; 0xb6c + b9c: 81 e0 ldi r24, 0x01 ; 1 + b9e: 01 c0 rjmp .+2 ; 0xba2 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - b6a: 80 e0 ldi r24, 0x00 ; 0 + ba0: 80 e0 ldi r24, 0x00 ; 0 } return true; } - b6c: df 91 pop r29 - b6e: cf 91 pop r28 - b70: 1f 91 pop r17 - b72: 0f 91 pop r16 - b74: ff 90 pop r15 - b76: ef 90 pop r14 - b78: 08 95 ret - -00000b7a : + ba2: df 91 pop r29 + ba4: cf 91 pop r28 + ba6: 1f 91 pop r17 + ba8: 0f 91 pop r16 + baa: ff 90 pop r15 + bac: ef 90 pop r14 + bae: 08 95 ret + +00000bb0 : } } void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - b7a: 80 91 5c 02 lds r24, 0x025C - b7e: 87 ff sbrs r24, 7 - b80: 11 c0 rjmp .+34 ; 0xba4 - b82: 03 c0 rjmp .+6 ; 0xb8a + bb0: 80 91 6e 02 lds r24, 0x026E + bb4: 87 ff sbrs r24, 7 + bb6: 11 c0 rjmp .+34 ; 0xbda + bb8: 03 c0 rjmp .+6 ; 0xbc0 { while (!(Endpoint_IsOUTReceived())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - b84: 8e b3 in r24, 0x1e ; 30 - b86: 88 23 and r24, r24 - b88: b1 f0 breq .+44 ; 0xbb6 + bba: 8e b3 in r24, 0x1e ; 30 + bbc: 88 23 and r24, r24 + bbe: b1 f0 breq .+44 ; 0xbec * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - b8a: 80 91 e8 00 lds r24, 0x00E8 + bc0: 80 91 e8 00 lds r24, 0x00E8 void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) { while (!(Endpoint_IsOUTReceived())) - b8e: 82 ff sbrs r24, 2 - b90: f9 cf rjmp .-14 ; 0xb84 + bc4: 82 ff sbrs r24, 2 + bc6: f9 cf rjmp .-14 ; 0xbba */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - b92: 80 91 e8 00 lds r24, 0x00E8 - b96: 8b 77 andi r24, 0x7B ; 123 - b98: 80 93 e8 00 sts 0x00E8, r24 - b9c: 08 95 ret + bc8: 80 91 e8 00 lds r24, 0x00E8 + bcc: 8b 77 andi r24, 0x7B ; 123 + bce: 80 93 e8 00 sts 0x00E8, r24 + bd2: 08 95 ret } else { while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - b9e: 8e b3 in r24, 0x1e ; 30 - ba0: 88 23 and r24, r24 - ba2: 49 f0 breq .+18 ; 0xbb6 + bd4: 8e b3 in r24, 0x1e ; 30 + bd6: 88 23 and r24, r24 + bd8: 49 f0 breq .+18 ; 0xbec * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - ba4: 80 91 e8 00 lds r24, 0x00E8 + bda: 80 91 e8 00 lds r24, 0x00E8 Endpoint_ClearOUT(); } else { while (!(Endpoint_IsINReady())) - ba8: 80 ff sbrs r24, 0 - baa: f9 cf rjmp .-14 ; 0xb9e + bde: 80 ff sbrs r24, 0 + be0: f9 cf rjmp .-14 ; 0xbd4 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - bac: 80 91 e8 00 lds r24, 0x00E8 - bb0: 8e 77 andi r24, 0x7E ; 126 - bb2: 80 93 e8 00 sts 0x00E8, r24 - bb6: 08 95 ret + be2: 80 91 e8 00 lds r24, 0x00E8 + be6: 8e 77 andi r24, 0x7E ; 126 + be8: 80 93 e8 00 sts 0x00E8, r24 + bec: 08 95 ret -00000bb8 : +00000bee : * \return Current USB frame number from the USB controller. */ static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint16_t USB_Device_GetFrameNumber(void) { return UDFNUM; - bb8: 80 91 e4 00 lds r24, 0x00E4 - bbc: 90 91 e5 00 lds r25, 0x00E5 + bee: 80 91 e4 00 lds r24, 0x00E4 + bf2: 90 91 e5 00 lds r25, 0x00E5 #if !defined(CONTROL_ONLY_DEVICE) uint8_t Endpoint_WaitUntilReady(void) { #if (USB_STREAM_TIMEOUT_MS < 0xFF) uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; - bc0: 44 e6 ldi r20, 0x64 ; 100 + bf6: 44 e6 ldi r20, 0x64 ; 100 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - bc2: 20 91 ec 00 lds r18, 0x00EC - bc6: 20 ff sbrs r18, 0 - bc8: 25 c0 rjmp .+74 ; 0xc14 + bf8: 20 91 ec 00 lds r18, 0x00EC + bfc: 20 ff sbrs r18, 0 + bfe: 25 c0 rjmp .+74 ; 0xc4a * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - bca: 20 91 e8 00 lds r18, 0x00E8 + c00: 20 91 e8 00 lds r18, 0x00E8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) - bce: 20 fd sbrc r18, 0 - bd0: 15 c0 rjmp .+42 ; 0xbfc + c04: 20 fd sbrc r18, 0 + c06: 15 c0 rjmp .+42 ; 0xc32 { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; } uint8_t USB_DeviceState_LCL = USB_DeviceState; - bd2: 2e b3 in r18, 0x1e ; 30 + c08: 2e b3 in r18, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - bd4: 22 23 and r18, r18 - bd6: a1 f0 breq .+40 ; 0xc00 + c0a: 22 23 and r18, r18 + c0c: a1 f0 breq .+40 ; 0xc36 return ENDPOINT_READYWAIT_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - bd8: 25 30 cpi r18, 0x05 ; 5 - bda: a1 f0 breq .+40 ; 0xc04 + c0e: 25 30 cpi r18, 0x05 ; 5 + c10: a1 f0 breq .+40 ; 0xc3a * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - bdc: 20 91 eb 00 lds r18, 0x00EB + c12: 20 91 eb 00 lds r18, 0x00EB return ENDPOINT_READYWAIT_BusSuspended; else if (Endpoint_IsStalled()) - be0: 25 fd sbrc r18, 5 - be2: 12 c0 rjmp .+36 ; 0xc08 - be4: 20 91 e4 00 lds r18, 0x00E4 - be8: 30 91 e5 00 lds r19, 0x00E5 + c16: 25 fd sbrc r18, 5 + c18: 12 c0 rjmp .+36 ; 0xc3e + c1a: 20 91 e4 00 lds r18, 0x00E4 + c1e: 30 91 e5 00 lds r19, 0x00E5 return ENDPOINT_READYWAIT_EndpointStalled; uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); if (CurrentFrameNumber != PreviousFrameNumber) - bec: 28 17 cp r18, r24 - bee: 39 07 cpc r19, r25 - bf0: 41 f3 breq .-48 ; 0xbc2 + c22: 28 17 cp r18, r24 + c24: 39 07 cpc r19, r25 + c26: 41 f3 breq .-48 ; 0xbf8 { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) - bf2: 44 23 and r20, r20 - bf4: 59 f0 breq .+22 ; 0xc0c - bf6: 41 50 subi r20, 0x01 ; 1 - bf8: c9 01 movw r24, r18 - bfa: e3 cf rjmp .-58 ; 0xbc2 + c28: 44 23 and r20, r20 + c2a: 59 f0 breq .+22 ; 0xc42 + c2c: 41 50 subi r20, 0x01 ; 1 + c2e: c9 01 movw r24, r18 + c30: e3 cf rjmp .-58 ; 0xbf8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; - bfc: 80 e0 ldi r24, 0x00 ; 0 - bfe: 08 95 ret + c32: 80 e0 ldi r24, 0x00 ; 0 + c34: 08 95 ret } uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_READYWAIT_DeviceDisconnected; - c00: 82 e0 ldi r24, 0x02 ; 2 - c02: 08 95 ret + c36: 82 e0 ldi r24, 0x02 ; 2 + c38: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_READYWAIT_BusSuspended; - c04: 83 e0 ldi r24, 0x03 ; 3 - c06: 08 95 ret + c3a: 83 e0 ldi r24, 0x03 ; 3 + c3c: 08 95 ret else if (Endpoint_IsStalled()) return ENDPOINT_READYWAIT_EndpointStalled; - c08: 81 e0 ldi r24, 0x01 ; 1 - c0a: 08 95 ret + c3e: 81 e0 ldi r24, 0x01 ; 1 + c40: 08 95 ret if (CurrentFrameNumber != PreviousFrameNumber) { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; - c0c: 84 e0 ldi r24, 0x04 ; 4 - c0e: 08 95 ret + c42: 84 e0 ldi r24, 0x04 ; 4 + c44: 08 95 ret return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; - c10: 80 e0 ldi r24, 0x00 ; 0 + c46: 80 e0 ldi r24, 0x00 ; 0 if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; } } } - c12: 08 95 ret + c48: 08 95 ret * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - c14: 20 91 e8 00 lds r18, 0x00E8 + c4a: 20 91 e8 00 lds r18, 0x00E8 if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) - c18: 22 ff sbrs r18, 2 - c1a: db cf rjmp .-74 ; 0xbd2 - c1c: f9 cf rjmp .-14 ; 0xc10 + c4e: 22 ff sbrs r18, 2 + c50: db cf rjmp .-74 ; 0xc08 + c52: f9 cf rjmp .-14 ; 0xc46 -00000c1e : +00000c54 : { #if defined(USB_CAN_BE_BOTH) bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); #endif USB_INT_DisableAllInterrupts(); - c1e: 40 d0 rcall .+128 ; 0xca0 + c54: 40 d0 rcall .+128 ; 0xcd6 USB_INT_ClearAllInterrupts(); - c20: 42 d0 rcall .+132 ; 0xca6 + c56: 42 d0 rcall .+132 ; 0xcdc } static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Reset(void) { USBCON &= ~(1 << USBE); - c22: 80 91 d8 00 lds r24, 0x00D8 - c26: 8f 77 andi r24, 0x7F ; 127 - c28: 80 93 d8 00 sts 0x00D8, r24 + c58: 80 91 d8 00 lds r24, 0x00D8 + c5c: 8f 77 andi r24, 0x7F ; 127 + c5e: 80 93 d8 00 sts 0x00D8, r24 USBCON |= (1 << USBE); - c2c: 80 91 d8 00 lds r24, 0x00D8 - c30: 80 68 ori r24, 0x80 ; 128 - c32: 80 93 d8 00 sts 0x00D8, r24 + c62: 80 91 d8 00 lds r24, 0x00D8 + c66: 80 68 ori r24, 0x80 ; 128 + c68: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - c36: 80 91 d8 00 lds r24, 0x00D8 - c3a: 8f 7d andi r24, 0xDF ; 223 - c3c: 80 93 d8 00 sts 0x00D8, r24 + c6c: 80 91 d8 00 lds r24, 0x00D8 + c70: 8f 7d andi r24, 0xDF ; 223 + c72: 80 93 d8 00 sts 0x00D8, r24 /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - c40: 84 e0 ldi r24, 0x04 ; 4 - c42: 89 bd out 0x29, r24 ; 41 + c76: 84 e0 ldi r24, 0x04 ; 4 + c78: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - c44: 86 e0 ldi r24, 0x06 ; 6 - c46: 89 bd out 0x29, r24 ; 41 + c7a: 86 e0 ldi r24, 0x06 ; 6 + c7c: 89 bd out 0x29, r24 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) { #if defined(USB_SERIES_2_AVR) USB_PLL_On(); while (!(USB_PLL_IsReady())); - c48: 09 b4 in r0, 0x29 ; 41 - c4a: 00 fe sbrs r0, 0 - c4c: fd cf rjmp .-6 ; 0xc48 + c7e: 09 b4 in r0, 0x29 ; 41 + c80: 00 fe sbrs r0, 0 + c82: fd cf rjmp .-6 ; 0xc7e } #if defined(USB_CAN_BE_DEVICE) static void USB_Init_Device(void) { USB_DeviceState = DEVICE_STATE_Unattached; - c4e: 1e ba out 0x1e, r1 ; 30 + c84: 1e ba out 0x1e, r1 ; 30 USB_Device_ConfigurationNumber = 0; - c50: 10 92 58 02 sts 0x0258, r1 + c86: 10 92 6a 02 sts 0x026A, r1 #if !defined(NO_DEVICE_REMOTE_WAKEUP) USB_Device_RemoteWakeupEnabled = false; - c54: 10 92 5a 02 sts 0x025A, r1 + c8a: 10 92 6c 02 sts 0x026C, r1 #endif #if !defined(NO_DEVICE_SELF_POWER) USB_Device_CurrentlySelfPowered = false; - c58: 10 92 59 02 sts 0x0259, r1 + c8e: 10 92 6b 02 sts 0x026B, r1 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - c5c: 80 e0 ldi r24, 0x00 ; 0 - c5e: 60 e0 ldi r22, 0x00 ; 0 - c60: 42 e0 ldi r20, 0x02 ; 2 - c62: 10 df rcall .-480 ; 0xa84 + c92: 80 e0 ldi r24, 0x00 ; 0 + c94: 60 e0 ldi r22, 0x00 ; 0 + c96: 42 e0 ldi r20, 0x02 ; 2 + c98: 10 df rcall .-480 ; 0xaba #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - c64: 80 91 e1 00 lds r24, 0x00E1 - c68: 8e 7f andi r24, 0xFE ; 254 - c6a: 80 93 e1 00 sts 0x00E1, r24 + c9a: 80 91 e1 00 lds r24, 0x00E1 + c9e: 8e 7f andi r24, 0xFE ; 254 + ca0: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - c6e: 80 91 e2 00 lds r24, 0x00E2 - c72: 81 60 ori r24, 0x01 ; 1 - c74: 80 93 e2 00 sts 0x00E2, r24 + ca4: 80 91 e2 00 lds r24, 0x00E2 + ca8: 81 60 ori r24, 0x01 ; 1 + caa: 80 93 e2 00 sts 0x00E2, r24 break; case USB_INT_EORSTI: UDIEN |= (1 << EORSTE); - c78: 80 91 e2 00 lds r24, 0x00E2 - c7c: 88 60 ori r24, 0x08 ; 8 - c7e: 80 93 e2 00 sts 0x00E2, r24 + cae: 80 91 e2 00 lds r24, 0x00E2 + cb2: 88 60 ori r24, 0x08 ; 8 + cb4: 80 93 e2 00 sts 0x00E2, r24 * register and despite the datasheet making no mention of its requirement in host mode. */ static inline void USB_Attach(void) ATTR_ALWAYS_INLINE; static inline void USB_Attach(void) { UDCON &= ~(1 << DETACH); - c82: 80 91 e0 00 lds r24, 0x00E0 - c86: 8e 7f andi r24, 0xFE ; 254 - c88: 80 93 e0 00 sts 0x00E0, r24 + cb8: 80 91 e0 00 lds r24, 0x00E0 + cbc: 8e 7f andi r24, 0xFE ; 254 + cbe: 80 93 e0 00 sts 0x00E0, r24 } #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); #endif } - c8c: 08 95 ret + cc2: 08 95 ret -00000c8e : +00000cc4 : static inline void USB_REG_On(void) { #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) UHWCON |= (1 << UVREGE); #else REGCR &= ~(1 << REGDIS); - c8e: e3 e6 ldi r30, 0x63 ; 99 - c90: f0 e0 ldi r31, 0x00 ; 0 - c92: 80 81 ld r24, Z - c94: 8e 7f andi r24, 0xFE ; 254 - c96: 80 83 st Z, r24 + cc4: e3 e6 ldi r30, 0x63 ; 99 + cc6: f0 e0 ldi r31, 0x00 ; 0 + cc8: 80 81 ld r24, Z + cca: 8e 7f andi r24, 0xFE ; 254 + ccc: 80 83 st Z, r24 UHWCON &= ~(1 << UIDE); USB_CurrentMode = Mode; } #endif USB_IsInitialized = true; - c98: 81 e0 ldi r24, 0x01 ; 1 - c9a: 80 93 5b 02 sts 0x025B, r24 + cce: 81 e0 ldi r24, 0x01 ; 1 + cd0: 80 93 6d 02 sts 0x026D, r24 USB_ResetInterface(); } - c9e: bf cf rjmp .-130 ; 0xc1e + cd4: bf cf rjmp .-130 ; 0xc54 -00000ca0 : +00000cd6 : #if defined(USB_CAN_BE_HOST) UHIEN = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDIEN = 0; - ca0: 10 92 e2 00 sts 0x00E2, r1 + cd6: 10 92 e2 00 sts 0x00E2, r1 #endif } - ca4: 08 95 ret + cda: 08 95 ret -00000ca6 : +00000cdc : #if defined(USB_CAN_BE_HOST) UHINT = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDINT = 0; - ca6: 10 92 e1 00 sts 0x00E1, r1 + cdc: 10 92 e1 00 sts 0x00E1, r1 #endif } - caa: 08 95 ret + ce0: 08 95 ret -00000cac <__vector_11>: +00000ce2 <__vector_11>: ISR(USB_GEN_vect, ISR_BLOCK) { - cac: 1f 92 push r1 - cae: 0f 92 push r0 - cb0: 0f b6 in r0, 0x3f ; 63 - cb2: 0f 92 push r0 - cb4: 11 24 eor r1, r1 - cb6: 2f 93 push r18 - cb8: 3f 93 push r19 - cba: 4f 93 push r20 - cbc: 5f 93 push r21 - cbe: 6f 93 push r22 - cc0: 7f 93 push r23 - cc2: 8f 93 push r24 - cc4: 9f 93 push r25 - cc6: af 93 push r26 - cc8: bf 93 push r27 - cca: ef 93 push r30 - ccc: ff 93 push r31 + ce2: 1f 92 push r1 + ce4: 0f 92 push r0 + ce6: 0f b6 in r0, 0x3f ; 63 + ce8: 0f 92 push r0 + cea: 11 24 eor r1, r1 + cec: 2f 93 push r18 + cee: 3f 93 push r19 + cf0: 4f 93 push r20 + cf2: 5f 93 push r21 + cf4: 6f 93 push r22 + cf6: 7f 93 push r23 + cf8: 8f 93 push r24 + cfa: 9f 93 push r25 + cfc: af 93 push r26 + cfe: bf 93 push r27 + d00: ef 93 push r30 + d02: ff 93 push r31 case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); case USB_INT_SOFI: return (UDINT & (1 << SOFI)); - cce: 80 91 e1 00 lds r24, 0x00E1 + d04: 80 91 e1 00 lds r24, 0x00E1 #if defined(USB_CAN_BE_DEVICE) #if !defined(NO_SOF_EVENTS) if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - cd2: 82 ff sbrs r24, 2 - cd4: 0a c0 rjmp .+20 ; 0xcea <__vector_11+0x3e> + d08: 82 ff sbrs r24, 2 + d0a: 0a c0 rjmp .+20 ; 0xd20 <__vector_11+0x3e> case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); case USB_INT_SOFI: return (UDIEN & (1 << SOFE)); - cd6: 80 91 e2 00 lds r24, 0x00E2 - cda: 82 ff sbrs r24, 2 - cdc: 06 c0 rjmp .+12 ; 0xcea <__vector_11+0x3e> + d0c: 80 91 e2 00 lds r24, 0x00E2 + d10: 82 ff sbrs r24, 2 + d12: 06 c0 rjmp .+12 ; 0xd20 <__vector_11+0x3e> break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); break; case USB_INT_SOFI: UDINT &= ~(1 << SOFI); - cde: 80 91 e1 00 lds r24, 0x00E1 - ce2: 8b 7f andi r24, 0xFB ; 251 - ce4: 80 93 e1 00 sts 0x00E1, r24 + d14: 80 91 e1 00 lds r24, 0x00E1 + d18: 8b 7f andi r24, 0xFB ; 251 + d1a: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_SOFI); EVENT_USB_Device_StartOfFrame(); - ce8: 21 d2 rcall .+1090 ; 0x112c + d1e: 21 d2 rcall .+1090 ; 0x1162 #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); - cea: 80 91 e1 00 lds r24, 0x00E1 + d20: 80 91 e1 00 lds r24, 0x00E1 EVENT_USB_Device_Disconnect(); } } #endif if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) - cee: 80 ff sbrs r24, 0 - cf0: 16 c0 rjmp .+44 ; 0xd1e <__vector_11+0x72> + d24: 80 ff sbrs r24, 0 + d26: 16 c0 rjmp .+44 ; 0xd54 <__vector_11+0x72> #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); - cf2: 80 91 e2 00 lds r24, 0x00E2 - cf6: 80 ff sbrs r24, 0 - cf8: 12 c0 rjmp .+36 ; 0xd1e <__vector_11+0x72> + d28: 80 91 e2 00 lds r24, 0x00E2 + d2c: 80 ff sbrs r24, 0 + d2e: 12 c0 rjmp .+36 ; 0xd54 <__vector_11+0x72> #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - cfa: 80 91 e2 00 lds r24, 0x00E2 - cfe: 8e 7f andi r24, 0xFE ; 254 - d00: 80 93 e2 00 sts 0x00E2, r24 + d30: 80 91 e2 00 lds r24, 0x00E2 + d34: 8e 7f andi r24, 0xFE ; 254 + d36: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - d04: 80 91 e2 00 lds r24, 0x00E2 - d08: 80 61 ori r24, 0x10 ; 16 - d0a: 80 93 e2 00 sts 0x00E2, r24 + d3a: 80 91 e2 00 lds r24, 0x00E2 + d3e: 80 61 ori r24, 0x10 ; 16 + d40: 80 93 e2 00 sts 0x00E2, r24 #endif static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Freeze(void) { USBCON |= (1 << FRZCLK); - d0e: 80 91 d8 00 lds r24, 0x00D8 - d12: 80 62 ori r24, 0x20 ; 32 - d14: 80 93 d8 00 sts 0x00D8, r24 + d44: 80 91 d8 00 lds r24, 0x00D8 + d48: 80 62 ori r24, 0x20 ; 32 + d4a: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_Off(void) { PLLCSR = 0; - d18: 19 bc out 0x29, r1 ; 41 + d4e: 19 bc out 0x29, r1 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) USB_DeviceState = DEVICE_STATE_Unattached; - d1a: 1e ba out 0x1e, r1 ; 30 + d50: 1e ba out 0x1e, r1 ; 30 EVENT_USB_Device_Disconnect(); - d1c: 49 dc rcall .-1902 ; 0x5b0 + d52: 60 dc rcall .-1856 ; 0x614 case USB_INT_IDTI: return (USBINT & (1 << IDTI)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); - d1e: 80 91 e1 00 lds r24, 0x00E1 + d54: 80 91 e1 00 lds r24, 0x00E1 USB_DeviceState = DEVICE_STATE_Suspended; EVENT_USB_Device_Suspend(); #endif } if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) - d22: 84 ff sbrs r24, 4 - d24: 2c c0 rjmp .+88 ; 0xd7e <__vector_11+0xd2> + d58: 84 ff sbrs r24, 4 + d5a: 2c c0 rjmp .+88 ; 0xdb4 <__vector_11+0xd2> case USB_INT_IDTI: return (USBCON & (1 << IDTE)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); - d26: 80 91 e2 00 lds r24, 0x00E2 - d2a: 84 ff sbrs r24, 4 - d2c: 28 c0 rjmp .+80 ; 0xd7e <__vector_11+0xd2> + d5c: 80 91 e2 00 lds r24, 0x00E2 + d60: 84 ff sbrs r24, 4 + d62: 28 c0 rjmp .+80 ; 0xdb4 <__vector_11+0xd2> /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - d2e: 84 e0 ldi r24, 0x04 ; 4 - d30: 89 bd out 0x29, r24 ; 41 + d64: 84 e0 ldi r24, 0x04 ; 4 + d66: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - d32: 86 e0 ldi r24, 0x06 ; 6 - d34: 89 bd out 0x29, r24 ; 41 + d68: 86 e0 ldi r24, 0x06 ; 6 + d6a: 89 bd out 0x29, r24 ; 41 { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); - d36: 09 b4 in r0, 0x29 ; 41 - d38: 00 fe sbrs r0, 0 - d3a: fd cf rjmp .-6 ; 0xd36 <__vector_11+0x8a> + d6c: 09 b4 in r0, 0x29 ; 41 + d6e: 00 fe sbrs r0, 0 + d70: fd cf rjmp .-6 ; 0xd6c <__vector_11+0x8a> } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - d3c: 80 91 d8 00 lds r24, 0x00D8 - d40: 8f 7d andi r24, 0xDF ; 223 - d42: 80 93 d8 00 sts 0x00D8, r24 + d72: 80 91 d8 00 lds r24, 0x00D8 + d76: 8f 7d andi r24, 0xDF ; 223 + d78: 80 93 d8 00 sts 0x00D8, r24 USBINT &= ~(1 << IDTI); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); - d46: 80 91 e1 00 lds r24, 0x00E1 - d4a: 8f 7e andi r24, 0xEF ; 239 - d4c: 80 93 e1 00 sts 0x00E1, r24 + d7c: 80 91 e1 00 lds r24, 0x00E1 + d80: 8f 7e andi r24, 0xEF ; 239 + d82: 80 93 e1 00 sts 0x00E1, r24 USBCON &= ~(1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); - d50: 80 91 e2 00 lds r24, 0x00E2 - d54: 8f 7e andi r24, 0xEF ; 239 - d56: 80 93 e2 00 sts 0x00E2, r24 + d86: 80 91 e2 00 lds r24, 0x00E2 + d8a: 8f 7e andi r24, 0xEF ; 239 + d8c: 80 93 e2 00 sts 0x00E2, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - d5a: 80 91 e2 00 lds r24, 0x00E2 - d5e: 81 60 ori r24, 0x01 ; 1 - d60: 80 93 e2 00 sts 0x00E2, r24 + d90: 80 91 e2 00 lds r24, 0x00E2 + d94: 81 60 ori r24, 0x01 ; 1 + d96: 80 93 e2 00 sts 0x00E2, r24 USB_INT_Clear(USB_INT_WAKEUPI); USB_INT_Disable(USB_INT_WAKEUPI); USB_INT_Enable(USB_INT_SUSPI); if (USB_Device_ConfigurationNumber) - d64: 80 91 58 02 lds r24, 0x0258 - d68: 88 23 and r24, r24 - d6a: 21 f4 brne .+8 ; 0xd74 <__vector_11+0xc8> + d9a: 80 91 6a 02 lds r24, 0x026A + d9e: 88 23 and r24, r24 + da0: 21 f4 brne .+8 ; 0xdaa <__vector_11+0xc8> } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - d6c: 80 91 e3 00 lds r24, 0x00E3 + da2: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - d70: 87 ff sbrs r24, 7 - d72: 02 c0 rjmp .+4 ; 0xd78 <__vector_11+0xcc> - d74: 84 e0 ldi r24, 0x04 ; 4 - d76: 01 c0 rjmp .+2 ; 0xd7a <__vector_11+0xce> - d78: 81 e0 ldi r24, 0x01 ; 1 - d7a: 8e bb out 0x1e, r24 ; 30 + da6: 87 ff sbrs r24, 7 + da8: 02 c0 rjmp .+4 ; 0xdae <__vector_11+0xcc> + daa: 84 e0 ldi r24, 0x04 ; 4 + dac: 01 c0 rjmp .+2 ; 0xdb0 <__vector_11+0xce> + dae: 81 e0 ldi r24, 0x01 ; 1 + db0: 8e bb out 0x1e, r24 ; 30 #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) EVENT_USB_Device_Connect(); - d7c: 18 dc rcall .-2000 ; 0x5ae + db2: 2f dc rcall .-1954 ; 0x612 case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); - d7e: 80 91 e1 00 lds r24, 0x00E1 + db4: 80 91 e1 00 lds r24, 0x00E1 #else EVENT_USB_Device_WakeUp(); #endif } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) - d82: 83 ff sbrs r24, 3 - d84: 26 c0 rjmp .+76 ; 0xdd2 <__vector_11+0x126> + db8: 83 ff sbrs r24, 3 + dba: 26 c0 rjmp .+76 ; 0xe08 <__vector_11+0x126> case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); - d86: 80 91 e2 00 lds r24, 0x00E2 - d8a: 83 ff sbrs r24, 3 - d8c: 22 c0 rjmp .+68 ; 0xdd2 <__vector_11+0x126> + dbc: 80 91 e2 00 lds r24, 0x00E2 + dc0: 83 ff sbrs r24, 3 + dc2: 22 c0 rjmp .+68 ; 0xe08 <__vector_11+0x126> break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); - d8e: 80 91 e1 00 lds r24, 0x00E1 - d92: 87 7f andi r24, 0xF7 ; 247 - d94: 80 93 e1 00 sts 0x00E1, r24 + dc4: 80 91 e1 00 lds r24, 0x00E1 + dc8: 87 7f andi r24, 0xF7 ; 247 + dca: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_EORSTI); USB_DeviceState = DEVICE_STATE_Default; - d98: 82 e0 ldi r24, 0x02 ; 2 - d9a: 8e bb out 0x1e, r24 ; 30 + dce: 82 e0 ldi r24, 0x02 ; 2 + dd0: 8e bb out 0x1e, r24 ; 30 USB_Device_ConfigurationNumber = 0; - d9c: 10 92 58 02 sts 0x0258, r1 + dd2: 10 92 6a 02 sts 0x026A, r1 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - da0: 80 91 e1 00 lds r24, 0x00E1 - da4: 8e 7f andi r24, 0xFE ; 254 - da6: 80 93 e1 00 sts 0x00E1, r24 + dd6: 80 91 e1 00 lds r24, 0x00E1 + dda: 8e 7f andi r24, 0xFE ; 254 + ddc: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - daa: 80 91 e2 00 lds r24, 0x00E2 - dae: 8e 7f andi r24, 0xFE ; 254 - db0: 80 93 e2 00 sts 0x00E2, r24 + de0: 80 91 e2 00 lds r24, 0x00E2 + de4: 8e 7f andi r24, 0xFE ; 254 + de6: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - db4: 80 91 e2 00 lds r24, 0x00E2 - db8: 80 61 ori r24, 0x10 ; 16 - dba: 80 93 e2 00 sts 0x00E2, r24 + dea: 80 91 e2 00 lds r24, 0x00E2 + dee: 80 61 ori r24, 0x10 ; 16 + df0: 80 93 e2 00 sts 0x00E2, r24 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - dbe: 80 e0 ldi r24, 0x00 ; 0 - dc0: 60 e0 ldi r22, 0x00 ; 0 - dc2: 42 e0 ldi r20, 0x02 ; 2 - dc4: 5f de rcall .-834 ; 0xa84 + df4: 80 e0 ldi r24, 0x00 ; 0 + df6: 60 e0 ldi r22, 0x00 ; 0 + df8: 42 e0 ldi r20, 0x02 ; 2 + dfa: 5f de rcall .-834 ; 0xaba break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - dc6: 80 91 f0 00 lds r24, 0x00F0 - dca: 88 60 ori r24, 0x08 ; 8 - dcc: 80 93 f0 00 sts 0x00F0, r24 + dfc: 80 91 f0 00 lds r24, 0x00F0 + e00: 88 60 ori r24, 0x08 ; 8 + e02: 80 93 f0 00 sts 0x00F0, r24 #if defined(INTERRUPT_CONTROL_ENDPOINT) USB_INT_Enable(USB_INT_RXSTPI); #endif EVENT_USB_Device_Reset(); - dd0: ad d1 rcall .+858 ; 0x112c + e06: ad d1 rcall .+858 ; 0x1162 USB_ResetInterface(); EVENT_USB_UIDChange(); } #endif } - dd2: ff 91 pop r31 - dd4: ef 91 pop r30 - dd6: bf 91 pop r27 - dd8: af 91 pop r26 - dda: 9f 91 pop r25 - ddc: 8f 91 pop r24 - dde: 7f 91 pop r23 - de0: 6f 91 pop r22 - de2: 5f 91 pop r21 - de4: 4f 91 pop r20 - de6: 3f 91 pop r19 - de8: 2f 91 pop r18 - dea: 0f 90 pop r0 - dec: 0f be out 0x3f, r0 ; 63 - dee: 0f 90 pop r0 - df0: 1f 90 pop r1 - df2: 18 95 reti - -00000df4 <__vector_12>: + e08: ff 91 pop r31 + e0a: ef 91 pop r30 + e0c: bf 91 pop r27 + e0e: af 91 pop r26 + e10: 9f 91 pop r25 + e12: 8f 91 pop r24 + e14: 7f 91 pop r23 + e16: 6f 91 pop r22 + e18: 5f 91 pop r21 + e1a: 4f 91 pop r20 + e1c: 3f 91 pop r19 + e1e: 2f 91 pop r18 + e20: 0f 90 pop r0 + e22: 0f be out 0x3f, r0 ; 63 + e24: 0f 90 pop r0 + e26: 1f 90 pop r1 + e28: 18 95 reti + +00000e2a <__vector_12>: #if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) ISR(USB_COM_vect, ISR_BLOCK) { - df4: 1f 92 push r1 - df6: 0f 92 push r0 - df8: 0f b6 in r0, 0x3f ; 63 - dfa: 0f 92 push r0 - dfc: 11 24 eor r1, r1 - dfe: 1f 93 push r17 - e00: 2f 93 push r18 - e02: 3f 93 push r19 - e04: 4f 93 push r20 - e06: 5f 93 push r21 - e08: 6f 93 push r22 - e0a: 7f 93 push r23 - e0c: 8f 93 push r24 - e0e: 9f 93 push r25 - e10: af 93 push r26 - e12: bf 93 push r27 - e14: ef 93 push r30 - e16: ff 93 push r31 + e2a: 1f 92 push r1 + e2c: 0f 92 push r0 + e2e: 0f b6 in r0, 0x3f ; 63 + e30: 0f 92 push r0 + e32: 11 24 eor r1, r1 + e34: 1f 93 push r17 + e36: 2f 93 push r18 + e38: 3f 93 push r19 + e3a: 4f 93 push r20 + e3c: 5f 93 push r21 + e3e: 6f 93 push r22 + e40: 7f 93 push r23 + e42: 8f 93 push r24 + e44: 9f 93 push r25 + e46: af 93 push r26 + e48: bf 93 push r27 + e4a: ef 93 push r30 + e4c: ff 93 push r31 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - e18: 10 91 e9 00 lds r17, 0x00E9 - e1c: 1f 70 andi r17, 0x0F ; 15 + e4e: 10 91 e9 00 lds r17, 0x00E9 + e52: 1f 70 andi r17, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - e1e: 80 91 ec 00 lds r24, 0x00EC + e54: 80 91 ec 00 lds r24, 0x00EC */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - e22: 10 92 e9 00 sts 0x00E9, r1 + e58: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN &= ~(1 << SOFE); break; case USB_INT_RXSTPI: UEIENX &= ~(1 << RXSTPE); - e26: 80 91 f0 00 lds r24, 0x00F0 - e2a: 87 7f andi r24, 0xF7 ; 247 - e2c: 80 93 f0 00 sts 0x00F0, r24 + e5c: 80 91 f0 00 lds r24, 0x00F0 + e60: 87 7f andi r24, 0xF7 ; 247 + e62: 80 93 f0 00 sts 0x00F0, r24 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - e30: 78 94 sei + e66: 78 94 sei Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Disable(USB_INT_RXSTPI); GlobalInterruptEnable(); USB_Device_ProcessControlRequest(); - e32: 1b d0 rcall .+54 ; 0xe6a - e34: 10 92 e9 00 sts 0x00E9, r1 + e68: 1b d0 rcall .+54 ; 0xea0 + e6a: 10 92 e9 00 sts 0x00E9, r1 break; case USB_INT_SOFI: UDIEN |= (1 << SOFE); break; case USB_INT_RXSTPI: UEIENX |= (1 << RXSTPE); - e38: 80 91 f0 00 lds r24, 0x00F0 - e3c: 88 60 ori r24, 0x08 ; 8 - e3e: 80 93 f0 00 sts 0x00F0, r24 - e42: 10 93 e9 00 sts 0x00E9, r17 + e6e: 80 91 f0 00 lds r24, 0x00F0 + e72: 88 60 ori r24, 0x08 ; 8 + e74: 80 93 f0 00 sts 0x00F0, r24 + e78: 10 93 e9 00 sts 0x00E9, r17 Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); USB_INT_Enable(USB_INT_RXSTPI); Endpoint_SelectEndpoint(PrevSelectedEndpoint); } - e46: ff 91 pop r31 - e48: ef 91 pop r30 - e4a: bf 91 pop r27 - e4c: af 91 pop r26 - e4e: 9f 91 pop r25 - e50: 8f 91 pop r24 - e52: 7f 91 pop r23 - e54: 6f 91 pop r22 - e56: 5f 91 pop r21 - e58: 4f 91 pop r20 - e5a: 3f 91 pop r19 - e5c: 2f 91 pop r18 - e5e: 1f 91 pop r17 - e60: 0f 90 pop r0 - e62: 0f be out 0x3f, r0 ; 63 - e64: 0f 90 pop r0 - e66: 1f 90 pop r1 - e68: 18 95 reti - -00000e6a : + e7c: ff 91 pop r31 + e7e: ef 91 pop r30 + e80: bf 91 pop r27 + e82: af 91 pop r26 + e84: 9f 91 pop r25 + e86: 8f 91 pop r24 + e88: 7f 91 pop r23 + e8a: 6f 91 pop r22 + e8c: 5f 91 pop r21 + e8e: 4f 91 pop r20 + e90: 3f 91 pop r19 + e92: 2f 91 pop r18 + e94: 1f 91 pop r17 + e96: 0f 90 pop r0 + e98: 0f be out 0x3f, r0 ; 63 + e9a: 0f 90 pop r0 + e9c: 1f 90 pop r1 + e9e: 18 95 reti + +00000ea0 : #if !defined(NO_DEVICE_REMOTE_WAKEUP) bool USB_Device_RemoteWakeupEnabled; #endif void USB_Device_ProcessControlRequest(void) { - e6a: 1f 93 push r17 - e6c: df 93 push r29 - e6e: cf 93 push r28 - e70: cd b7 in r28, 0x3d ; 61 - e72: de b7 in r29, 0x3e ; 62 - e74: ac 97 sbiw r28, 0x2c ; 44 - e76: 0f b6 in r0, 0x3f ; 63 - e78: f8 94 cli - e7a: de bf out 0x3e, r29 ; 62 - e7c: 0f be out 0x3f, r0 ; 63 - e7e: cd bf out 0x3d, r28 ; 61 + ea0: 1f 93 push r17 + ea2: df 93 push r29 + ea4: cf 93 push r28 + ea6: cd b7 in r28, 0x3d ; 61 + ea8: de b7 in r29, 0x3e ; 62 + eaa: ac 97 sbiw r28, 0x2c ; 44 + eac: 0f b6 in r0, 0x3f ; 63 + eae: f8 94 cli + eb0: de bf out 0x3e, r29 ; 62 + eb2: 0f be out 0x3f, r0 ; 63 + eb4: cd bf out 0x3d, r28 ; 61 USB_ControlRequest.bRequest = Endpoint_Read_8(); USB_ControlRequest.wValue = Endpoint_Read_16_LE(); USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - e80: ec e5 ldi r30, 0x5C ; 92 - e82: f2 e0 ldi r31, 0x02 ; 2 + eb6: ee e6 ldi r30, 0x6E ; 110 + eb8: f2 e0 ldi r31, 0x02 ; 2 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - e84: 80 91 f1 00 lds r24, 0x00F1 + eba: 80 91 f1 00 lds r24, 0x00F1 for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) *(RequestHeader++) = Endpoint_Read_8(); - e88: 81 93 st Z+, r24 + ebe: 81 93 st Z+, r24 USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - e8a: 22 e0 ldi r18, 0x02 ; 2 - e8c: e4 36 cpi r30, 0x64 ; 100 - e8e: f2 07 cpc r31, r18 - e90: c9 f7 brne .-14 ; 0xe84 + ec0: 22 e0 ldi r18, 0x02 ; 2 + ec2: e6 37 cpi r30, 0x76 ; 118 + ec4: f2 07 cpc r31, r18 + ec6: c9 f7 brne .-14 ; 0xeba *(RequestHeader++) = Endpoint_Read_8(); #endif EVENT_USB_Device_ControlRequest(); - e92: 92 db rcall .-2268 ; 0x5b8 + ec8: a9 db rcall .-2222 ; 0x61c * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - e94: 80 91 e8 00 lds r24, 0x00E8 + eca: 80 91 e8 00 lds r24, 0x00E8 if (Endpoint_IsSETUPReceived()) - e98: 83 ff sbrs r24, 3 - e9a: 30 c1 rjmp .+608 ; 0x10fc + ece: 83 ff sbrs r24, 3 + ed0: 30 c1 rjmp .+608 ; 0x1132 { uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - e9c: 80 91 5c 02 lds r24, 0x025C + ed2: 80 91 6e 02 lds r24, 0x026E switch (USB_ControlRequest.bRequest) - ea0: 20 91 5d 02 lds r18, 0x025D - ea4: 25 30 cpi r18, 0x05 ; 5 - ea6: 09 f4 brne .+2 ; 0xeaa - ea8: 84 c0 rjmp .+264 ; 0xfb2 - eaa: 26 30 cpi r18, 0x06 ; 6 - eac: 40 f4 brcc .+16 ; 0xebe - eae: 21 30 cpi r18, 0x01 ; 1 - eb0: a1 f1 breq .+104 ; 0xf1a - eb2: 21 30 cpi r18, 0x01 ; 1 - eb4: 70 f0 brcs .+28 ; 0xed2 - eb6: 23 30 cpi r18, 0x03 ; 3 - eb8: 09 f0 breq .+2 ; 0xebc - eba: 20 c1 rjmp .+576 ; 0x10fc - ebc: 2e c0 rjmp .+92 ; 0xf1a - ebe: 28 30 cpi r18, 0x08 ; 8 - ec0: 09 f4 brne .+2 ; 0xec4 - ec2: ef c0 rjmp .+478 ; 0x10a2 - ec4: 29 30 cpi r18, 0x09 ; 9 - ec6: 09 f4 brne .+2 ; 0xeca - ec8: fe c0 rjmp .+508 ; 0x10c6 - eca: 26 30 cpi r18, 0x06 ; 6 - ecc: 09 f0 breq .+2 ; 0xed0 - ece: 16 c1 rjmp .+556 ; 0x10fc - ed0: 92 c0 rjmp .+292 ; 0xff6 + ed6: 20 91 6f 02 lds r18, 0x026F + eda: 25 30 cpi r18, 0x05 ; 5 + edc: 09 f4 brne .+2 ; 0xee0 + ede: 84 c0 rjmp .+264 ; 0xfe8 + ee0: 26 30 cpi r18, 0x06 ; 6 + ee2: 40 f4 brcc .+16 ; 0xef4 + ee4: 21 30 cpi r18, 0x01 ; 1 + ee6: a1 f1 breq .+104 ; 0xf50 + ee8: 21 30 cpi r18, 0x01 ; 1 + eea: 70 f0 brcs .+28 ; 0xf08 + eec: 23 30 cpi r18, 0x03 ; 3 + eee: 09 f0 breq .+2 ; 0xef2 + ef0: 20 c1 rjmp .+576 ; 0x1132 + ef2: 2e c0 rjmp .+92 ; 0xf50 + ef4: 28 30 cpi r18, 0x08 ; 8 + ef6: 09 f4 brne .+2 ; 0xefa + ef8: ef c0 rjmp .+478 ; 0x10d8 + efa: 29 30 cpi r18, 0x09 ; 9 + efc: 09 f4 brne .+2 ; 0xf00 + efe: fe c0 rjmp .+508 ; 0x10fc + f00: 26 30 cpi r18, 0x06 ; 6 + f02: 09 f0 breq .+2 ; 0xf06 + f04: 16 c1 rjmp .+556 ; 0x1132 + f06: 92 c0 rjmp .+292 ; 0x102c { case REQ_GetStatus: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - ed2: 80 38 cpi r24, 0x80 ; 128 - ed4: 21 f0 breq .+8 ; 0xede - ed6: 82 38 cpi r24, 0x82 ; 130 - ed8: 09 f0 breq .+2 ; 0xedc - eda: 10 c1 rjmp .+544 ; 0x10fc - edc: 08 c0 rjmp .+16 ; 0xeee + f08: 80 38 cpi r24, 0x80 ; 128 + f0a: 21 f0 breq .+8 ; 0xf14 + f0c: 82 38 cpi r24, 0x82 ; 130 + f0e: 09 f0 breq .+2 ; 0xf12 + f10: 10 c1 rjmp .+544 ; 0x1132 + f12: 08 c0 rjmp .+16 ; 0xf24 Endpoint_ClearOUT(); } static void USB_Device_GetStatus(void) { uint8_t CurrentStatus = 0; - ede: 80 91 59 02 lds r24, 0x0259 + f14: 80 91 6b 02 lds r24, 0x026B if (USB_Device_CurrentlySelfPowered) CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; #endif #if !defined(NO_DEVICE_REMOTE_WAKEUP) if (USB_Device_RemoteWakeupEnabled) - ee2: 90 91 5a 02 lds r25, 0x025A - ee6: 99 23 and r25, r25 - ee8: 71 f0 breq .+28 ; 0xf06 + f18: 90 91 6c 02 lds r25, 0x026C + f1c: 99 23 and r25, r25 + f1e: 71 f0 breq .+28 ; 0xf3c CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - eea: 82 60 ori r24, 0x02 ; 2 - eec: 0c c0 rjmp .+24 ; 0xf06 + f20: 82 60 ori r24, 0x02 ; 2 + f22: 0c c0 rjmp .+24 ; 0xf3c */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - eee: 80 91 60 02 lds r24, 0x0260 - ef2: 8f 70 andi r24, 0x0F ; 15 - ef4: 80 93 e9 00 sts 0x00E9, r24 + f24: 80 91 72 02 lds r24, 0x0272 + f28: 8f 70 andi r24, 0x0F ; 15 + f2a: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - ef8: 90 91 eb 00 lds r25, 0x00EB + f2e: 90 91 eb 00 lds r25, 0x00EB break; case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): #if !defined(CONTROL_ONLY_DEVICE) Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); CurrentStatus = Endpoint_IsStalled(); - efc: 81 e0 ldi r24, 0x01 ; 1 - efe: 95 ff sbrs r25, 5 - f00: 80 e0 ldi r24, 0x00 ; 0 + f32: 81 e0 ldi r24, 0x01 ; 1 + f34: 95 ff sbrs r25, 5 + f36: 80 e0 ldi r24, 0x00 ; 0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - f02: 10 92 e9 00 sts 0x00E9, r1 + f38: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - f06: 90 91 e8 00 lds r25, 0x00E8 - f0a: 97 7f andi r25, 0xF7 ; 247 - f0c: 90 93 e8 00 sts 0x00E8, r25 + f3c: 90 91 e8 00 lds r25, 0x00E8 + f40: 97 7f andi r25, 0xF7 ; 247 + f42: 90 93 e8 00 sts 0x00E8, r25 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_16_LE(const uint16_t Data) { UEDATX = (Data & 0xFF); - f10: 80 93 f1 00 sts 0x00F1, r24 + f46: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - f14: 10 92 f1 00 sts 0x00F1, r1 - f18: cf c0 rjmp .+414 ; 0x10b8 + f4a: 10 92 f1 00 sts 0x00F1, r1 + f4e: cf c0 rjmp .+414 ; 0x10ee } break; case REQ_ClearFeature: case REQ_SetFeature: if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - f1a: 88 23 and r24, r24 - f1c: 19 f0 breq .+6 ; 0xf24 - f1e: 82 30 cpi r24, 0x02 ; 2 - f20: 09 f0 breq .+2 ; 0xf24 - f22: ec c0 rjmp .+472 ; 0x10fc + f50: 88 23 and r24, r24 + f52: 19 f0 breq .+6 ; 0xf5a + f54: 82 30 cpi r24, 0x02 ; 2 + f56: 09 f0 breq .+2 ; 0xf5a + f58: ec c0 rjmp .+472 ; 0x1132 Endpoint_ClearStatusStage(); } static void USB_Device_ClearSetFeature(void) { switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - f24: 90 e0 ldi r25, 0x00 ; 0 - f26: 8f 71 andi r24, 0x1F ; 31 - f28: 90 70 andi r25, 0x00 ; 0 - f2a: 00 97 sbiw r24, 0x00 ; 0 - f2c: 29 f0 breq .+10 ; 0xf38 - f2e: 82 30 cpi r24, 0x02 ; 2 - f30: 91 05 cpc r25, r1 - f32: 09 f0 breq .+2 ; 0xf36 - f34: e3 c0 rjmp .+454 ; 0x10fc - f36: 0b c0 rjmp .+22 ; 0xf4e + f5a: 90 e0 ldi r25, 0x00 ; 0 + f5c: 8f 71 andi r24, 0x1F ; 31 + f5e: 90 70 andi r25, 0x00 ; 0 + f60: 00 97 sbiw r24, 0x00 ; 0 + f62: 29 f0 breq .+10 ; 0xf6e + f64: 82 30 cpi r24, 0x02 ; 2 + f66: 91 05 cpc r25, r1 + f68: 09 f0 breq .+2 ; 0xf6c + f6a: e3 c0 rjmp .+454 ; 0x1132 + f6c: 0b c0 rjmp .+22 ; 0xf84 { #if !defined(NO_DEVICE_REMOTE_WAKEUP) case REQREC_DEVICE: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - f38: 80 91 5e 02 lds r24, 0x025E - f3c: 81 30 cpi r24, 0x01 ; 1 - f3e: 09 f0 breq .+2 ; 0xf42 - f40: dd c0 rjmp .+442 ; 0x10fc + f6e: 80 91 70 02 lds r24, 0x0270 + f72: 81 30 cpi r24, 0x01 ; 1 + f74: 09 f0 breq .+2 ; 0xf78 + f76: dd c0 rjmp .+442 ; 0x1132 USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - f42: 23 30 cpi r18, 0x03 ; 3 - f44: 09 f0 breq .+2 ; 0xf48 - f46: 80 e0 ldi r24, 0x00 ; 0 - f48: 80 93 5a 02 sts 0x025A, r24 - f4c: 2c c0 rjmp .+88 ; 0xfa6 + f78: 23 30 cpi r18, 0x03 ; 3 + f7a: 09 f0 breq .+2 ; 0xf7e + f7c: 80 e0 ldi r24, 0x00 ; 0 + f7e: 80 93 6c 02 sts 0x026C, r24 + f82: 2c c0 rjmp .+88 ; 0xfdc break; #endif #if !defined(CONTROL_ONLY_DEVICE) case REQREC_ENDPOINT: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - f4e: 80 91 5e 02 lds r24, 0x025E - f52: 88 23 and r24, r24 - f54: 41 f5 brne .+80 ; 0xfa6 + f84: 80 91 70 02 lds r24, 0x0270 + f88: 88 23 and r24, r24 + f8a: 41 f5 brne .+80 ; 0xfdc { uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - f56: 20 91 60 02 lds r18, 0x0260 - f5a: 2f 70 andi r18, 0x0F ; 15 + f8c: 20 91 72 02 lds r18, 0x0272 + f90: 2f 70 andi r18, 0x0F ; 15 if (EndpointIndex == ENDPOINT_CONTROLEP) - f5c: 09 f4 brne .+2 ; 0xf60 - f5e: ce c0 rjmp .+412 ; 0x10fc + f92: 09 f4 brne .+2 ; 0xf96 + f94: ce c0 rjmp .+412 ; 0x1132 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - f60: 20 93 e9 00 sts 0x00E9, r18 + f96: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise. */ static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsEnabled(void) { return ((UECONX & (1 << EPEN)) ? true : false); - f64: 80 91 eb 00 lds r24, 0x00EB + f9a: 80 91 eb 00 lds r24, 0x00EB return; Endpoint_SelectEndpoint(EndpointIndex); if (Endpoint_IsEnabled()) - f68: 80 ff sbrs r24, 0 - f6a: 1d c0 rjmp .+58 ; 0xfa6 + f9e: 80 ff sbrs r24, 0 + fa0: 1d c0 rjmp .+58 ; 0xfdc { if (USB_ControlRequest.bRequest == REQ_SetFeature) - f6c: 80 91 5d 02 lds r24, 0x025D - f70: 83 30 cpi r24, 0x03 ; 3 - f72: 21 f4 brne .+8 ; 0xf7c + fa2: 80 91 6f 02 lds r24, 0x026F + fa6: 83 30 cpi r24, 0x03 ; 3 + fa8: 21 f4 brne .+8 ; 0xfb2 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - f74: 80 91 eb 00 lds r24, 0x00EB - f78: 80 62 ori r24, 0x20 ; 32 - f7a: 13 c0 rjmp .+38 ; 0xfa2 + faa: 80 91 eb 00 lds r24, 0x00EB + fae: 80 62 ori r24, 0x20 ; 32 + fb0: 13 c0 rjmp .+38 ; 0xfd8 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearStall(void) { UECONX |= (1 << STALLRQC); - f7c: 80 91 eb 00 lds r24, 0x00EB - f80: 80 61 ori r24, 0x10 ; 16 - f82: 80 93 eb 00 sts 0x00EB, r24 + fb2: 80 91 eb 00 lds r24, 0x00EB + fb6: 80 61 ori r24, 0x10 ; 16 + fb8: 80 93 eb 00 sts 0x00EB, r24 * \param[in] Address Endpoint address whose FIFO buffers are to be reset. */ static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetEndpoint(const uint8_t Address) { UERST = (1 << (Address & ENDPOINT_EPNUM_MASK)); - f86: 81 e0 ldi r24, 0x01 ; 1 - f88: 90 e0 ldi r25, 0x00 ; 0 - f8a: 02 c0 rjmp .+4 ; 0xf90 - f8c: 88 0f add r24, r24 - f8e: 99 1f adc r25, r25 - f90: 2a 95 dec r18 - f92: e2 f7 brpl .-8 ; 0xf8c - f94: 80 93 ea 00 sts 0x00EA, r24 + fbc: 81 e0 ldi r24, 0x01 ; 1 + fbe: 90 e0 ldi r25, 0x00 ; 0 + fc0: 02 c0 rjmp .+4 ; 0xfc6 + fc2: 88 0f add r24, r24 + fc4: 99 1f adc r25, r25 + fc6: 2a 95 dec r18 + fc8: e2 f7 brpl .-8 ; 0xfc2 + fca: 80 93 ea 00 sts 0x00EA, r24 UERST = 0; - f98: 10 92 ea 00 sts 0x00EA, r1 + fce: 10 92 ea 00 sts 0x00EA, r1 /** Resets the data toggle of the currently selected endpoint. */ static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetDataToggle(void) { UECONX |= (1 << RSTDT); - f9c: 80 91 eb 00 lds r24, 0x00EB - fa0: 88 60 ori r24, 0x08 ; 8 - fa2: 80 93 eb 00 sts 0x00EB, r24 + fd2: 80 91 eb 00 lds r24, 0x00EB + fd6: 88 60 ori r24, 0x08 ; 8 + fd8: 80 93 eb 00 sts 0x00EB, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - fa6: 10 92 e9 00 sts 0x00E9, r1 + fdc: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - faa: 80 91 e8 00 lds r24, 0x00E8 - fae: 87 7f andi r24, 0xF7 ; 247 - fb0: 86 c0 rjmp .+268 ; 0x10be + fe0: 80 91 e8 00 lds r24, 0x00E8 + fe4: 87 7f andi r24, 0xF7 ; 247 + fe6: 86 c0 rjmp .+268 ; 0x10f4 USB_Device_ClearSetFeature(); } break; case REQ_SetAddress: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - fb2: 88 23 and r24, r24 - fb4: 09 f0 breq .+2 ; 0xfb8 - fb6: a2 c0 rjmp .+324 ; 0x10fc + fe8: 88 23 and r24, r24 + fea: 09 f0 breq .+2 ; 0xfee + fec: a2 c0 rjmp .+324 ; 0x1132 } } static void USB_Device_SetAddress(void) { uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - fb8: 10 91 5e 02 lds r17, 0x025E - fbc: 1f 77 andi r17, 0x7F ; 127 + fee: 10 91 70 02 lds r17, 0x0270 + ff2: 1f 77 andi r17, 0x7F ; 127 #endif static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_SetDeviceAddress(const uint8_t Address) { UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F); - fbe: 80 91 e3 00 lds r24, 0x00E3 - fc2: 80 78 andi r24, 0x80 ; 128 - fc4: 81 2b or r24, r17 - fc6: 80 93 e3 00 sts 0x00E3, r24 - fca: 80 91 e8 00 lds r24, 0x00E8 - fce: 87 7f andi r24, 0xF7 ; 247 - fd0: 80 93 e8 00 sts 0x00E8, r24 + ff4: 80 91 e3 00 lds r24, 0x00E3 + ff8: 80 78 andi r24, 0x80 ; 128 + ffa: 81 2b or r24, r17 + ffc: 80 93 e3 00 sts 0x00E3, r24 + 1000: 80 91 e8 00 lds r24, 0x00E8 + 1004: 87 7f andi r24, 0xF7 ; 247 + 1006: 80 93 e8 00 sts 0x00E8, r24 USB_Device_SetDeviceAddress(DeviceAddress); Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - fd4: d2 dd rcall .-1116 ; 0xb7a + 100a: d2 dd rcall .-1116 ; 0xbb0 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - fd6: 80 91 e8 00 lds r24, 0x00E8 + 100c: 80 91 e8 00 lds r24, 0x00E8 while (!(Endpoint_IsINReady())); - fda: 80 ff sbrs r24, 0 - fdc: fc cf rjmp .-8 ; 0xfd6 + 1010: 80 ff sbrs r24, 0 + 1012: fc cf rjmp .-8 ; 0x100c static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) { (void)Address; UDADDR |= (1 << ADDEN); - fde: 80 91 e3 00 lds r24, 0x00E3 - fe2: 80 68 ori r24, 0x80 ; 128 - fe4: 80 93 e3 00 sts 0x00E3, r24 + 1014: 80 91 e3 00 lds r24, 0x00E3 + 1018: 80 68 ori r24, 0x80 ; 128 + 101a: 80 93 e3 00 sts 0x00E3, r24 USB_Device_EnableDeviceAddress(DeviceAddress); USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - fe8: 11 23 and r17, r17 - fea: 11 f0 breq .+4 ; 0xff0 - fec: 83 e0 ldi r24, 0x03 ; 3 - fee: 01 c0 rjmp .+2 ; 0xff2 - ff0: 82 e0 ldi r24, 0x02 ; 2 - ff2: 8e bb out 0x1e, r24 ; 30 - ff4: 83 c0 rjmp .+262 ; 0x10fc + 101e: 11 23 and r17, r17 + 1020: 11 f0 breq .+4 ; 0x1026 + 1022: 83 e0 ldi r24, 0x03 ; 3 + 1024: 01 c0 rjmp .+2 ; 0x1028 + 1026: 82 e0 ldi r24, 0x02 ; 2 + 1028: 8e bb out 0x1e, r24 ; 30 + 102a: 83 c0 rjmp .+262 ; 0x1132 if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_SetAddress(); break; case REQ_GetDescriptor: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - ff6: 80 58 subi r24, 0x80 ; 128 - ff8: 82 30 cpi r24, 0x02 ; 2 - ffa: 08 f0 brcs .+2 ; 0xffe - ffc: 7f c0 rjmp .+254 ; 0x10fc + 102c: 80 58 subi r24, 0x80 ; 128 + 102e: 82 30 cpi r24, 0x02 ; 2 + 1030: 08 f0 brcs .+2 ; 0x1034 + 1032: 7f c0 rjmp .+254 ; 0x1132 !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS)) uint8_t DescriptorAddressSpace; #endif #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR) if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL)) - ffe: 80 91 5e 02 lds r24, 0x025E - 1002: 90 91 5f 02 lds r25, 0x025F - 1006: 23 e0 ldi r18, 0x03 ; 3 - 1008: 8c 3d cpi r24, 0xDC ; 220 - 100a: 92 07 cpc r25, r18 - 100c: 91 f5 brne .+100 ; 0x1072 + 1034: 80 91 70 02 lds r24, 0x0270 + 1038: 90 91 71 02 lds r25, 0x0271 + 103c: 23 e0 ldi r18, 0x03 ; 3 + 103e: 8c 3d cpi r24, 0xDC ; 220 + 1040: 92 07 cpc r25, r18 + 1042: 91 f5 brne .+100 ; 0x10a8 { USB_Descriptor_Header_t Header; uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4]; } SignatureDescriptor; SignatureDescriptor.Header.Type = DTYPE_String; - 100e: 83 e0 ldi r24, 0x03 ; 3 - 1010: 8c 83 std Y+4, r24 ; 0x04 + 1044: 83 e0 ldi r24, 0x03 ; 3 + 1046: 8c 83 std Y+4, r24 ; 0x04 SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4); - 1012: 8a e2 ldi r24, 0x2A ; 42 - 1014: 8b 83 std Y+3, r24 ; 0x03 + 1048: 8a e2 ldi r24, 0x2A ; 42 + 104a: 8b 83 std Y+3, r24 ; 0x03 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 1016: 5f b7 in r21, 0x3f ; 63 + 104c: 5f b7 in r21, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 1018: f8 94 cli + 104e: f8 94 cli __builtin_ssrf(AVR32_SR_GM_OFFSET); #elif (ARCH == ARCH_XMEGA) cli(); #endif GCC_MEMORY_BARRIER(); - 101a: de 01 movw r26, r28 - 101c: 15 96 adiw r26, 0x05 ; 5 - 101e: 80 e0 ldi r24, 0x00 ; 0 - 1020: 90 e0 ldi r25, 0x00 ; 0 + 1050: de 01 movw r26, r28 + 1052: 15 96 adiw r26, 0x05 ; 5 + 1054: 80 e0 ldi r24, 0x00 ; 0 + 1056: 90 e0 ldi r25, 0x00 ; 0 static inline void USB_Device_GetSerialString(uint16_t* const UnicodeString) { uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; - 1022: 4e e0 ldi r20, 0x0E ; 14 + 1058: 4e e0 ldi r20, 0x0E ; 14 for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) { uint8_t SerialByte = boot_signature_byte_get(SigReadAddress); - 1024: 61 e2 ldi r22, 0x21 ; 33 - 1026: e4 2f mov r30, r20 - 1028: f0 e0 ldi r31, 0x00 ; 0 - 102a: 60 93 57 00 sts 0x0057, r22 - 102e: e4 91 lpm r30, Z+ + 105a: 61 e2 ldi r22, 0x21 ; 33 + 105c: e4 2f mov r30, r20 + 105e: f0 e0 ldi r31, 0x00 ; 0 + 1060: 60 93 57 00 sts 0x0057, r22 + 1064: e4 91 lpm r30, Z+ if (SerialCharNum & 0x01) - 1030: 80 ff sbrs r24, 0 - 1032: 03 c0 rjmp .+6 ; 0x103a + 1066: 80 ff sbrs r24, 0 + 1068: 03 c0 rjmp .+6 ; 0x1070 { SerialByte >>= 4; - 1034: e2 95 swap r30 - 1036: ef 70 andi r30, 0x0F ; 15 + 106a: e2 95 swap r30 + 106c: ef 70 andi r30, 0x0F ; 15 SigReadAddress++; - 1038: 4f 5f subi r20, 0xFF ; 255 + 106e: 4f 5f subi r20, 0xFF ; 255 } SerialByte &= 0x0F; - 103a: ef 70 andi r30, 0x0F ; 15 - 103c: 2e 2f mov r18, r30 - 103e: 30 e0 ldi r19, 0x00 ; 0 + 1070: ef 70 andi r30, 0x0F ; 15 + 1072: 2e 2f mov r18, r30 + 1074: 30 e0 ldi r19, 0x00 ; 0 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ? - 1040: ea 30 cpi r30, 0x0A ; 10 - 1042: 18 f0 brcs .+6 ; 0x104a - 1044: 29 5c subi r18, 0xC9 ; 201 - 1046: 3f 4f sbci r19, 0xFF ; 255 - 1048: 02 c0 rjmp .+4 ; 0x104e - 104a: 20 5d subi r18, 0xD0 ; 208 - 104c: 3f 4f sbci r19, 0xFF ; 255 - 104e: 2d 93 st X+, r18 - 1050: 3d 93 st X+, r19 - 1052: 01 96 adiw r24, 0x01 ; 1 + 1076: ea 30 cpi r30, 0x0A ; 10 + 1078: 18 f0 brcs .+6 ; 0x1080 + 107a: 29 5c subi r18, 0xC9 ; 201 + 107c: 3f 4f sbci r19, 0xFF ; 255 + 107e: 02 c0 rjmp .+4 ; 0x1084 + 1080: 20 5d subi r18, 0xD0 ; 208 + 1082: 3f 4f sbci r19, 0xFF ; 255 + 1084: 2d 93 st X+, r18 + 1086: 3d 93 st X+, r19 + 1088: 01 96 adiw r24, 0x01 ; 1 uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) - 1054: 84 31 cpi r24, 0x14 ; 20 - 1056: 91 05 cpc r25, r1 - 1058: 31 f7 brne .-52 ; 0x1026 + 108a: 84 31 cpi r24, 0x14 ; 20 + 108c: 91 05 cpc r25, r1 + 108e: 31 f7 brne .-52 ; 0x105c static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 105a: 5f bf out 0x3f, r21 ; 63 + 1090: 5f bf out 0x3f, r21 ; 63 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 105c: 80 91 e8 00 lds r24, 0x00E8 - 1060: 87 7f andi r24, 0xF7 ; 247 - 1062: 80 93 e8 00 sts 0x00E8, r24 + 1092: 80 91 e8 00 lds r24, 0x00E8 + 1096: 87 7f andi r24, 0xF7 ; 247 + 1098: 80 93 e8 00 sts 0x00E8, r24 USB_Device_GetSerialString(SignatureDescriptor.UnicodeString); Endpoint_ClearSETUP(); Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor)); - 1066: ce 01 movw r24, r28 - 1068: 03 96 adiw r24, 0x03 ; 3 - 106a: 6a e2 ldi r22, 0x2A ; 42 - 106c: 70 e0 ldi r23, 0x00 ; 0 - 106e: 55 dc rcall .-1878 ; 0x91a - 1070: 12 c0 rjmp .+36 ; 0x1096 + 109c: ce 01 movw r24, r28 + 109e: 03 96 adiw r24, 0x03 ; 3 + 10a0: 6a e2 ldi r22, 0x2A ; 42 + 10a2: 70 e0 ldi r23, 0x00 ; 0 + 10a4: 55 dc rcall .-1878 ; 0x950 + 10a6: 12 c0 rjmp .+36 ; 0x10cc USB_Device_GetInternalSerialDescriptor(); return; } #endif if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 1072: 60 91 60 02 lds r22, 0x0260 - 1076: ae 01 movw r20, r28 - 1078: 4f 5f subi r20, 0xFF ; 255 - 107a: 5f 4f sbci r21, 0xFF ; 255 - 107c: 21 dc rcall .-1982 ; 0x8c0 - 107e: bc 01 movw r22, r24 - 1080: 00 97 sbiw r24, 0x00 ; 0 - 1082: 09 f4 brne .+2 ; 0x1086 - 1084: 3b c0 rjmp .+118 ; 0x10fc - 1086: 80 91 e8 00 lds r24, 0x00E8 - 108a: 87 7f andi r24, 0xF7 ; 247 - 108c: 80 93 e8 00 sts 0x00E8, r24 + 10a8: 60 91 72 02 lds r22, 0x0272 + 10ac: ae 01 movw r20, r28 + 10ae: 4f 5f subi r20, 0xFF ; 255 + 10b0: 5f 4f sbci r21, 0xFF ; 255 + 10b2: 21 dc rcall .-1982 ; 0x8f6 + 10b4: bc 01 movw r22, r24 + 10b6: 00 97 sbiw r24, 0x00 ; 0 + 10b8: 09 f4 brne .+2 ; 0x10bc + 10ba: 3b c0 rjmp .+118 ; 0x1132 + 10bc: 80 91 e8 00 lds r24, 0x00E8 + 10c0: 87 7f andi r24, 0xF7 ; 247 + 10c2: 80 93 e8 00 sts 0x00E8, r24 #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE) Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_EEPROM_DESCRIPTORS) Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_FLASH_DESCRIPTORS) Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize); - 1090: 89 81 ldd r24, Y+1 ; 0x01 - 1092: 9a 81 ldd r25, Y+2 ; 0x02 - 1094: 9c dc rcall .-1736 ; 0x9ce + 10c6: 89 81 ldd r24, Y+1 ; 0x01 + 10c8: 9a 81 ldd r25, Y+2 ; 0x02 + 10ca: 9c dc rcall .-1736 ; 0xa04 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1096: 80 91 e8 00 lds r24, 0x00E8 - 109a: 8b 77 andi r24, 0x7B ; 123 - 109c: 80 93 e8 00 sts 0x00E8, r24 - 10a0: 2d c0 rjmp .+90 ; 0x10fc + 10cc: 80 91 e8 00 lds r24, 0x00E8 + 10d0: 8b 77 andi r24, 0x7B ; 123 + 10d2: 80 93 e8 00 sts 0x00E8, r24 + 10d6: 2d c0 rjmp .+90 ; 0x1132 USB_Device_GetDescriptor(); } break; case REQ_GetConfiguration: if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 10a2: 80 38 cpi r24, 0x80 ; 128 - 10a4: 59 f5 brne .+86 ; 0x10fc + 10d8: 80 38 cpi r24, 0x80 ; 128 + 10da: 59 f5 brne .+86 ; 0x1132 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 10a6: 80 91 e8 00 lds r24, 0x00E8 - 10aa: 87 7f andi r24, 0xF7 ; 247 - 10ac: 80 93 e8 00 sts 0x00E8, r24 + 10dc: 80 91 e8 00 lds r24, 0x00E8 + 10e0: 87 7f andi r24, 0xF7 ; 247 + 10e2: 80 93 e8 00 sts 0x00E8, r24 static void USB_Device_GetConfiguration(void) { Endpoint_ClearSETUP(); Endpoint_Write_8(USB_Device_ConfigurationNumber); - 10b0: 80 91 58 02 lds r24, 0x0258 + 10e6: 80 91 6a 02 lds r24, 0x026A * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 10b4: 80 93 f1 00 sts 0x00F1, r24 + 10ea: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 10b8: 80 91 e8 00 lds r24, 0x00E8 - 10bc: 8e 77 andi r24, 0x7E ; 126 - 10be: 80 93 e8 00 sts 0x00E8, r24 + 10ee: 80 91 e8 00 lds r24, 0x00E8 + 10f2: 8e 77 andi r24, 0x7E ; 126 + 10f4: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 10c2: 5b dd rcall .-1354 ; 0xb7a - 10c4: 1b c0 rjmp .+54 ; 0x10fc + 10f8: 5b dd rcall .-1354 ; 0xbb0 + 10fa: 1b c0 rjmp .+54 ; 0x1132 if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_GetConfiguration(); break; case REQ_SetConfiguration: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 10c6: 88 23 and r24, r24 - 10c8: c9 f4 brne .+50 ; 0x10fc + 10fc: 88 23 and r24, r24 + 10fe: c9 f4 brne .+50 ; 0x1132 } static void USB_Device_SetConfiguration(void) { #if defined(FIXED_NUM_CONFIGURATIONS) if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 10ca: 90 91 5e 02 lds r25, 0x025E - 10ce: 92 30 cpi r25, 0x02 ; 2 - 10d0: a8 f4 brcc .+42 ; 0x10fc + 1100: 90 91 70 02 lds r25, 0x0270 + 1104: 92 30 cpi r25, 0x02 ; 2 + 1106: a8 f4 brcc .+42 ; 0x1132 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 10d2: 80 91 e8 00 lds r24, 0x00E8 - 10d6: 87 7f andi r24, 0xF7 ; 247 - 10d8: 80 93 e8 00 sts 0x00E8, r24 + 1108: 80 91 e8 00 lds r24, 0x00E8 + 110c: 87 7f andi r24, 0xF7 ; 247 + 110e: 80 93 e8 00 sts 0x00E8, r24 #endif #endif Endpoint_ClearSETUP(); USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 10dc: 90 93 58 02 sts 0x0258, r25 + 1112: 90 93 6a 02 sts 0x026A, r25 Endpoint_ClearStatusStage(); - 10e0: 4c dd rcall .-1384 ; 0xb7a + 1116: 4c dd rcall .-1384 ; 0xbb0 if (USB_Device_ConfigurationNumber) - 10e2: 80 91 58 02 lds r24, 0x0258 - 10e6: 88 23 and r24, r24 - 10e8: 21 f4 brne .+8 ; 0x10f2 + 1118: 80 91 6a 02 lds r24, 0x026A + 111c: 88 23 and r24, r24 + 111e: 21 f4 brne .+8 ; 0x1128 } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - 10ea: 80 91 e3 00 lds r24, 0x00E3 + 1120: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 10ee: 87 ff sbrs r24, 7 - 10f0: 02 c0 rjmp .+4 ; 0x10f6 - 10f2: 84 e0 ldi r24, 0x04 ; 4 - 10f4: 01 c0 rjmp .+2 ; 0x10f8 - 10f6: 81 e0 ldi r24, 0x01 ; 1 - 10f8: 8e bb out 0x1e, r24 ; 30 + 1124: 87 ff sbrs r24, 7 + 1126: 02 c0 rjmp .+4 ; 0x112c + 1128: 84 e0 ldi r24, 0x04 ; 4 + 112a: 01 c0 rjmp .+2 ; 0x112e + 112c: 81 e0 ldi r24, 0x01 ; 1 + 112e: 8e bb out 0x1e, r24 ; 30 EVENT_USB_Device_ConfigurationChanged(); - 10fa: 5b da rcall .-2890 ; 0x5b2 + 1130: 72 da rcall .-2844 ; 0x616 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 10fc: 80 91 e8 00 lds r24, 0x00E8 + 1132: 80 91 e8 00 lds r24, 0x00E8 default: break; } } if (Endpoint_IsSETUPReceived()) - 1100: 83 ff sbrs r24, 3 - 1102: 0a c0 rjmp .+20 ; 0x1118 + 1136: 83 ff sbrs r24, 3 + 1138: 0a c0 rjmp .+20 ; 0x114e * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1104: 80 91 e8 00 lds r24, 0x00E8 - 1108: 87 7f andi r24, 0xF7 ; 247 - 110a: 80 93 e8 00 sts 0x00E8, r24 + 113a: 80 91 e8 00 lds r24, 0x00E8 + 113e: 87 7f andi r24, 0xF7 ; 247 + 1140: 80 93 e8 00 sts 0x00E8, r24 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - 110e: 80 91 eb 00 lds r24, 0x00EB - 1112: 80 62 ori r24, 0x20 ; 32 - 1114: 80 93 eb 00 sts 0x00EB, r24 + 1144: 80 91 eb 00 lds r24, 0x00EB + 1148: 80 62 ori r24, 0x20 ; 32 + 114a: 80 93 eb 00 sts 0x00EB, r24 { Endpoint_ClearSETUP(); Endpoint_StallTransaction(); } } - 1118: ac 96 adiw r28, 0x2c ; 44 - 111a: 0f b6 in r0, 0x3f ; 63 - 111c: f8 94 cli - 111e: de bf out 0x3e, r29 ; 62 - 1120: 0f be out 0x3f, r0 ; 63 - 1122: cd bf out 0x3d, r28 ; 61 - 1124: cf 91 pop r28 - 1126: df 91 pop r29 - 1128: 1f 91 pop r17 - 112a: 08 95 ret - -0000112c : + 114e: ac 96 adiw r28, 0x2c ; 44 + 1150: 0f b6 in r0, 0x3f ; 63 + 1152: f8 94 cli + 1154: de bf out 0x3e, r29 ; 62 + 1156: 0f be out 0x3f, r0 ; 63 + 1158: cd bf out 0x3d, r28 ; 61 + 115a: cf 91 pop r28 + 115c: df 91 pop r29 + 115e: 1f 91 pop r17 + 1160: 08 95 ret + +00001162 : #include "Events.h" void USB_Event_Stub(void) { } - 112c: 08 95 ret + 1162: 08 95 ret -0000112e : +00001164 : #if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) volatile uint8_t USB_DeviceState; #endif void USB_USBTask(void) { - 112e: 1f 93 push r17 + 1164: 1f 93 push r17 } #if defined(USB_CAN_BE_DEVICE) static void USB_DeviceTask(void) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 1130: 8e b3 in r24, 0x1e ; 30 - 1132: 88 23 and r24, r24 - 1134: a9 f0 breq .+42 ; 0x1160 + 1166: 8e b3 in r24, 0x1e ; 30 + 1168: 88 23 and r24, r24 + 116a: a9 f0 breq .+42 ; 0x1196 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 1136: 80 91 e9 00 lds r24, 0x00E9 - 113a: 8f 70 andi r24, 0x0F ; 15 + 116c: 80 91 e9 00 lds r24, 0x00E9 + 1170: 8f 70 andi r24, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 113c: 90 91 ec 00 lds r25, 0x00EC - 1140: 90 ff sbrs r25, 0 - 1142: 02 c0 rjmp .+4 ; 0x1148 - 1144: 10 e8 ldi r17, 0x80 ; 128 - 1146: 01 c0 rjmp .+2 ; 0x114a - 1148: 10 e0 ldi r17, 0x00 ; 0 + 1172: 90 91 ec 00 lds r25, 0x00EC + 1176: 90 ff sbrs r25, 0 + 1178: 02 c0 rjmp .+4 ; 0x117e + 117a: 10 e8 ldi r17, 0x80 ; 128 + 117c: 01 c0 rjmp .+2 ; 0x1180 + 117e: 10 e0 ldi r17, 0x00 ; 0 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 114a: 18 2b or r17, r24 + 1180: 18 2b or r17, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 114c: 10 92 e9 00 sts 0x00E9, r1 + 1182: 10 92 e9 00 sts 0x00E9, r1 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1150: 80 91 e8 00 lds r24, 0x00E8 + 1186: 80 91 e8 00 lds r24, 0x00E8 uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); if (Endpoint_IsSETUPReceived()) - 1154: 83 ff sbrs r24, 3 - 1156: 01 c0 rjmp .+2 ; 0x115a + 118a: 83 ff sbrs r24, 3 + 118c: 01 c0 rjmp .+2 ; 0x1190 USB_Device_ProcessControlRequest(); - 1158: 88 de rcall .-752 ; 0xe6a + 118e: 88 de rcall .-752 ; 0xea0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 115a: 1f 70 andi r17, 0x0F ; 15 - 115c: 10 93 e9 00 sts 0x00E9, r17 + 1190: 1f 70 andi r17, 0x0F ; 15 + 1192: 10 93 e9 00 sts 0x00E9, r17 #elif defined(USB_CAN_BE_HOST) USB_HostTask(); #elif defined(USB_CAN_BE_DEVICE) USB_DeviceTask(); #endif } - 1160: 1f 91 pop r17 - 1162: 08 95 ret + 1196: 1f 91 pop r17 + 1198: 08 95 ret -00001164 : +0000119a : #define __INCLUDE_FROM_CDC_DRIVER #define __INCLUDE_FROM_CDC_DEVICE_C #include "CDCClassDevice.h" void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1164: cf 93 push r28 - 1166: df 93 push r29 - 1168: ec 01 movw r28, r24 + 119a: cf 93 push r28 + 119c: df 93 push r29 + 119e: ec 01 movw r28, r24 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 116a: 80 91 e8 00 lds r24, 0x00E8 + 11a0: 80 91 e8 00 lds r24, 0x00E8 if (!(Endpoint_IsSETUPReceived())) - 116e: 83 ff sbrs r24, 3 - 1170: a2 c0 rjmp .+324 ; 0x12b6 + 11a4: 83 ff sbrs r24, 3 + 11a6: a2 c0 rjmp .+324 ; 0x12ec return; if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - 1172: 88 81 ld r24, Y - 1174: 90 e0 ldi r25, 0x00 ; 0 - 1176: 20 91 60 02 lds r18, 0x0260 - 117a: 30 91 61 02 lds r19, 0x0261 - 117e: 28 17 cp r18, r24 - 1180: 39 07 cpc r19, r25 - 1182: 09 f0 breq .+2 ; 0x1186 - 1184: 98 c0 rjmp .+304 ; 0x12b6 + 11a8: 88 81 ld r24, Y + 11aa: 90 e0 ldi r25, 0x00 ; 0 + 11ac: 20 91 72 02 lds r18, 0x0272 + 11b0: 30 91 73 02 lds r19, 0x0273 + 11b4: 28 17 cp r18, r24 + 11b6: 39 07 cpc r19, r25 + 11b8: 09 f0 breq .+2 ; 0x11bc + 11ba: 98 c0 rjmp .+304 ; 0x12ec return; switch (USB_ControlRequest.bRequest) - 1186: 80 91 5d 02 lds r24, 0x025D - 118a: 81 32 cpi r24, 0x21 ; 33 - 118c: 69 f0 breq .+26 ; 0x11a8 - 118e: 82 32 cpi r24, 0x22 ; 34 - 1190: 20 f4 brcc .+8 ; 0x119a - 1192: 80 32 cpi r24, 0x20 ; 32 - 1194: 09 f0 breq .+2 ; 0x1198 - 1196: 8f c0 rjmp .+286 ; 0x12b6 - 1198: 3c c0 rjmp .+120 ; 0x1212 - 119a: 82 32 cpi r24, 0x22 ; 34 - 119c: 09 f4 brne .+2 ; 0x11a0 - 119e: 6a c0 rjmp .+212 ; 0x1274 - 11a0: 83 32 cpi r24, 0x23 ; 35 - 11a2: 09 f0 breq .+2 ; 0x11a6 - 11a4: 88 c0 rjmp .+272 ; 0x12b6 - 11a6: 79 c0 rjmp .+242 ; 0x129a + 11bc: 80 91 6f 02 lds r24, 0x026F + 11c0: 81 32 cpi r24, 0x21 ; 33 + 11c2: 69 f0 breq .+26 ; 0x11de + 11c4: 82 32 cpi r24, 0x22 ; 34 + 11c6: 20 f4 brcc .+8 ; 0x11d0 + 11c8: 80 32 cpi r24, 0x20 ; 32 + 11ca: 09 f0 breq .+2 ; 0x11ce + 11cc: 8f c0 rjmp .+286 ; 0x12ec + 11ce: 3c c0 rjmp .+120 ; 0x1248 + 11d0: 82 32 cpi r24, 0x22 ; 34 + 11d2: 09 f4 brne .+2 ; 0x11d6 + 11d4: 6a c0 rjmp .+212 ; 0x12aa + 11d6: 83 32 cpi r24, 0x23 ; 35 + 11d8: 09 f0 breq .+2 ; 0x11dc + 11da: 88 c0 rjmp .+272 ; 0x12ec + 11dc: 79 c0 rjmp .+242 ; 0x12d0 { case CDC_REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - 11a8: 80 91 5c 02 lds r24, 0x025C - 11ac: 81 3a cpi r24, 0xA1 ; 161 - 11ae: 09 f0 breq .+2 ; 0x11b2 - 11b0: 82 c0 rjmp .+260 ; 0x12b6 + 11de: 80 91 6e 02 lds r24, 0x026E + 11e2: 81 3a cpi r24, 0xA1 ; 161 + 11e4: 09 f0 breq .+2 ; 0x11e8 + 11e6: 82 c0 rjmp .+260 ; 0x12ec * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 11b2: 80 91 e8 00 lds r24, 0x00E8 - 11b6: 87 7f andi r24, 0xF7 ; 247 - 11b8: 80 93 e8 00 sts 0x00E8, r24 + 11e8: 80 91 e8 00 lds r24, 0x00E8 + 11ec: 87 7f andi r24, 0xF7 ; 247 + 11ee: 80 93 e8 00 sts 0x00E8, r24 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 11bc: 80 91 e8 00 lds r24, 0x00E8 + 11f2: 80 91 e8 00 lds r24, 0x00E8 { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())); - 11c0: 80 ff sbrs r24, 0 - 11c2: fc cf rjmp .-8 ; 0x11bc + 11f6: 80 ff sbrs r24, 0 + 11f8: fc cf rjmp .-8 ; 0x11f2 Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 11c4: 8c 89 ldd r24, Y+20 ; 0x14 - 11c6: 9d 89 ldd r25, Y+21 ; 0x15 - 11c8: ae 89 ldd r26, Y+22 ; 0x16 - 11ca: bf 89 ldd r27, Y+23 ; 0x17 + 11fa: 8c 89 ldd r24, Y+20 ; 0x14 + 11fc: 9d 89 ldd r25, Y+21 ; 0x15 + 11fe: ae 89 ldd r26, Y+22 ; 0x16 + 1200: bf 89 ldd r27, Y+23 ; 0x17 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_32_LE(const uint32_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_32_LE(const uint32_t Data) { UEDATX = (Data & 0xFF); - 11cc: 80 93 f1 00 sts 0x00F1, r24 + 1202: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - 11d0: 29 2f mov r18, r25 - 11d2: 3a 2f mov r19, r26 - 11d4: 4b 2f mov r20, r27 - 11d6: 55 27 eor r21, r21 - 11d8: 20 93 f1 00 sts 0x00F1, r18 + 1206: 29 2f mov r18, r25 + 1208: 3a 2f mov r19, r26 + 120a: 4b 2f mov r20, r27 + 120c: 55 27 eor r21, r21 + 120e: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 16); - 11dc: 9d 01 movw r18, r26 - 11de: 44 27 eor r20, r20 - 11e0: 55 27 eor r21, r21 - 11e2: 20 93 f1 00 sts 0x00F1, r18 + 1212: 9d 01 movw r18, r26 + 1214: 44 27 eor r20, r20 + 1216: 55 27 eor r21, r21 + 1218: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 24); - 11e6: 8b 2f mov r24, r27 - 11e8: 99 27 eor r25, r25 - 11ea: aa 27 eor r26, r26 - 11ec: bb 27 eor r27, r27 - 11ee: 80 93 f1 00 sts 0x00F1, r24 + 121c: 8b 2f mov r24, r27 + 121e: 99 27 eor r25, r25 + 1220: aa 27 eor r26, r26 + 1222: bb 27 eor r27, r27 + 1224: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); - 11f2: 88 8d ldd r24, Y+24 ; 0x18 + 1228: 88 8d ldd r24, Y+24 ; 0x18 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 11f4: 80 93 f1 00 sts 0x00F1, r24 + 122a: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); - 11f8: 89 8d ldd r24, Y+25 ; 0x19 - 11fa: 80 93 f1 00 sts 0x00F1, r24 + 122e: 89 8d ldd r24, Y+25 ; 0x19 + 1230: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); - 11fe: 8a 8d ldd r24, Y+26 ; 0x1a - 1200: 80 93 f1 00 sts 0x00F1, r24 + 1234: 8a 8d ldd r24, Y+26 ; 0x1a + 1236: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1204: 80 91 e8 00 lds r24, 0x00E8 - 1208: 8e 77 andi r24, 0x7E ; 126 - 120a: 80 93 e8 00 sts 0x00E8, r24 + 123a: 80 91 e8 00 lds r24, 0x00E8 + 123e: 8e 77 andi r24, 0x7E ; 126 + 1240: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 120e: b5 dc rcall .-1686 ; 0xb7a - 1210: 52 c0 rjmp .+164 ; 0x12b6 + 1244: b5 dc rcall .-1686 ; 0xbb0 + 1246: 52 c0 rjmp .+164 ; 0x12ec } break; case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1212: 80 91 5c 02 lds r24, 0x025C - 1216: 81 32 cpi r24, 0x21 ; 33 - 1218: 09 f0 breq .+2 ; 0x121c - 121a: 4d c0 rjmp .+154 ; 0x12b6 + 1248: 80 91 6e 02 lds r24, 0x026E + 124c: 81 32 cpi r24, 0x21 ; 33 + 124e: 09 f0 breq .+2 ; 0x1252 + 1250: 4d c0 rjmp .+154 ; 0x12ec * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 121c: 80 91 e8 00 lds r24, 0x00E8 - 1220: 87 7f andi r24, 0xF7 ; 247 - 1222: 80 93 e8 00 sts 0x00E8, r24 + 1252: 80 91 e8 00 lds r24, 0x00E8 + 1256: 87 7f andi r24, 0xF7 ; 247 + 1258: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 1226: 04 c0 rjmp .+8 ; 0x1230 + 125c: 04 c0 rjmp .+8 ; 0x1266 { if (USB_DeviceState == DEVICE_STATE_Unattached) - 1228: 8e b3 in r24, 0x1e ; 30 - 122a: 88 23 and r24, r24 - 122c: 09 f4 brne .+2 ; 0x1230 - 122e: 43 c0 rjmp .+134 ; 0x12b6 + 125e: 8e b3 in r24, 0x1e ; 30 + 1260: 88 23 and r24, r24 + 1262: 09 f4 brne .+2 ; 0x1266 + 1264: 43 c0 rjmp .+134 ; 0x12ec * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1230: 80 91 e8 00 lds r24, 0x00E8 + 1266: 80 91 e8 00 lds r24, 0x00E8 case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 1234: 82 ff sbrs r24, 2 - 1236: f8 cf rjmp .-16 ; 0x1228 + 126a: 82 ff sbrs r24, 2 + 126c: f8 cf rjmp .-16 ; 0x125e { uint32_t Value; uint8_t Bytes[4]; } Data; Data.Bytes[0] = UEDATX; - 1238: 30 91 f1 00 lds r19, 0x00F1 + 126e: 30 91 f1 00 lds r19, 0x00F1 Data.Bytes[1] = UEDATX; - 123c: 20 91 f1 00 lds r18, 0x00F1 + 1272: 20 91 f1 00 lds r18, 0x00F1 Data.Bytes[2] = UEDATX; - 1240: 90 91 f1 00 lds r25, 0x00F1 + 1276: 90 91 f1 00 lds r25, 0x00F1 Data.Bytes[3] = UEDATX; - 1244: 80 91 f1 00 lds r24, 0x00F1 + 127a: 80 91 f1 00 lds r24, 0x00F1 { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); - 1248: 3c 8b std Y+20, r19 ; 0x14 - 124a: 2d 8b std Y+21, r18 ; 0x15 - 124c: 9e 8b std Y+22, r25 ; 0x16 - 124e: 8f 8b std Y+23, r24 ; 0x17 + 127e: 3c 8b std Y+20, r19 ; 0x14 + 1280: 2d 8b std Y+21, r18 ; 0x15 + 1282: 9e 8b std Y+22, r25 ; 0x16 + 1284: 8f 8b std Y+23, r24 ; 0x17 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 1250: 80 91 f1 00 lds r24, 0x00F1 + 1286: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8(); - 1254: 88 8f std Y+24, r24 ; 0x18 - 1256: 80 91 f1 00 lds r24, 0x00F1 + 128a: 88 8f std Y+24, r24 ; 0x18 + 128c: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8(); - 125a: 89 8f std Y+25, r24 ; 0x19 - 125c: 80 91 f1 00 lds r24, 0x00F1 + 1290: 89 8f std Y+25, r24 ; 0x19 + 1292: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8(); - 1260: 8a 8f std Y+26, r24 ; 0x1a + 1296: 8a 8f std Y+26, r24 ; 0x1a */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1262: 80 91 e8 00 lds r24, 0x00E8 - 1266: 8b 77 andi r24, 0x7B ; 123 - 1268: 80 93 e8 00 sts 0x00E8, r24 + 1298: 80 91 e8 00 lds r24, 0x00E8 + 129c: 8b 77 andi r24, 0x7B ; 123 + 129e: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearOUT(); Endpoint_ClearStatusStage(); - 126c: 86 dc rcall .-1780 ; 0xb7a + 12a2: 86 dc rcall .-1780 ; 0xbb0 EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - 126e: ce 01 movw r24, r28 - 1270: d0 d9 rcall .-3168 ; 0x612 - 1272: 21 c0 rjmp .+66 ; 0x12b6 + 12a4: ce 01 movw r24, r28 + 12a6: e7 d9 rcall .-3122 ; 0x676 + 12a8: 21 c0 rjmp .+66 ; 0x12ec } break; case CDC_REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1274: 80 91 5c 02 lds r24, 0x025C - 1278: 81 32 cpi r24, 0x21 ; 33 - 127a: e9 f4 brne .+58 ; 0x12b6 + 12aa: 80 91 6e 02 lds r24, 0x026E + 12ae: 81 32 cpi r24, 0x21 ; 33 + 12b0: e9 f4 brne .+58 ; 0x12ec * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 127c: 80 91 e8 00 lds r24, 0x00E8 - 1280: 87 7f andi r24, 0xF7 ; 247 - 1282: 80 93 e8 00 sts 0x00E8, r24 + 12b2: 80 91 e8 00 lds r24, 0x00E8 + 12b6: 87 7f andi r24, 0xF7 ; 247 + 12b8: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 1286: 79 dc rcall .-1806 ; 0xb7a + 12bc: 79 dc rcall .-1806 ; 0xbb0 CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - 1288: 80 91 5e 02 lds r24, 0x025E - 128c: 90 91 5f 02 lds r25, 0x025F - 1290: 99 8b std Y+17, r25 ; 0x11 - 1292: 88 8b std Y+16, r24 ; 0x10 + 12be: 80 91 70 02 lds r24, 0x0270 + 12c2: 90 91 71 02 lds r25, 0x0271 + 12c6: 99 8b std Y+17, r25 ; 0x11 + 12c8: 88 8b std Y+16, r24 ; 0x10 EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - 1294: ce 01 movw r24, r28 - 1296: d4 d0 rcall .+424 ; 0x1440 - 1298: 0e c0 rjmp .+28 ; 0x12b6 + 12ca: ce 01 movw r24, r28 + 12cc: d4 d0 rcall .+424 ; 0x1476 + 12ce: 0e c0 rjmp .+28 ; 0x12ec } break; case CDC_REQ_SendBreak: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 129a: 80 91 5c 02 lds r24, 0x025C - 129e: 81 32 cpi r24, 0x21 ; 33 - 12a0: 51 f4 brne .+20 ; 0x12b6 - 12a2: 80 91 e8 00 lds r24, 0x00E8 - 12a6: 87 7f andi r24, 0xF7 ; 247 - 12a8: 80 93 e8 00 sts 0x00E8, r24 + 12d0: 80 91 6e 02 lds r24, 0x026E + 12d4: 81 32 cpi r24, 0x21 ; 33 + 12d6: 51 f4 brne .+20 ; 0x12ec + 12d8: 80 91 e8 00 lds r24, 0x00E8 + 12dc: 87 7f andi r24, 0xF7 ; 247 + 12de: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 12ac: 66 dc rcall .-1844 ; 0xb7a + 12e2: 66 dc rcall .-1844 ; 0xbb0 EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - 12ae: ce 01 movw r24, r28 - 12b0: 60 91 5e 02 lds r22, 0x025E - 12b4: c5 d0 rcall .+394 ; 0x1440 + 12e4: ce 01 movw r24, r28 + 12e6: 60 91 70 02 lds r22, 0x0270 + 12ea: c5 d0 rcall .+394 ; 0x1476 } break; } } - 12b6: df 91 pop r29 - 12b8: cf 91 pop r28 - 12ba: 08 95 ret + 12ec: df 91 pop r29 + 12ee: cf 91 pop r28 + 12f0: 08 95 ret -000012bc : +000012f2 : bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 12bc: cf 93 push r28 - 12be: df 93 push r29 - 12c0: ec 01 movw r28, r24 + 12f2: cf 93 push r28 + 12f4: df 93 push r29 + 12f6: ec 01 movw r28, r24 memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - 12c2: 40 96 adiw r24, 0x10 ; 16 - 12c4: fc 01 movw r30, r24 - 12c6: 8b e0 ldi r24, 0x0B ; 11 - 12c8: df 01 movw r26, r30 - 12ca: 1d 92 st X+, r1 - 12cc: 8a 95 dec r24 - 12ce: e9 f7 brne .-6 ; 0x12ca + 12f8: 40 96 adiw r24, 0x10 ; 16 + 12fa: fc 01 movw r30, r24 + 12fc: 8b e0 ldi r24, 0x0B ; 11 + 12fe: df 01 movw r26, r30 + 1300: 1d 92 st X+, r1 + 1302: 8a 95 dec r24 + 1304: e9 f7 brne .-6 ; 0x1300 CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK; - 12d0: 82 e0 ldi r24, 0x02 ; 2 - 12d2: 8c 83 std Y+4, r24 ; 0x04 + 1306: 82 e0 ldi r24, 0x02 ; 2 + 1308: 8c 83 std Y+4, r24 ; 0x04 CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK; - 12d4: 89 87 std Y+9, r24 ; 0x09 + 130a: 89 87 std Y+9, r24 ; 0x09 CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT; - 12d6: 83 e0 ldi r24, 0x03 ; 3 - 12d8: 8e 87 std Y+14, r24 ; 0x0e + 130c: 83 e0 ldi r24, 0x03 ; 3 + 130e: 8e 87 std Y+14, r24 ; 0x0e if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - 12da: ce 01 movw r24, r28 - 12dc: 01 96 adiw r24, 0x01 ; 1 - 12de: 61 e0 ldi r22, 0x01 ; 1 - 12e0: 08 dc rcall .-2032 ; 0xaf2 - 12e2: 88 23 and r24, r24 - 12e4: 59 f0 breq .+22 ; 0x12fc + 1310: ce 01 movw r24, r28 + 1312: 01 96 adiw r24, 0x01 ; 1 + 1314: 61 e0 ldi r22, 0x01 ; 1 + 1316: 08 dc rcall .-2032 ; 0xb28 + 1318: 88 23 and r24, r24 + 131a: 59 f0 breq .+22 ; 0x1332 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - 12e6: ce 01 movw r24, r28 - 12e8: 06 96 adiw r24, 0x06 ; 6 - 12ea: 61 e0 ldi r22, 0x01 ; 1 - 12ec: 02 dc rcall .-2044 ; 0xaf2 - 12ee: 88 23 and r24, r24 - 12f0: 29 f0 breq .+10 ; 0x12fc + 131c: ce 01 movw r24, r28 + 131e: 06 96 adiw r24, 0x06 ; 6 + 1320: 61 e0 ldi r22, 0x01 ; 1 + 1322: 02 dc rcall .-2044 ; 0xb28 + 1324: 88 23 and r24, r24 + 1326: 29 f0 breq .+10 ; 0x1332 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - 12f2: ce 01 movw r24, r28 - 12f4: 0b 96 adiw r24, 0x0b ; 11 - 12f6: 61 e0 ldi r22, 0x01 ; 1 - 12f8: fc db rcall .-2056 ; 0xaf2 - 12fa: 01 c0 rjmp .+2 ; 0x12fe + 1328: ce 01 movw r24, r28 + 132a: 0b 96 adiw r24, 0x0b ; 11 + 132c: 61 e0 ldi r22, 0x01 ; 1 + 132e: fc db rcall .-2056 ; 0xb28 + 1330: 01 c0 rjmp .+2 ; 0x1334 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) return false; - 12fc: 80 e0 ldi r24, 0x00 ; 0 + 1332: 80 e0 ldi r24, 0x00 ; 0 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) return false; return true; } - 12fe: df 91 pop r29 - 1300: cf 91 pop r28 - 1302: 08 95 ret + 1334: df 91 pop r29 + 1336: cf 91 pop r28 + 1338: 08 95 ret -00001304 : +0000133a : return Endpoint_Write_Stream_LE(Buffer, Length, NULL); } uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { - 1304: df 93 push r29 - 1306: cf 93 push r28 - 1308: 0f 92 push r0 - 130a: cd b7 in r28, 0x3d ; 61 - 130c: de b7 in r29, 0x3e ; 62 - 130e: fc 01 movw r30, r24 + 133a: df 93 push r29 + 133c: cf 93 push r28 + 133e: 0f 92 push r0 + 1340: cd b7 in r28, 0x3d ; 61 + 1342: de b7 in r29, 0x3e ; 62 + 1344: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1310: 8e b3 in r24, 0x1e ; 30 - 1312: 84 30 cpi r24, 0x04 ; 4 - 1314: f9 f4 brne .+62 ; 0x1354 - 1316: 24 89 ldd r18, Z+20 ; 0x14 - 1318: 35 89 ldd r19, Z+21 ; 0x15 - 131a: 46 89 ldd r20, Z+22 ; 0x16 - 131c: 57 89 ldd r21, Z+23 ; 0x17 - 131e: 21 15 cp r18, r1 - 1320: 31 05 cpc r19, r1 - 1322: 41 05 cpc r20, r1 - 1324: 51 05 cpc r21, r1 - 1326: b1 f0 breq .+44 ; 0x1354 + 1346: 8e b3 in r24, 0x1e ; 30 + 1348: 84 30 cpi r24, 0x04 ; 4 + 134a: f9 f4 brne .+62 ; 0x138a + 134c: 24 89 ldd r18, Z+20 ; 0x14 + 134e: 35 89 ldd r19, Z+21 ; 0x15 + 1350: 46 89 ldd r20, Z+22 ; 0x16 + 1352: 57 89 ldd r21, Z+23 ; 0x17 + 1354: 21 15 cp r18, r1 + 1356: 31 05 cpc r19, r1 + 1358: 41 05 cpc r20, r1 + 135a: 51 05 cpc r21, r1 + 135c: b1 f0 breq .+44 ; 0x138a */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1328: 81 81 ldd r24, Z+1 ; 0x01 - 132a: 8f 70 andi r24, 0x0F ; 15 - 132c: 80 93 e9 00 sts 0x00E9, r24 + 135e: 81 81 ldd r24, Z+1 ; 0x01 + 1360: 8f 70 andi r24, 0x0F ; 15 + 1362: 80 93 e9 00 sts 0x00E9, r24 * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 1330: 80 91 e8 00 lds r24, 0x00E8 + 1366: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWSTREAM_DeviceDisconnected; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_IsReadWriteAllowed())) - 1334: 85 fd sbrc r24, 5 - 1336: 0a c0 rjmp .+20 ; 0x134c + 136a: 85 fd sbrc r24, 5 + 136c: 0a c0 rjmp .+20 ; 0x1382 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1338: 80 91 e8 00 lds r24, 0x00E8 - 133c: 8e 77 andi r24, 0x7E ; 126 - 133e: 80 93 e8 00 sts 0x00E8, r24 + 136e: 80 91 e8 00 lds r24, 0x00E8 + 1372: 8e 77 andi r24, 0x7E ; 126 + 1374: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearIN(); uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1342: 69 83 std Y+1, r22 ; 0x01 - 1344: 39 dc rcall .-1934 ; 0xbb8 - 1346: 69 81 ldd r22, Y+1 ; 0x01 - 1348: 88 23 and r24, r24 - 134a: 29 f4 brne .+10 ; 0x1356 + 1378: 69 83 std Y+1, r22 ; 0x01 + 137a: 39 dc rcall .-1934 ; 0xbee + 137c: 69 81 ldd r22, Y+1 ; 0x01 + 137e: 88 23 and r24, r24 + 1380: 29 f4 brne .+10 ; 0x138c * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 134c: 60 93 f1 00 sts 0x00F1, r22 + 1382: 60 93 f1 00 sts 0x00F1, r22 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; - 1350: 80 e0 ldi r24, 0x00 ; 0 - 1352: 01 c0 rjmp .+2 ; 0x1356 + 1386: 80 e0 ldi r24, 0x00 ; 0 + 1388: 01 c0 rjmp .+2 ; 0x138c uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1354: 82 e0 ldi r24, 0x02 ; 2 + 138a: 82 e0 ldi r24, 0x02 ; 2 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; } - 1356: 0f 90 pop r0 - 1358: cf 91 pop r28 - 135a: df 91 pop r29 - 135c: 08 95 ret + 138c: 0f 90 pop r0 + 138e: cf 91 pop r28 + 1390: df 91 pop r29 + 1392: 08 95 ret -0000135e : +00001394 : uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 135e: fc 01 movw r30, r24 + 1394: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1360: 8e b3 in r24, 0x1e ; 30 - 1362: 84 30 cpi r24, 0x04 ; 4 - 1364: 19 f5 brne .+70 ; 0x13ac - 1366: 24 89 ldd r18, Z+20 ; 0x14 - 1368: 35 89 ldd r19, Z+21 ; 0x15 - 136a: 46 89 ldd r20, Z+22 ; 0x16 - 136c: 57 89 ldd r21, Z+23 ; 0x17 - 136e: 21 15 cp r18, r1 - 1370: 31 05 cpc r19, r1 - 1372: 41 05 cpc r20, r1 - 1374: 51 05 cpc r21, r1 - 1376: d1 f0 breq .+52 ; 0x13ac + 1396: 8e b3 in r24, 0x1e ; 30 + 1398: 84 30 cpi r24, 0x04 ; 4 + 139a: 19 f5 brne .+70 ; 0x13e2 + 139c: 24 89 ldd r18, Z+20 ; 0x14 + 139e: 35 89 ldd r19, Z+21 ; 0x15 + 13a0: 46 89 ldd r20, Z+22 ; 0x16 + 13a2: 57 89 ldd r21, Z+23 ; 0x17 + 13a4: 21 15 cp r18, r1 + 13a6: 31 05 cpc r19, r1 + 13a8: 41 05 cpc r20, r1 + 13aa: 51 05 cpc r21, r1 + 13ac: d1 f0 breq .+52 ; 0x13e2 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1378: 81 81 ldd r24, Z+1 ; 0x01 - 137a: 8f 70 andi r24, 0x0F ; 15 - 137c: 80 93 e9 00 sts 0x00E9, r24 + 13ae: 81 81 ldd r24, Z+1 ; 0x01 + 13b0: 8f 70 andi r24, 0x0F ; 15 + 13b2: 80 93 e9 00 sts 0x00E9, r24 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 1380: 80 91 f2 00 lds r24, 0x00F2 + 13b6: 80 91 f2 00 lds r24, 0x00F2 uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) - 1384: 88 23 and r24, r24 - 1386: a1 f0 breq .+40 ; 0x13b0 + 13ba: 88 23 and r24, r24 + 13bc: a1 f0 breq .+40 ; 0x13e6 * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 1388: 90 91 e8 00 lds r25, 0x00E8 + 13be: 90 91 e8 00 lds r25, 0x00E8 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 138c: 80 91 e8 00 lds r24, 0x00E8 - 1390: 8e 77 andi r24, 0x7E ; 126 - 1392: 80 93 e8 00 sts 0x00E8, r24 + 13c2: 80 91 e8 00 lds r24, 0x00E8 + 13c6: 8e 77 andi r24, 0x7E ; 126 + 13c8: 80 93 e8 00 sts 0x00E8, r24 bool BankFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); if (BankFull) - 1396: 95 fd sbrc r25, 5 - 1398: 0d c0 rjmp .+26 ; 0x13b4 + 13cc: 95 fd sbrc r25, 5 + 13ce: 0d c0 rjmp .+26 ; 0x13ea { if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 139a: 0e dc rcall .-2020 ; 0xbb8 - 139c: 88 23 and r24, r24 - 139e: 59 f4 brne .+22 ; 0x13b6 - 13a0: 90 91 e8 00 lds r25, 0x00E8 - 13a4: 9e 77 andi r25, 0x7E ; 126 - 13a6: 90 93 e8 00 sts 0x00E8, r25 - 13aa: 08 95 ret + 13d0: 0e dc rcall .-2020 ; 0xbee + 13d2: 88 23 and r24, r24 + 13d4: 59 f4 brne .+22 ; 0x13ec + 13d6: 90 91 e8 00 lds r25, 0x00E8 + 13da: 9e 77 andi r25, 0x7E ; 126 + 13dc: 90 93 e8 00 sts 0x00E8, r25 + 13e0: 08 95 ret } uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 13ac: 82 e0 ldi r24, 0x02 ; 2 - 13ae: 08 95 ret + 13e2: 82 e0 ldi r24, 0x02 ; 2 + 13e4: 08 95 ret uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) return ENDPOINT_READYWAIT_NoError; - 13b0: 80 e0 ldi r24, 0x00 ; 0 - 13b2: 08 95 ret + 13e6: 80 e0 ldi r24, 0x00 ; 0 + 13e8: 08 95 ret return ErrorCode; Endpoint_ClearIN(); } return ENDPOINT_READYWAIT_NoError; - 13b4: 80 e0 ldi r24, 0x00 ; 0 + 13ea: 80 e0 ldi r24, 0x00 ; 0 } - 13b6: 08 95 ret + 13ec: 08 95 ret -000013b8 : +000013ee : return true; } void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 13b8: 2e b3 in r18, 0x1e ; 30 - 13ba: 24 30 cpi r18, 0x04 ; 4 - 13bc: 99 f4 brne .+38 ; 0x13e4 - 13be: fc 01 movw r30, r24 - 13c0: 24 89 ldd r18, Z+20 ; 0x14 - 13c2: 35 89 ldd r19, Z+21 ; 0x15 - 13c4: 46 89 ldd r20, Z+22 ; 0x16 - 13c6: 57 89 ldd r21, Z+23 ; 0x17 - 13c8: 21 15 cp r18, r1 - 13ca: 31 05 cpc r19, r1 - 13cc: 41 05 cpc r20, r1 - 13ce: 51 05 cpc r21, r1 - 13d0: 49 f0 breq .+18 ; 0x13e4 + 13ee: 2e b3 in r18, 0x1e ; 30 + 13f0: 24 30 cpi r18, 0x04 ; 4 + 13f2: 99 f4 brne .+38 ; 0x141a + 13f4: fc 01 movw r30, r24 + 13f6: 24 89 ldd r18, Z+20 ; 0x14 + 13f8: 35 89 ldd r19, Z+21 ; 0x15 + 13fa: 46 89 ldd r20, Z+22 ; 0x16 + 13fc: 57 89 ldd r21, Z+23 ; 0x17 + 13fe: 21 15 cp r18, r1 + 1400: 31 05 cpc r19, r1 + 1402: 41 05 cpc r20, r1 + 1404: 51 05 cpc r21, r1 + 1406: 49 f0 breq .+18 ; 0x141a */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 13d2: 21 81 ldd r18, Z+1 ; 0x01 - 13d4: 2f 70 andi r18, 0x0F ; 15 - 13d6: 20 93 e9 00 sts 0x00E9, r18 + 1408: 21 81 ldd r18, Z+1 ; 0x01 + 140a: 2f 70 andi r18, 0x0F ; 15 + 140c: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 13da: 20 91 e8 00 lds r18, 0x00E8 + 1410: 20 91 e8 00 lds r18, 0x00E8 return; #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (Endpoint_IsINReady()) - 13de: 20 ff sbrs r18, 0 - 13e0: 01 c0 rjmp .+2 ; 0x13e4 + 1414: 20 ff sbrs r18, 0 + 1416: 01 c0 rjmp .+2 ; 0x141a CDC_Device_Flush(CDCInterfaceInfo); - 13e2: bd cf rjmp .-134 ; 0x135e - 13e4: 08 95 ret + 1418: bd cf rjmp .-134 ; 0x1394 + 141a: 08 95 ret -000013e6 : +0000141c : return 0; } } int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 13e6: fc 01 movw r30, r24 + 141c: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 13e8: 8e b3 in r24, 0x1e ; 30 - 13ea: 84 30 cpi r24, 0x04 ; 4 - 13ec: 29 f5 brne .+74 ; 0x1438 - 13ee: 24 89 ldd r18, Z+20 ; 0x14 - 13f0: 35 89 ldd r19, Z+21 ; 0x15 - 13f2: 46 89 ldd r20, Z+22 ; 0x16 - 13f4: 57 89 ldd r21, Z+23 ; 0x17 - 13f6: 21 15 cp r18, r1 - 13f8: 31 05 cpc r19, r1 - 13fa: 41 05 cpc r20, r1 - 13fc: 51 05 cpc r21, r1 - 13fe: e1 f0 breq .+56 ; 0x1438 + 141e: 8e b3 in r24, 0x1e ; 30 + 1420: 84 30 cpi r24, 0x04 ; 4 + 1422: 29 f5 brne .+74 ; 0x146e + 1424: 24 89 ldd r18, Z+20 ; 0x14 + 1426: 35 89 ldd r19, Z+21 ; 0x15 + 1428: 46 89 ldd r20, Z+22 ; 0x16 + 142a: 57 89 ldd r21, Z+23 ; 0x17 + 142c: 21 15 cp r18, r1 + 142e: 31 05 cpc r19, r1 + 1430: 41 05 cpc r20, r1 + 1432: 51 05 cpc r21, r1 + 1434: e1 f0 breq .+56 ; 0x146e */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1400: 86 81 ldd r24, Z+6 ; 0x06 - 1402: 8f 70 andi r24, 0x0F ; 15 - 1404: 80 93 e9 00 sts 0x00E9, r24 + 1436: 86 81 ldd r24, Z+6 ; 0x06 + 1438: 8f 70 andi r24, 0x0F ; 15 + 143a: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1408: 80 91 e8 00 lds r24, 0x00E8 + 143e: 80 91 e8 00 lds r24, 0x00E8 int16_t ReceivedByte = -1; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address); if (Endpoint_IsOUTReceived()) - 140c: 82 ff sbrs r24, 2 - 140e: 14 c0 rjmp .+40 ; 0x1438 + 1442: 82 ff sbrs r24, 2 + 1444: 14 c0 rjmp .+40 ; 0x146e #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 1410: 80 91 f2 00 lds r24, 0x00F2 + 1446: 80 91 f2 00 lds r24, 0x00F2 { if (Endpoint_BytesInEndpoint()) - 1414: 88 23 and r24, r24 - 1416: 21 f0 breq .+8 ; 0x1420 + 144a: 88 23 and r24, r24 + 144c: 21 f0 breq .+8 ; 0x1456 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 1418: 20 91 f1 00 lds r18, 0x00F1 + 144e: 20 91 f1 00 lds r18, 0x00F1 ReceivedByte = Endpoint_Read_8(); - 141c: 30 e0 ldi r19, 0x00 ; 0 - 141e: 02 c0 rjmp .+4 ; 0x1424 + 1452: 30 e0 ldi r19, 0x00 ; 0 + 1454: 02 c0 rjmp .+4 ; 0x145a int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 1420: 2f ef ldi r18, 0xFF ; 255 - 1422: 3f ef ldi r19, 0xFF ; 255 + 1456: 2f ef ldi r18, 0xFF ; 255 + 1458: 3f ef ldi r19, 0xFF ; 255 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 1424: 80 91 f2 00 lds r24, 0x00F2 + 145a: 80 91 f2 00 lds r24, 0x00F2 if (Endpoint_IsOUTReceived()) { if (Endpoint_BytesInEndpoint()) ReceivedByte = Endpoint_Read_8(); if (!(Endpoint_BytesInEndpoint())) - 1428: 88 23 and r24, r24 - 142a: 41 f4 brne .+16 ; 0x143c + 145e: 88 23 and r24, r24 + 1460: 41 f4 brne .+16 ; 0x1472 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 142c: 80 91 e8 00 lds r24, 0x00E8 - 1430: 8b 77 andi r24, 0x7B ; 123 - 1432: 80 93 e8 00 sts 0x00E8, r24 - 1436: 02 c0 rjmp .+4 ; 0x143c + 1462: 80 91 e8 00 lds r24, 0x00E8 + 1466: 8b 77 andi r24, 0x7B ; 123 + 1468: 80 93 e8 00 sts 0x00E8, r24 + 146c: 02 c0 rjmp .+4 ; 0x1472 int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 1438: 2f ef ldi r18, 0xFF ; 255 - 143a: 3f ef ldi r19, 0xFF ; 255 + 146e: 2f ef ldi r18, 0xFF ; 255 + 1470: 3f ef ldi r19, 0xFF ; 255 if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); } return ReceivedByte; } - 143c: c9 01 movw r24, r18 - 143e: 08 95 ret + 1472: c9 01 movw r24, r18 + 1474: 08 95 ret -00001440 : +00001476 : #endif void CDC_Device_Event_Stub(void) { } - 1440: 08 95 ret - -00001442 <__subsf3>: - 1442: 50 58 subi r21, 0x80 ; 128 - -00001444 <__addsf3>: - 1444: bb 27 eor r27, r27 - 1446: aa 27 eor r26, r26 - 1448: 0e d0 rcall .+28 ; 0x1466 <__addsf3x> - 144a: 70 c1 rjmp .+736 ; 0x172c <__fp_round> - 144c: 61 d1 rcall .+706 ; 0x1710 <__fp_pscA> - 144e: 30 f0 brcs .+12 ; 0x145c <__addsf3+0x18> - 1450: 66 d1 rcall .+716 ; 0x171e <__fp_pscB> - 1452: 20 f0 brcs .+8 ; 0x145c <__addsf3+0x18> - 1454: 31 f4 brne .+12 ; 0x1462 <__addsf3+0x1e> - 1456: 9f 3f cpi r25, 0xFF ; 255 - 1458: 11 f4 brne .+4 ; 0x145e <__addsf3+0x1a> - 145a: 1e f4 brtc .+6 ; 0x1462 <__addsf3+0x1e> - 145c: 56 c1 rjmp .+684 ; 0x170a <__fp_nan> - 145e: 0e f4 brtc .+2 ; 0x1462 <__addsf3+0x1e> - 1460: e0 95 com r30 - 1462: e7 fb bst r30, 7 - 1464: 4c c1 rjmp .+664 ; 0x16fe <__fp_inf> - -00001466 <__addsf3x>: - 1466: e9 2f mov r30, r25 - 1468: 72 d1 rcall .+740 ; 0x174e <__fp_split3> - 146a: 80 f3 brcs .-32 ; 0x144c <__addsf3+0x8> - 146c: ba 17 cp r27, r26 - 146e: 62 07 cpc r22, r18 - 1470: 73 07 cpc r23, r19 - 1472: 84 07 cpc r24, r20 - 1474: 95 07 cpc r25, r21 - 1476: 18 f0 brcs .+6 ; 0x147e <__addsf3x+0x18> - 1478: 71 f4 brne .+28 ; 0x1496 <__addsf3x+0x30> - 147a: 9e f5 brtc .+102 ; 0x14e2 <__addsf3x+0x7c> - 147c: 8a c1 rjmp .+788 ; 0x1792 <__fp_zero> - 147e: 0e f4 brtc .+2 ; 0x1482 <__addsf3x+0x1c> - 1480: e0 95 com r30 - 1482: 0b 2e mov r0, r27 - 1484: ba 2f mov r27, r26 - 1486: a0 2d mov r26, r0 - 1488: 0b 01 movw r0, r22 - 148a: b9 01 movw r22, r18 - 148c: 90 01 movw r18, r0 - 148e: 0c 01 movw r0, r24 - 1490: ca 01 movw r24, r20 - 1492: a0 01 movw r20, r0 - 1494: 11 24 eor r1, r1 - 1496: ff 27 eor r31, r31 - 1498: 59 1b sub r21, r25 - 149a: 99 f0 breq .+38 ; 0x14c2 <__addsf3x+0x5c> - 149c: 59 3f cpi r21, 0xF9 ; 249 - 149e: 50 f4 brcc .+20 ; 0x14b4 <__addsf3x+0x4e> - 14a0: 50 3e cpi r21, 0xE0 ; 224 - 14a2: 68 f1 brcs .+90 ; 0x14fe <__addsf3x+0x98> - 14a4: 1a 16 cp r1, r26 - 14a6: f0 40 sbci r31, 0x00 ; 0 - 14a8: a2 2f mov r26, r18 - 14aa: 23 2f mov r18, r19 - 14ac: 34 2f mov r19, r20 - 14ae: 44 27 eor r20, r20 - 14b0: 58 5f subi r21, 0xF8 ; 248 - 14b2: f3 cf rjmp .-26 ; 0x149a <__addsf3x+0x34> - 14b4: 46 95 lsr r20 - 14b6: 37 95 ror r19 - 14b8: 27 95 ror r18 - 14ba: a7 95 ror r26 - 14bc: f0 40 sbci r31, 0x00 ; 0 - 14be: 53 95 inc r21 - 14c0: c9 f7 brne .-14 ; 0x14b4 <__addsf3x+0x4e> - 14c2: 7e f4 brtc .+30 ; 0x14e2 <__addsf3x+0x7c> - 14c4: 1f 16 cp r1, r31 - 14c6: ba 0b sbc r27, r26 - 14c8: 62 0b sbc r22, r18 - 14ca: 73 0b sbc r23, r19 - 14cc: 84 0b sbc r24, r20 - 14ce: ba f0 brmi .+46 ; 0x14fe <__addsf3x+0x98> - 14d0: 91 50 subi r25, 0x01 ; 1 - 14d2: a1 f0 breq .+40 ; 0x14fc <__addsf3x+0x96> - 14d4: ff 0f add r31, r31 - 14d6: bb 1f adc r27, r27 - 14d8: 66 1f adc r22, r22 - 14da: 77 1f adc r23, r23 - 14dc: 88 1f adc r24, r24 - 14de: c2 f7 brpl .-16 ; 0x14d0 <__addsf3x+0x6a> - 14e0: 0e c0 rjmp .+28 ; 0x14fe <__addsf3x+0x98> - 14e2: ba 0f add r27, r26 - 14e4: 62 1f adc r22, r18 - 14e6: 73 1f adc r23, r19 - 14e8: 84 1f adc r24, r20 - 14ea: 48 f4 brcc .+18 ; 0x14fe <__addsf3x+0x98> - 14ec: 87 95 ror r24 - 14ee: 77 95 ror r23 - 14f0: 67 95 ror r22 - 14f2: b7 95 ror r27 - 14f4: f7 95 ror r31 - 14f6: 9e 3f cpi r25, 0xFE ; 254 - 14f8: 08 f0 brcs .+2 ; 0x14fc <__addsf3x+0x96> - 14fa: b3 cf rjmp .-154 ; 0x1462 <__addsf3+0x1e> - 14fc: 93 95 inc r25 - 14fe: 88 0f add r24, r24 - 1500: 08 f0 brcs .+2 ; 0x1504 <__addsf3x+0x9e> - 1502: 99 27 eor r25, r25 - 1504: ee 0f add r30, r30 - 1506: 97 95 ror r25 - 1508: 87 95 ror r24 - 150a: 08 95 ret - -0000150c <__cmpsf2>: - 150c: d4 d0 rcall .+424 ; 0x16b6 <__fp_cmp> - 150e: 08 f4 brcc .+2 ; 0x1512 <__cmpsf2+0x6> - 1510: 81 e0 ldi r24, 0x01 ; 1 - 1512: 08 95 ret - -00001514 <__divsf3>: - 1514: 0c d0 rcall .+24 ; 0x152e <__divsf3x> - 1516: 0a c1 rjmp .+532 ; 0x172c <__fp_round> - 1518: 02 d1 rcall .+516 ; 0x171e <__fp_pscB> - 151a: 40 f0 brcs .+16 ; 0x152c <__divsf3+0x18> - 151c: f9 d0 rcall .+498 ; 0x1710 <__fp_pscA> - 151e: 30 f0 brcs .+12 ; 0x152c <__divsf3+0x18> - 1520: 21 f4 brne .+8 ; 0x152a <__divsf3+0x16> - 1522: 5f 3f cpi r21, 0xFF ; 255 - 1524: 19 f0 breq .+6 ; 0x152c <__divsf3+0x18> - 1526: eb c0 rjmp .+470 ; 0x16fe <__fp_inf> - 1528: 51 11 cpse r21, r1 - 152a: 34 c1 rjmp .+616 ; 0x1794 <__fp_szero> - 152c: ee c0 rjmp .+476 ; 0x170a <__fp_nan> - -0000152e <__divsf3x>: - 152e: 0f d1 rcall .+542 ; 0x174e <__fp_split3> - 1530: 98 f3 brcs .-26 ; 0x1518 <__divsf3+0x4> - -00001532 <__divsf3_pse>: - 1532: 99 23 and r25, r25 - 1534: c9 f3 breq .-14 ; 0x1528 <__divsf3+0x14> - 1536: 55 23 and r21, r21 - 1538: b1 f3 breq .-20 ; 0x1526 <__divsf3+0x12> - 153a: 95 1b sub r25, r21 - 153c: 55 0b sbc r21, r21 - 153e: bb 27 eor r27, r27 - 1540: aa 27 eor r26, r26 - 1542: 62 17 cp r22, r18 - 1544: 73 07 cpc r23, r19 - 1546: 84 07 cpc r24, r20 - 1548: 38 f0 brcs .+14 ; 0x1558 <__divsf3_pse+0x26> - 154a: 9f 5f subi r25, 0xFF ; 255 - 154c: 5f 4f sbci r21, 0xFF ; 255 - 154e: 22 0f add r18, r18 - 1550: 33 1f adc r19, r19 - 1552: 44 1f adc r20, r20 - 1554: aa 1f adc r26, r26 - 1556: a9 f3 breq .-22 ; 0x1542 <__divsf3_pse+0x10> - 1558: 33 d0 rcall .+102 ; 0x15c0 <__divsf3_pse+0x8e> - 155a: 0e 2e mov r0, r30 - 155c: 3a f0 brmi .+14 ; 0x156c <__divsf3_pse+0x3a> - 155e: e0 e8 ldi r30, 0x80 ; 128 - 1560: 30 d0 rcall .+96 ; 0x15c2 <__divsf3_pse+0x90> - 1562: 91 50 subi r25, 0x01 ; 1 - 1564: 50 40 sbci r21, 0x00 ; 0 - 1566: e6 95 lsr r30 - 1568: 00 1c adc r0, r0 - 156a: ca f7 brpl .-14 ; 0x155e <__divsf3_pse+0x2c> - 156c: 29 d0 rcall .+82 ; 0x15c0 <__divsf3_pse+0x8e> - 156e: fe 2f mov r31, r30 - 1570: 27 d0 rcall .+78 ; 0x15c0 <__divsf3_pse+0x8e> - 1572: 66 0f add r22, r22 - 1574: 77 1f adc r23, r23 - 1576: 88 1f adc r24, r24 - 1578: bb 1f adc r27, r27 - 157a: 26 17 cp r18, r22 - 157c: 37 07 cpc r19, r23 - 157e: 48 07 cpc r20, r24 - 1580: ab 07 cpc r26, r27 - 1582: b0 e8 ldi r27, 0x80 ; 128 - 1584: 09 f0 breq .+2 ; 0x1588 <__divsf3_pse+0x56> - 1586: bb 0b sbc r27, r27 - 1588: 80 2d mov r24, r0 - 158a: bf 01 movw r22, r30 - 158c: ff 27 eor r31, r31 - 158e: 93 58 subi r25, 0x83 ; 131 - 1590: 5f 4f sbci r21, 0xFF ; 255 - 1592: 2a f0 brmi .+10 ; 0x159e <__divsf3_pse+0x6c> - 1594: 9e 3f cpi r25, 0xFE ; 254 - 1596: 51 05 cpc r21, r1 - 1598: 68 f0 brcs .+26 ; 0x15b4 <__divsf3_pse+0x82> - 159a: b1 c0 rjmp .+354 ; 0x16fe <__fp_inf> - 159c: fb c0 rjmp .+502 ; 0x1794 <__fp_szero> - 159e: 5f 3f cpi r21, 0xFF ; 255 - 15a0: ec f3 brlt .-6 ; 0x159c <__divsf3_pse+0x6a> - 15a2: 98 3e cpi r25, 0xE8 ; 232 - 15a4: dc f3 brlt .-10 ; 0x159c <__divsf3_pse+0x6a> - 15a6: 86 95 lsr r24 - 15a8: 77 95 ror r23 - 15aa: 67 95 ror r22 - 15ac: b7 95 ror r27 - 15ae: f7 95 ror r31 - 15b0: 9f 5f subi r25, 0xFF ; 255 - 15b2: c9 f7 brne .-14 ; 0x15a6 <__divsf3_pse+0x74> - 15b4: 88 0f add r24, r24 - 15b6: 91 1d adc r25, r1 - 15b8: 96 95 lsr r25 - 15ba: 87 95 ror r24 - 15bc: 97 f9 bld r25, 7 - 15be: 08 95 ret - 15c0: e1 e0 ldi r30, 0x01 ; 1 - 15c2: 66 0f add r22, r22 - 15c4: 77 1f adc r23, r23 - 15c6: 88 1f adc r24, r24 - 15c8: bb 1f adc r27, r27 - 15ca: 62 17 cp r22, r18 - 15cc: 73 07 cpc r23, r19 - 15ce: 84 07 cpc r24, r20 - 15d0: ba 07 cpc r27, r26 - 15d2: 20 f0 brcs .+8 ; 0x15dc <__divsf3_pse+0xaa> - 15d4: 62 1b sub r22, r18 - 15d6: 73 0b sbc r23, r19 - 15d8: 84 0b sbc r24, r20 - 15da: ba 0b sbc r27, r26 - 15dc: ee 1f adc r30, r30 - 15de: 88 f7 brcc .-30 ; 0x15c2 <__divsf3_pse+0x90> - 15e0: e0 95 com r30 - 15e2: 08 95 ret - -000015e4 <__fixunssfsi>: - 15e4: bc d0 rcall .+376 ; 0x175e <__fp_splitA> - 15e6: 88 f0 brcs .+34 ; 0x160a <__fixunssfsi+0x26> - 15e8: 9f 57 subi r25, 0x7F ; 127 - 15ea: 90 f0 brcs .+36 ; 0x1610 <__fixunssfsi+0x2c> - 15ec: b9 2f mov r27, r25 - 15ee: 99 27 eor r25, r25 - 15f0: b7 51 subi r27, 0x17 ; 23 - 15f2: a0 f0 brcs .+40 ; 0x161c <__fixunssfsi+0x38> - 15f4: d1 f0 breq .+52 ; 0x162a <__fixunssfsi+0x46> - 15f6: 66 0f add r22, r22 - 15f8: 77 1f adc r23, r23 - 15fa: 88 1f adc r24, r24 - 15fc: 99 1f adc r25, r25 - 15fe: 1a f0 brmi .+6 ; 0x1606 <__fixunssfsi+0x22> - 1600: ba 95 dec r27 - 1602: c9 f7 brne .-14 ; 0x15f6 <__fixunssfsi+0x12> - 1604: 12 c0 rjmp .+36 ; 0x162a <__fixunssfsi+0x46> - 1606: b1 30 cpi r27, 0x01 ; 1 - 1608: 81 f0 breq .+32 ; 0x162a <__fixunssfsi+0x46> - 160a: c3 d0 rcall .+390 ; 0x1792 <__fp_zero> - 160c: b1 e0 ldi r27, 0x01 ; 1 - 160e: 08 95 ret - 1610: c0 c0 rjmp .+384 ; 0x1792 <__fp_zero> - 1612: 67 2f mov r22, r23 - 1614: 78 2f mov r23, r24 - 1616: 88 27 eor r24, r24 - 1618: b8 5f subi r27, 0xF8 ; 248 - 161a: 39 f0 breq .+14 ; 0x162a <__fixunssfsi+0x46> - 161c: b9 3f cpi r27, 0xF9 ; 249 - 161e: cc f3 brlt .-14 ; 0x1612 <__fixunssfsi+0x2e> - 1620: 86 95 lsr r24 - 1622: 77 95 ror r23 - 1624: 67 95 ror r22 - 1626: b3 95 inc r27 - 1628: d9 f7 brne .-10 ; 0x1620 <__fixunssfsi+0x3c> - 162a: 3e f4 brtc .+14 ; 0x163a <__fixunssfsi+0x56> - 162c: 90 95 com r25 - 162e: 80 95 com r24 - 1630: 70 95 com r23 - 1632: 61 95 neg r22 - 1634: 7f 4f sbci r23, 0xFF ; 255 - 1636: 8f 4f sbci r24, 0xFF ; 255 - 1638: 9f 4f sbci r25, 0xFF ; 255 - 163a: 08 95 ret - -0000163c <__floatunsisf>: - 163c: e8 94 clt - 163e: 09 c0 rjmp .+18 ; 0x1652 <__floatsisf+0x12> - -00001640 <__floatsisf>: - 1640: 97 fb bst r25, 7 - 1642: 3e f4 brtc .+14 ; 0x1652 <__floatsisf+0x12> - 1644: 90 95 com r25 - 1646: 80 95 com r24 - 1648: 70 95 com r23 - 164a: 61 95 neg r22 - 164c: 7f 4f sbci r23, 0xFF ; 255 - 164e: 8f 4f sbci r24, 0xFF ; 255 - 1650: 9f 4f sbci r25, 0xFF ; 255 - 1652: 99 23 and r25, r25 - 1654: a9 f0 breq .+42 ; 0x1680 <__floatsisf+0x40> - 1656: f9 2f mov r31, r25 - 1658: 96 e9 ldi r25, 0x96 ; 150 - 165a: bb 27 eor r27, r27 - 165c: 93 95 inc r25 - 165e: f6 95 lsr r31 - 1660: 87 95 ror r24 - 1662: 77 95 ror r23 - 1664: 67 95 ror r22 - 1666: b7 95 ror r27 - 1668: f1 11 cpse r31, r1 - 166a: f8 cf rjmp .-16 ; 0x165c <__floatsisf+0x1c> - 166c: fa f4 brpl .+62 ; 0x16ac <__floatsisf+0x6c> - 166e: bb 0f add r27, r27 - 1670: 11 f4 brne .+4 ; 0x1676 <__floatsisf+0x36> - 1672: 60 ff sbrs r22, 0 - 1674: 1b c0 rjmp .+54 ; 0x16ac <__floatsisf+0x6c> - 1676: 6f 5f subi r22, 0xFF ; 255 - 1678: 7f 4f sbci r23, 0xFF ; 255 - 167a: 8f 4f sbci r24, 0xFF ; 255 - 167c: 9f 4f sbci r25, 0xFF ; 255 - 167e: 16 c0 rjmp .+44 ; 0x16ac <__floatsisf+0x6c> - 1680: 88 23 and r24, r24 - 1682: 11 f0 breq .+4 ; 0x1688 <__floatsisf+0x48> - 1684: 96 e9 ldi r25, 0x96 ; 150 - 1686: 11 c0 rjmp .+34 ; 0x16aa <__floatsisf+0x6a> - 1688: 77 23 and r23, r23 - 168a: 21 f0 breq .+8 ; 0x1694 <__floatsisf+0x54> - 168c: 9e e8 ldi r25, 0x8E ; 142 - 168e: 87 2f mov r24, r23 - 1690: 76 2f mov r23, r22 - 1692: 05 c0 rjmp .+10 ; 0x169e <__floatsisf+0x5e> - 1694: 66 23 and r22, r22 - 1696: 71 f0 breq .+28 ; 0x16b4 <__floatsisf+0x74> - 1698: 96 e8 ldi r25, 0x86 ; 134 - 169a: 86 2f mov r24, r22 - 169c: 70 e0 ldi r23, 0x00 ; 0 - 169e: 60 e0 ldi r22, 0x00 ; 0 - 16a0: 2a f0 brmi .+10 ; 0x16ac <__floatsisf+0x6c> - 16a2: 9a 95 dec r25 - 16a4: 66 0f add r22, r22 - 16a6: 77 1f adc r23, r23 - 16a8: 88 1f adc r24, r24 - 16aa: da f7 brpl .-10 ; 0x16a2 <__floatsisf+0x62> - 16ac: 88 0f add r24, r24 - 16ae: 96 95 lsr r25 - 16b0: 87 95 ror r24 - 16b2: 97 f9 bld r25, 7 - 16b4: 08 95 ret - -000016b6 <__fp_cmp>: - 16b6: 99 0f add r25, r25 - 16b8: 00 08 sbc r0, r0 - 16ba: 55 0f add r21, r21 - 16bc: aa 0b sbc r26, r26 - 16be: e0 e8 ldi r30, 0x80 ; 128 - 16c0: fe ef ldi r31, 0xFE ; 254 - 16c2: 16 16 cp r1, r22 - 16c4: 17 06 cpc r1, r23 - 16c6: e8 07 cpc r30, r24 - 16c8: f9 07 cpc r31, r25 - 16ca: c0 f0 brcs .+48 ; 0x16fc <__fp_cmp+0x46> - 16cc: 12 16 cp r1, r18 - 16ce: 13 06 cpc r1, r19 - 16d0: e4 07 cpc r30, r20 - 16d2: f5 07 cpc r31, r21 - 16d4: 98 f0 brcs .+38 ; 0x16fc <__fp_cmp+0x46> - 16d6: 62 1b sub r22, r18 - 16d8: 73 0b sbc r23, r19 - 16da: 84 0b sbc r24, r20 - 16dc: 95 0b sbc r25, r21 - 16de: 39 f4 brne .+14 ; 0x16ee <__fp_cmp+0x38> - 16e0: 0a 26 eor r0, r26 - 16e2: 61 f0 breq .+24 ; 0x16fc <__fp_cmp+0x46> - 16e4: 23 2b or r18, r19 - 16e6: 24 2b or r18, r20 - 16e8: 25 2b or r18, r21 - 16ea: 21 f4 brne .+8 ; 0x16f4 <__fp_cmp+0x3e> - 16ec: 08 95 ret - 16ee: 0a 26 eor r0, r26 - 16f0: 09 f4 brne .+2 ; 0x16f4 <__fp_cmp+0x3e> - 16f2: a1 40 sbci r26, 0x01 ; 1 - 16f4: a6 95 lsr r26 - 16f6: 8f ef ldi r24, 0xFF ; 255 - 16f8: 81 1d adc r24, r1 - 16fa: 81 1d adc r24, r1 - 16fc: 08 95 ret - -000016fe <__fp_inf>: - 16fe: 97 f9 bld r25, 7 - 1700: 9f 67 ori r25, 0x7F ; 127 - 1702: 80 e8 ldi r24, 0x80 ; 128 - 1704: 70 e0 ldi r23, 0x00 ; 0 - 1706: 60 e0 ldi r22, 0x00 ; 0 - 1708: 08 95 ret - -0000170a <__fp_nan>: - 170a: 9f ef ldi r25, 0xFF ; 255 - 170c: 80 ec ldi r24, 0xC0 ; 192 - 170e: 08 95 ret - -00001710 <__fp_pscA>: - 1710: 00 24 eor r0, r0 - 1712: 0a 94 dec r0 - 1714: 16 16 cp r1, r22 - 1716: 17 06 cpc r1, r23 - 1718: 18 06 cpc r1, r24 - 171a: 09 06 cpc r0, r25 - 171c: 08 95 ret - -0000171e <__fp_pscB>: - 171e: 00 24 eor r0, r0 - 1720: 0a 94 dec r0 - 1722: 12 16 cp r1, r18 - 1724: 13 06 cpc r1, r19 - 1726: 14 06 cpc r1, r20 - 1728: 05 06 cpc r0, r21 - 172a: 08 95 ret - -0000172c <__fp_round>: - 172c: 09 2e mov r0, r25 - 172e: 03 94 inc r0 - 1730: 00 0c add r0, r0 - 1732: 11 f4 brne .+4 ; 0x1738 <__fp_round+0xc> - 1734: 88 23 and r24, r24 - 1736: 52 f0 brmi .+20 ; 0x174c <__fp_round+0x20> - 1738: bb 0f add r27, r27 - 173a: 40 f4 brcc .+16 ; 0x174c <__fp_round+0x20> - 173c: bf 2b or r27, r31 - 173e: 11 f4 brne .+4 ; 0x1744 <__fp_round+0x18> - 1740: 60 ff sbrs r22, 0 - 1742: 04 c0 rjmp .+8 ; 0x174c <__fp_round+0x20> - 1744: 6f 5f subi r22, 0xFF ; 255 - 1746: 7f 4f sbci r23, 0xFF ; 255 - 1748: 8f 4f sbci r24, 0xFF ; 255 - 174a: 9f 4f sbci r25, 0xFF ; 255 - 174c: 08 95 ret - -0000174e <__fp_split3>: - 174e: 57 fd sbrc r21, 7 - 1750: 90 58 subi r25, 0x80 ; 128 - 1752: 44 0f add r20, r20 - 1754: 55 1f adc r21, r21 - 1756: 59 f0 breq .+22 ; 0x176e <__fp_splitA+0x10> - 1758: 5f 3f cpi r21, 0xFF ; 255 - 175a: 71 f0 breq .+28 ; 0x1778 <__fp_splitA+0x1a> - 175c: 47 95 ror r20 - -0000175e <__fp_splitA>: - 175e: 88 0f add r24, r24 - 1760: 97 fb bst r25, 7 - 1762: 99 1f adc r25, r25 - 1764: 61 f0 breq .+24 ; 0x177e <__fp_splitA+0x20> - 1766: 9f 3f cpi r25, 0xFF ; 255 - 1768: 79 f0 breq .+30 ; 0x1788 <__fp_splitA+0x2a> - 176a: 87 95 ror r24 - 176c: 08 95 ret - 176e: 12 16 cp r1, r18 - 1770: 13 06 cpc r1, r19 - 1772: 14 06 cpc r1, r20 - 1774: 55 1f adc r21, r21 - 1776: f2 cf rjmp .-28 ; 0x175c <__fp_split3+0xe> - 1778: 46 95 lsr r20 - 177a: f1 df rcall .-30 ; 0x175e <__fp_splitA> - 177c: 08 c0 rjmp .+16 ; 0x178e <__fp_splitA+0x30> - 177e: 16 16 cp r1, r22 - 1780: 17 06 cpc r1, r23 - 1782: 18 06 cpc r1, r24 - 1784: 99 1f adc r25, r25 - 1786: f1 cf rjmp .-30 ; 0x176a <__fp_splitA+0xc> - 1788: 86 95 lsr r24 - 178a: 71 05 cpc r23, r1 - 178c: 61 05 cpc r22, r1 - 178e: 08 94 sec - 1790: 08 95 ret - -00001792 <__fp_zero>: - 1792: e8 94 clt - -00001794 <__fp_szero>: - 1794: bb 27 eor r27, r27 - 1796: 66 27 eor r22, r22 - 1798: 77 27 eor r23, r23 - 179a: cb 01 movw r24, r22 - 179c: 97 f9 bld r25, 7 - 179e: 08 95 ret - -000017a0 <__gesf2>: - 17a0: 8a df rcall .-236 ; 0x16b6 <__fp_cmp> - 17a2: 08 f4 brcc .+2 ; 0x17a6 <__gesf2+0x6> - 17a4: 8f ef ldi r24, 0xFF ; 255 - 17a6: 08 95 ret - -000017a8 <__udivmodsi4>: - 17a8: a1 e2 ldi r26, 0x21 ; 33 - 17aa: 1a 2e mov r1, r26 - 17ac: aa 1b sub r26, r26 - 17ae: bb 1b sub r27, r27 - 17b0: fd 01 movw r30, r26 - 17b2: 0d c0 rjmp .+26 ; 0x17ce <__udivmodsi4_ep> - -000017b4 <__udivmodsi4_loop>: - 17b4: aa 1f adc r26, r26 - 17b6: bb 1f adc r27, r27 - 17b8: ee 1f adc r30, r30 - 17ba: ff 1f adc r31, r31 - 17bc: a2 17 cp r26, r18 - 17be: b3 07 cpc r27, r19 - 17c0: e4 07 cpc r30, r20 - 17c2: f5 07 cpc r31, r21 - 17c4: 20 f0 brcs .+8 ; 0x17ce <__udivmodsi4_ep> - 17c6: a2 1b sub r26, r18 - 17c8: b3 0b sbc r27, r19 - 17ca: e4 0b sbc r30, r20 - 17cc: f5 0b sbc r31, r21 - -000017ce <__udivmodsi4_ep>: - 17ce: 66 1f adc r22, r22 - 17d0: 77 1f adc r23, r23 - 17d2: 88 1f adc r24, r24 - 17d4: 99 1f adc r25, r25 - 17d6: 1a 94 dec r1 - 17d8: 69 f7 brne .-38 ; 0x17b4 <__udivmodsi4_loop> - 17da: 60 95 com r22 - 17dc: 70 95 com r23 - 17de: 80 95 com r24 - 17e0: 90 95 com r25 - 17e2: 9b 01 movw r18, r22 - 17e4: ac 01 movw r20, r24 - 17e6: bd 01 movw r22, r26 - 17e8: cf 01 movw r24, r30 - 17ea: 08 95 ret - -000017ec <_exit>: - 17ec: f8 94 cli - -000017ee <__stop_program>: - 17ee: ff cf rjmp .-2 ; 0x17ee <__stop_program> + 1476: 08 95 ret + +00001478 <__subsf3>: + 1478: 50 58 subi r21, 0x80 ; 128 + +0000147a <__addsf3>: + 147a: bb 27 eor r27, r27 + 147c: aa 27 eor r26, r26 + 147e: 0e d0 rcall .+28 ; 0x149c <__addsf3x> + 1480: 70 c1 rjmp .+736 ; 0x1762 <__fp_round> + 1482: 61 d1 rcall .+706 ; 0x1746 <__fp_pscA> + 1484: 30 f0 brcs .+12 ; 0x1492 <__addsf3+0x18> + 1486: 66 d1 rcall .+716 ; 0x1754 <__fp_pscB> + 1488: 20 f0 brcs .+8 ; 0x1492 <__addsf3+0x18> + 148a: 31 f4 brne .+12 ; 0x1498 <__addsf3+0x1e> + 148c: 9f 3f cpi r25, 0xFF ; 255 + 148e: 11 f4 brne .+4 ; 0x1494 <__addsf3+0x1a> + 1490: 1e f4 brtc .+6 ; 0x1498 <__addsf3+0x1e> + 1492: 56 c1 rjmp .+684 ; 0x1740 <__fp_nan> + 1494: 0e f4 brtc .+2 ; 0x1498 <__addsf3+0x1e> + 1496: e0 95 com r30 + 1498: e7 fb bst r30, 7 + 149a: 4c c1 rjmp .+664 ; 0x1734 <__fp_inf> + +0000149c <__addsf3x>: + 149c: e9 2f mov r30, r25 + 149e: 72 d1 rcall .+740 ; 0x1784 <__fp_split3> + 14a0: 80 f3 brcs .-32 ; 0x1482 <__addsf3+0x8> + 14a2: ba 17 cp r27, r26 + 14a4: 62 07 cpc r22, r18 + 14a6: 73 07 cpc r23, r19 + 14a8: 84 07 cpc r24, r20 + 14aa: 95 07 cpc r25, r21 + 14ac: 18 f0 brcs .+6 ; 0x14b4 <__addsf3x+0x18> + 14ae: 71 f4 brne .+28 ; 0x14cc <__addsf3x+0x30> + 14b0: 9e f5 brtc .+102 ; 0x1518 <__addsf3x+0x7c> + 14b2: 8a c1 rjmp .+788 ; 0x17c8 <__fp_zero> + 14b4: 0e f4 brtc .+2 ; 0x14b8 <__addsf3x+0x1c> + 14b6: e0 95 com r30 + 14b8: 0b 2e mov r0, r27 + 14ba: ba 2f mov r27, r26 + 14bc: a0 2d mov r26, r0 + 14be: 0b 01 movw r0, r22 + 14c0: b9 01 movw r22, r18 + 14c2: 90 01 movw r18, r0 + 14c4: 0c 01 movw r0, r24 + 14c6: ca 01 movw r24, r20 + 14c8: a0 01 movw r20, r0 + 14ca: 11 24 eor r1, r1 + 14cc: ff 27 eor r31, r31 + 14ce: 59 1b sub r21, r25 + 14d0: 99 f0 breq .+38 ; 0x14f8 <__addsf3x+0x5c> + 14d2: 59 3f cpi r21, 0xF9 ; 249 + 14d4: 50 f4 brcc .+20 ; 0x14ea <__addsf3x+0x4e> + 14d6: 50 3e cpi r21, 0xE0 ; 224 + 14d8: 68 f1 brcs .+90 ; 0x1534 <__addsf3x+0x98> + 14da: 1a 16 cp r1, r26 + 14dc: f0 40 sbci r31, 0x00 ; 0 + 14de: a2 2f mov r26, r18 + 14e0: 23 2f mov r18, r19 + 14e2: 34 2f mov r19, r20 + 14e4: 44 27 eor r20, r20 + 14e6: 58 5f subi r21, 0xF8 ; 248 + 14e8: f3 cf rjmp .-26 ; 0x14d0 <__addsf3x+0x34> + 14ea: 46 95 lsr r20 + 14ec: 37 95 ror r19 + 14ee: 27 95 ror r18 + 14f0: a7 95 ror r26 + 14f2: f0 40 sbci r31, 0x00 ; 0 + 14f4: 53 95 inc r21 + 14f6: c9 f7 brne .-14 ; 0x14ea <__addsf3x+0x4e> + 14f8: 7e f4 brtc .+30 ; 0x1518 <__addsf3x+0x7c> + 14fa: 1f 16 cp r1, r31 + 14fc: ba 0b sbc r27, r26 + 14fe: 62 0b sbc r22, r18 + 1500: 73 0b sbc r23, r19 + 1502: 84 0b sbc r24, r20 + 1504: ba f0 brmi .+46 ; 0x1534 <__addsf3x+0x98> + 1506: 91 50 subi r25, 0x01 ; 1 + 1508: a1 f0 breq .+40 ; 0x1532 <__addsf3x+0x96> + 150a: ff 0f add r31, r31 + 150c: bb 1f adc r27, r27 + 150e: 66 1f adc r22, r22 + 1510: 77 1f adc r23, r23 + 1512: 88 1f adc r24, r24 + 1514: c2 f7 brpl .-16 ; 0x1506 <__addsf3x+0x6a> + 1516: 0e c0 rjmp .+28 ; 0x1534 <__addsf3x+0x98> + 1518: ba 0f add r27, r26 + 151a: 62 1f adc r22, r18 + 151c: 73 1f adc r23, r19 + 151e: 84 1f adc r24, r20 + 1520: 48 f4 brcc .+18 ; 0x1534 <__addsf3x+0x98> + 1522: 87 95 ror r24 + 1524: 77 95 ror r23 + 1526: 67 95 ror r22 + 1528: b7 95 ror r27 + 152a: f7 95 ror r31 + 152c: 9e 3f cpi r25, 0xFE ; 254 + 152e: 08 f0 brcs .+2 ; 0x1532 <__addsf3x+0x96> + 1530: b3 cf rjmp .-154 ; 0x1498 <__addsf3+0x1e> + 1532: 93 95 inc r25 + 1534: 88 0f add r24, r24 + 1536: 08 f0 brcs .+2 ; 0x153a <__addsf3x+0x9e> + 1538: 99 27 eor r25, r25 + 153a: ee 0f add r30, r30 + 153c: 97 95 ror r25 + 153e: 87 95 ror r24 + 1540: 08 95 ret + +00001542 <__cmpsf2>: + 1542: d4 d0 rcall .+424 ; 0x16ec <__fp_cmp> + 1544: 08 f4 brcc .+2 ; 0x1548 <__cmpsf2+0x6> + 1546: 81 e0 ldi r24, 0x01 ; 1 + 1548: 08 95 ret + +0000154a <__divsf3>: + 154a: 0c d0 rcall .+24 ; 0x1564 <__divsf3x> + 154c: 0a c1 rjmp .+532 ; 0x1762 <__fp_round> + 154e: 02 d1 rcall .+516 ; 0x1754 <__fp_pscB> + 1550: 40 f0 brcs .+16 ; 0x1562 <__divsf3+0x18> + 1552: f9 d0 rcall .+498 ; 0x1746 <__fp_pscA> + 1554: 30 f0 brcs .+12 ; 0x1562 <__divsf3+0x18> + 1556: 21 f4 brne .+8 ; 0x1560 <__divsf3+0x16> + 1558: 5f 3f cpi r21, 0xFF ; 255 + 155a: 19 f0 breq .+6 ; 0x1562 <__divsf3+0x18> + 155c: eb c0 rjmp .+470 ; 0x1734 <__fp_inf> + 155e: 51 11 cpse r21, r1 + 1560: 34 c1 rjmp .+616 ; 0x17ca <__fp_szero> + 1562: ee c0 rjmp .+476 ; 0x1740 <__fp_nan> + +00001564 <__divsf3x>: + 1564: 0f d1 rcall .+542 ; 0x1784 <__fp_split3> + 1566: 98 f3 brcs .-26 ; 0x154e <__divsf3+0x4> + +00001568 <__divsf3_pse>: + 1568: 99 23 and r25, r25 + 156a: c9 f3 breq .-14 ; 0x155e <__divsf3+0x14> + 156c: 55 23 and r21, r21 + 156e: b1 f3 breq .-20 ; 0x155c <__divsf3+0x12> + 1570: 95 1b sub r25, r21 + 1572: 55 0b sbc r21, r21 + 1574: bb 27 eor r27, r27 + 1576: aa 27 eor r26, r26 + 1578: 62 17 cp r22, r18 + 157a: 73 07 cpc r23, r19 + 157c: 84 07 cpc r24, r20 + 157e: 38 f0 brcs .+14 ; 0x158e <__divsf3_pse+0x26> + 1580: 9f 5f subi r25, 0xFF ; 255 + 1582: 5f 4f sbci r21, 0xFF ; 255 + 1584: 22 0f add r18, r18 + 1586: 33 1f adc r19, r19 + 1588: 44 1f adc r20, r20 + 158a: aa 1f adc r26, r26 + 158c: a9 f3 breq .-22 ; 0x1578 <__divsf3_pse+0x10> + 158e: 33 d0 rcall .+102 ; 0x15f6 <__divsf3_pse+0x8e> + 1590: 0e 2e mov r0, r30 + 1592: 3a f0 brmi .+14 ; 0x15a2 <__divsf3_pse+0x3a> + 1594: e0 e8 ldi r30, 0x80 ; 128 + 1596: 30 d0 rcall .+96 ; 0x15f8 <__divsf3_pse+0x90> + 1598: 91 50 subi r25, 0x01 ; 1 + 159a: 50 40 sbci r21, 0x00 ; 0 + 159c: e6 95 lsr r30 + 159e: 00 1c adc r0, r0 + 15a0: ca f7 brpl .-14 ; 0x1594 <__divsf3_pse+0x2c> + 15a2: 29 d0 rcall .+82 ; 0x15f6 <__divsf3_pse+0x8e> + 15a4: fe 2f mov r31, r30 + 15a6: 27 d0 rcall .+78 ; 0x15f6 <__divsf3_pse+0x8e> + 15a8: 66 0f add r22, r22 + 15aa: 77 1f adc r23, r23 + 15ac: 88 1f adc r24, r24 + 15ae: bb 1f adc r27, r27 + 15b0: 26 17 cp r18, r22 + 15b2: 37 07 cpc r19, r23 + 15b4: 48 07 cpc r20, r24 + 15b6: ab 07 cpc r26, r27 + 15b8: b0 e8 ldi r27, 0x80 ; 128 + 15ba: 09 f0 breq .+2 ; 0x15be <__divsf3_pse+0x56> + 15bc: bb 0b sbc r27, r27 + 15be: 80 2d mov r24, r0 + 15c0: bf 01 movw r22, r30 + 15c2: ff 27 eor r31, r31 + 15c4: 93 58 subi r25, 0x83 ; 131 + 15c6: 5f 4f sbci r21, 0xFF ; 255 + 15c8: 2a f0 brmi .+10 ; 0x15d4 <__divsf3_pse+0x6c> + 15ca: 9e 3f cpi r25, 0xFE ; 254 + 15cc: 51 05 cpc r21, r1 + 15ce: 68 f0 brcs .+26 ; 0x15ea <__divsf3_pse+0x82> + 15d0: b1 c0 rjmp .+354 ; 0x1734 <__fp_inf> + 15d2: fb c0 rjmp .+502 ; 0x17ca <__fp_szero> + 15d4: 5f 3f cpi r21, 0xFF ; 255 + 15d6: ec f3 brlt .-6 ; 0x15d2 <__divsf3_pse+0x6a> + 15d8: 98 3e cpi r25, 0xE8 ; 232 + 15da: dc f3 brlt .-10 ; 0x15d2 <__divsf3_pse+0x6a> + 15dc: 86 95 lsr r24 + 15de: 77 95 ror r23 + 15e0: 67 95 ror r22 + 15e2: b7 95 ror r27 + 15e4: f7 95 ror r31 + 15e6: 9f 5f subi r25, 0xFF ; 255 + 15e8: c9 f7 brne .-14 ; 0x15dc <__divsf3_pse+0x74> + 15ea: 88 0f add r24, r24 + 15ec: 91 1d adc r25, r1 + 15ee: 96 95 lsr r25 + 15f0: 87 95 ror r24 + 15f2: 97 f9 bld r25, 7 + 15f4: 08 95 ret + 15f6: e1 e0 ldi r30, 0x01 ; 1 + 15f8: 66 0f add r22, r22 + 15fa: 77 1f adc r23, r23 + 15fc: 88 1f adc r24, r24 + 15fe: bb 1f adc r27, r27 + 1600: 62 17 cp r22, r18 + 1602: 73 07 cpc r23, r19 + 1604: 84 07 cpc r24, r20 + 1606: ba 07 cpc r27, r26 + 1608: 20 f0 brcs .+8 ; 0x1612 <__divsf3_pse+0xaa> + 160a: 62 1b sub r22, r18 + 160c: 73 0b sbc r23, r19 + 160e: 84 0b sbc r24, r20 + 1610: ba 0b sbc r27, r26 + 1612: ee 1f adc r30, r30 + 1614: 88 f7 brcc .-30 ; 0x15f8 <__divsf3_pse+0x90> + 1616: e0 95 com r30 + 1618: 08 95 ret + +0000161a <__fixunssfsi>: + 161a: bc d0 rcall .+376 ; 0x1794 <__fp_splitA> + 161c: 88 f0 brcs .+34 ; 0x1640 <__fixunssfsi+0x26> + 161e: 9f 57 subi r25, 0x7F ; 127 + 1620: 90 f0 brcs .+36 ; 0x1646 <__fixunssfsi+0x2c> + 1622: b9 2f mov r27, r25 + 1624: 99 27 eor r25, r25 + 1626: b7 51 subi r27, 0x17 ; 23 + 1628: a0 f0 brcs .+40 ; 0x1652 <__fixunssfsi+0x38> + 162a: d1 f0 breq .+52 ; 0x1660 <__fixunssfsi+0x46> + 162c: 66 0f add r22, r22 + 162e: 77 1f adc r23, r23 + 1630: 88 1f adc r24, r24 + 1632: 99 1f adc r25, r25 + 1634: 1a f0 brmi .+6 ; 0x163c <__fixunssfsi+0x22> + 1636: ba 95 dec r27 + 1638: c9 f7 brne .-14 ; 0x162c <__fixunssfsi+0x12> + 163a: 12 c0 rjmp .+36 ; 0x1660 <__fixunssfsi+0x46> + 163c: b1 30 cpi r27, 0x01 ; 1 + 163e: 81 f0 breq .+32 ; 0x1660 <__fixunssfsi+0x46> + 1640: c3 d0 rcall .+390 ; 0x17c8 <__fp_zero> + 1642: b1 e0 ldi r27, 0x01 ; 1 + 1644: 08 95 ret + 1646: c0 c0 rjmp .+384 ; 0x17c8 <__fp_zero> + 1648: 67 2f mov r22, r23 + 164a: 78 2f mov r23, r24 + 164c: 88 27 eor r24, r24 + 164e: b8 5f subi r27, 0xF8 ; 248 + 1650: 39 f0 breq .+14 ; 0x1660 <__fixunssfsi+0x46> + 1652: b9 3f cpi r27, 0xF9 ; 249 + 1654: cc f3 brlt .-14 ; 0x1648 <__fixunssfsi+0x2e> + 1656: 86 95 lsr r24 + 1658: 77 95 ror r23 + 165a: 67 95 ror r22 + 165c: b3 95 inc r27 + 165e: d9 f7 brne .-10 ; 0x1656 <__fixunssfsi+0x3c> + 1660: 3e f4 brtc .+14 ; 0x1670 <__fixunssfsi+0x56> + 1662: 90 95 com r25 + 1664: 80 95 com r24 + 1666: 70 95 com r23 + 1668: 61 95 neg r22 + 166a: 7f 4f sbci r23, 0xFF ; 255 + 166c: 8f 4f sbci r24, 0xFF ; 255 + 166e: 9f 4f sbci r25, 0xFF ; 255 + 1670: 08 95 ret + +00001672 <__floatunsisf>: + 1672: e8 94 clt + 1674: 09 c0 rjmp .+18 ; 0x1688 <__floatsisf+0x12> + +00001676 <__floatsisf>: + 1676: 97 fb bst r25, 7 + 1678: 3e f4 brtc .+14 ; 0x1688 <__floatsisf+0x12> + 167a: 90 95 com r25 + 167c: 80 95 com r24 + 167e: 70 95 com r23 + 1680: 61 95 neg r22 + 1682: 7f 4f sbci r23, 0xFF ; 255 + 1684: 8f 4f sbci r24, 0xFF ; 255 + 1686: 9f 4f sbci r25, 0xFF ; 255 + 1688: 99 23 and r25, r25 + 168a: a9 f0 breq .+42 ; 0x16b6 <__floatsisf+0x40> + 168c: f9 2f mov r31, r25 + 168e: 96 e9 ldi r25, 0x96 ; 150 + 1690: bb 27 eor r27, r27 + 1692: 93 95 inc r25 + 1694: f6 95 lsr r31 + 1696: 87 95 ror r24 + 1698: 77 95 ror r23 + 169a: 67 95 ror r22 + 169c: b7 95 ror r27 + 169e: f1 11 cpse r31, r1 + 16a0: f8 cf rjmp .-16 ; 0x1692 <__floatsisf+0x1c> + 16a2: fa f4 brpl .+62 ; 0x16e2 <__floatsisf+0x6c> + 16a4: bb 0f add r27, r27 + 16a6: 11 f4 brne .+4 ; 0x16ac <__floatsisf+0x36> + 16a8: 60 ff sbrs r22, 0 + 16aa: 1b c0 rjmp .+54 ; 0x16e2 <__floatsisf+0x6c> + 16ac: 6f 5f subi r22, 0xFF ; 255 + 16ae: 7f 4f sbci r23, 0xFF ; 255 + 16b0: 8f 4f sbci r24, 0xFF ; 255 + 16b2: 9f 4f sbci r25, 0xFF ; 255 + 16b4: 16 c0 rjmp .+44 ; 0x16e2 <__floatsisf+0x6c> + 16b6: 88 23 and r24, r24 + 16b8: 11 f0 breq .+4 ; 0x16be <__floatsisf+0x48> + 16ba: 96 e9 ldi r25, 0x96 ; 150 + 16bc: 11 c0 rjmp .+34 ; 0x16e0 <__floatsisf+0x6a> + 16be: 77 23 and r23, r23 + 16c0: 21 f0 breq .+8 ; 0x16ca <__floatsisf+0x54> + 16c2: 9e e8 ldi r25, 0x8E ; 142 + 16c4: 87 2f mov r24, r23 + 16c6: 76 2f mov r23, r22 + 16c8: 05 c0 rjmp .+10 ; 0x16d4 <__floatsisf+0x5e> + 16ca: 66 23 and r22, r22 + 16cc: 71 f0 breq .+28 ; 0x16ea <__floatsisf+0x74> + 16ce: 96 e8 ldi r25, 0x86 ; 134 + 16d0: 86 2f mov r24, r22 + 16d2: 70 e0 ldi r23, 0x00 ; 0 + 16d4: 60 e0 ldi r22, 0x00 ; 0 + 16d6: 2a f0 brmi .+10 ; 0x16e2 <__floatsisf+0x6c> + 16d8: 9a 95 dec r25 + 16da: 66 0f add r22, r22 + 16dc: 77 1f adc r23, r23 + 16de: 88 1f adc r24, r24 + 16e0: da f7 brpl .-10 ; 0x16d8 <__floatsisf+0x62> + 16e2: 88 0f add r24, r24 + 16e4: 96 95 lsr r25 + 16e6: 87 95 ror r24 + 16e8: 97 f9 bld r25, 7 + 16ea: 08 95 ret + +000016ec <__fp_cmp>: + 16ec: 99 0f add r25, r25 + 16ee: 00 08 sbc r0, r0 + 16f0: 55 0f add r21, r21 + 16f2: aa 0b sbc r26, r26 + 16f4: e0 e8 ldi r30, 0x80 ; 128 + 16f6: fe ef ldi r31, 0xFE ; 254 + 16f8: 16 16 cp r1, r22 + 16fa: 17 06 cpc r1, r23 + 16fc: e8 07 cpc r30, r24 + 16fe: f9 07 cpc r31, r25 + 1700: c0 f0 brcs .+48 ; 0x1732 <__fp_cmp+0x46> + 1702: 12 16 cp r1, r18 + 1704: 13 06 cpc r1, r19 + 1706: e4 07 cpc r30, r20 + 1708: f5 07 cpc r31, r21 + 170a: 98 f0 brcs .+38 ; 0x1732 <__fp_cmp+0x46> + 170c: 62 1b sub r22, r18 + 170e: 73 0b sbc r23, r19 + 1710: 84 0b sbc r24, r20 + 1712: 95 0b sbc r25, r21 + 1714: 39 f4 brne .+14 ; 0x1724 <__fp_cmp+0x38> + 1716: 0a 26 eor r0, r26 + 1718: 61 f0 breq .+24 ; 0x1732 <__fp_cmp+0x46> + 171a: 23 2b or r18, r19 + 171c: 24 2b or r18, r20 + 171e: 25 2b or r18, r21 + 1720: 21 f4 brne .+8 ; 0x172a <__fp_cmp+0x3e> + 1722: 08 95 ret + 1724: 0a 26 eor r0, r26 + 1726: 09 f4 brne .+2 ; 0x172a <__fp_cmp+0x3e> + 1728: a1 40 sbci r26, 0x01 ; 1 + 172a: a6 95 lsr r26 + 172c: 8f ef ldi r24, 0xFF ; 255 + 172e: 81 1d adc r24, r1 + 1730: 81 1d adc r24, r1 + 1732: 08 95 ret + +00001734 <__fp_inf>: + 1734: 97 f9 bld r25, 7 + 1736: 9f 67 ori r25, 0x7F ; 127 + 1738: 80 e8 ldi r24, 0x80 ; 128 + 173a: 70 e0 ldi r23, 0x00 ; 0 + 173c: 60 e0 ldi r22, 0x00 ; 0 + 173e: 08 95 ret + +00001740 <__fp_nan>: + 1740: 9f ef ldi r25, 0xFF ; 255 + 1742: 80 ec ldi r24, 0xC0 ; 192 + 1744: 08 95 ret + +00001746 <__fp_pscA>: + 1746: 00 24 eor r0, r0 + 1748: 0a 94 dec r0 + 174a: 16 16 cp r1, r22 + 174c: 17 06 cpc r1, r23 + 174e: 18 06 cpc r1, r24 + 1750: 09 06 cpc r0, r25 + 1752: 08 95 ret + +00001754 <__fp_pscB>: + 1754: 00 24 eor r0, r0 + 1756: 0a 94 dec r0 + 1758: 12 16 cp r1, r18 + 175a: 13 06 cpc r1, r19 + 175c: 14 06 cpc r1, r20 + 175e: 05 06 cpc r0, r21 + 1760: 08 95 ret + +00001762 <__fp_round>: + 1762: 09 2e mov r0, r25 + 1764: 03 94 inc r0 + 1766: 00 0c add r0, r0 + 1768: 11 f4 brne .+4 ; 0x176e <__fp_round+0xc> + 176a: 88 23 and r24, r24 + 176c: 52 f0 brmi .+20 ; 0x1782 <__fp_round+0x20> + 176e: bb 0f add r27, r27 + 1770: 40 f4 brcc .+16 ; 0x1782 <__fp_round+0x20> + 1772: bf 2b or r27, r31 + 1774: 11 f4 brne .+4 ; 0x177a <__fp_round+0x18> + 1776: 60 ff sbrs r22, 0 + 1778: 04 c0 rjmp .+8 ; 0x1782 <__fp_round+0x20> + 177a: 6f 5f subi r22, 0xFF ; 255 + 177c: 7f 4f sbci r23, 0xFF ; 255 + 177e: 8f 4f sbci r24, 0xFF ; 255 + 1780: 9f 4f sbci r25, 0xFF ; 255 + 1782: 08 95 ret + +00001784 <__fp_split3>: + 1784: 57 fd sbrc r21, 7 + 1786: 90 58 subi r25, 0x80 ; 128 + 1788: 44 0f add r20, r20 + 178a: 55 1f adc r21, r21 + 178c: 59 f0 breq .+22 ; 0x17a4 <__fp_splitA+0x10> + 178e: 5f 3f cpi r21, 0xFF ; 255 + 1790: 71 f0 breq .+28 ; 0x17ae <__fp_splitA+0x1a> + 1792: 47 95 ror r20 + +00001794 <__fp_splitA>: + 1794: 88 0f add r24, r24 + 1796: 97 fb bst r25, 7 + 1798: 99 1f adc r25, r25 + 179a: 61 f0 breq .+24 ; 0x17b4 <__fp_splitA+0x20> + 179c: 9f 3f cpi r25, 0xFF ; 255 + 179e: 79 f0 breq .+30 ; 0x17be <__fp_splitA+0x2a> + 17a0: 87 95 ror r24 + 17a2: 08 95 ret + 17a4: 12 16 cp r1, r18 + 17a6: 13 06 cpc r1, r19 + 17a8: 14 06 cpc r1, r20 + 17aa: 55 1f adc r21, r21 + 17ac: f2 cf rjmp .-28 ; 0x1792 <__fp_split3+0xe> + 17ae: 46 95 lsr r20 + 17b0: f1 df rcall .-30 ; 0x1794 <__fp_splitA> + 17b2: 08 c0 rjmp .+16 ; 0x17c4 <__fp_splitA+0x30> + 17b4: 16 16 cp r1, r22 + 17b6: 17 06 cpc r1, r23 + 17b8: 18 06 cpc r1, r24 + 17ba: 99 1f adc r25, r25 + 17bc: f1 cf rjmp .-30 ; 0x17a0 <__fp_splitA+0xc> + 17be: 86 95 lsr r24 + 17c0: 71 05 cpc r23, r1 + 17c2: 61 05 cpc r22, r1 + 17c4: 08 94 sec + 17c6: 08 95 ret + +000017c8 <__fp_zero>: + 17c8: e8 94 clt + +000017ca <__fp_szero>: + 17ca: bb 27 eor r27, r27 + 17cc: 66 27 eor r22, r22 + 17ce: 77 27 eor r23, r23 + 17d0: cb 01 movw r24, r22 + 17d2: 97 f9 bld r25, 7 + 17d4: 08 95 ret + +000017d6 <__gesf2>: + 17d6: 8a df rcall .-236 ; 0x16ec <__fp_cmp> + 17d8: 08 f4 brcc .+2 ; 0x17dc <__gesf2+0x6> + 17da: 8f ef ldi r24, 0xFF ; 255 + 17dc: 08 95 ret + +000017de <__udivmodsi4>: + 17de: a1 e2 ldi r26, 0x21 ; 33 + 17e0: 1a 2e mov r1, r26 + 17e2: aa 1b sub r26, r26 + 17e4: bb 1b sub r27, r27 + 17e6: fd 01 movw r30, r26 + 17e8: 0d c0 rjmp .+26 ; 0x1804 <__udivmodsi4_ep> + +000017ea <__udivmodsi4_loop>: + 17ea: aa 1f adc r26, r26 + 17ec: bb 1f adc r27, r27 + 17ee: ee 1f adc r30, r30 + 17f0: ff 1f adc r31, r31 + 17f2: a2 17 cp r26, r18 + 17f4: b3 07 cpc r27, r19 + 17f6: e4 07 cpc r30, r20 + 17f8: f5 07 cpc r31, r21 + 17fa: 20 f0 brcs .+8 ; 0x1804 <__udivmodsi4_ep> + 17fc: a2 1b sub r26, r18 + 17fe: b3 0b sbc r27, r19 + 1800: e4 0b sbc r30, r20 + 1802: f5 0b sbc r31, r21 + +00001804 <__udivmodsi4_ep>: + 1804: 66 1f adc r22, r22 + 1806: 77 1f adc r23, r23 + 1808: 88 1f adc r24, r24 + 180a: 99 1f adc r25, r25 + 180c: 1a 94 dec r1 + 180e: 69 f7 brne .-38 ; 0x17ea <__udivmodsi4_loop> + 1810: 60 95 com r22 + 1812: 70 95 com r23 + 1814: 80 95 com r24 + 1816: 90 95 com r25 + 1818: 9b 01 movw r18, r22 + 181a: ac 01 movw r20, r24 + 181c: bd 01 movw r22, r26 + 181e: cf 01 movw r24, r30 + 1820: 08 95 ret + +00001822 <_exit>: + 1822: f8 94 cli + +00001824 <__stop_program>: + 1824: ff cf rjmp .-2 ; 0x1824 <__stop_program> diff --git a/firmware/USBtoSerial.map b/firmware/USBtoSerial.map index c72e03d..227a5d5 100644 --- a/firmware/USBtoSerial.map +++ b/firmware/USBtoSerial.map @@ -77,14 +77,12 @@ Discarded input sections .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o .text 0x0000000000000000 0x0 USBtoSerial.o - .text.touchpad_set_abs_mode - 0x0000000000000000 0x30 USBtoSerial.o .text.touchpad_set_rel_mode_100dpi 0x0000000000000000 0x18 USBtoSerial.o - .text.z_pressure - 0x0000000000000000 0x16 USBtoSerial.o - .text.x_abs 0x0000000000000000 0x3c USBtoSerial.o - .text.y_abs 0x0000000000000000 0x3e USBtoSerial.o + .text.touchpad_set_rel_mode_200dpi + 0x0000000000000000 0x18 USBtoSerial.o + .text.delta_y 0x0000000000000000 0x20 USBtoSerial.o + .text.delta_x 0x0000000000000000 0x20 USBtoSerial.o .text.decode_field 0x0000000000000000 0x8c USBtoSerial.o .text 0x0000000000000000 0x0 Descriptors.o @@ -541,7 +539,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x17f0 +.text 0x0000000000000000 0x1826 *(.vectors) .vectors 0x0000000000000000 0x98 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o 0x0000000000000000 __vectors @@ -660,188 +658,191 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .text.touchpad_read 0x000000000000046c 0x12 USBtoSerial.o 0x000000000000046c touchpad_read - .text.touchpad_set_rel_mode_200dpi - 0x000000000000047e 0x14 USBtoSerial.o - 0x000000000000047e touchpad_set_rel_mode_200dpi - .text.delta_y 0x0000000000000492 0x20 USBtoSerial.o - 0x0000000000000492 delta_y - .text.delta_x 0x00000000000004b2 0x20 USBtoSerial.o - 0x00000000000004b2 delta_x + .text.touchpad_set_abs_mode + 0x000000000000047e 0x28 USBtoSerial.o + 0x000000000000047e touchpad_set_abs_mode + .text.z_pressure + 0x00000000000004a6 0x16 USBtoSerial.o + 0x00000000000004a6 z_pressure + .text.x_abs 0x00000000000004bc 0x3c USBtoSerial.o + 0x00000000000004bc x_abs + .text.y_abs 0x00000000000004f8 0x3e USBtoSerial.o + 0x00000000000004f8 y_abs .text.Usb2SerialTask - 0x00000000000004d2 0xb2 USBtoSerial.o - 0x00000000000004d2 Usb2SerialTask + 0x0000000000000536 0xb2 USBtoSerial.o + 0x0000000000000536 Usb2SerialTask .text.SetupHardware - 0x0000000000000584 0x2a USBtoSerial.o - 0x0000000000000584 SetupHardware + 0x00000000000005e8 0x2a USBtoSerial.o + 0x00000000000005e8 SetupHardware .text.EVENT_USB_Device_Connect - 0x00000000000005ae 0x2 USBtoSerial.o - 0x00000000000005ae EVENT_USB_Device_Connect + 0x0000000000000612 0x2 USBtoSerial.o + 0x0000000000000612 EVENT_USB_Device_Connect .text.EVENT_USB_Device_Disconnect - 0x00000000000005b0 0x2 USBtoSerial.o - 0x00000000000005b0 EVENT_USB_Device_Disconnect + 0x0000000000000614 0x2 USBtoSerial.o + 0x0000000000000614 EVENT_USB_Device_Disconnect .text.EVENT_USB_Device_ConfigurationChanged - 0x00000000000005b2 0x6 USBtoSerial.o - 0x00000000000005b2 EVENT_USB_Device_ConfigurationChanged + 0x0000000000000616 0x6 USBtoSerial.o + 0x0000000000000616 EVENT_USB_Device_ConfigurationChanged .text.EVENT_USB_Device_ControlRequest - 0x00000000000005b8 0x6 USBtoSerial.o - 0x00000000000005b8 EVENT_USB_Device_ControlRequest + 0x000000000000061c 0x6 USBtoSerial.o + 0x000000000000061c EVENT_USB_Device_ControlRequest .text.__vector_23 - 0x00000000000005be 0x54 USBtoSerial.o - 0x00000000000005be __vector_23 + 0x0000000000000622 0x54 USBtoSerial.o + 0x0000000000000622 __vector_23 .text.EVENT_CDC_Device_LineEncodingChanged - 0x0000000000000612 0xc0 USBtoSerial.o - 0x0000000000000612 EVENT_CDC_Device_LineEncodingChanged + 0x0000000000000676 0xc0 USBtoSerial.o + 0x0000000000000676 EVENT_CDC_Device_LineEncodingChanged .text.uart_putc - 0x00000000000006d2 0x10 USBtoSerial.o - 0x00000000000006d2 uart_putc + 0x0000000000000736 0x10 USBtoSerial.o + 0x0000000000000736 uart_putc .text.uart_puts - 0x00000000000006e2 0x26 USBtoSerial.o - 0x00000000000006e2 uart_puts + 0x0000000000000746 0x26 USBtoSerial.o + 0x0000000000000746 uart_puts .text.my_uitoa - 0x0000000000000708 0xd0 USBtoSerial.o - 0x0000000000000708 my_uitoa - .text.main 0x00000000000007d8 0xe8 USBtoSerial.o - 0x00000000000007d8 main + 0x000000000000076c 0xcc USBtoSerial.o + 0x000000000000076c my_uitoa + .text.main 0x0000000000000838 0xbe USBtoSerial.o + 0x0000000000000838 main .text.CALLBACK_USB_GetDescriptor - 0x00000000000008c0 0x5a Descriptors.o - 0x00000000000008c0 CALLBACK_USB_GetDescriptor + 0x00000000000008f6 0x5a Descriptors.o + 0x00000000000008f6 CALLBACK_USB_GetDescriptor .text.Endpoint_Write_Control_Stream_LE - 0x000000000000091a 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x000000000000091a Endpoint_Write_Control_Stream_LE + 0x0000000000000950 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000950 Endpoint_Write_Control_Stream_LE .text.Endpoint_Write_Control_PStream_LE - 0x00000000000009ce 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x00000000000009ce Endpoint_Write_Control_PStream_LE + 0x0000000000000a04 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000a04 Endpoint_Write_Control_PStream_LE .text.Endpoint_ConfigureEndpoint_Prv - 0x0000000000000a84 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000a84 Endpoint_ConfigureEndpoint_Prv + 0x0000000000000aba 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000aba Endpoint_ConfigureEndpoint_Prv .text.Endpoint_ConfigureEndpointTable - 0x0000000000000af2 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000af2 Endpoint_ConfigureEndpointTable + 0x0000000000000b28 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000b28 Endpoint_ConfigureEndpointTable .text.Endpoint_ClearStatusStage - 0x0000000000000b7a 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000b7a Endpoint_ClearStatusStage + 0x0000000000000bb0 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000bb0 Endpoint_ClearStatusStage .text.Endpoint_WaitUntilReady - 0x0000000000000bb8 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000bb8 Endpoint_WaitUntilReady + 0x0000000000000bee 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000bee Endpoint_WaitUntilReady .text.USB_ResetInterface - 0x0000000000000c1e 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000c1e USB_ResetInterface + 0x0000000000000c54 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000c54 USB_ResetInterface .text.USB_Init - 0x0000000000000c8e 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000c8e USB_Init + 0x0000000000000cc4 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000cc4 USB_Init .text.USB_INT_DisableAllInterrupts - 0x0000000000000ca0 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000ca0 USB_INT_DisableAllInterrupts + 0x0000000000000cd6 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000cd6 USB_INT_DisableAllInterrupts .text.USB_INT_ClearAllInterrupts - 0x0000000000000ca6 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000ca6 USB_INT_ClearAllInterrupts + 0x0000000000000cdc 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000cdc USB_INT_ClearAllInterrupts .text.__vector_11 - 0x0000000000000cac 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000cac __vector_11 + 0x0000000000000ce2 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000ce2 __vector_11 .text.__vector_12 - 0x0000000000000df4 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000df4 __vector_12 + 0x0000000000000e2a 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000e2a __vector_12 .text.USB_Device_ProcessControlRequest - 0x0000000000000e6a 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000000e6a USB_Device_ProcessControlRequest + 0x0000000000000ea0 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000000ea0 USB_Device_ProcessControlRequest .text.USB_Event_Stub - 0x000000000000112c 0x2 ../../LUFA/Drivers/USB/Core/Events.o - 0x000000000000112c EVENT_USB_Device_WakeUp - 0x000000000000112c USB_Event_Stub - 0x000000000000112c EVENT_USB_Device_Suspend - 0x000000000000112c EVENT_USB_Device_StartOfFrame - 0x000000000000112c EVENT_USB_Device_Reset + 0x0000000000001162 0x2 ../../LUFA/Drivers/USB/Core/Events.o + 0x0000000000001162 EVENT_USB_Device_WakeUp + 0x0000000000001162 USB_Event_Stub + 0x0000000000001162 EVENT_USB_Device_Suspend + 0x0000000000001162 EVENT_USB_Device_StartOfFrame + 0x0000000000001162 EVENT_USB_Device_Reset .text.USB_USBTask - 0x000000000000112e 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x000000000000112e USB_USBTask + 0x0000000000001164 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x0000000000001164 USB_USBTask .text.CDC_Device_ProcessControlRequest - 0x0000000000001164 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001164 CDC_Device_ProcessControlRequest + 0x000000000000119a 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000119a CDC_Device_ProcessControlRequest .text.CDC_Device_ConfigureEndpoints - 0x00000000000012bc 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000012bc CDC_Device_ConfigureEndpoints + 0x00000000000012f2 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000012f2 CDC_Device_ConfigureEndpoints .text.CDC_Device_SendByte - 0x0000000000001304 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001304 CDC_Device_SendByte + 0x000000000000133a 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000133a CDC_Device_SendByte .text.CDC_Device_Flush - 0x000000000000135e 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000135e CDC_Device_Flush + 0x0000000000001394 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001394 CDC_Device_Flush .text.CDC_Device_USBTask - 0x00000000000013b8 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000013b8 CDC_Device_USBTask + 0x00000000000013ee 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000013ee CDC_Device_USBTask .text.CDC_Device_ReceiveByte - 0x00000000000013e6 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000013e6 CDC_Device_ReceiveByte + 0x000000000000141c 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000141c CDC_Device_ReceiveByte .text.CDC_Device_Event_Stub - 0x0000000000001440 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001440 EVENT_CDC_Device_ControLineStateChanged - 0x0000000000001440 EVENT_CDC_Device_BreakSent - 0x0000000000001440 CDC_Device_Event_Stub + 0x0000000000001476 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001476 EVENT_CDC_Device_ControLineStateChanged + 0x0000000000001476 EVENT_CDC_Device_BreakSent + 0x0000000000001476 CDC_Device_Event_Stub .text.avr-libc.fplib - 0x0000000000001442 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x0000000000001442 __subsf3 - 0x0000000000001444 __addsf3 + 0x0000000000001478 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) + 0x0000000000001478 __subsf3 + 0x000000000000147a __addsf3 .text.avr-libc.fplib - 0x000000000000144c 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x0000000000001466 __addsf3x + 0x0000000000001482 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) + 0x000000000000149c __addsf3x .text.avr-libc.fplib - 0x000000000000150c 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x000000000000150c __lesf2 - 0x000000000000150c __nesf2 - 0x000000000000150c __eqsf2 - 0x000000000000150c __cmpsf2 - 0x000000000000150c __ltsf2 + 0x0000000000001542 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) + 0x0000000000001542 __lesf2 + 0x0000000000001542 __nesf2 + 0x0000000000001542 __eqsf2 + 0x0000000000001542 __cmpsf2 + 0x0000000000001542 __ltsf2 .text.avr-libc.fplib - 0x0000000000001514 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x0000000000001514 __divsf3 + 0x000000000000154a 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) + 0x000000000000154a __divsf3 .text.avr-libc.fplib - 0x0000000000001518 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x000000000000152e __divsf3x - 0x0000000000001532 __divsf3_pse + 0x000000000000154e 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) + 0x0000000000001564 __divsf3x + 0x0000000000001568 __divsf3_pse .text.avr-libc.fplib - 0x00000000000015e4 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x00000000000015e4 __fixunssfsi + 0x000000000000161a 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) + 0x000000000000161a __fixunssfsi .text.avr-libc.fplib - 0x000000000000163c 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x000000000000163c __floatunsisf - 0x0000000000001640 __floatsisf + 0x0000000000001672 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) + 0x0000000000001672 __floatunsisf + 0x0000000000001676 __floatsisf .text.avr-libc.fplib - 0x00000000000016b6 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x00000000000016b6 __fp_cmp + 0x00000000000016ec 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) + 0x00000000000016ec __fp_cmp .text.avr-libc.fplib - 0x00000000000016fe 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x00000000000016fe __fp_inf + 0x0000000000001734 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) + 0x0000000000001734 __fp_inf .text.avr-libc.fplib - 0x000000000000170a 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x000000000000170a __fp_nan + 0x0000000000001740 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) + 0x0000000000001740 __fp_nan .text.avr-libc.fplib - 0x0000000000001710 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x0000000000001710 __fp_pscA + 0x0000000000001746 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) + 0x0000000000001746 __fp_pscA .text.avr-libc.fplib - 0x000000000000171e 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x000000000000171e __fp_pscB + 0x0000000000001754 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) + 0x0000000000001754 __fp_pscB .text.avr-libc.fplib - 0x000000000000172c 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x000000000000172c __fp_round + 0x0000000000001762 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) + 0x0000000000001762 __fp_round .text.avr-libc.fplib - 0x000000000000174e 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x000000000000174e __fp_split3 - 0x000000000000175e __fp_splitA + 0x0000000000001784 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) + 0x0000000000001784 __fp_split3 + 0x0000000000001794 __fp_splitA .text.avr-libc.fplib - 0x0000000000001792 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x0000000000001792 __fp_zero - 0x0000000000001794 __fp_szero + 0x00000000000017c8 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) + 0x00000000000017c8 __fp_zero + 0x00000000000017ca __fp_szero .text.avr-libc.fplib - 0x00000000000017a0 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x00000000000017a0 __gtsf2 - 0x00000000000017a0 __gesf2 - .text.libgcc 0x00000000000017a8 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - 0x00000000000017a8 __udivmodsi4 - 0x00000000000017ec . = ALIGN (0x2) + 0x00000000000017d6 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) + 0x00000000000017d6 __gtsf2 + 0x00000000000017d6 __gesf2 + .text.libgcc 0x00000000000017de 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) + 0x00000000000017de __udivmodsi4 + 0x0000000000001822 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000000000017ec 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - 0x00000000000017ec exit - 0x00000000000017ec _exit + .fini9 0x0000000000001822 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + 0x0000000000001822 exit + 0x0000000000001822 _exit *(.fini9) *(.fini8) *(.fini8) @@ -860,50 +861,50 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000000000017ec 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + .fini0 0x0000000000001822 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) *(.fini0) - 0x00000000000017f0 _etext = . + 0x0000000000001826 _etext = . -.data 0x0000000000800100 0x30 load address 0x00000000000017f0 +.data 0x0000000000800100 0x42 load address 0x0000000000001826 0x0000000000800100 PROVIDE (__data_start, .) *(.data) - .data 0x0000000000800100 0x30 USBtoSerial.o - 0x0000000000800113 VirtualSerial_CDC_Interface + .data 0x0000000000800100 0x42 USBtoSerial.o + 0x0000000000800125 VirtualSerial_CDC_Interface *(.data*) *(.rodata) *(.rodata*) *(.gnu.linkonce.d*) - 0x0000000000800130 . = ALIGN (0x2) - 0x0000000000800130 _edata = . - 0x0000000000800130 PROVIDE (__data_end, .) + 0x0000000000800142 . = ALIGN (0x2) + 0x0000000000800142 _edata = . + 0x0000000000800142 PROVIDE (__data_end, .) -.bss 0x0000000000800130 0x134 - 0x0000000000800130 PROVIDE (__bss_start, .) +.bss 0x0000000000800142 0x134 + 0x0000000000800142 PROVIDE (__bss_start, .) *(.bss) - .bss 0x0000000000800130 0x11d USBtoSerial.o + .bss 0x0000000000800142 0x11d USBtoSerial.o *(.bss*) *(COMMON) - COMMON 0x000000000080024d 0xb USBtoSerial.o - 0x000000000080024d adb_werte - 0x0000000000800256 t0ovfcount - 0x0000000000800257 adb_data_length - COMMON 0x0000000000800258 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000800258 USB_Device_ConfigurationNumber - 0x0000000000800259 USB_Device_CurrentlySelfPowered - 0x000000000080025a USB_Device_RemoteWakeupEnabled - COMMON 0x000000000080025b 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x000000000080025b USB_IsInitialized - 0x000000000080025c USB_ControlRequest - 0x0000000000800264 PROVIDE (__bss_end, .) - 0x00000000000017f0 __data_load_start = LOADADDR (.data) - 0x0000000000001820 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x0000000000800264 0x0 - 0x0000000000800264 PROVIDE (__noinit_start, .) + COMMON 0x000000000080025f 0xb USBtoSerial.o + 0x000000000080025f adb_werte + 0x0000000000800268 t0ovfcount + 0x0000000000800269 adb_data_length + COMMON 0x000000000080026a 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x000000000080026a USB_Device_ConfigurationNumber + 0x000000000080026b USB_Device_CurrentlySelfPowered + 0x000000000080026c USB_Device_RemoteWakeupEnabled + COMMON 0x000000000080026d 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x000000000080026d USB_IsInitialized + 0x000000000080026e USB_ControlRequest + 0x0000000000800276 PROVIDE (__bss_end, .) + 0x0000000000001826 __data_load_start = LOADADDR (.data) + 0x0000000000001868 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x0000000000800276 0x0 + 0x0000000000800276 PROVIDE (__noinit_start, .) *(.noinit*) - 0x0000000000800264 PROVIDE (__noinit_end, .) - 0x0000000000800264 _end = . - 0x0000000000800264 PROVIDE (__heap_start, .) + 0x0000000000800276 PROVIDE (__noinit_end, .) + 0x0000000000800276 _end = . + 0x0000000000800276 PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1079,108 +1080,108 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_pubnames 0x0000000000000d41 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -.debug_info 0x0000000000000000 0x8caa +.debug_info 0x0000000000000000 0x8cb1 *(.debug_info) - .debug_info 0x0000000000000000 0xeec USBtoSerial.o - .debug_info 0x0000000000000eec 0x77d Descriptors.o - .debug_info 0x0000000000001669 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_info 0x0000000000001d62 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_info 0x0000000000001e3a 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_info 0x0000000000003386 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_info 0x0000000000003989 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_info 0x00000000000039f5 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_info 0x0000000000003a61 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_info 0x0000000000003acd 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_info 0x0000000000003edf 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_info 0x0000000000004541 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_info 0x00000000000048cd 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_info 0x0000000000005240 0x85 ../../LUFA/Drivers/USB/Core/Events.o - .debug_info 0x00000000000052c5 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_info 0x0000000000005331 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_info 0x0000000000005576 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_info 0x0000000000005ae2 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_info 0x000000000000671d 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_info 0x0000000000006d97 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_info 0x0000000000007561 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_info 0x0000000000007a22 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_info 0x00000000000088de 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_info 0x000000000000894a 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_info 0x00000000000089b6 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_info 0x0000000000008a22 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_info 0x0000000000008a8e 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_info 0x0000000000008afa 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_info 0x0000000000008b66 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_info 0x0000000000008bd2 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_info 0x0000000000008c3e 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_info 0x0000000000000000 0xef3 USBtoSerial.o + .debug_info 0x0000000000000ef3 0x77d Descriptors.o + .debug_info 0x0000000000001670 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_info 0x0000000000001d69 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_info 0x0000000000001e41 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_info 0x000000000000338d 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_info 0x0000000000003990 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_info 0x00000000000039fc 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_info 0x0000000000003a68 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_info 0x0000000000003ad4 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_info 0x0000000000003ee6 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_info 0x0000000000004548 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_info 0x00000000000048d4 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_info 0x0000000000005247 0x85 ../../LUFA/Drivers/USB/Core/Events.o + .debug_info 0x00000000000052cc 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_info 0x0000000000005338 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_info 0x000000000000557d 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_info 0x0000000000005ae9 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_info 0x0000000000006724 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_info 0x0000000000006d9e 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_info 0x0000000000007568 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_info 0x0000000000007a29 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_info 0x00000000000088e5 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_info 0x0000000000008951 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_info 0x00000000000089bd 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_info 0x0000000000008a29 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_info 0x0000000000008a95 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_info 0x0000000000008b01 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_info 0x0000000000008b6d 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_info 0x0000000000008bd9 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_info 0x0000000000008c45 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o *(.gnu.linkonce.wi.*) -.debug_abbrev 0x0000000000000000 0x21b9 +.debug_abbrev 0x0000000000000000 0x21ca *(.debug_abbrev) - .debug_abbrev 0x0000000000000000 0x430 USBtoSerial.o - .debug_abbrev 0x0000000000000430 0x153 Descriptors.o - .debug_abbrev 0x0000000000000583 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_abbrev 0x000000000000076f 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_abbrev 0x00000000000007ec 0x18b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_abbrev 0x0000000000000977 0x1ee ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_abbrev 0x0000000000000b65 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_abbrev 0x0000000000000b8f 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_abbrev 0x0000000000000bb9 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_abbrev 0x0000000000000be3 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_abbrev 0x0000000000000d30 0x1e2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_abbrev 0x0000000000000f12 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_abbrev 0x000000000000105a 0x20b ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_abbrev 0x0000000000001265 0x41 ../../LUFA/Drivers/USB/Core/Events.o - .debug_abbrev 0x00000000000012a6 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_abbrev 0x00000000000012d0 0x14b ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_abbrev 0x000000000000141b 0x160 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_abbrev 0x000000000000157b 0x2ec ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_abbrev 0x0000000000001867 0x1b5 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_abbrev 0x0000000000001a1c 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_abbrev 0x0000000000001c21 0x16c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_abbrev 0x0000000000001d8d 0x2b2 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_abbrev 0x000000000000203f 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_abbrev 0x0000000000002069 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_abbrev 0x0000000000002093 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_abbrev 0x00000000000020bd 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_abbrev 0x00000000000020e7 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_abbrev 0x0000000000002111 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_abbrev 0x000000000000213b 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_abbrev 0x0000000000002165 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_abbrev 0x000000000000218f 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_line 0x0000000000000000 0x75c3 + .debug_abbrev 0x0000000000000000 0x441 USBtoSerial.o + .debug_abbrev 0x0000000000000441 0x153 Descriptors.o + .debug_abbrev 0x0000000000000594 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_abbrev 0x0000000000000780 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_abbrev 0x00000000000007fd 0x18b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_abbrev 0x0000000000000988 0x1ee ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_abbrev 0x0000000000000b76 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_abbrev 0x0000000000000ba0 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_abbrev 0x0000000000000bca 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_abbrev 0x0000000000000bf4 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_abbrev 0x0000000000000d41 0x1e2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_abbrev 0x0000000000000f23 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_abbrev 0x000000000000106b 0x20b ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_abbrev 0x0000000000001276 0x41 ../../LUFA/Drivers/USB/Core/Events.o + .debug_abbrev 0x00000000000012b7 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_abbrev 0x00000000000012e1 0x14b ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_abbrev 0x000000000000142c 0x160 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_abbrev 0x000000000000158c 0x2ec ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_abbrev 0x0000000000001878 0x1b5 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_abbrev 0x0000000000001a2d 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_abbrev 0x0000000000001c32 0x16c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_abbrev 0x0000000000001d9e 0x2b2 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_abbrev 0x0000000000002050 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_abbrev 0x000000000000207a 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_abbrev 0x00000000000020a4 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_abbrev 0x00000000000020ce 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_abbrev 0x00000000000020f8 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_abbrev 0x0000000000002122 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_abbrev 0x000000000000214c 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_abbrev 0x0000000000002176 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_abbrev 0x00000000000021a0 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + +.debug_line 0x0000000000000000 0x757d *(.debug_line) - .debug_line 0x0000000000000000 0xfe0 USBtoSerial.o - .debug_line 0x0000000000000fe0 0x1d9 Descriptors.o - .debug_line 0x00000000000011b9 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_line 0x000000000000191b 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_line 0x0000000000001a7a 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_line 0x00000000000034fa 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_line 0x0000000000003a9b 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_line 0x0000000000003ad9 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_line 0x0000000000003b17 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_line 0x0000000000003b55 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_line 0x0000000000003e67 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_line 0x00000000000043c1 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_line 0x000000000000462a 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_line 0x0000000000004bcc 0x80 ../../LUFA/Drivers/USB/Core/Events.o - .debug_line 0x0000000000004c4c 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_line 0x0000000000004c8a 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_line 0x0000000000004e38 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_line 0x00000000000052f6 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_line 0x0000000000005cb8 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_line 0x000000000000627b 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_line 0x0000000000006841 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_line 0x0000000000006bfd 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_line 0x0000000000007395 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_line 0x00000000000073d3 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_line 0x0000000000007411 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_line 0x000000000000744f 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_line 0x000000000000748d 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_line 0x00000000000074cb 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_line 0x0000000000007509 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_line 0x0000000000007547 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_line 0x0000000000007585 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_line 0x0000000000000000 0xf9a USBtoSerial.o + .debug_line 0x0000000000000f9a 0x1d9 Descriptors.o + .debug_line 0x0000000000001173 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_line 0x00000000000018d5 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_line 0x0000000000001a34 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_line 0x00000000000034b4 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_line 0x0000000000003a55 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_line 0x0000000000003a93 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_line 0x0000000000003ad1 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_line 0x0000000000003b0f 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_line 0x0000000000003e21 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_line 0x000000000000437b 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_line 0x00000000000045e4 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_line 0x0000000000004b86 0x80 ../../LUFA/Drivers/USB/Core/Events.o + .debug_line 0x0000000000004c06 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_line 0x0000000000004c44 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_line 0x0000000000004df2 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_line 0x00000000000052b0 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_line 0x0000000000005c72 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_line 0x0000000000006235 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_line 0x00000000000067fb 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_line 0x0000000000006bb7 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_line 0x000000000000734f 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_line 0x000000000000738d 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_line 0x00000000000073cb 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_line 0x0000000000007409 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_line 0x0000000000007447 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_line 0x0000000000007485 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_line 0x00000000000074c3 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_line 0x0000000000007501 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_line 0x000000000000753f 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o .debug_frame 0x0000000000000000 0x830 *(.debug_frame) @@ -1268,23 +1269,23 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_str 0x0000000000003bbf 0x38 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o 0x100 (size before relaxing) -.debug_loc 0x0000000000000000 0x462f +.debug_loc 0x0000000000000000 0x457e *(.debug_loc) - .debug_loc 0x0000000000000000 0x593 USBtoSerial.o - .debug_loc 0x0000000000000593 0xd3 Descriptors.o - .debug_loc 0x0000000000000666 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_loc 0x0000000000000ef5 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_loc 0x0000000000002877 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_loc 0x0000000000002c07 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_loc 0x0000000000002d97 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_loc 0x0000000000003053 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_loc 0x000000000000327d 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_loc 0x00000000000032a4 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_loc 0x0000000000003411 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_loc 0x000000000000393c 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_loc 0x0000000000003b85 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_loc 0x0000000000003cd7 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_loc 0x0000000000003ecd 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_loc 0x0000000000000000 0x4e2 USBtoSerial.o + .debug_loc 0x00000000000004e2 0xd3 Descriptors.o + .debug_loc 0x00000000000005b5 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_loc 0x0000000000000e44 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_loc 0x00000000000027c6 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_loc 0x0000000000002b56 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_loc 0x0000000000002ce6 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_loc 0x0000000000002fa2 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_loc 0x00000000000031cc 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_loc 0x00000000000031f3 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_loc 0x0000000000003360 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_loc 0x000000000000388b 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_loc 0x0000000000003ad4 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_loc 0x0000000000003c26 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_loc 0x0000000000003e1c 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_macinfo *(.debug_macinfo) diff --git a/firmware/USBtoSerial.o b/firmware/USBtoSerial.o index 768b8749293e58ca7efa8a72e2c67e6bd064c45c..a4b535c62add03082aae0a1c418f6d20a2fa03cb 100644 GIT binary patch delta 4675 zcmaKv3v`sl702&vc9ZZ(vf1Qh2^a`@Y(Vlt0s@;398)a%c;pO;$Vh~bjt{((KPHjRsuZ?Vxa-5Es^%v-#ozJcD=#;S^j3h$!o`uPpDbUu{$^{kjMS%c~3X14ZG1vcFEqtV~-=c64_ zlc!A2n>58+Rz9&D*A>f`RM%HkSNYD3`P#utGopO934aXYKjmbZZ2lrAf|GNdW+i9k zCOK9j??hgZ8}E1tXYVp^&5gI!-opoTJ&vbwym#?OXgao-sET{##hb~Tl9yylXyWO4 z93E_z>lS_UowjjJJTTwm_y(raGH1gqZ{m8G!3jjcmia8q zxlQ~EOef6AymeXxe+zR_6NeUf9Oa(w;e`cGQ^j)%l5D{nxVgY%?&A)K(Hrh`BQHZ~_a3{oA4k<~p_1(;)N<5~W=Rl0x%*_z9xdYYwdVdE8mSK%XaVo0w zJ9s*(E4TAHROLH)pR|qUcTv5O%~wz@D&v9W9>?riM7?}@Xt5;1>C5XwwB2d7J1JFlu%%s;p?WetR4$67(W=o* zGUm=6x)@rlUI^rGyna`Y4s%s^-7t#kRYzigi`=vZS}X~f;1+F9x7wp=uj+o59zd^t zPsh+%)lpV^;~@G(4f&3D(O|l$`VLFS(`D7MmQJMqd`~A)K-bp^ZL!*il2bLLwE{7! zk6G=*C>c5tJOB~ih%cku9s|5R^zt6Mxrcs4HO>?sAcdaj(f$k7Qn@INj{E6G7p2oV zHF{eehLhcTOF*E=HpHp!Y9B$_J=*7~o{qjQ8cB;)zisK;XjwL78kT;p zhd!d(WhER#uc;nl=}bDM`jn-!=z|{PJ5_gD?c?bmH`;@`p71JX-Tk>4%}-?a^X1GA z58xTz6nw5Xc+<>>{GvB4x(-WJhtVdB=s}EbP)_A*UU%c0aN5*4iQ|EHl+{z_vsbwY z^?v1bMTg~tBp77c`L3({GxUJ0RCYfyufXq;V}!+%x>R;1z|SR;Jbfe zt1(}*qb|oJb5Wh!*4J=NT^wG$Ep@9*4x4(nEyBV5>*LHc&Z>8tNBBqe3qzLT*?Qv_ zx;$GJzf+%?*a;^`9XD3HOt~1lHCK5Vr!00iK98q;P@D{+Q5dyRc{G@nPQanb4DEV=Hf&w4@_bBvmhyURNsTZzPs&2| zkE8!8_2q@WM*Vh--K4&}jM~(nggiUde~cCqJ+2Ls_!(uH&>`U|ax0>v>dWNb6dvE@ zpHyEadR92E%l}Ay$$3c_?TNmQC4-!e{n6u5v9RC+!F!Z%1wW-M8}XbUzoaai@~R)d zr7RnCM!6V#LAeC{sj_U!*VcmL#x)QIzu9FHvO~R;>%rm5%fQjf4dB7bE5SpR<*(jw zVxPOlqLzc@^5UW;P;!EA^x>JU zWg!#b#3Fj5b%O73YmTwD)PzOV=3k~cYu903_C$2A!t zV}(=Ie++fH`ogy%Ft!mDk(>=zKMQ4%$%d`XMxBoc02iW`^Wc&Lh%y%;eP*GqL`a`1 z)N%w|GAon@g!BPFLgdazA_t`5v2p5#+5#4zX3QHb&{+AJw2!9Fb2tpDGzk=vabX+(F7nJu9 z-HFZ!>xATtNuGGr=Ma)d_&lP!&tJi^TCysU2w&un=LQ*%Z^ibFwk%oVBiJ|jWJw2k a3wQJD$_?;O`tk3TJAF%c-EFsbqWQmz2jsE< delta 5213 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