From patchwork Mon Sep 5 20:43:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 12966537 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89651ECAAD5 for ; Mon, 5 Sep 2022 20:43:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230036AbiIEUna (ORCPT ); Mon, 5 Sep 2022 16:43:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229762AbiIEUn2 (ORCPT ); Mon, 5 Sep 2022 16:43:28 -0400 Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::228]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A749465645 for ; Mon, 5 Sep 2022 13:43:22 -0700 (PDT) Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 35A7A1BF207; Mon, 5 Sep 2022 20:43:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1662410601; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5dmr/bzmt973yT9b+06KOqqMsSYwtvcJBhkOV+yohms=; b=k+0cvhzpfbn/0Qfl6zdZCY2uW/NJUMcc4QWNVLtRiYkcLoiOI2ZAxot4dbqUjXi9Y5yFwR brq/KDVC4o8RbMCDOElpKSqUbiky0vrsyUuv1LKYknzxRZJWTnHYCi1rCRK7/Opyzgu92B TAEhKSgUqa2j+1rWonCUulabRxI0pmz6ZxL6+ja+HT4WoIX5pzoerGw0RFRMAJ7341V6cs 5jvyuNCqJunBc07oz9DxreffaEI3IFvvTGVnxg1Tc4IY9jKU8RotHjUDUkX3qRb+x2wmRO Au+EQ7Ey9/PW0b5qaL1zbmZXvG5KKQE7gy8WkAkGA8oFeXHhHENzPtpGGpOD9Q== From: Miquel Raynal To: werner@almesberger.net Cc: Stefan Schmidt , Alexander Aring , Thomas Petazzoni , linux-wpan@vger.kernel.org, Alexander Aring , Miquel Raynal Subject: [PATCH atusb/fw 2/2] atusb: fw: Provide TRAC status Date: Mon, 5 Sep 2022 22:43:18 +0200 Message-Id: <20220905204318.1324284-2-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220905204318.1324284-1-miquel.raynal@bootlin.com> References: <20220905204318.1324284-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-wpan@vger.kernel.org From: Alexander Aring Upon Tx done condition, returning the sequence number is useful but we might also return the TRAC value which is needed to ensure that the packet we sent got ACKed. The TRAC register just needs to be read when the TRX_END interrupt fires. We then need to send this information as part of the status message. First byte remains the sequence number for ensuring backward compatibility and a second byte is added to forward the TRAC register status. Signed-off-by: Alexander Aring [Miquel Raynal: Moved the data array out of the stack, wrote commit log] Signed-off-by: Miquel Raynal --- atusb/fw/.version | 1 + atusb/fw/app-atu2.d | 8 ++ atusb/fw/atusb.bin | Bin 0 -> 6536 bytes atusb/fw/atusb.d | 13 +++ atusb/fw/atusb.dfu | Bin 0 -> 6552 bytes atusb/fw/atusb.elf | Bin 0 -> 52324 bytes atusb/fw/board.d | 12 ++ atusb/fw/board_app.d | 13 +++ atusb/fw/board_atusb.d | 13 +++ atusb/fw/boot-atu2.d | 8 ++ atusb/fw/boot.d | 14 +++ atusb/fw/boot.elf | Bin 0 -> 36816 bytes atusb/fw/boot.hex | 259 +++++++++++++++++++++++++++++++++++++++++ atusb/fw/descr.d | 12 ++ atusb/fw/dfu.d | 11 ++ atusb/fw/dfu_common.d | 13 +++ atusb/fw/ep0.d | 20 ++++ atusb/fw/flash.d | 11 ++ atusb/fw/mac.c | 13 ++- atusb/fw/mac.d | 13 +++ atusb/fw/sernum.d | 11 ++ atusb/fw/spi.d | 8 ++ atusb/fw/usb.d | 8 ++ atusb/fw/version.c | 4 + atusb/fw/version.d | 5 + 25 files changed, 466 insertions(+), 4 deletions(-) create mode 100644 atusb/fw/.version create mode 100644 atusb/fw/app-atu2.d create mode 100755 atusb/fw/atusb.bin create mode 100644 atusb/fw/atusb.d create mode 100755 atusb/fw/atusb.dfu create mode 100755 atusb/fw/atusb.elf create mode 100644 atusb/fw/board.d create mode 100644 atusb/fw/board_app.d create mode 100644 atusb/fw/board_atusb.d create mode 100644 atusb/fw/boot-atu2.d create mode 100644 atusb/fw/boot.d create mode 100755 atusb/fw/boot.elf create mode 100644 atusb/fw/boot.hex create mode 100644 atusb/fw/descr.d create mode 100644 atusb/fw/dfu.d create mode 100644 atusb/fw/dfu_common.d create mode 100644 atusb/fw/ep0.d create mode 100644 atusb/fw/flash.d create mode 100644 atusb/fw/mac.d create mode 100644 atusb/fw/sernum.d create mode 100644 atusb/fw/spi.d create mode 100644 atusb/fw/usb.d create mode 100644 atusb/fw/version.c create mode 100644 atusb/fw/version.d diff --git a/atusb/fw/.version b/atusb/fw/.version new file mode 100644 index 0000000..6f4247a --- /dev/null +++ b/atusb/fw/.version @@ -0,0 +1 @@ +26 diff --git a/atusb/fw/app-atu2.d b/atusb/fw/app-atu2.d new file mode 100644 index 0000000..6a248fd --- /dev/null +++ b/atusb/fw/app-atu2.d @@ -0,0 +1,8 @@ +app-atu2.o: usb/atu2.c usb/usb.h board.h include/atusb/atusb.h board_atusb.h + +usb/atu2.c: +usb/usb.h: +board.h: +include/atusb/atusb.h: +board_atusb.h: + diff --git a/atusb/fw/atusb.bin b/atusb/fw/atusb.bin new file mode 100755 index 0000000000000000000000000000000000000000..5f3c76c20b9a71076a3c5b5dd27254d50e143fa7 GIT binary patch literal 6536 zcma)A3v^Rex;{ImBxy^MLZK}WlRhjhg(T&nPN#%7mUFB>-tXKsjQ>~iNBKD=uESje zpOUXSKkm#SyGfk%pS_qgsTuru@wJ6^-k35tbVsZi-gbFImQ`sg&e1$EtKw<3 zDi`Ilejo9~n$Ak(J5(7R9756VAy4bo?SU?q@MKxfWwazxE#1$Y5O$&>$6ObEy3vHl zFTJajK>dS0r(W|AQrA4VyQb5>R+<%9>K~{-4O9ZuQxA3{O7E9Yq}eBAe0agCu*5F6 zGoTS+rCRt6$8o(?nH8G_nz=-W=y=;9=9IKZ?b3d!Q(|FOUU&iR7IvXGgm#1?d#1;y zvl37xph`fM+EJ&lUuYLv1PAXp?BHE|zOqSd5!=Q6VyD<89v271VbLMEq(bt>j$F0$ z-D{J&o8O7v;9o#0zY87X+fhBgnPK?`=8d*5yA<>iswMS=+K5ToEy`^6X7mFhmO2n9^_0a3m%S%gYOcK3v^9Z1(R*>j@{Gr zE_kJ-l3xl)8>CHAdY=cRVTlOECQT?Y`Jx4y4Lmlfv%(!_UbxfDMB_R({Du|gnp*HRq=B<8bDa<*i+#4aDr7#0SEv`=gjHV6U1FDwX4)|C2g?%66~LVfqjBOPT};R7Z#e7TDij>7J& zf!JDC+^spqqfDvyGP0>Y;NJv%AMh(BN-wP0H&j>C=n$s6fj0wqZs1);ZqBMO(Py>I zr)d1&4DnxOZuv$T$pubvJ+dmz-;8p{W(v?qSdXwTN4Lv;pvh&l5?2#9_K}i``4xq8 zDl-bfcC18Y*yV-{*b&JtKbGYrRyFC>2)XYEKa1`1?Iu@%6^cyxd3zvd_)RX@!Ss%G zf#>z3HVo^>Fs`DYBG|*s%eUC{)rp=SH1B$gRl8k1pJW!ffOb~pl4w!BMbmo-13a7l zH}xDr^IVo1omrHVVbeE)r!dgNrag4zd6gtnz5b*QrX*;qjvP@Nfl6mEB~B*k3=in~ z75PcEA;r^{9J!zp(1gyRtAjnp{My_jm(*adAz%L}(bJ0-U2nOlf1Bd!>k4t8N3IW+u{9K)>h0uMSZpz(>L|ksxnUiD%bH`%OYKGd&V#S}deTURpjd~Zpi%roeLr7iPYXuHz7r}ppsDP!bCnT>jMkWR z#XBx^jntJ?m8RK}`m#!nfp1(ybwUd|itO^k*@cmmUr?{uc|JYz>fGLPlIHn^V8I1u ziY@@ZnYQ&&+D$;a(L9=!FQZEACM@;G3aO%m;5niNYc~*FC0Ycn*!VrAr&n;>$(5v( zj8}t3EpUpzLgPpF)?+zZ7k>^c} z-7<X| z6i)&hl&5r>3n1I5^fy~CNEFjwZBoJoJ&IvWwmv1{u9;h1Y-Dd+Vq&6+xED~Ve^i@D zA$)Dt8x2afeo1X4ML@~cSE!-XOq!-%Qk#u_HvL=pqWpP!_zE|v?pL=MnpA3A4W3Q= zyP8zp!gAyz?zKz&)B{eP7$hI4lOx-NokCueW+|K2rJDbd16gJf;G@NWk8)sl_A)`} z%}a~HPZpV-(o!=cEiu~zF8`D2gveIGF8{kF4qs0R6QUELJux~tGG3SlGO@2f3jzwV zsM`Vk?BJR?R`39ZSyyb+Vk&zgOgWw6F-vs1hko?GC#9iH3F)aR)O zRe>dM1508uA+kbP3oBlpx7rf^wo+Y&Z}oNS594~0Yj7q-AIBW=lY|Ea4{EC-X*f*l2VDhQyV) z2z+$CzIC-+{mAM6=(EcO*{pO5aH_`OT2|6Pu2Ve4gb6Es!#G8#=e?|S2KZ-~An@te zSp(6wKo1RiECyRHGP5UGX}Osq$n;p;$4Wmvn!7UkP8fZMF?t2$tkIL*PoaNSNHW}T zHrVqhhd zo*{Plyt*4KO?Q?Xu2MgT%rs5BUSx%HOcR`pX{55kAQOft8)TXx8`fENa$AhwUEDU~ zw>8wl(JW{gMb;xFUPC#=BY{+#WLACuVzB548m!oQ2HEAj9iw^N)w`WH5X72OL!f{ka#|(eQlbo z<^-KV3#&Dd*}iC{_Bkpra?_NkP5Co=66!7Wz0GTP`045F|7-V*p&cI10PU!xY7rv9 zh=TjURy51yT*-1v)m+F^xzP!cS&*|PLw=te4Nh&%v+7}Qt9Lx~o)9@BT!y$V6x`Av zlh#|PX#4<_6lQ~I*PHw^nQjUubOXIgyP7Rb6E*t@S6$-c>PvrW5rbe!sj-iy0@@D6vC zMW{E?Oz=}aoQ~wNHEt8Xfe-M0ekt!Ab6zE9HK_Oy&m4OuN)VjbtxBp2QontIqo?`D zvcgx;@e{bwOOYu>P3dfu>Yu8aBfZC9W=iv$!Z?+?#`b>Pi^+Q6?zOf2W<74HOq>tG zPH(fNd#1A%#Xqbt!^8_^rq;ZK#*@0fluz`d#J&IHPo3n;uqTi{!M~2O&rBJ~YphUe zYAQ}>tWXXJ{xuVwWv`8u{>zl^fA{HCq=?wYjB$#krZk?SXkj#mQf*oc3Ec2{@bMb} zpQdgVii#@--NH;06Wyn~uW_DC$nLCEYH~~EBYM4Va*8*YZdMtH1-fRs_SU?%K?8q} zIX~ok^CwS(I_)>z0G?F_=Yy;5Qs>+UQjD9jmZB6&9(U+q&R>p^d~emlq2Ed4d?U;^#(e+wWG6uM%1SA!kQhSw>WK*4D30Sw-#2NCbohjZ-ds+-t!&!;ftEE|{ zTB%~>e6*rx6)~S0^{D@gX46usJnA`4aRxkP@RY+d6P^mwX7V`f-8RrL_b@q0qmHeE zs7tb3lD7I-&Kb1J9Y$511GVl$_*xUYH?}&qGPbI^bymPWTg)o+NM^U z1ND#<=9uA57Itt|)*86^qZ*k9u4~5?f)`kz+-ei9G z9`2pKU|Ke^67-<3GEF1H~J8n)wh+Gl_*rt({vnOg8le`hEZvmK&2;~KUBO`u`RSKv_EukOL;?8 z!(9z)8=h`>zM-X|HC!7RT?5Uu^#1YQ8B7T~Y*NSB?|0F;>n8msqfm>$JoG+A@v^h6 z%Bxe~ow_nv}2gfW@i3H1$9h)$&1Q-w+Ecdk=jKC@uO=o5xa`d2HkN=3`$U zA9sv#Ptog@I%SjJs$3XKt>3DAiT(oTobTFx=o+V*|?-ZV{KsJY&8AELTnihUPz9HzJP!(B74W3KVfe4Wia0WqdwhN(W_uAYQo z96~lz5o1COn`<*e6L^dz1DmQD#%6{NKOlHrXJQ^@7!zYFbPNwy!x-rF)Ng<7ar@@G h|Ls@x&v@K(d~@bNtE$ph<@333xo!2&nT==)^S=}cX%PSb literal 0 HcmV?d00001 diff --git a/atusb/fw/atusb.d b/atusb/fw/atusb.d new file mode 100644 index 0000000..8ccacd3 --- /dev/null +++ b/atusb/fw/atusb.d @@ -0,0 +1,13 @@ +atusb.o: atusb.c usb/usb.h board.h include/atusb/atusb.h board_atusb.h \ + sernum.h spi.h include/atusb/ep0.h + +atusb.c: +usb/usb.h: +board.h: +include/atusb/atusb.h: +board_atusb.h: + +sernum.h: +spi.h: +include/atusb/ep0.h: + diff --git a/atusb/fw/atusb.dfu b/atusb/fw/atusb.dfu new file mode 100755 index 0000000000000000000000000000000000000000..77e203029cac8a291de0377dc6ba5333e47f9877 GIT binary patch literal 6552 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 z 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 IuUq>5C+-q^GXMYp literal 0 HcmV?d00001 diff --git a/atusb/fw/boot.hex b/atusb/fw/boot.hex new file mode 100644 index 0000000..10fa523 --- /dev/null +++ b/atusb/fw/boot.hex @@ -0,0 +1,259 @@ +:107000000C944C380C9469380C9469380C94693899 +:107010000C9469380C9469380C9469380C9469386C +:107020000C9469380C9469380C9469380C94DB3DE5 +:107030000C940D3E0C9469380C9469380C946938A2 +:107040000C9469380C9469380C9469380C9469383C +:107050000C9469380C9469380C9469380C9469382C +:107060000C9469380C9469380C9469380C9469381C +:107070000C9469380C9469380C9469380C9469380C +:107080000C9469380C9469380C9469380C946938FC +:107090000C9469380C94693811241FBECFEFD4E0EA +:1070A000DEBFCDBF11E0A0E0B1E0E6E9FFE702C03E +:1070B00005900D92A037B107D9F711E0A0E7B1E034 +:1070C00001C01D92AE3CB107E1F70E946B380C94F1 +:1070D000C93F0C940038DF93CF9300D0CDB7DEB713 +:1070E0001A8219820E944C3F0E94AB380E94893F4D +:1070F0000E948D3B81E085BF82E085BF789481E06E +:107100000E94C1382091620180E090E0A0E0B0E0F0 +:107110000FC080E090E0A0E0B0E002C02230D1F4E7 +:10712000E981FA81E491EF3FA1F30196A11DB11D20 +:107130008C3737EC93073CE0A30730E0B30771F7D7 +:1071400080E00E94C138F8940E94423FE0E0F0E005 +:107150000995FFCFFFCF14B817B81AB815B818B8EB +:107160001BB8269A3F9A249A0E94613F479885E06F +:10717000982F9A95F1F7479A8A95F1F70E947E3FEA +:107180000895882311F02E9A08952E980895F89462 +:1071900028EC30E02E9A88EE93E0F9013197F1F770 +:1071A0000197D9F72E9888EE93E0F9013197F1F71E +:1071B0000197D9F7EFCF80E090E041E2FC013E96E5 +:1071C00040935700E4919C01220F331F220F331F7D +:1071D000D90112965E2F52955F705A3010F4505DAF +:1071E00001C0595AA050BF4F5C932C5F3F4FEF70C6 +:1071F000EA3010F4E05D01C0E95AD901A050BF4F58 +:10720000EC9301968A309105C9F60895FA01D901E7 +:10721000833099F4662319F0613089F406C08AE25C +:1072200091E09183808384E005C080E091E09183C8 +:1072300080838AE28C9381E0089580E0089580E065 +:1072400008958093CE008091C80087FFFCCF809185 +:10725000CE000895599A08956623D9F01092CE0071 +:10726000262FFC0109C03091C80037FFFCCF3091B8 +:10727000CE0031931092CE002150A9F76150860FB5 +:10728000911D2091C80027FFFCCF2091CE00FC016A +:107290002083089510927001109271011092720172 +:1072A0001092730108959C0140E050E080917001BC +:1072B00090917101A0917201B0917301280F391F53 +:1072C0004A1F5B1F81E0213090E7390790E04907B2 +:1072D00090E0590708F080E008952F923F924F9276 +:1072E0005F926F927F928F929F92AF92BF92CF9256 +:1072F000DF92EF92FF920F931F93CF93DF93EB01F7 +:10730000A0907001B0907101C0907201D090730193 +:1073100090907401860175010894E11CF11C011D17 +:10732000111DA6019501DC013C01660E771E93E05C +:10733000892E5524539485E0482E44C0CA01B901D2 +:107340006F7770708070907061157105810591057F +:1073500039F4F90180925700E89507B600FCFDCF9B +:10736000C901817090706C91009769F0892D90E04F +:10737000362E222482299329F9010C0150925700BC +:10738000E895112401C0962EC801B7016F7770707F +:1073900080709070611571058105910549F4F701C0 +:1073A000E058F04040925700E89507B600FCFDCF4A +:1073B00011960894E11CF11C011D111D2F5F3F4F18 +:1073C0004F4F5F4FA615B70509F0B8CFCE01A0E02B +:1073D000B0E08A0D9B1DAC1DBD1D80937001909384 +:1073E0007101A0937201B093730190927401DF91C7 +:1073F000CF911F910F91FF90EF90DF90CF90BF90B2 +:10740000AF909F908F907F906F905F904F903F9044 +:107410002F9008958091700190917101A091720157 +:10742000B09173019C01AD012F77307040705070A6 +:10743000211531054105510549F0807825E0FC0111 +:1074400020935700E89507B600FCFDCF81E18093BB +:107450005700E8950895EF92FF920F931F93CF93F3 +:10746000DF93DC01E0907001F090710100917201F6 +:1074700010917301A801970108C0E491ED93615048 +:1074800070402F5F3F4F4F4F5F4FF901E901CE1919 +:10749000DF096115710541F0203080E8380780E090 +:1074A000480780E0580749F7209370013093710135 +:1074B0004093720150937301CE01DF91CF911F91E0 +:1074C0000F91FF90EF900895E0912E01F0912F0120 +:1074D000DC016D917C910480F581E02D88E791E0DD +:1074E000099508950895EF92FF920F931F93CF93FC +:1074F000DF93EC01398120E0888190E0822B932B8F +:1075000021E081329207A1F0E1E082329E072CF463 +:107510008132910509F0F3C0F6C0F2E0813A9F078D +:1075200009F47CC026E08132920709F0E8C0E1C08E +:1075300080916201823079F48A819B8190937601F7 +:1075400080937501E0912E01F0912F010190F0815F +:10755000E02D099503C0853009F0D7C08091620104 +:10756000823059F0809175019091760101972A81BE +:107570003B812817390709F4C6C02A813B818091D5 +:107580007501909176012817390709F074C00E80B3 +:10759000DF81C02DE0912E01F0912F01209759F449 +:1075A0000680F781E02D099582E08093620181E0F9 +:1075B00080937701ABC00280F381E02DCE01099565 +:1075C000882311F488E004C0C134D10528F08EE08E +:1075D00080935E0180E014C0D093B901C093B801DC +:1075E00083EC91E061E070E048E751E02C2F04E685 +:1075F0001AE338EBE32E31E0F32E0E94E93B81E001 +:1076000020917501309176012F5F3F4F30937601C5 +:107610002093750195E09093620178C0809162019A +:10762000823079F48A819B819093760180937501F1 +:10763000E0912E01F0912F010190F081E02D09954C +:1076400003C0893009F061C080916201823051F03D +:10765000809175019091760101972A813B812817CD +:10766000390749F02A813B8180917501909176011B +:107670002817390739F08AE0809362018EE0809301 +:107680005E0141C00E80DF81C02DC134D10520F0E4 +:107690008EE080935E0120C0E0912E01F0912F01D9 +:1076A0000084F185E02D88E791E0BE0109959C01F9 +:1076B0008C179D0720F482E08093620101C09E0137 +:1076C00083EC91E062E070E048E751E000E010E018 +:1076D000EE24FF240E94E93B809175019091760190 +:1076E0000196909376018093750189E08093620101 +:1076F0000AC082E08093620110925E0104C0CE0154 +:107700000E94A03B03C081E001C080E0DF91CF91E7 +:107710001F910F91FF90EF90089583E79AE3909364 +:10772000C2018093C1018AED9BE39093BC018093D9 +:10773000BB0182E79AE39093BE018093BD01089557 +:10774000EF92FF920F931F93FC01318120E0808123 +:1077500090E0822B932B24E08132920781F025E088 +:10776000813A920791F023E0813A9207E9F483ECA1 +:1077700091E062E070E04EE551E026E00DC082E06D +:107780008093620110925E010DC083EC91E062E093 +:1077900070E042E651E021E000E010E0EE24FF243A +:1077A0000E94E93B81E001C080E01F910F91FF90B2 +:1077B000EF900895813219F00E940639089584E609 +:1077C00091E0FA019183808389E0F901808381E06F +:1077D00008958F929F92AF92BF92CF92DF92EF92D5 +:1077E000FF920F931F93DF93CF930F92CDB7DEB726 +:1077F0004C015B016A01FC0180819181009721F0BD +:1078000029830E94C7382981F401B182A082D382E2 +:10781000C282C20ED11CD582C48210870783F28631 +:10782000E186C4010E94A93D0F90CF91DF911F9185 +:107830000F91FF90EF90DF90CF90BF90AF909F900F +:107840008F900895FF920F931F93DF93CF9300D0F3 +:107850000F92CDB7DEB7DC0111969C91119780E0B5 +:107860002C9130E0282B392B85E02030380709F4A3 +:1078700081C085E02130380714F581E020303807D9 +:1078800009F42EC181E0213038076CF4203831052D +:1078900009F451C0203831050CF419C123383105E1 +:1078A0000CF015C11FC181E0233038070CF41AC158 +:1078B000205033402330310508F009C113C188E05E +:1078C0002038380709F4ABC088E02138380784F441 +:1078D00086E0203838070CF4FAC086E022383807F2 +:1078E0000CF44DC087E02030380709F0F0C0FAC032 +:1078F0008AE02138380709F4F5C08AE022383807D1 +:1079000034F489E02030380709F0E1C0AFC08BE0E3 +:107910002130380731F08CE02238380709F0D7C021 +:10792000E1C020914E0130E0245B3E4F80E090E0CA +:10793000E5E5F1E0C8C016968D919C9117978230CD +:10794000910509F0CFC00DE611E08091C30190913F +:10795000C401009711F00E94C73882E090E0909334 +:10796000C4018093C3011093C6010093C5010E5F4B +:107970001F4F6BC012968C910E94913DB1C0129620 +:107980006C91129713968C91139716960D911C91EA +:107990001797813019F0823099F407C08AE391E09B +:1079A0009B838A8380913A0109C0662309F09AC0BB +:1079B0008CE491E09B838A8380914E01898311C07E +:1079C000E091BB01F091BC01309709F48BC0AE018E +:1079D0004E5F5F4F9E012F5F3F4F0995882309F44B +:1079E00081C0898190E00817190708F409830A818A +:1079F0001B81F9808091C3019091C401009711F01F +:107A00000E94C73882E090E09093C4018093C30144 +:107A10001093C6010093C5010F0D111D16C00FE68E +:107A200011E08091C3019091C401009711F00E9470 +:107A3000C73882E090E09093C4018093C301109313 +:107A4000C6010093C5010F5F1F4F1093C80100933B +:107A5000C7011092CB011092CA011092CD01109271 +:107A6000CC0183EC91E00E94A93D3AC020915101E4 +:107A700030E081E012964D915C91139742175307C5 +:107A800089F531C041814430D9F4628170E01496A7 +:107A90004D915C9115976417750789F4638170E0C7 +:107AA00012964D915C9113976417750741F4E0911C +:107AB000BF01F091C001309799F0099511C001966E +:107AC0004081E40FF11DE217F307E1F60BC0E091EE +:107AD000C101F091C201309729F0CD01099503C091 +:107AE00081E001C080E00F900F900F90CF91DF9167 +:107AF0001F910F91FF900895E1EFF0E02081308118 +:107B0000932F80E030E0282B392BC9010895809114 +:107B1000E80080FFFCCF8091E30080688093E30061 +:107B20000895EF92FF920F931F938093E30083ECED +:107B300091E062E070E040E050E020E007E81DE303 +:107B4000EE24FF240E94E93B1F910F91FF90EF90DC +:107B50000895FC01208131812230310569F4835C74 +:107B6000914063EA7BE80E94B73F8093E9008091EF +:107B7000F00081608093F00008951092E90089E0A0 +:107B80008093EB001092EC0080E38093ED008091F5 +:107B9000ED0082608093ED008091EE0087FFFCCFC6 +:107BA0008FE08093F0001092C4011092C30180E432 +:107BB0008093C90108951F920F920FB60F9211245E +:107BC0002F933F934F935F936F937F938F939F93E5 +:107BD000AF93BF93EF93FF938091E10083FF0CC0BD +:107BE000E091BD01F091BE01309709F009950E9426 +:107BF000BD3D87EF8093E100FF91EF91BF91AF9181 +:107C00009F918F917F916F915F914F913F912F91B4 +:107C10000F900FBE0F901F9018951F920F920FB6E6 +:107C20000F921124EF92FF920F931F932F933F9384 +:107C30004F935F936F937F938F939F93AF93BF9374 +:107C4000EF93FF93DF93CF93CDB7DEB72897DEBFD7 +:107C5000CDBF8091F40080FFFBC01092E9008091BD +:107C6000E80083FF3BC01092C4011092C3018091D1 +:107C7000F200883010F40E94C7388091F1008983A7 +:107C80008091F1008A830E947C3D9C838B830E94BB +:107C90007C3D9E838D830E947C3D98878F83CE019F +:107CA00001960E94223C882309F4BDC0898187FD8A +:107CB000C7C08091C3019091C401009709F0C0C072 +:107CC00083EC91E062E070E040E050E020E000E012 +:107CD00010E0EE24FF240E94E93BB2C08091E8004E +:107CE00082FF4EC08091C3019091C4018130910503 +:107CF00009F099C06091F200262F30E08091C70111 +:107D00009091C8014091C5015091C601841B950B0B +:107D1000821793070CF487C008C08091F10081930B +:107D2000F093C601E093C5016150E091C501F09167 +:107D3000C601662391F78091C7019091C801E817A9 +:107D4000F90709F081C01092C4011092C301E091BB +:107D5000CA01F091CB01309729F08091CC0190912C +:107D6000CD01099583EC91E062E070E040E050E0E5 +:107D700020E000E010E0EE24FF240E94E93B64C014 +:107D80008091E80081FF07C01092C4011092C301E6 +:107D90008DEF8093E8008091E80080FF59C08091CA +:107DA000C3019091C40182309105B9F58091C7015A +:107DB0002091C5019091C901821B981708F4892F61 +:107DC000982F0CC0E091C501F091C601219120933C +:107DD000F100F093C601E093C5019150992391F70A +:107DE0009091C901891721F01092C4011092C3012A +:107DF0008EEF8093E8008091C3019091C4010097B9 +:107E000039F5E091CA01F091CB01309709F18091E9 +:107E1000CC019091CD0109951BC08091F0008E7F1F +:107E20008093F00015C081EF8093E8001092C401A8 +:107E30001092C3018091EB0080628093EB0008C038 +:107E400087EF8093E8004ACF8BE78093E80098CFD4 +:107E50002896DEBFCDBFCF91DF91FF91EF91BF910B +:107E6000AF919F918F917F916F915F914F913F91D2 +:107E70002F911F910F91FF90EF900F900FBE0F90D9 +:107E80001F901895E0EEF0E080818160808380EDA6 +:107E900097E00197F1F7089514BEE0E6F0E08081E5 +:107EA0008061808380E18083E1E6F0E080E8808388 +:107EB00010820E94DB3808951092BA011092C90016 +:107EC0000895599A559A539A519A5298ECECF0E0C9 +:107ED0001182108280EC8093CA0088E18093C900EF +:107EE0001182108281E08093BA0108958091BA01D5 +:107EF000882311F40E94613F599808950E94763FAB +:107F000083EC0E94213984E00E9421390E942A39A1 +:107F100008958091D80080628093D80089B5837ECF +:107F200089BD89B5826089BD09B400FEFDCF80910D +:107F3000D8008F778093D8008091D8008068809394 +:107F4000D8008091D8008F7D8093D8008091E00088 +:107F50008E7F8093E00088E08093E2000E94BD3D28 +:107F6000089583E08093690081E08DBB08955527D3 +:107F7000002480FF02C0060E571F660F771F611591 +:107F8000710521F096958795009799F7952F802D8B +:067F90000895F894FFCFF4 +:107F96002A030000000000000000000000000000AE +:107FA60000000000000000000000000000000000CB +:107FB6000000000000000000000004030904300176 +:107FC6004A3953396D390A3A2B3A12010001FE003B +:107FD6000040B7204015010000000101090212000F +:107FE60001010080140904000000FE010200006483 +:107FF6000000020009210FFFFF4000010100000000 +:040000030000700089 +:00000001FF diff --git a/atusb/fw/descr.d b/atusb/fw/descr.d new file mode 100644 index 0000000..cccf24c --- /dev/null +++ b/atusb/fw/descr.d @@ -0,0 +1,12 @@ +descr.o: descr.c usb/usb.h usb/dfu.h usb/usb.h board.h \ + include/atusb/atusb.h board_atusb.h + +descr.c: +usb/usb.h: +usb/dfu.h: +usb/usb.h: +board.h: + +include/atusb/atusb.h: +board_atusb.h: + diff --git a/atusb/fw/dfu.d b/atusb/fw/dfu.d new file mode 100644 index 0000000..6e0954e --- /dev/null +++ b/atusb/fw/dfu.d @@ -0,0 +1,11 @@ +dfu.o: usb/dfu.c usb/usb.h usb/dfu.h board.h include/atusb/atusb.h \ + board_atusb.h + +usb/dfu.c: +usb/usb.h: +usb/dfu.h: +board.h: +include/atusb/atusb.h: + +board_atusb.h: + diff --git a/atusb/fw/dfu_common.d b/atusb/fw/dfu_common.d new file mode 100644 index 0000000..b3d986f --- /dev/null +++ b/atusb/fw/dfu_common.d @@ -0,0 +1,13 @@ +dfu_common.o: usb/dfu_common.c usb/usb.h usb/dfu.h board.h \ + include/atusb/atusb.h board_atusb.h usb/../sernum.h usb/../board.h + +usb/dfu_common.c: +usb/usb.h: +usb/dfu.h: +board.h: + +include/atusb/atusb.h: +board_atusb.h: +usb/../sernum.h: +usb/../board.h: + diff --git a/atusb/fw/ep0.d b/atusb/fw/ep0.d new file mode 100644 index 0000000..3c719ec --- /dev/null +++ b/atusb/fw/ep0.d @@ -0,0 +1,20 @@ +ep0.o: ep0.c usb/usb.h usb/dfu.h usb/usb.h include/at86rf230.h \ + include/atusb/ep0.h include/atusb/atusb.h version.h board.h \ + board_atusb.h sernum.h spi.h mac.h + +ep0.c: +usb/usb.h: +usb/dfu.h: +usb/usb.h: +include/at86rf230.h: + +include/atusb/ep0.h: +include/atusb/atusb.h: +version.h: +board.h: + +board_atusb.h: +sernum.h: +spi.h: +mac.h: + diff --git a/atusb/fw/flash.d b/atusb/fw/flash.d new file mode 100644 index 0000000..d8e5a90 --- /dev/null +++ b/atusb/fw/flash.d @@ -0,0 +1,11 @@ +flash.o: flash.c usb/dfu.h usb/usb.h board.h include/atusb/atusb.h \ + board_atusb.h + +flash.c: +usb/dfu.h: +usb/usb.h: +board.h: +include/atusb/atusb.h: + +board_atusb.h: + diff --git a/atusb/fw/mac.c b/atusb/fw/mac.c index 835002c..a520887 100644 --- a/atusb/fw/mac.c +++ b/atusb/fw/mac.c @@ -32,8 +32,8 @@ static uint8_t tx_buf[MAX_PSDU]; static uint8_t tx_size = 0; static bool txing = 0; static bool queued_tx_ack = 0; -static uint8_t next_seq, this_seq, queued_seq; - +static uint8_t next_seq, this_seq, queued_seq, queued_tx_trac; +static uint8_t data[2]; /* ----- Receive buffer management ----------------------------------------- */ @@ -65,7 +65,9 @@ static void usb_next(void) } if (queued_tx_ack) { - usb_send(&eps[1], &queued_seq, 1, tx_ack_done, NULL); + data[0] = queued_seq; + data[1] = reg_read(REG_TRX_STATE); + usb_send(&eps[1], data, 2, tx_ack_done, NULL); queued_tx_ack = 0; } } @@ -124,10 +126,13 @@ static bool handle_irq(void) if (txing) { if (eps[1].state == EP_IDLE) { - usb_send(&eps[1], &this_seq, 1, tx_ack_done, NULL); + data[0] = this_seq; + data[1] = reg_read(REG_TRX_STATE); + usb_send(&eps[1], data, 2, tx_ack_done, NULL); } else { queued_tx_ack = 1; queued_seq = this_seq; + queued_tx_trac = reg_read(REG_TRX_STATE); } txing = 0; return 1; diff --git a/atusb/fw/mac.d b/atusb/fw/mac.d new file mode 100644 index 0000000..aa43423 --- /dev/null +++ b/atusb/fw/mac.d @@ -0,0 +1,13 @@ +mac.o: mac.c usb/usb.h include/at86rf230.h spi.h board.h \ + include/atusb/atusb.h board_atusb.h mac.h + +mac.c: +usb/usb.h: +include/at86rf230.h: +spi.h: +board.h: + +include/atusb/atusb.h: +board_atusb.h: +mac.h: + diff --git a/atusb/fw/sernum.d b/atusb/fw/sernum.d new file mode 100644 index 0000000..8c04153 --- /dev/null +++ b/atusb/fw/sernum.d @@ -0,0 +1,11 @@ +sernum.o: sernum.c usb/usb.h board.h include/atusb/atusb.h board_atusb.h \ + sernum.h + +sernum.c: +usb/usb.h: +board.h: +include/atusb/atusb.h: +board_atusb.h: + +sernum.h: + diff --git a/atusb/fw/spi.d b/atusb/fw/spi.d new file mode 100644 index 0000000..fa0b3ef --- /dev/null +++ b/atusb/fw/spi.d @@ -0,0 +1,8 @@ +spi.o: spi.c board.h include/atusb/atusb.h board_atusb.h spi.h + +spi.c: +board.h: +include/atusb/atusb.h: +board_atusb.h: +spi.h: + diff --git a/atusb/fw/usb.d b/atusb/fw/usb.d new file mode 100644 index 0000000..e420d8e --- /dev/null +++ b/atusb/fw/usb.d @@ -0,0 +1,8 @@ +usb.o: usb/usb.c usb/usb.h board.h include/atusb/atusb.h board_atusb.h + +usb/usb.c: +usb/usb.h: +board.h: +include/atusb/atusb.h: +board_atusb.h: + diff --git a/atusb/fw/version.c b/atusb/fw/version.c new file mode 100644 index 0000000..f58413c --- /dev/null +++ b/atusb/fw/version.c @@ -0,0 +1,4 @@ +/* MACHINE-GENERATED. DO NOT EDIT ! */ +#include "version.h" +const char *build_date = "lun. 05 sept. 2022 05:10:00 CEST"; +const uint16_t build_number = 26; diff --git a/atusb/fw/version.d b/atusb/fw/version.d new file mode 100644 index 0000000..aafbf8c --- /dev/null +++ b/atusb/fw/version.d @@ -0,0 +1,5 @@ +version.o: version.c version.h + +version.c: +version.h: +