From 8bbc858de488c24f939b77dce0b1d6f84501c9bb Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Fri, 19 Feb 2021 00:44:39 +0300 Subject: [PATCH] fix I2C scan --- F1-nolib/I2Cscan/I2Cscan.bin | Bin 7080 -> 7332 bytes F1-nolib/I2Cscan/main.c | 5 +++-- F1-nolib/I2Cscan/proto.c | 33 +++++++++++++++++++++++++++------ F1-nolib/I2Cscan/proto.h | 1 + 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/F1-nolib/I2Cscan/I2Cscan.bin b/F1-nolib/I2Cscan/I2Cscan.bin index 6f9c5d42f48596380afb0545e6d285163ab08ab0..5a343cde231f87a9ae096358e2af8c5c57a377a6 100755 GIT binary patch delta 1960 zcmb`Idu&s66vxkR?V#;e)^0<(b;xZCrfY}mhGs7w-GjTX-RQ=mOF&`=D=8vd83SiD zX(uR>NCfUbfPff`g2PZ+moOeO1rkh#xl>6bK$y>~=;Cd%&|A8#p5I^+A;v$n$>(=^ z9^do3_jgZkkCwb&7Jx=zhH^l01^MD3;Gqw#q0lh3LyAW=5BK;NKk&$=`)2*;rjPXe z=Zk3kzc-64BcGCa1po}#z@CrR4g+CXo!n&?Ns7Xs>-X2fc^Wr!MY1ELfV(Q|#kEKN zn{rBJ<~FDP@W6|-PU|HPTyCbqL@ZpHVoAV)ZA$yH+2VdJn~Xg>9=aP8?aI<~Y8DL1 z*s}4`egkX9%y$!08LU4C=b>+FXs0BHol>fX98JO6x9)3Yp;eMRk>bqqkp)>Eda3lH z=Km_XfpL${neG;0?RM98XO3@csFD*DTJjnfS1eKbUAewJvZYrya+S(eq=kD|S=e+c zAwDtP2=h>5uXokE>+0FM=RMmbljoo(*W-Gj&RH!6H@Q}8T0wLqlCj&!>4bX}s-1T} zvQ|2)mfe!(zE@da<-R2`JqR~PRiybWv0uWYwH6LBJ`mH#IFHI0Fgwi-qo=|H;;O`D zAz-TTU<;GcY4m8=%d}kN;$S|*%h)W5SizDQqFY7;byNn)Sl`4!NoEULvv@FH;&m*D zi{l`cCbAtMKApfEfOuU3u`r>lpMjI2V+BOazRmm z*boM>L=0(b2xptIkc7AmGu8(}Sab%tGB`L$3}EzsqOac?BD>Vl>7bEF+4X*zC5>-7 zNs7M?%dIQIqeEcIa+v(GkpHZ|Hiz}*$;1qqtw?D#_*0`quD#Z>!0HFX&%)zc<&)8{ zJW5hWZqk~TziLLlwJiXH)&GqEf%BQTxdx$+x2pR{NM(_At9URjw~{^Oe2Z1jS6b6} zQ|R0;;@fprmT$J^^DQo&?_Q)Pk73ENWbA{9ZB-!d4U)aGY4+&OV58$FVJf#5bE#}0 zPmYlT$=L3R*RirEI2=AG$u)swZ2mZZa;f7>AsPFAtj6*8wy#V|GpY1YGS-DsA5ZoN zE$V9(jy|En5kb|5@$&nsvitTDIGAQiM888yvqAn1KGy-mTDF&KnlUTD3j^U~Oo(SXo)Iz~%}5jC7Jz9G=p5aZ z7}g=A8O}dr1eypp;HL6>(XhU*BfDstRzc0p& zyo$Z3l~C8brnQ~%wzq9k-Am>(^O?0Bo7>x%Ht&{oYrHCMU5;&9XJ<#J3b@{!H|*_Q z-cF`u^|~&mwXLnwy9tHO-u5n(Lrq7!m)hEnu5uO4Dz~)0XztFRG;R4b1MVCys1<9RL6T delta 1682 zcmb_bZA?>F7=918;B6^V`D_ct3l)RZ32Z+=@uSjmDJ`*nM7L}jiysV!Lo6<8vZeSr ze`q#5Gf|_7i~R6o(@J$Cnaq!c#2*?jn=V;0V;8es%viiEYH!=Y-Fv3QOtS39*5tX* zdEWaz&pCbD(=+>2bqE%NFlq)qj(GAC;H3}iVPIv(*Z7H^moxrFhbC+~koTWMCuIKf zAr}ANn?)9puSux@AV4KJZOBfz+RHWSd`^X=@Ez8Ujt02G>V>q5J4pn3mphBk9lBrj zi!v`fJz<XIqm>{jwxc7Pp?9paUTiXR03?W7}oKKX#^^$YZEK5OeiuKw;uxcDQ*9ylJb27K?hy)LDz)3?Ud49YJFE%tj-i(OCpAA`&L^o(P!ciy7=s`1mgP4oQs zRelG8Rv4;GtCL4n9HOIQP-q3^OpK<+q@+KlX!!* zE00tt`%2=(Y?U~mJUPg=jK~=y9B8rrvEwRN+2t@uP&Oc$MNrPgLHRzB=>g@t#ASIh z^6f;QOpWPA5wNTI$Y8+$8^c(Gq*mgxC;f5oYrFVwcT~^OXM(@7Q9>Uk>&CFt5{DJ zXG!EVIi|%N+Mc?%rD*SQRcF#-cSfZPwVpv)i*=9A33>h=n1{wRG3&W8Q`=kTm&nns z@{AuUJ$-Ve=L@v0NK`y`&3ew?_C|YC@HmG?p=?+p$6#iyREC4-j>F8Vdl@4Y_VLl5Muy;|&i zBG0o~&hugcdmmSIgsq*et^pBaZkmj<&`M{C?y)7SYW-%T{ z|FX5s?ZW!@b)5zPT4l|qF6*qU_ATp!LiL&rTZHCy>w@b$I}LQJb#GcQxG87=npu!b agvh)C7csNj6vEiWctV0-1g;ZQJp2h&!X#Y) diff --git a/F1-nolib/I2Cscan/main.c b/F1-nolib/I2Cscan/main.c index d0d376f..b57a7ba 100644 --- a/F1-nolib/I2Cscan/main.c +++ b/F1-nolib/I2Cscan/main.c @@ -80,8 +80,9 @@ int main(void){ int ok = scan_next_addr(&addr); if(addr == I2C_ADDREND) USB_send("Scan ends\n"); else if(ok){ - USB_send(u2str(addr)); - USB_send(" - found device\n"); + USB_send(u2hexstr(addr)); + USB_send(" ("); USB_send(u2str(addr)); + USB_send(") - found device\n"); } } char *txt, *ans; diff --git a/F1-nolib/I2Cscan/proto.c b/F1-nolib/I2Cscan/proto.c index 6cec1c4..4d261d6 100644 --- a/F1-nolib/I2Cscan/proto.c +++ b/F1-nolib/I2Cscan/proto.c @@ -153,17 +153,17 @@ char *getnum(const char *txt, uint32_t *N){ return nxt; } -static void displaydata(uint8_t *data, int N){ +static void displaydata(uint8_t *data, int start, int N){ if(N == 0){ USB_send("Done\n"); return; } - USB_send("Got: "); + USB_send("Got:\naddr\tval(x)\tval(d)\n"); for(int i = 0; i < N; ++i){ - USB_send(u2str(data[i])); - USB_send(" "); + USB_send(u2hexstr(i+start)); USB_send("\t"); + USB_send(u2hexstr(data[i])); USB_send("\t"); + USB_send(u2str(data[i])); USB_send("\n"); } - USB_send("\n"); } const char* helpmsg = @@ -208,7 +208,7 @@ const char *parse_cmd(const char *buf){ n = Num; if(ptr != getnum(ptr, &Num)){ if(Num > 128) return "Not more than 128 bytes\n"; - if(read_reg(n, data, Num)) displaydata(data, Num); + if(read_reg(n, data, Num)) displaydata(data, n, Num); else return "Error\n"; }else return "Need data amount to read\n"; }else return "Need register address\n"; @@ -258,3 +258,24 @@ char *i2str(int32_t i){ }else val = i; return _2str(val, minus); } + +char *u2hexstr(uint32_t val){ + static char strbuf[11] = "0x"; + char *sptr = strbuf + 2; + uint8_t *ptr = (uint8_t*)&val + 3; + int8_t i, j, z=1; + for(i = 0; i < 4; ++i, --ptr){ + if(*ptr == 0){ // omit leading zeros + if(i == 3) z = 0; + if(z) continue; + } + else z = 0; + for(j = 1; j > -1; --j){ + uint8_t half = (*ptr >> (4*j)) & 0x0f; + if(half < 10) *sptr++ = half + '0'; + else *sptr++ = half - 10 + 'a'; + } + } + *sptr = 0; + return strbuf; +} diff --git a/F1-nolib/I2Cscan/proto.h b/F1-nolib/I2Cscan/proto.h index 7665aa4..ab1f547 100644 --- a/F1-nolib/I2Cscan/proto.h +++ b/F1-nolib/I2Cscan/proto.h @@ -26,5 +26,6 @@ char *omit_spaces(const char *buf); char *getnum(const char *buf, uint32_t *N); char *u2str(uint32_t val); char *i2str(int32_t val); +char *u2hexstr(uint32_t val); #endif // PROTO_H__