mirror of
https://github.com/hathach/tinyusb.git
synced 2025-05-08 23:01:36 +08:00
Compare commits
5292 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
542e5b4550 | ||
![]() |
a05fc50461 | ||
![]() |
fb2214dea6 | ||
![]() |
809af3e74c | ||
![]() |
bc37ed6e3e | ||
![]() |
1a783b3573 | ||
![]() |
2abd3c54c4 | ||
![]() |
e7d4b5c9e7 | ||
![]() |
fc43eeddf2 | ||
![]() |
42d4f7c81e | ||
![]() |
2c1414b4c1 | ||
![]() |
a22e45b816 | ||
![]() |
0937a2b2d3 | ||
![]() |
b5d4d0f623 | ||
![]() |
b5b7a4be60 | ||
![]() |
093720f60b | ||
![]() |
0f784e8a07 | ||
![]() |
1afe8a0039 | ||
![]() |
89f8d0cffb | ||
![]() |
736b1d50bc | ||
![]() |
8b3c558881 | ||
![]() |
9a1f690ec4 | ||
![]() |
a2da575793 | ||
![]() |
741cb3cf02 | ||
![]() |
b632686f54 | ||
![]() |
b6170c965f | ||
![]() |
8f9ef7dfbe | ||
![]() |
940fe43e68 | ||
![]() |
7ba63a6302 | ||
![]() |
3c4e6a779d | ||
![]() |
9f096ac56b | ||
![]() |
18d7a993be | ||
![]() |
5725d33121 | ||
![]() |
56ed51c8fb | ||
![]() |
b3a9b6e37f | ||
![]() |
5572168994 | ||
![]() |
d51863d1a0 | ||
![]() |
1efc9007b2 | ||
![]() |
b3d20442e2 | ||
![]() |
4c6736c277 | ||
![]() |
8111e53ff0 | ||
![]() |
2fd0301f0e | ||
![]() |
b7a26cc33c | ||
![]() |
e44f556a95 | ||
![]() |
ee1a5dbac0 | ||
![]() |
91163c9217 | ||
![]() |
1b888a3311 | ||
![]() |
b6abc9022a | ||
![]() |
7134109973 | ||
![]() |
3fd7854a91 | ||
![]() |
ba45625ea4 | ||
![]() |
5c7ca2acad | ||
![]() |
e8a84f9076 | ||
![]() |
edbea218b9 | ||
![]() |
46d2d4199e | ||
![]() |
0220852a6e | ||
![]() |
d4983acd3a | ||
![]() |
3851c7c97a | ||
![]() |
9eb0ae7636 | ||
![]() |
b1eedf4d1d | ||
![]() |
eea42fd119 | ||
![]() |
ccb34dbbdb | ||
![]() |
f479b02ea6 | ||
![]() |
e426c8c876 | ||
![]() |
7ef17a85cb | ||
![]() |
4d601545eb | ||
![]() |
0d2c08efd7 | ||
![]() |
62d06e7b19 | ||
![]() |
384e191fdc | ||
![]() |
de5cc0b830 | ||
![]() |
cea2c97248 | ||
![]() |
bfe08176e5 | ||
![]() |
d039d54a89 | ||
![]() |
6689a0142d | ||
![]() |
af0c47e06e | ||
![]() |
5e4decb4a3 | ||
![]() |
aecfd3433c | ||
![]() |
937b07cdc0 | ||
![]() |
925010fd84 | ||
![]() |
2064ee470d | ||
![]() |
72357cdb20 | ||
![]() |
2aff61ccb3 | ||
![]() |
3acaffd64d | ||
![]() |
084c0802c3 | ||
![]() |
6607b76c76 | ||
![]() |
1be4171d2a | ||
![]() |
7d8433abab | ||
![]() |
865e3488f9 | ||
![]() |
1f2f92d97a | ||
![]() |
b4252c426f | ||
![]() |
42213eff2b | ||
![]() |
255ccf26ea | ||
![]() |
60e6d53d10 | ||
![]() |
4787cd5f54 | ||
![]() |
8c1802e41d | ||
![]() |
5531de4f2c | ||
![]() |
e511d00f34 | ||
![]() |
901ce2ad93 | ||
![]() |
1615120bca | ||
![]() |
69dca9518c | ||
![]() |
73e810a7ba | ||
![]() |
99673cdbb8 | ||
![]() |
65e01fff2e | ||
![]() |
b99b811308 | ||
![]() |
1fd5c12316 | ||
![]() |
875e645b32 | ||
![]() |
db537861b2 | ||
![]() |
9f541a3d96 | ||
![]() |
cf76af1056 | ||
![]() |
3324a327cb | ||
![]() |
b0def52f45 | ||
![]() |
e54753814b | ||
![]() |
4b46493cb4 | ||
![]() |
c2924c51fc | ||
![]() |
05e4f8b777 | ||
![]() |
62f00bdf5d | ||
![]() |
5ecea4eefe | ||
![]() |
31b3a2f63b | ||
![]() |
40ddf0628a | ||
![]() |
e0df20f260 | ||
![]() |
e9a1be7e02 | ||
![]() |
585bcbfcdd | ||
![]() |
de45e4b01a | ||
![]() |
ca750313b2 | ||
![]() |
5333d042f9 | ||
![]() |
b80800f182 | ||
![]() |
f01c4be350 | ||
![]() |
cf94b3f5fc | ||
![]() |
dc45903161 | ||
![]() |
683b1e9702 | ||
![]() |
02a630b3da | ||
![]() |
29ffd57237 | ||
![]() |
8f288e96a8 | ||
![]() |
5342f1255a | ||
![]() |
334ac80726 | ||
![]() |
fd3290cbd1 | ||
![]() |
65e44e0a51 | ||
![]() |
ee234a84ca | ||
![]() |
39e6375b74 | ||
![]() |
102c1991d0 | ||
![]() |
3ea71b67b1 | ||
![]() |
8c0c21189c | ||
![]() |
6bba41045a | ||
![]() |
7dbad0a23e | ||
![]() |
51cfae6e97 | ||
![]() |
5f447b76ad | ||
![]() |
93ff3daa11 | ||
![]() |
a29e11404d | ||
![]() |
c1df796a7c | ||
![]() |
72b1fc50e5 | ||
![]() |
720697b6ae | ||
![]() |
d132044b75 | ||
![]() |
56e84bd1a6 | ||
![]() |
8c70475c23 | ||
![]() |
71e046d9ff | ||
![]() |
b12c8a9012 | ||
![]() |
6ebd362cfd | ||
![]() |
1cfc88dbcb | ||
![]() |
61aab7a86a | ||
![]() |
cafc788508 | ||
![]() |
6572c1da0d | ||
![]() |
70ddb7a867 | ||
![]() |
27a4895b79 | ||
![]() |
48a43a675c | ||
![]() |
792a446405 | ||
![]() |
18d566b94c | ||
![]() |
aa860041b8 | ||
![]() |
997771fdba | ||
![]() |
9d2fd6c4ac | ||
![]() |
31a2696de7 | ||
![]() |
ed88fc983f | ||
![]() |
bad6cbe489 | ||
![]() |
e0b192b633 | ||
![]() |
86d371fb79 | ||
![]() |
7c405236cf | ||
![]() |
294fb268d7 | ||
![]() |
85247e50dd | ||
![]() |
87adc63226 | ||
![]() |
14f1feac84 | ||
![]() |
5afcfb7522 | ||
![]() |
3560ed3d98 | ||
![]() |
f1ce4918c2 | ||
![]() |
5a39bcf79c | ||
![]() |
bb48e6acc8 | ||
![]() |
f23bef5fd8 | ||
![]() |
457c2b55da | ||
![]() |
24b2abbb05 | ||
![]() |
1208f88b6e | ||
![]() |
09bce3532c | ||
![]() |
35e9f03324 | ||
![]() |
a232644cbd | ||
![]() |
cd0ca4832d | ||
![]() |
3ffe8dbfee | ||
![]() |
2a3025eaa5 | ||
![]() |
7df510ecc9 | ||
![]() |
9c093a30f4 | ||
![]() |
7282572a56 | ||
![]() |
169d2d7a1f | ||
![]() |
99b6e97080 | ||
![]() |
efd2934919 | ||
![]() |
f7fa4d0edb | ||
![]() |
eca025f714 | ||
![]() |
67f0d610e5 | ||
![]() |
0d4f945bdc | ||
![]() |
882cb1406d | ||
![]() |
7641060252 | ||
![]() |
37e6f49619 | ||
![]() |
f6f02f1893 | ||
![]() |
8c7998b0e9 | ||
![]() |
6b3a5957c2 | ||
![]() |
dc514c6230 | ||
![]() |
1003aba690 | ||
![]() |
13856af935 | ||
![]() |
b53801a8ac | ||
![]() |
201b9707b9 | ||
![]() |
5ca3822830 | ||
![]() |
9f45e25b1c | ||
![]() |
0162d6ab32 | ||
![]() |
31071ccf0e | ||
![]() |
597446fbea | ||
![]() |
19d28a9d15 | ||
![]() |
bd08753583 | ||
![]() |
586d284e6b | ||
![]() |
feb41eeceb | ||
![]() |
6080f89f3d | ||
![]() |
91214b4614 | ||
![]() |
c8130afe9b | ||
![]() |
2d7d1070fc | ||
![]() |
786aa2cd1c | ||
![]() |
5b32df5abd | ||
![]() |
2109b801d4 | ||
![]() |
6476ff1241 | ||
![]() |
b91d5ebb45 | ||
![]() |
880aae4be2 | ||
![]() |
76fe0393ed | ||
![]() |
e889c0b51e | ||
![]() |
679065c3d6 | ||
![]() |
19b6baa455 | ||
![]() |
2495563600 | ||
![]() |
de38e53271 | ||
![]() |
29f226c2fb | ||
![]() |
824793a428 | ||
![]() |
6a36c74b10 | ||
![]() |
655092d568 | ||
![]() |
a4169114ec | ||
![]() |
6e11406831 | ||
![]() |
0192b2a9b0 | ||
![]() |
f409472998 | ||
![]() |
8907a817a2 | ||
![]() |
99e6b32a7d | ||
![]() |
8022477031 | ||
![]() |
86ad6e56c1 | ||
![]() |
ab9472f584 | ||
![]() |
5c4e4b1bc2 | ||
![]() |
eb1c2b83ef | ||
![]() |
b029c94035 | ||
![]() |
7e59b595f4 | ||
![]() |
15b1623aa3 | ||
![]() |
7c1afa837a | ||
![]() |
22a6777c2d | ||
![]() |
a39e30db92 | ||
![]() |
b1eae1e5e4 | ||
![]() |
f74ee9c4ed | ||
![]() |
73ec14d926 | ||
![]() |
7e207e4f4a | ||
![]() |
656772fc9d | ||
![]() |
8eeddaab36 | ||
![]() |
380bfc0a63 | ||
![]() |
ad0ac6780d | ||
![]() |
0785daecc1 | ||
![]() |
c79890c359 | ||
![]() |
4b39ecc519 | ||
![]() |
ec2f2f3523 | ||
![]() |
4d1f945096 | ||
![]() |
ec1c8b99e2 | ||
![]() |
f294400a11 | ||
![]() |
8f2b1bc7b9 | ||
![]() |
69dd473a4c | ||
![]() |
aa1bab769a | ||
![]() |
91799b0df5 | ||
![]() |
7c7b30f0ae | ||
![]() |
62f8aac382 | ||
![]() |
f0dd198462 | ||
![]() |
29fa07d2ad | ||
![]() |
d502a0c481 | ||
![]() |
b5e84d26c2 | ||
![]() |
cb22301f91 | ||
![]() |
ed4b1a9b68 | ||
![]() |
6cc2c98daf | ||
![]() |
3f335df508 | ||
![]() |
310b8657f0 | ||
![]() |
eabf68bd91 | ||
![]() |
3653c23240 | ||
![]() |
df91c12ab2 | ||
![]() |
0d9a24c416 | ||
![]() |
f934224351 | ||
![]() |
0bca377d52 | ||
![]() |
0074ed7c67 | ||
![]() |
ae4373d875 | ||
![]() |
f2ed60e9fc | ||
![]() |
3351c366ab | ||
![]() |
c41d9db3b1 | ||
![]() |
486e14ea9b | ||
![]() |
2179fb1bd9 | ||
![]() |
444277f4a2 | ||
![]() |
ecc65a86c8 | ||
![]() |
239443c197 | ||
![]() |
741fdaaee7 | ||
![]() |
6b36df3e39 | ||
![]() |
c6dccffa2d | ||
![]() |
79373afaaf | ||
![]() |
7f61a5a43b | ||
![]() |
3142927114 | ||
![]() |
c514a8c879 | ||
![]() |
3cacb01459 | ||
![]() |
4212db1b83 | ||
![]() |
5bb90efd5f | ||
![]() |
f090b64227 | ||
![]() |
568c785da1 | ||
![]() |
dbc2c8d972 | ||
![]() |
2732aff7dd | ||
![]() |
ae7cdcd070 | ||
![]() |
d9ef3cd1b3 | ||
![]() |
9e4b855e53 | ||
![]() |
453d69517b | ||
![]() |
63771086d9 | ||
![]() |
123f1affb7 | ||
![]() |
67e92e6688 | ||
![]() |
f7efcf3c47 | ||
![]() |
e9a3f88894 | ||
![]() |
d9f3e7dd25 | ||
![]() |
a5f9947a20 | ||
![]() |
be25aa31f6 | ||
![]() |
62f0e87bf1 | ||
![]() |
833eb7d22d | ||
![]() |
66741e35c2 | ||
![]() |
c09eedaf24 | ||
![]() |
07d47ba487 | ||
![]() |
5c18a32aaa | ||
![]() |
1eb72af433 | ||
![]() |
7831af3ccf | ||
![]() |
8a5c118a66 | ||
![]() |
1533e693ee | ||
![]() |
090964cd1b | ||
![]() |
f148670753 | ||
![]() |
f252ab4364 | ||
![]() |
01df8c36de | ||
![]() |
85e54b0fc3 | ||
![]() |
c370c70bbe | ||
![]() |
34346d61f0 | ||
![]() |
dbdc5a239c | ||
![]() |
5d77faa835 | ||
![]() |
fa523a5682 | ||
![]() |
2571889061 | ||
![]() |
c61b55b191 | ||
![]() |
b3b8bd88cb | ||
![]() |
4da5de707b | ||
![]() |
43a45f29cd | ||
![]() |
b8d31a59ee | ||
![]() |
9e674d4fae | ||
![]() |
3fe7e612c8 | ||
![]() |
ac9bc01132 | ||
![]() |
6d4a60d8ac | ||
![]() |
d37707d6dd | ||
![]() |
dab600bea2 | ||
![]() |
b3efa8eb6a | ||
![]() |
fee5ee6f0a | ||
![]() |
a2ab783db7 | ||
![]() |
db7670a3bc | ||
![]() |
c291b831e8 | ||
![]() |
a780071d20 | ||
![]() |
a68c53fb8e | ||
![]() |
daef846aa7 | ||
![]() |
0569188aed | ||
![]() |
394045f596 | ||
![]() |
7e1c91fac2 | ||
![]() |
0af07f1cff | ||
![]() |
6f11f99f98 | ||
![]() |
401a704804 | ||
![]() |
98bc480f73 | ||
![]() |
202aaa49ad | ||
![]() |
3ee3658dad | ||
![]() |
9ff02daa56 | ||
![]() |
6776c7171e | ||
![]() |
42ead3a8e0 | ||
![]() |
aeae2966a2 | ||
![]() |
839ec17292 | ||
![]() |
e391e33492 | ||
![]() |
3a89442dba | ||
![]() |
65e741937a | ||
![]() |
3c564fd947 | ||
![]() |
d8970506a6 | ||
![]() |
57c8c223e5 | ||
![]() |
13f78e2e77 | ||
![]() |
a8903d3152 | ||
![]() |
fde947b124 | ||
![]() |
449753ae69 | ||
![]() |
9d86ca1777 | ||
![]() |
3831786ede | ||
![]() |
c8d104fb47 | ||
![]() |
5d00488907 | ||
![]() |
f5c5aaf017 | ||
![]() |
4f11243d30 | ||
![]() |
8174ab0640 | ||
![]() |
ab8160a29b | ||
![]() |
48b32f5d1e | ||
![]() |
9920ebff4a | ||
![]() |
4baeeeb564 | ||
![]() |
772edf879b | ||
![]() |
e5c26924ed | ||
![]() |
fe79a93594 | ||
![]() |
fbc193647a | ||
![]() |
372db1e19a | ||
![]() |
5f891e020c | ||
![]() |
29262f3e24 | ||
![]() |
80ad7c4e87 | ||
![]() |
cdc98e12c1 | ||
![]() |
ed8d2c9594 | ||
![]() |
54df3b2e94 | ||
![]() |
5d6d905cb0 | ||
![]() |
56f53a6132 | ||
![]() |
038be21e4d | ||
![]() |
b648a38ae8 | ||
![]() |
a0f75e5b67 | ||
![]() |
c96e04159e | ||
![]() |
4f288c030a | ||
![]() |
b1182de872 | ||
![]() |
b7ff10f59c | ||
![]() |
4c8ce9733a | ||
![]() |
f7f80e844c | ||
![]() |
9afa64014c | ||
![]() |
9897a36ac4 | ||
![]() |
92e7ac6c23 | ||
![]() |
b89fa89779 | ||
![]() |
80d8157048 | ||
![]() |
5d74fb43b3 | ||
![]() |
3c1cb0e08f | ||
![]() |
616b5770f2 | ||
![]() |
074811c251 | ||
![]() |
df55d587df | ||
![]() |
1e164412bf | ||
![]() |
cef9bab4b5 | ||
![]() |
4797c4f508 | ||
![]() |
c93d3eda5f | ||
![]() |
f953b6bf92 | ||
![]() |
dd99da9dce | ||
![]() |
79c0a249e8 | ||
![]() |
77fa2f6701 | ||
![]() |
07abc722b6 | ||
![]() |
063661e3a3 | ||
![]() |
8461525d48 | ||
![]() |
f5978876d2 | ||
![]() |
ebcd7067c9 | ||
![]() |
61b33ca926 | ||
![]() |
42b6f30eda | ||
![]() |
b5a4f18879 | ||
![]() |
8d9d3d9a2a | ||
![]() |
970a03e398 | ||
![]() |
8b1e40c3e2 | ||
![]() |
87a35c5734 | ||
![]() |
1b17bc04f9 | ||
![]() |
047ba0a62d | ||
![]() |
4012e15075 | ||
![]() |
10a3aa3cc8 | ||
![]() |
933ac29d77 | ||
![]() |
e83e08343a | ||
![]() |
1f18be93db | ||
![]() |
1587d48e89 | ||
![]() |
f3b7d7515e | ||
![]() |
d997f0071e | ||
![]() |
92602b9de3 | ||
![]() |
a4fb8354e4 | ||
![]() |
57aac432b5 | ||
![]() |
ffdf81f53a | ||
![]() |
1406ad84e3 | ||
![]() |
ba3a5b4374 | ||
![]() |
c3437961b8 | ||
![]() |
98e94a5d6d | ||
![]() |
07c14f30a6 | ||
![]() |
599bb0c822 | ||
![]() |
b2a98eadab | ||
![]() |
cb5e273e9a | ||
![]() |
65242fd11f | ||
![]() |
a13dbd4452 | ||
![]() |
ad362c8ac4 | ||
![]() |
3d3dcb1ee9 | ||
![]() |
6bfd024137 | ||
![]() |
4e0d5343b4 | ||
![]() |
31c123aa32 | ||
![]() |
73f7ce7103 | ||
![]() |
0abd6474d9 | ||
![]() |
790a107287 | ||
![]() |
7cdab1c94b | ||
![]() |
06347661de | ||
![]() |
072a80d088 | ||
![]() |
5a5dbfc8c6 | ||
![]() |
1b295de9ad | ||
![]() |
db15f63736 | ||
![]() |
3fa7da95bd | ||
![]() |
eda3cceab2 | ||
![]() |
49d250be8f | ||
![]() |
ad6e1ec782 | ||
![]() |
53989a99f6 | ||
![]() |
254167bdbd | ||
![]() |
d6c8719bcb | ||
![]() |
fa44923de1 | ||
![]() |
4617fb5229 | ||
![]() |
4c81d91a73 | ||
![]() |
87f1993304 | ||
![]() |
67e5577b42 | ||
![]() |
7e472fa3ca | ||
![]() |
bb2d1dd0c1 | ||
![]() |
47233f863a | ||
![]() |
e209acb8d3 | ||
![]() |
c8ab65fbb6 | ||
![]() |
e483c6a2ad | ||
![]() |
6a15e7875c | ||
![]() |
a1244381b3 | ||
![]() |
86b4608365 | ||
![]() |
40b55170c8 | ||
![]() |
9bfb3e7787 | ||
![]() |
616532892d | ||
![]() |
f4dd176484 | ||
![]() |
2c27f29f71 | ||
![]() |
5217cee5de | ||
![]() |
115b1bb71e | ||
![]() |
3ff128bacf | ||
![]() |
c419b1e7c5 | ||
![]() |
91c8700a9f | ||
![]() |
013b4488b0 | ||
![]() |
4b107a2b9e | ||
![]() |
9b4bb61cbd | ||
![]() |
7909a62569 | ||
![]() |
dd1822ba03 | ||
![]() |
3ab63fbc65 | ||
![]() |
7373a02396 | ||
![]() |
bbeae09259 | ||
![]() |
cc816dc9c0 | ||
![]() |
c0030810dd | ||
![]() |
867f17acea | ||
![]() |
7867464694 | ||
![]() |
3eea46056e | ||
![]() |
55951b71ae | ||
![]() |
0bb7b992d8 | ||
![]() |
6935c66309 | ||
![]() |
fc07df320b | ||
![]() |
dde81f8f03 | ||
![]() |
8ab1e4fbd0 | ||
![]() |
4349e99fb2 | ||
![]() |
ee551909b2 | ||
![]() |
8eb3bd213f | ||
![]() |
12f5a6edbe | ||
![]() |
29e025cbf5 | ||
![]() |
cef4c466b3 | ||
![]() |
64e62bad0d | ||
![]() |
6890975f80 | ||
![]() |
ed0d58749d | ||
![]() |
1d2c9f929d | ||
![]() |
f73964e3e5 | ||
![]() |
669f341b0b | ||
![]() |
0d542a0bdc | ||
![]() |
973cbd3338 | ||
![]() |
59883237f7 | ||
![]() |
9985b9faf4 | ||
![]() |
6fdf206f11 | ||
![]() |
72ee3b4f48 | ||
![]() |
c46adc7ba8 | ||
![]() |
29d4c82efb | ||
![]() |
cefee1a743 | ||
![]() |
27ddf19631 | ||
![]() |
c7851e8dcb | ||
![]() |
5bb2e66ce7 | ||
![]() |
4485bffd13 | ||
![]() |
45d06cd4ab | ||
![]() |
ccf886ca80 | ||
![]() |
0db42aac71 | ||
![]() |
858ad66c93 | ||
![]() |
6118700828 | ||
![]() |
5f519819ba | ||
![]() |
0541598d07 | ||
![]() |
ea4f9ceb58 | ||
![]() |
215832397b | ||
![]() |
088486186f | ||
![]() |
ca3925a4c5 | ||
![]() |
635bdc1fce | ||
![]() |
0c9d7a2185 | ||
![]() |
8fdd8d9a7b | ||
![]() |
e345380723 | ||
![]() |
76eb2f5066 | ||
![]() |
fe7ffc8eda | ||
![]() |
123830c1f0 | ||
![]() |
a6bee747b6 | ||
![]() |
993473312b | ||
![]() |
e9109f36ba | ||
![]() |
eaf9cc1beb | ||
![]() |
c34d5e7a71 | ||
![]() |
8e3093e06f | ||
![]() |
802713523e | ||
![]() |
33e3ea3645 | ||
![]() |
6152adb17f | ||
![]() |
06e52e4fb2 | ||
![]() |
7d8d364332 | ||
![]() |
e339702a2a | ||
![]() |
a9df933e0d | ||
![]() |
1402e6ec0d | ||
![]() |
0be427bae9 | ||
![]() |
f6b96f7ea9 | ||
![]() |
761399b5e0 | ||
![]() |
b8d3c0c4a8 | ||
![]() |
9d8052b5da | ||
![]() |
86419df42c | ||
![]() |
0f732a2f8b | ||
![]() |
5f8599f6d4 | ||
![]() |
5254065976 | ||
![]() |
f23170786a | ||
![]() |
61725a5263 | ||
![]() |
45f50ebaa8 | ||
![]() |
ad411b6c25 | ||
![]() |
96c5c72e97 | ||
![]() |
f565267daf | ||
![]() |
549f20d179 | ||
![]() |
5666aa196f | ||
![]() |
ac1fd32666 | ||
![]() |
a621c4b6fc | ||
![]() |
7a9ef9e7bd | ||
![]() |
9ee7d1b77e | ||
![]() |
8b88749223 | ||
![]() |
2871bb0da6 | ||
![]() |
c07928e1b3 | ||
![]() |
18b5affce9 | ||
![]() |
e8f42df97a | ||
![]() |
b786d6f4e6 | ||
![]() |
ea64dd4999 | ||
![]() |
643a26ca8d | ||
![]() |
00eb0144cb | ||
![]() |
dcd0f39b53 | ||
![]() |
e7e6fe7cd5 | ||
![]() |
c3f3465a40 | ||
![]() |
0d44977b54 | ||
![]() |
1ea38ebe13 | ||
![]() |
bd64625df2 | ||
![]() |
57c26fdc72 | ||
![]() |
3a22163067 | ||
![]() |
0860cd3b5e | ||
![]() |
d680424f62 | ||
![]() |
a7d1888328 | ||
![]() |
30e0ef221a | ||
![]() |
315dae6a85 | ||
![]() |
91e5a066c5 | ||
![]() |
95cb319bde | ||
![]() |
e9a5af3512 | ||
![]() |
4232642899 | ||
![]() |
e180d915c6 | ||
![]() |
af8609e96e | ||
![]() |
271e2a30e1 | ||
![]() |
3f4f6c0ec7 | ||
![]() |
f5d8796a6c | ||
![]() |
46fd822990 | ||
![]() |
8407252fa3 | ||
![]() |
4e114b7bfa | ||
![]() |
5fa03dd906 | ||
![]() |
c60934eedc | ||
![]() |
332f75cd44 | ||
![]() |
7d9b399466 | ||
![]() |
7954d9cb4c | ||
![]() |
26b0df2c26 | ||
![]() |
ce0fdc5609 | ||
![]() |
ee831d27ac | ||
![]() |
3156f1c4a7 | ||
![]() |
8139840d7a | ||
![]() |
76cc721e8f | ||
![]() |
e60efec6b7 | ||
![]() |
126778298e | ||
![]() |
0c8d41e25e | ||
![]() |
f4aaad6869 | ||
![]() |
1cf8e34ae5 | ||
![]() |
b15814b2f9 | ||
![]() |
749f092174 | ||
![]() |
6771ef35d9 | ||
![]() |
0ebe81f4c3 | ||
![]() |
cfb44a3892 | ||
![]() |
6a67bac47c | ||
![]() |
4a48544aeb | ||
![]() |
f48a4567a6 | ||
![]() |
75d3a3be84 | ||
![]() |
3b8f9a2b1f | ||
![]() |
ef4285c00c | ||
![]() |
5122d6d109 | ||
![]() |
02caf00772 | ||
![]() |
a5bc0430f7 | ||
![]() |
0eb0baed19 | ||
![]() |
2f8078f5b5 | ||
![]() |
c0f38ebf8d | ||
![]() |
5d26f5794e | ||
![]() |
cfbdc44a8d | ||
![]() |
ce5fe3cc19 | ||
![]() |
f09e23e453 | ||
![]() |
4de46fcf97 | ||
![]() |
e09cf36104 | ||
![]() |
66193cba05 | ||
![]() |
6bb59eeb3f | ||
![]() |
e9f9d43d67 | ||
![]() |
9a418317f3 | ||
![]() |
dcf133b6ae | ||
![]() |
8183433600 | ||
![]() |
e92acf0a91 | ||
![]() |
d040644b6c | ||
![]() |
c48d2eba0d | ||
![]() |
6fb6602a09 | ||
![]() |
be18af8235 | ||
![]() |
4b55af17c9 | ||
![]() |
772398f6ea | ||
![]() |
a1fd43ebaf | ||
![]() |
60b3d14d19 | ||
![]() |
ad3c49ca43 | ||
![]() |
b35173b5b0 | ||
![]() |
7706e6f5d2 | ||
![]() |
7e7a38b97d | ||
![]() |
94454684f7 | ||
![]() |
ffe1d0664b | ||
![]() |
31a979a6cc | ||
![]() |
5f6152a87e | ||
![]() |
0d72f153cf | ||
![]() |
23c9353cd8 | ||
![]() |
a615b0a003 | ||
![]() |
eb698f8cc7 | ||
![]() |
30a48c57bd | ||
![]() |
b8581b4ab7 | ||
![]() |
8be0d503da | ||
![]() |
68518aaa4b | ||
![]() |
ea5deb0018 | ||
![]() |
15766ad988 | ||
![]() |
3804ab9a67 | ||
![]() |
770efd9b46 | ||
![]() |
c6339204f4 | ||
![]() |
daa7acd585 | ||
![]() |
0e53b0b846 | ||
![]() |
e1e68cdb9b | ||
![]() |
0004faca83 | ||
![]() |
57a08200fc | ||
![]() |
e86826318c | ||
![]() |
0ecf15bc61 | ||
![]() |
1ba88ff3ac | ||
![]() |
5edc8458f2 | ||
![]() |
6b0b889f25 | ||
![]() |
7ff52021ad | ||
![]() |
cc6806144f | ||
![]() |
bd15f65e81 | ||
![]() |
4ce1cce40a | ||
![]() |
b97520e89f | ||
![]() |
ef71093046 | ||
![]() |
d26b574f80 | ||
![]() |
1f590c3628 | ||
![]() |
13f5f20c98 | ||
![]() |
65b3edbb09 | ||
![]() |
494533f9d7 | ||
![]() |
f49725d2c9 | ||
![]() |
e251493a16 | ||
![]() |
c1175b7013 | ||
![]() |
cb37a17ef7 | ||
![]() |
8d5dbb9577 | ||
![]() |
ca12a57902 | ||
![]() |
bd562e4180 | ||
![]() |
0c37f93bc8 | ||
![]() |
61beb6316d | ||
![]() |
835a6ed622 | ||
![]() |
2353c4ffba | ||
![]() |
0b82af61f3 | ||
![]() |
0f288326cc | ||
![]() |
236aa9622a | ||
![]() |
8f9a57636c | ||
![]() |
7125ac20ca | ||
![]() |
8f699023f3 | ||
![]() |
6d4e2f6c16 | ||
![]() |
756ad3553d | ||
![]() |
85e1f423bf | ||
![]() |
eefca229b6 | ||
![]() |
fbe025190c | ||
![]() |
b82e0a9f1e | ||
![]() |
13dedddd19 | ||
![]() |
4396ecd22c | ||
![]() |
044f4d1801 | ||
![]() |
822ff7b316 | ||
![]() |
7594d8e103 | ||
![]() |
f9cd5ccdf0 | ||
![]() |
906c84d2b6 | ||
![]() |
ab55bc077d | ||
![]() |
02bea8982e | ||
![]() |
0d79da37e7 | ||
![]() |
5e58ec127f | ||
![]() |
1cc319a15d | ||
![]() |
458be5dad8 | ||
![]() |
ac3ec59845 | ||
![]() |
5083d1eb33 | ||
![]() |
de62b55042 | ||
![]() |
d945261aef | ||
![]() |
f93eb40b1d | ||
![]() |
d52d659261 | ||
![]() |
007a8bd46d | ||
![]() |
edf1ef6d97 | ||
![]() |
5f060a357d | ||
![]() |
fb6a6acbff | ||
![]() |
00062ddb0c | ||
![]() |
0ac0c37078 | ||
![]() |
2be72a97b8 | ||
![]() |
e1012997f0 | ||
![]() |
f32851cf2a | ||
![]() |
5e9ad7daee | ||
![]() |
9ae0053573 | ||
![]() |
33f5547ed4 | ||
![]() |
969b06d77c | ||
![]() |
2ed027f2bd | ||
![]() |
a6d3e2a36d | ||
![]() |
48e18762b5 | ||
![]() |
9be10f2adb | ||
![]() |
a0006e6861 | ||
![]() |
bc576e7cee | ||
![]() |
6a1dc25079 | ||
![]() |
28c2433375 | ||
![]() |
ba2f2299c3 | ||
![]() |
8df372ae7a | ||
![]() |
7771cae94c | ||
![]() |
902cc3310b | ||
![]() |
302445e64f | ||
![]() |
90deeddf3d | ||
![]() |
b0f5422262 | ||
![]() |
60d7fcb1ee | ||
![]() |
2e946ac77a | ||
![]() |
22e6b1130f | ||
![]() |
4938128ccc | ||
![]() |
d10b65ada4 | ||
![]() |
8767d1ab7d | ||
![]() |
1fe86f654f | ||
![]() |
003a5d4f55 | ||
![]() |
a9745c9818 | ||
![]() |
8f0459c89e | ||
![]() |
087fe79e2c | ||
![]() |
160cd79fdb | ||
![]() |
e229270a1c | ||
![]() |
a2e5ea1882 | ||
![]() |
fd11bf17fd | ||
![]() |
3175aaa0eb | ||
![]() |
afbb07b472 | ||
![]() |
37e638b3dd | ||
![]() |
2c880012f7 | ||
![]() |
41c7cdac68 | ||
![]() |
daffb24111 | ||
![]() |
937b2eac36 | ||
![]() |
4ce439a75a | ||
![]() |
927015baae | ||
![]() |
61eee535c1 | ||
![]() |
1f259b3ab0 | ||
![]() |
4a5b190a22 | ||
![]() |
953e3bd634 | ||
![]() |
4bd72da5cd | ||
![]() |
3e604d1d54 | ||
![]() |
869e5e950c | ||
![]() |
a1abbd70cb | ||
![]() |
1d7aeb3fb6 | ||
![]() |
4e24ec5e5d | ||
![]() |
c2cfb71dce | ||
![]() |
a068b81674 | ||
![]() |
10b1e38404 | ||
![]() |
3b144be37f | ||
![]() |
07d879378f | ||
![]() |
b19295c1c1 | ||
![]() |
4a5fee503b | ||
![]() |
5fee292606 | ||
![]() |
ab5f276877 | ||
![]() |
ccc7a36043 | ||
![]() |
d3098747c0 | ||
![]() |
2a67ce773d | ||
![]() |
db60fa1c63 | ||
![]() |
5393f8ddbc | ||
![]() |
cf532d1479 | ||
![]() |
50278211f4 | ||
![]() |
83499a2cd0 | ||
![]() |
aa2685536b | ||
![]() |
3c24ba3ff2 | ||
![]() |
ae01de2464 | ||
![]() |
ad734e658c | ||
![]() |
e250b82377 | ||
![]() |
0fce7d1f54 | ||
![]() |
9d561410e5 | ||
![]() |
7cf1bdd284 | ||
![]() |
6f47746e5f | ||
![]() |
67456357c5 | ||
![]() |
d54a1578aa | ||
![]() |
301fb2a9f7 | ||
![]() |
32d0baaaf8 | ||
![]() |
df6740353f | ||
![]() |
08f9e4e0c8 | ||
![]() |
256ccc4757 | ||
![]() |
ad85c37c03 | ||
![]() |
33882b3e89 | ||
![]() |
d707ea56b4 | ||
![]() |
9ce44db56f | ||
![]() |
4cecb759c9 | ||
![]() |
3e2ea77506 | ||
![]() |
bf9cf107c6 | ||
![]() |
81ceb837b9 | ||
![]() |
a13141a633 | ||
![]() |
8d63d9368e | ||
![]() |
15e2ccf1b3 | ||
![]() |
e827829850 | ||
![]() |
2f5db37c1a | ||
![]() |
f4d4f2da29 | ||
![]() |
fc7647f9e4 | ||
![]() |
36ba42cc0f | ||
![]() |
eea7d7b327 | ||
![]() |
376b43906a | ||
![]() |
16cd92fbf1 | ||
![]() |
dd17f6cc80 | ||
![]() |
f09fa22bbc | ||
![]() |
ca479d6e4b | ||
![]() |
11b5b2af51 | ||
![]() |
c8beaad2b1 | ||
![]() |
6c286e3b02 | ||
![]() |
015b57b6ef | ||
![]() |
63e64f374b | ||
![]() |
2b9e53772e | ||
![]() |
36ce6fad8c | ||
![]() |
ba6babf570 | ||
![]() |
1af56a30cf | ||
![]() |
1cab553f4b | ||
![]() |
fd1cde9b89 | ||
![]() |
8133af4e08 | ||
![]() |
0e907b49c9 | ||
![]() |
ab539895a5 | ||
![]() |
8dc767fa1d | ||
![]() |
73d61fa2b8 | ||
![]() |
70ae07b084 | ||
![]() |
d37d25d557 | ||
![]() |
c773c612fd | ||
![]() |
d01b2cfc0e | ||
![]() |
74e57499ba | ||
![]() |
4abdfc10f5 | ||
![]() |
e5b6f93df3 | ||
![]() |
e5d92c4ea7 | ||
![]() |
0f4ea8e918 | ||
![]() |
63d5103f42 | ||
![]() |
d25ee82d3f | ||
![]() |
91d69fa942 | ||
![]() |
45d450d1f0 | ||
![]() |
104a5daef4 | ||
![]() |
4101369c35 | ||
![]() |
dfda0b124f | ||
![]() |
a9f1c62dff | ||
![]() |
497785393d | ||
![]() |
82547372d1 | ||
![]() |
d79c71abf5 | ||
![]() |
02ec486610 | ||
![]() |
cc70958c16 | ||
![]() |
ea55537fb2 | ||
![]() |
3791514908 | ||
![]() |
c020a0190d | ||
![]() |
666702f478 | ||
![]() |
f1940439e4 | ||
![]() |
7c7be885b4 | ||
![]() |
58248f3e7f | ||
![]() |
fcfd5a6625 | ||
![]() |
f38fbbfb2b | ||
![]() |
704412bb48 | ||
![]() |
59f8e9dff9 | ||
![]() |
4b86b49260 | ||
![]() |
1cf68f98b3 | ||
![]() |
43f4317a97 | ||
![]() |
6524e26e62 | ||
![]() |
1b97cec995 | ||
![]() |
fc843c5827 | ||
![]() |
dde13a3d4b | ||
![]() |
68a4d0c8db | ||
![]() |
e812fce29c | ||
![]() |
2213fe40e5 | ||
![]() |
19cb2f1a3c | ||
![]() |
374a4b4ead | ||
![]() |
c717e52ab2 | ||
![]() |
4b537a4f8c | ||
![]() |
980f5992c8 | ||
![]() |
ea3f1d39e8 | ||
![]() |
a435befcde | ||
![]() |
35e7fddc73 | ||
![]() |
40319ccf9d | ||
![]() |
56dbfe59d9 | ||
![]() |
c303b5d81d | ||
![]() |
bf1540af4c | ||
![]() |
327e3ec4bd | ||
![]() |
a29852320a | ||
![]() |
1c04d5992a | ||
![]() |
ee008620d2 | ||
![]() |
ef7be4c2ff | ||
![]() |
bc8c8df316 | ||
![]() |
a29a3af218 | ||
![]() |
bb89a5a5bf | ||
![]() |
7dd26877de | ||
![]() |
4f41e105b3 | ||
![]() |
c917d47e71 | ||
![]() |
bd033a2d53 | ||
![]() |
a018b229ba | ||
![]() |
fdb431b5c7 | ||
![]() |
98e85a296d | ||
![]() |
31b559370d | ||
![]() |
a7762ff82e | ||
![]() |
0a70a66b07 | ||
![]() |
ba27179f17 | ||
![]() |
f69255e735 | ||
![]() |
f2d455226a | ||
![]() |
02e129a38e | ||
![]() |
187c379331 | ||
![]() |
1b66c148cc | ||
![]() |
24339dbcce | ||
![]() |
268cc19f44 | ||
![]() |
4af67dd007 | ||
![]() |
ee9ad0f184 | ||
![]() |
6c3a60e5f2 | ||
![]() |
085bd3c9d5 | ||
![]() |
1661acf82f | ||
![]() |
7fb8d3341c | ||
![]() |
9ef3755f03 | ||
![]() |
69313ef455 | ||
![]() |
8765568282 | ||
![]() |
a0cba9b045 | ||
![]() |
298f7f2d81 | ||
![]() |
394dc0686a | ||
![]() |
cde722385c | ||
![]() |
022de87550 | ||
![]() |
223ce56625 | ||
![]() |
03ccc8d8df | ||
![]() |
2e995d7cf4 | ||
![]() |
1e7091dae9 | ||
![]() |
fc91e15488 | ||
![]() |
c2f836279e | ||
![]() |
f32eb07487 | ||
![]() |
13bde7af40 | ||
![]() |
5f473d51cf | ||
![]() |
c237d18ef5 | ||
![]() |
d664cbfcdd | ||
![]() |
313d96677f | ||
![]() |
19f1080e38 | ||
![]() |
eab42d90d4 | ||
![]() |
7a3e730ded | ||
![]() |
a7bf0e3e7f | ||
![]() |
366f1cf186 | ||
![]() |
b67cb26e51 | ||
![]() |
eaec0fb139 | ||
![]() |
41f9fd6513 | ||
![]() |
36e07093b8 | ||
![]() |
60f39f7b1e | ||
![]() |
0e06c4cfdf | ||
![]() |
6a39c8b3ff | ||
![]() |
999177fe39 | ||
![]() |
d6814a3f3a | ||
![]() |
75d376a439 | ||
![]() |
9e7046cbf1 | ||
![]() |
16e099a9f9 | ||
![]() |
a42e34701f | ||
![]() |
1e882c7c24 | ||
![]() |
b4d0303a26 | ||
![]() |
0f3d6c61b5 | ||
![]() |
f76d38c924 | ||
![]() |
a410eb345c | ||
![]() |
81cdf3ce55 | ||
![]() |
71e0fd11c8 | ||
![]() |
3fd82cfe22 | ||
![]() |
d486a56ded | ||
![]() |
31a44c0b7e | ||
![]() |
675daf32e9 | ||
![]() |
b8f60da8d8 | ||
![]() |
8da2970748 | ||
![]() |
c9e467822c | ||
![]() |
6294e4aa43 | ||
![]() |
fd059ee24d | ||
![]() |
06c81d8bee | ||
![]() |
838a58df99 | ||
![]() |
db30eee0fc | ||
![]() |
c097c85dcf | ||
![]() |
62331f0207 | ||
![]() |
c8e533e612 | ||
![]() |
2e383bf901 | ||
![]() |
9d1d171b0c | ||
![]() |
83b4cb178b | ||
![]() |
d157abe77c | ||
![]() |
4a183d2e3f | ||
![]() |
be0d62ba6c | ||
![]() |
824e39ddeb | ||
![]() |
5ca68ec049 | ||
![]() |
982713ad47 | ||
![]() |
3442a87d5b | ||
![]() |
96f7ca02bf | ||
![]() |
9f0e4c2889 | ||
![]() |
632a001955 | ||
![]() |
7545c40003 | ||
![]() |
0fb73eac7e | ||
![]() |
5ee008c997 | ||
![]() |
bf29417e5f | ||
![]() |
e54023d765 | ||
![]() |
bebc00a851 | ||
![]() |
10a86172ec | ||
![]() |
e03774be88 | ||
![]() |
86710c9bb2 | ||
![]() |
d82ee79bd0 | ||
![]() |
37a05e0264 | ||
![]() |
c535a4d42b | ||
![]() |
2567fe3fd8 | ||
![]() |
1b0ec6b1bd | ||
![]() |
178c4144ad | ||
![]() |
f3781a45d8 | ||
![]() |
e1c3b5aeab | ||
![]() |
fcb2df8eb9 | ||
![]() |
189080b684 | ||
![]() |
5dabef79ee | ||
![]() |
9588c3fac9 | ||
![]() |
50738f2ab4 | ||
![]() |
6328301bb6 | ||
![]() |
fb21b6a67d | ||
![]() |
afb66a955c | ||
![]() |
9561e38267 | ||
![]() |
b2acbd305d | ||
![]() |
bf649988ef | ||
![]() |
abddc850ac | ||
![]() |
d816a9bdf8 | ||
![]() |
48b1e73402 | ||
![]() |
2fef23d066 | ||
![]() |
049ceda315 | ||
![]() |
dfef0bc81b | ||
![]() |
6144da9602 | ||
![]() |
5d3b0896e1 | ||
![]() |
a3286932ad | ||
![]() |
b8b22b929e | ||
![]() |
5a9b3eab6f | ||
![]() |
87905d30ab | ||
![]() |
0ce2452a08 | ||
![]() |
0f775630c7 | ||
![]() |
535571c3d2 | ||
![]() |
b992b6d7a6 | ||
![]() |
c83e28ca85 | ||
![]() |
6bc4aae37d | ||
![]() |
79cbe93fcf | ||
![]() |
3991ff34f1 | ||
![]() |
03cfe90f3e | ||
![]() |
daf1c7303c | ||
![]() |
241e436d19 | ||
![]() |
fb69d80e70 | ||
![]() |
f1944f2b37 | ||
![]() |
a173e6ed13 | ||
![]() |
aa076476fc | ||
![]() |
804a73a454 | ||
![]() |
b0829ed999 | ||
![]() |
b15b560539 | ||
![]() |
1e41b9725a | ||
![]() |
724ef1af8d | ||
![]() |
3ecabe3ebe | ||
![]() |
0d4465a098 | ||
![]() |
5f4d6ae20c | ||
![]() |
402b084646 | ||
![]() |
146c3c6945 | ||
![]() |
c0824472e8 | ||
![]() |
472996e2bf | ||
![]() |
973d29acd0 | ||
![]() |
41fb2b69f7 | ||
![]() |
bf3e9b8653 | ||
![]() |
68b973aa9f | ||
![]() |
00db422745 | ||
![]() |
9986bd8908 | ||
![]() |
2bce68a065 | ||
![]() |
68a08e33d2 | ||
![]() |
bf240ce9bb | ||
![]() |
9506e2c972 | ||
![]() |
455a2879fb | ||
![]() |
9e227182e6 | ||
![]() |
ec1a06843c | ||
![]() |
a5b109b699 | ||
![]() |
1195fa8ee3 | ||
![]() |
6c2f71ad19 | ||
![]() |
27fc8a21cd | ||
![]() |
2828a56a4f | ||
![]() |
b0568e32a5 | ||
![]() |
bd67fdf011 | ||
![]() |
385611c5a9 | ||
![]() |
5c7876d444 | ||
![]() |
adc7a78fd6 | ||
![]() |
42decf28f1 | ||
![]() |
be25a3fc20 | ||
![]() |
4bc6a5feb7 | ||
![]() |
366564e952 | ||
![]() |
c3c0648456 | ||
![]() |
47c12a07f2 | ||
![]() |
d33fe38a62 | ||
![]() |
b90eccccfd | ||
![]() |
872864e397 | ||
![]() |
bc10394e66 | ||
![]() |
cbbfbbb57e | ||
![]() |
af1346c748 | ||
![]() |
d6d8acad90 | ||
![]() |
7f7dca7b15 | ||
![]() |
ffab7bf9dd | ||
![]() |
e642066562 | ||
![]() |
5fd6241d28 | ||
![]() |
dd3db9cc0c | ||
![]() |
e160366a1e | ||
![]() |
c97c3418c7 | ||
![]() |
757a1726e8 | ||
![]() |
4b59f80100 | ||
![]() |
1c5abc835f | ||
![]() |
5ce4585884 | ||
![]() |
7fff83086f | ||
![]() |
caf2c5e0b7 | ||
![]() |
2f9700dc2b | ||
![]() |
5b2441d8a3 | ||
![]() |
df1f84adad | ||
![]() |
34737f9c60 | ||
![]() |
34870d3481 | ||
![]() |
5738757e2c | ||
![]() |
802ad885ab | ||
![]() |
177b388be0 | ||
![]() |
ebe6923500 | ||
![]() |
f603c4a330 | ||
![]() |
93fb3b00de | ||
![]() |
7910cc2981 | ||
![]() |
66cdf6d097 | ||
![]() |
11722cc533 | ||
![]() |
594833374c | ||
![]() |
e4ceb0a865 | ||
![]() |
b8d4684683 | ||
![]() |
252e630433 | ||
![]() |
2e4d4e4a01 | ||
![]() |
db28437218 | ||
![]() |
60acb990b6 | ||
![]() |
0062e12113 | ||
![]() |
f8dc3b97be | ||
![]() |
a70109697f | ||
![]() |
9fb1fb9044 | ||
![]() |
29cdd6a9c2 | ||
![]() |
7cd947f96c | ||
![]() |
8936096846 | ||
![]() |
d692d5ab3a | ||
![]() |
18a458679f | ||
![]() |
574916f530 | ||
![]() |
bc75881a40 | ||
![]() |
2265bfeab6 | ||
![]() |
f2859287df | ||
![]() |
172c9f70c7 | ||
![]() |
7d3d60f96d | ||
![]() |
e802fe0677 | ||
![]() |
bd2210b812 | ||
![]() |
4b993708c9 | ||
![]() |
6cf27986b6 | ||
![]() |
7ca988018e | ||
![]() |
05f9cab191 | ||
![]() |
4fcfb30f81 | ||
![]() |
057278c0c6 | ||
![]() |
a1f01fcbe0 | ||
![]() |
9570836cec | ||
![]() |
943a2a6db3 | ||
![]() |
82dfe95655 | ||
![]() |
fc54ad43b1 | ||
![]() |
27afa56844 | ||
![]() |
ac4e649e56 | ||
![]() |
fadd9524c1 | ||
![]() |
2012a0d369 | ||
![]() |
14ce05fea3 | ||
![]() |
b644e4d955 | ||
![]() |
fe304576d0 | ||
![]() |
37cce8746d | ||
![]() |
8ded6d3d2e | ||
![]() |
c1a17a7369 | ||
![]() |
fbb2818864 | ||
![]() |
79bc09a68c | ||
![]() |
f3fccaad26 | ||
![]() |
0bb26c97c3 | ||
![]() |
009d85722b | ||
![]() |
11a54bc8e1 | ||
![]() |
818c64efec | ||
![]() |
998090d1a7 | ||
![]() |
32743f112c | ||
![]() |
85420c61c7 | ||
![]() |
8055bc88d8 | ||
![]() |
4116a962a6 | ||
![]() |
cab1106416 | ||
![]() |
9a981237df | ||
![]() |
b9400df4c8 | ||
![]() |
5ff6e0f992 | ||
![]() |
ddb1034a9c | ||
![]() |
d50003e33d | ||
![]() |
a5a90937b4 | ||
![]() |
eaab04fefa | ||
![]() |
3dcb7362aa | ||
![]() |
0da1da942a | ||
![]() |
275e2f318e | ||
![]() |
35aa9d06e1 | ||
![]() |
62864d5356 | ||
![]() |
307cce92c4 | ||
![]() |
925ad67f97 | ||
![]() |
7f1e327be3 | ||
![]() |
ecea890fdc | ||
![]() |
9fdb1c1684 | ||
![]() |
0cb7204e60 | ||
![]() |
64bc0aac55 | ||
![]() |
fbb20373c1 | ||
![]() |
6a14dd190f | ||
![]() |
8f04d96c07 | ||
![]() |
5b0e255f7e | ||
![]() |
0814ca0cc7 | ||
![]() |
29f016ae15 | ||
![]() |
0610070d07 | ||
![]() |
a7a65e5d6d | ||
![]() |
98b8e960aa | ||
![]() |
c028cfa7cf | ||
![]() |
a555266174 | ||
![]() |
3ec22e24ed | ||
![]() |
5a880013c8 | ||
![]() |
81e4f65ddd | ||
![]() |
aba00ed22c | ||
![]() |
c8805c61f9 | ||
![]() |
67cd8349d6 | ||
![]() |
94c27fcdf7 | ||
![]() |
ad5c449f1e | ||
![]() |
54e35dd3cf | ||
![]() |
baffadca91 | ||
![]() |
e84c9f3e22 | ||
![]() |
31f68495cf | ||
![]() |
5774ac9886 | ||
![]() |
2cf171095e | ||
![]() |
74bd264758 | ||
![]() |
08b09926a4 | ||
![]() |
60764de564 | ||
![]() |
61a31db8ec | ||
![]() |
ff12544c9a | ||
![]() |
5630030a22 | ||
![]() |
6352081ded | ||
![]() |
a4101c4174 | ||
![]() |
5d1f6934fb | ||
![]() |
9e674fa109 | ||
![]() |
f9c85ae47b | ||
![]() |
5a854ef2dc | ||
![]() |
7c66f9b2a4 | ||
![]() |
15775727e7 | ||
![]() |
834e2c9560 | ||
![]() |
6dc714b6de | ||
![]() |
2f0ad918cc | ||
![]() |
6b7ceed25c | ||
![]() |
2a4b27ed33 | ||
![]() |
5653232144 | ||
![]() |
eed3747661 | ||
![]() |
0a2444e100 | ||
![]() |
a0e5626bc5 | ||
![]() |
1d3969acbd | ||
![]() |
ff76eca311 | ||
![]() |
9b6f13716f | ||
![]() |
6a9bca9ed3 | ||
![]() |
5c8b3d97f0 | ||
![]() |
4f5d80d397 | ||
![]() |
4ed02ae5f9 | ||
![]() |
473d400cfd | ||
![]() |
5ce7b14711 | ||
![]() |
2720392a15 | ||
![]() |
2a21b6980b | ||
![]() |
23450d4f6b | ||
![]() |
f21b792712 | ||
![]() |
a52b4647ec | ||
![]() |
21de8245ae | ||
![]() |
65a2e5cdf8 | ||
![]() |
354998e96c | ||
![]() |
3d3bf45102 | ||
![]() |
a1bfde83fb | ||
![]() |
ec91660119 | ||
![]() |
6afd4a5789 | ||
![]() |
be5cc44f55 | ||
![]() |
13d26d2166 | ||
![]() |
a2446068d3 | ||
![]() |
0f3d28593d | ||
![]() |
5c14bd13da | ||
![]() |
3f2df94457 | ||
![]() |
65e60f3123 | ||
![]() |
09589a6363 | ||
![]() |
1315bc196c | ||
![]() |
d0373f4749 | ||
![]() |
d241f32342 | ||
![]() |
e361b1a9ba | ||
![]() |
8469fafb10 | ||
![]() |
e9dc8f3e7d | ||
![]() |
382f686f19 | ||
![]() |
fabc20b3fb | ||
![]() |
27c125416a | ||
![]() |
5ca9980060 | ||
![]() |
79aecf3fb7 | ||
![]() |
69ad3e2c8d | ||
![]() |
7b780c068c | ||
![]() |
68bb858406 | ||
![]() |
7e0100408d | ||
![]() |
b44cae8f18 | ||
![]() |
73122cd5f9 | ||
![]() |
8dc581247a | ||
![]() |
7369d1f36e | ||
![]() |
5b762e189c | ||
![]() |
2c766c4daf | ||
![]() |
fa4314e0ce | ||
![]() |
b9c6b22165 | ||
![]() |
4d4e20b71e | ||
![]() |
45454c53f1 | ||
![]() |
bab25c2d56 | ||
![]() |
31c9176b2b | ||
![]() |
6c4a5292a6 | ||
![]() |
0531027b57 | ||
![]() |
a066002731 | ||
![]() |
e784e20b93 | ||
![]() |
b60d0ff1d4 | ||
![]() |
ea30041168 | ||
![]() |
f918406a12 | ||
![]() |
7ab39cda5f | ||
![]() |
d1f77e08ac | ||
![]() |
297290c16d | ||
![]() |
c151da6455 | ||
![]() |
d692d77834 | ||
![]() |
f505cc2add | ||
![]() |
7ea2384786 | ||
![]() |
e63a2f5c58 | ||
![]() |
82776aaca9 | ||
![]() |
f600a8a0fc | ||
![]() |
68cc7089bd | ||
![]() |
00ba4e95ac | ||
![]() |
7a92038bc4 | ||
![]() |
073a7a5659 | ||
![]() |
b4c0530fda | ||
![]() |
55950656cb | ||
![]() |
82be2477e8 | ||
![]() |
d52909ec5c | ||
![]() |
2da8f763d7 | ||
![]() |
0daf8ec51b | ||
![]() |
b5cd673330 | ||
![]() |
2f2d2bcf3e | ||
![]() |
4c9f462423 | ||
![]() |
b713493436 | ||
![]() |
19130440cc | ||
![]() |
611f9d948b | ||
![]() |
a7de4ac9b7 | ||
![]() |
bd3c4fbe1e | ||
![]() |
14d44171b5 | ||
![]() |
5aaa1aa63e | ||
![]() |
0b8b8af83d | ||
![]() |
de1266699d | ||
![]() |
09ae91700c | ||
![]() |
9d0df8ebc5 | ||
![]() |
64f86ef8e7 | ||
![]() |
17cd5e0952 | ||
![]() |
2fadc06412 | ||
![]() |
fca0b44fa1 | ||
![]() |
b3ce3e25eb | ||
![]() |
e819a28a8b | ||
![]() |
82218c8d68 | ||
![]() |
f92c2c2758 | ||
![]() |
1c9a839401 | ||
![]() |
57bbf3ad2b | ||
![]() |
af3c6be79f | ||
![]() |
769a237b19 | ||
![]() |
87d509d416 | ||
![]() |
55cb713264 | ||
![]() |
c196a2ed9c | ||
![]() |
98781bb903 | ||
![]() |
23c2d929a1 | ||
![]() |
c568a6793e | ||
![]() |
30eb35f17f | ||
![]() |
3968a0fff8 | ||
![]() |
f221c0fb66 | ||
![]() |
482a8068a5 | ||
![]() |
46ac03ba85 | ||
![]() |
55da1072b6 | ||
![]() |
07e3d5c691 | ||
![]() |
f7ef3c1b1c | ||
![]() |
4e6408ea49 | ||
![]() |
43e655b896 | ||
![]() |
e2aa671346 | ||
![]() |
57c6f8cfa2 | ||
![]() |
938cae818f | ||
![]() |
aa58cdcfa6 | ||
![]() |
e0ebece2c7 | ||
![]() |
783a4f002b | ||
![]() |
78a1d4c482 | ||
![]() |
3c4184dc15 | ||
![]() |
c3e96e667f | ||
![]() |
1755bba509 | ||
![]() |
1f2901e8b1 | ||
![]() |
d192868d62 | ||
![]() |
d92eb38c21 | ||
![]() |
a67ee4f01b | ||
![]() |
4b3b401ce3 | ||
![]() |
39f397e25c | ||
![]() |
8eca596fa6 | ||
![]() |
290f4bea91 | ||
![]() |
858077483d | ||
![]() |
71ce4b8be6 | ||
![]() |
2d3d148912 | ||
![]() |
5002ce8798 | ||
![]() |
ab7538d93a | ||
![]() |
7db9119ef3 | ||
![]() |
e68c6658c9 | ||
![]() |
3349e40276 | ||
![]() |
c619a86141 | ||
![]() |
f2f40c0965 | ||
![]() |
b7581f0995 | ||
![]() |
b5d5ae9b18 | ||
![]() |
545821399b | ||
![]() |
3bf6826451 | ||
![]() |
e7e19f5627 | ||
![]() |
0d4b24e56c | ||
![]() |
cf306ed913 | ||
![]() |
91f65a36bf | ||
![]() |
d39d06e6d9 | ||
![]() |
a4aa454a7a | ||
![]() |
149b50a2fa | ||
![]() |
9a1559a356 | ||
![]() |
c2bbcc9f60 | ||
![]() |
ae364b1460 | ||
![]() |
551e47a464 | ||
![]() |
a01d6d8b31 | ||
![]() |
a39be99a58 | ||
![]() |
1117880411 | ||
![]() |
804f6718ed | ||
![]() |
7f84fe9bda | ||
![]() |
b9be733c3c | ||
![]() |
1a3f5f7a09 | ||
![]() |
c314cb2903 | ||
![]() |
3c4db26e01 | ||
![]() |
7c181c4e9b | ||
![]() |
c9c00eb26b | ||
![]() |
aa5accae23 | ||
![]() |
3f4e77738b | ||
![]() |
a7fe956e35 | ||
![]() |
8633a2643a | ||
![]() |
17a0ce655b | ||
![]() |
9474db8b0f | ||
![]() |
6fda6e16f8 | ||
![]() |
5a0c21a0aa | ||
![]() |
84839fa5f1 | ||
![]() |
2396fecee2 | ||
![]() |
35615ecb6f | ||
![]() |
3eb7d6ede9 | ||
![]() |
ccc59e8763 | ||
![]() |
f3d713ac73 | ||
![]() |
3da0d78170 | ||
![]() |
31c33ca853 | ||
![]() |
b343ac6d0f | ||
![]() |
19d7d62e80 | ||
![]() |
93c40b6966 | ||
![]() |
59ecdb78fe | ||
![]() |
9a7e23379c | ||
![]() |
6bb92555f3 | ||
![]() |
b6ad70bad9 | ||
![]() |
f986f1f22d | ||
![]() |
b5448a7987 | ||
![]() |
24c5e6ab45 | ||
![]() |
bd1009e135 | ||
![]() |
aa9dce09a1 | ||
![]() |
b67855468d | ||
![]() |
ea885d5c83 | ||
![]() |
37158eddcb | ||
![]() |
f5f087e99c | ||
![]() |
aa21d50196 | ||
![]() |
4c80f5a192 | ||
![]() |
e1142d4527 | ||
![]() |
c829116830 | ||
![]() |
3689c4c604 | ||
![]() |
721ae45ebb | ||
![]() |
0642a6d9e7 | ||
![]() |
fd55b96ca1 | ||
![]() |
71f1400aea | ||
![]() |
506617d4b3 | ||
![]() |
ac418f4d25 | ||
![]() |
efde252ed0 | ||
![]() |
4d88f146e3 | ||
![]() |
338ff2daba | ||
![]() |
66b9bd52d6 | ||
![]() |
0504192fb7 | ||
![]() |
0877a486cb | ||
![]() |
c1dbeb55b4 | ||
![]() |
fe4bb40207 | ||
![]() |
1c1c2dc3b9 | ||
![]() |
be4d65221b | ||
![]() |
83840041a8 | ||
![]() |
9c9ebb342d | ||
![]() |
390c109aed | ||
![]() |
46b0ddc5e6 | ||
![]() |
f87deba4ac | ||
![]() |
c12e719808 | ||
![]() |
6849e210c0 | ||
![]() |
b8d1acd104 | ||
![]() |
c162ac8830 | ||
![]() |
b45ad57c50 | ||
![]() |
1a6756c254 | ||
![]() |
0a4d92a71e | ||
![]() |
00484d18a5 | ||
![]() |
c4e04d3db4 | ||
![]() |
b8881a3a14 | ||
![]() |
7e1fe2ff83 | ||
![]() |
1eb6ce784c | ||
![]() |
e5588697d5 | ||
![]() |
d343321c6e | ||
![]() |
0e12d36531 | ||
![]() |
031be18e26 | ||
![]() |
426f791e7a | ||
![]() |
2fc9fbe27d | ||
![]() |
02017a81e9 | ||
![]() |
f469250fa3 | ||
![]() |
2fed722b00 | ||
![]() |
188fbd8ed9 | ||
![]() |
111b21e767 | ||
![]() |
f1898fef8c | ||
![]() |
6e5c7f4390 | ||
![]() |
5e54bd37b6 | ||
![]() |
f03f60eae2 | ||
![]() |
b6059fa942 | ||
![]() |
21022755f8 | ||
![]() |
60dbfe6f54 | ||
![]() |
0601d174b1 | ||
![]() |
d6b8b3515d | ||
![]() |
26ca48e7a7 | ||
![]() |
7213b8abb1 | ||
![]() |
54356a719e | ||
![]() |
82880eecbd | ||
![]() |
1a98f5389c | ||
![]() |
e54a2c4f3c | ||
![]() |
51312f70fd | ||
![]() |
68894398af | ||
![]() |
08f9ed67c9 | ||
![]() |
01f22a9e25 | ||
![]() |
42e7bd4ce8 | ||
![]() |
460a8b50ac | ||
![]() |
025ffa200c | ||
![]() |
6a908ccfb6 | ||
![]() |
89dce6882f | ||
![]() |
efcc2b69dc | ||
![]() |
aedc92f2d3 | ||
![]() |
41e2da79f4 | ||
![]() |
86f6588c3f | ||
![]() |
1f71625a32 | ||
![]() |
cbd3e0bc0b | ||
![]() |
8af470e06d | ||
![]() |
b5b34e73d6 | ||
![]() |
da3e511b92 | ||
![]() |
2187ece844 | ||
![]() |
fbf64b122d | ||
![]() |
83d6263ade | ||
![]() |
e666a39dd7 | ||
![]() |
936551ebd1 | ||
![]() |
759f70f092 | ||
![]() |
68f1841e3c | ||
![]() |
baa1b4ec20 | ||
![]() |
2ff08aceec | ||
![]() |
882da9944d | ||
![]() |
794dbf923a | ||
![]() |
f9bdc8ad22 | ||
![]() |
fe2a759159 | ||
![]() |
d13d79acfe | ||
![]() |
2e924f727f | ||
![]() |
9ffb20429a | ||
![]() |
0f187b4d1c | ||
![]() |
e0d632a954 | ||
![]() |
a973887399 | ||
![]() |
be325ca8bd | ||
![]() |
0ab1bffde9 | ||
![]() |
c9f09d6079 | ||
![]() |
a6b29ae57c | ||
![]() |
d4be0fd104 | ||
![]() |
8bac68db84 | ||
![]() |
f84eafcaa2 | ||
![]() |
9377fd6901 | ||
![]() |
4b9320e40e | ||
![]() |
f3eaf0652d | ||
![]() |
2f2ccb33ed | ||
![]() |
3af44089bc | ||
![]() |
89475fcf26 | ||
![]() |
b28d121a54 | ||
![]() |
46106c6ef4 | ||
![]() |
68faa45c6a | ||
![]() |
d73d8ecfbe | ||
![]() |
06c9d9a79a | ||
![]() |
4ee36092e9 | ||
![]() |
7c56c05c9a | ||
![]() |
04c12d302e | ||
![]() |
0ff327f25f | ||
![]() |
484937a042 | ||
![]() |
de02748504 | ||
![]() |
bf2e54e3d3 | ||
![]() |
86f00f6b49 | ||
![]() |
765ba4b9ac | ||
![]() |
4c01c5a714 | ||
![]() |
3e140756dc | ||
![]() |
214a4afa6a | ||
![]() |
6ab7875aab | ||
![]() |
db3ff4b352 | ||
![]() |
9f0223dccd | ||
![]() |
305ef5d48a | ||
![]() |
a4c542a7b4 | ||
![]() |
a91b720c2e | ||
![]() |
490343b4d3 | ||
![]() |
ae7ad53949 | ||
![]() |
9cba9a753b | ||
![]() |
10558acac6 | ||
![]() |
2d802e03e9 | ||
![]() |
3cc82d656e | ||
![]() |
a2390802f8 | ||
![]() |
b8ae3d55d4 | ||
![]() |
d3fa3cdf48 | ||
![]() |
27a2c8cba4 | ||
![]() |
5025e80c9e | ||
![]() |
dd588222c7 | ||
![]() |
f88a5bb03b | ||
![]() |
ade8a19aef | ||
![]() |
e9d894fe66 | ||
![]() |
0ede159ad0 | ||
![]() |
a5a77af11e | ||
![]() |
22aefd6aba | ||
![]() |
80ee307244 | ||
![]() |
d83a210788 | ||
![]() |
0a1d6cf4d0 | ||
![]() |
656e1e416a | ||
![]() |
d6acbd0ea5 | ||
![]() |
118823c254 | ||
![]() |
c8430f5f85 | ||
![]() |
e2852da668 | ||
![]() |
504d29cf7a | ||
![]() |
20699e30dd | ||
![]() |
2ba760a1c1 | ||
![]() |
8b2cb63da8 | ||
![]() |
b5c839f739 | ||
![]() |
ce627f4318 | ||
![]() |
513ab37ec6 | ||
![]() |
cfb683f481 | ||
![]() |
67e34267a6 | ||
![]() |
f36e0b7b92 | ||
![]() |
b394ae1786 | ||
![]() |
8348631bf5 | ||
![]() |
6b8933cfe8 | ||
![]() |
7dc1a66f91 | ||
![]() |
277852afc1 | ||
![]() |
10abece264 | ||
![]() |
3a10b6a3d5 | ||
![]() |
76c43a5bdc | ||
![]() |
5b08a65ad2 | ||
![]() |
e4058177af | ||
![]() |
68c4009bba | ||
![]() |
42eb4e0da0 | ||
![]() |
b35621fc63 | ||
![]() |
58c49cea5b | ||
![]() |
0a4fb6963d | ||
![]() |
3b0ffd0f48 | ||
![]() |
6dc64eaa28 | ||
![]() |
2f6592de7f | ||
![]() |
1168e4e163 | ||
![]() |
f6ca86c3dd | ||
![]() |
a7c136c03f | ||
![]() |
6be7f354c2 | ||
![]() |
56c6d2feab | ||
![]() |
9d0251f7a6 | ||
![]() |
b73262be3a | ||
![]() |
8cdcd0fa9d | ||
![]() |
71a2e8a36d | ||
![]() |
81cd995108 | ||
![]() |
337d03d368 | ||
![]() |
c87fba1dc3 | ||
![]() |
46977a011d | ||
![]() |
288f24b294 | ||
![]() |
997c29ba05 | ||
![]() |
81e63ed6d8 | ||
![]() |
11fba84334 | ||
![]() |
a3d9eb43f1 | ||
![]() |
3e8cf3ec8c | ||
![]() |
46f7cf4da2 | ||
![]() |
e9ba93315c | ||
![]() |
6d922de0cb | ||
![]() |
f55052b61f | ||
![]() |
1eb0cb0c65 | ||
![]() |
ab9585401b | ||
![]() |
e32c1e08bd | ||
![]() |
605ad73ec0 | ||
![]() |
c074488f75 | ||
![]() |
228acbeac2 | ||
![]() |
1d68f2a328 | ||
![]() |
bcc77a60e0 | ||
![]() |
7ce4cfa638 | ||
![]() |
f1d3663d24 | ||
![]() |
745c154dbc | ||
![]() |
ed102a7795 | ||
![]() |
702740a3e2 | ||
![]() |
d3c08ecc3a | ||
![]() |
e8558458c4 | ||
![]() |
2dea4ce6a2 | ||
![]() |
bb5d43e9c5 | ||
![]() |
21ab40bab2 | ||
![]() |
1b9108ea0d | ||
![]() |
c4566c4d2b | ||
![]() |
4fb15f6bb7 | ||
![]() |
51ea467350 | ||
![]() |
92025b00f0 | ||
![]() |
1dd9fa3f30 | ||
![]() |
ed0a233d48 | ||
![]() |
3b7d5aa042 | ||
![]() |
41493426b3 | ||
![]() |
1ab488eb06 | ||
![]() |
9665843635 | ||
![]() |
2a814a99af | ||
![]() |
3740a3287a | ||
![]() |
9063ede25f | ||
![]() |
aa0fabd51d | ||
![]() |
588b758717 | ||
![]() |
c350616038 | ||
![]() |
b31924e13e | ||
![]() |
84df3b04db | ||
![]() |
502b1bdda6 | ||
![]() |
cd7464a884 | ||
![]() |
ac00b91472 | ||
![]() |
ecf2f91042 | ||
![]() |
09ceaa6cf3 | ||
![]() |
f5ebc1700f | ||
![]() |
e6cf125e53 | ||
![]() |
344932d27e | ||
![]() |
3ed5d6c372 | ||
![]() |
7bf5923052 | ||
![]() |
2c237b1ae4 | ||
![]() |
e3f3179924 | ||
![]() |
274578ff46 | ||
![]() |
b413439416 | ||
![]() |
2c1addff4f | ||
![]() |
28107326da | ||
![]() |
e4c18c101c | ||
![]() |
d5da303f45 | ||
![]() |
fca08c939c | ||
![]() |
cacc96b25d | ||
![]() |
824e585e2b | ||
![]() |
9257a0f562 | ||
![]() |
1fdf29075d | ||
![]() |
f4845e4e6c | ||
![]() |
0109ffbdcb | ||
![]() |
b3c7fe1023 | ||
![]() |
7537985c08 | ||
![]() |
67a374d932 | ||
![]() |
1b33a31536 | ||
![]() |
9d94296741 | ||
![]() |
d713571cd4 | ||
![]() |
ba40d667e1 | ||
![]() |
f2f005cbdf | ||
![]() |
088180e3d8 | ||
![]() |
b5ba12119d | ||
![]() |
bd51afb091 | ||
![]() |
78e5b2c6a4 | ||
![]() |
202b945f88 | ||
![]() |
798ff807b3 | ||
![]() |
92457ec99f | ||
![]() |
04f0cd5c80 | ||
![]() |
8e690df1da | ||
![]() |
1268d1a093 | ||
![]() |
1abfa9ac75 | ||
![]() |
b8b01c1075 | ||
![]() |
427ecbbc53 | ||
![]() |
992e17fb48 | ||
![]() |
a98b219922 | ||
![]() |
0161955c22 | ||
![]() |
bffe321cd2 | ||
![]() |
56bed1e581 | ||
![]() |
3444c4abe5 | ||
![]() |
6d877c3170 | ||
![]() |
9602c06f8d | ||
![]() |
c959e65edd | ||
![]() |
12ed867b5e | ||
![]() |
c24f10e4f6 | ||
![]() |
51a0889b75 | ||
![]() |
4938971aad | ||
![]() |
18646179d0 | ||
![]() |
1f95a417f2 | ||
![]() |
45af3d6a83 | ||
![]() |
1b92108bc3 | ||
![]() |
accc3fd737 | ||
![]() |
87150b7770 | ||
![]() |
c940a2f362 | ||
![]() |
4d1f3f4e9d | ||
![]() |
b9e614bd39 | ||
![]() |
b173c71ffc | ||
![]() |
9dd896904c | ||
![]() |
4f96eebe1b | ||
![]() |
3db945283a | ||
![]() |
c43e7b198d | ||
![]() |
3c746e8bb0 | ||
![]() |
56e52037a8 | ||
![]() |
363cea7c34 | ||
![]() |
25bace5e81 | ||
![]() |
81aca17d6e | ||
![]() |
61f00c0c4d | ||
![]() |
1b04db2a77 | ||
![]() |
de4ad2c775 | ||
![]() |
bbdc879995 | ||
![]() |
9a4c76d18d | ||
![]() |
9697c4df4e | ||
![]() |
67ff3f7845 | ||
![]() |
ef5bd9ee6c | ||
![]() |
9360a3bd51 | ||
![]() |
041f510f90 | ||
![]() |
6d03bb9ffc | ||
![]() |
1324c2862d | ||
![]() |
a160da1f2b | ||
![]() |
a5768f52b4 | ||
![]() |
cf91660cee | ||
![]() |
4493b838d9 | ||
![]() |
4cb8b513af | ||
![]() |
d91869a1fa | ||
![]() |
d89fc0772b | ||
![]() |
e5b171868a | ||
![]() |
6844055dd1 | ||
![]() |
37a7f9f382 | ||
![]() |
473f37df95 | ||
![]() |
de8faf8664 | ||
![]() |
d09604d636 | ||
![]() |
9560d0813f | ||
![]() |
2021c62997 | ||
![]() |
5cf94234d2 | ||
![]() |
868d52f3a8 | ||
![]() |
979bf32266 | ||
![]() |
2cf869c1a4 | ||
![]() |
07822979aa | ||
![]() |
edee46e794 | ||
![]() |
5e1ed9d580 | ||
![]() |
47ae883ba0 | ||
![]() |
f04e5108b2 | ||
![]() |
04f1a34c39 | ||
![]() |
965627e81c | ||
![]() |
40833b585b | ||
![]() |
789e478d4d | ||
![]() |
1cccbaf7ec | ||
![]() |
3f788a4e5a | ||
![]() |
cb47231518 | ||
![]() |
ce54984556 | ||
![]() |
0d9973ef87 | ||
![]() |
feb58ebd54 | ||
![]() |
8226b046a9 | ||
![]() |
e56d5443a8 | ||
![]() |
6021803d58 | ||
![]() |
ec093bebad | ||
![]() |
db59494b1b | ||
![]() |
5a29db2787 | ||
![]() |
d9cc30291f | ||
![]() |
10575c1b38 | ||
![]() |
c37a957174 | ||
![]() |
6b6dcc6c09 | ||
![]() |
1cb3f0e92a | ||
![]() |
fbaa148fe0 | ||
![]() |
d0bff6fd3e | ||
![]() |
4deea87579 | ||
![]() |
dc74e634f9 | ||
![]() |
ef69da054e | ||
![]() |
9554283b03 | ||
![]() |
fda92fd34a | ||
![]() |
0b38941362 | ||
![]() |
f295aaf185 | ||
![]() |
fd29fd923a | ||
![]() |
d685ac689b | ||
![]() |
25225ba792 | ||
![]() |
d254256047 | ||
![]() |
14a7379799 | ||
![]() |
210fc7d038 | ||
![]() |
ef49b93532 | ||
![]() |
a268e0b7a3 | ||
![]() |
e2f28bc134 | ||
![]() |
8fa0b74d80 | ||
![]() |
c122e9df73 | ||
![]() |
14c98dd863 | ||
![]() |
0da273ea79 | ||
![]() |
1cc7c5d030 | ||
![]() |
34ff7af7c7 | ||
![]() |
48101cc294 | ||
![]() |
6ac7f19640 | ||
![]() |
954f0e948d | ||
![]() |
eae8678d67 | ||
![]() |
17576a6949 | ||
![]() |
16ad918d96 | ||
![]() |
77495cf119 | ||
![]() |
2772581c28 | ||
![]() |
59778664c9 | ||
![]() |
b1e345b6bc | ||
![]() |
6c7c9f2ef5 | ||
![]() |
08a1892801 | ||
![]() |
e3d4385280 | ||
![]() |
3678a25baa | ||
![]() |
efa8b4a9b8 | ||
![]() |
3fdd2a40b2 | ||
![]() |
973c7d47eb | ||
![]() |
2bab947e38 | ||
![]() |
2cd0b9ec35 | ||
![]() |
b56c4fe945 | ||
![]() |
6798e7e059 | ||
![]() |
c5e23eaa14 | ||
![]() |
5723d38087 | ||
![]() |
3230d5b1ea | ||
![]() |
41b608562a | ||
![]() |
1923b1845d | ||
![]() |
8b6d0a166b | ||
![]() |
eb298e2b81 | ||
![]() |
4b59cb9a20 | ||
![]() |
0f53e746ff | ||
![]() |
f7e7ba92ca | ||
![]() |
88478a9d05 | ||
![]() |
e0f1ba8b0e | ||
![]() |
4c156100fa | ||
![]() |
4bbacb1008 | ||
![]() |
c53acb1455 | ||
![]() |
1eefc2b3ef | ||
![]() |
95b77a0e73 | ||
![]() |
f308435b64 | ||
![]() |
4f4c93594d | ||
![]() |
f79529c09c | ||
![]() |
1d6ca3bc9b | ||
![]() |
071c30f381 | ||
![]() |
cfc146e18f | ||
![]() |
34966304dd | ||
![]() |
bb0e688b8e | ||
![]() |
04b1a67898 | ||
![]() |
f1e006d09b | ||
![]() |
d5d1b43eb9 | ||
![]() |
4080ab3d03 | ||
![]() |
960d9fa6f1 | ||
![]() |
ad7764b5b2 | ||
![]() |
942eb0f323 | ||
![]() |
787229a35e | ||
![]() |
2029ca9536 | ||
![]() |
0693462eba | ||
![]() |
ec02ddf986 | ||
![]() |
9554a354d4 | ||
![]() |
7d45a43f57 | ||
![]() |
14f1123bbd | ||
![]() |
e7431f54f2 | ||
![]() |
54dc699ddd | ||
![]() |
c5d958d104 | ||
![]() |
50381f7b4c | ||
![]() |
22fb66436d | ||
![]() |
99e75e6a8a | ||
![]() |
cba327fc38 | ||
![]() |
14d69e46be | ||
![]() |
48738df489 | ||
![]() |
3cb4d73899 | ||
![]() |
f5d0510064 | ||
![]() |
6e1eec908a | ||
![]() |
6284f2d722 | ||
![]() |
11fba59319 | ||
![]() |
cca4be6c67 | ||
![]() |
98fb10a724 | ||
![]() |
fe77b6713b | ||
![]() |
5cea4b2420 | ||
![]() |
e43387abac | ||
![]() |
bc0d6c7e92 | ||
![]() |
a61d0f074f | ||
![]() |
8aa28e63fb | ||
![]() |
3cfb838ba7 | ||
![]() |
7454e45796 | ||
![]() |
200e58d11e | ||
![]() |
eb53680a06 | ||
![]() |
06d93e95d1 | ||
![]() |
2ecd7c148d | ||
![]() |
15376397b1 | ||
![]() |
30ccfe0832 | ||
![]() |
9b2b4ce647 | ||
![]() |
a64d5607a7 | ||
![]() |
b9cefb1440 | ||
![]() |
c81d8b43a1 | ||
![]() |
bd897d9c14 | ||
![]() |
430f16bf76 | ||
![]() |
2a96ef2519 | ||
![]() |
946d3fdd4f | ||
![]() |
38a582634e | ||
![]() |
eb4380fa14 | ||
![]() |
2216704db8 | ||
![]() |
7d0ce5605a | ||
![]() |
086c1d4090 | ||
![]() |
eb7fcf1b74 | ||
![]() |
b59b65d2ed | ||
![]() |
dbf7534cd4 | ||
![]() |
edbf06aaab | ||
![]() |
3a5f43528e | ||
![]() |
50e61e0e16 | ||
![]() |
6cf735031f | ||
![]() |
77e01448e2 | ||
![]() |
c789cfe518 | ||
![]() |
19c99d3b42 | ||
![]() |
1b658ae109 | ||
![]() |
3d685fe7f2 | ||
![]() |
7dc6829519 | ||
![]() |
5e78f08a24 | ||
![]() |
13bb132044 | ||
![]() |
268ce0287f | ||
![]() |
74624381b3 | ||
![]() |
1419091923 | ||
![]() |
e754795d3a | ||
![]() |
a7f330fa94 | ||
![]() |
65d6acdbfa | ||
![]() |
8af8869d3b | ||
![]() |
96f7cd09dc | ||
![]() |
433ffe2152 | ||
![]() |
81450bc71d | ||
![]() |
1a37777f59 | ||
![]() |
d70403f1f4 | ||
![]() |
bce282186e | ||
![]() |
4e61eb6d9e | ||
![]() |
31a66eb5bc | ||
![]() |
8b8b9690ad | ||
![]() |
05969d2a58 | ||
![]() |
a88d7c7c74 | ||
![]() |
365c4169a5 | ||
![]() |
9593ab7acc | ||
![]() |
bbc76e7777 | ||
![]() |
41801c2a6b | ||
![]() |
d2d486dced | ||
![]() |
7a1179a4e1 | ||
![]() |
6941a5af81 | ||
![]() |
c28503060c | ||
![]() |
debde4cc97 | ||
![]() |
39a64334aa | ||
![]() |
bb4fb0543b | ||
![]() |
912802456b | ||
![]() |
0833806980 | ||
![]() |
8181d470e5 | ||
![]() |
9c2a8490af | ||
![]() |
fc761953b3 | ||
![]() |
7fd0a17bc3 | ||
![]() |
0493983a8f | ||
![]() |
aaec12a3fb | ||
![]() |
9b7dee563e | ||
![]() |
8bb012e50b | ||
![]() |
b893f1d541 | ||
![]() |
914e82b25d | ||
![]() |
e02eee7477 | ||
![]() |
23f7130ae4 | ||
![]() |
b3fda4a354 | ||
![]() |
a70978e057 | ||
![]() |
f6a45a7aab | ||
![]() |
2b735ee8f5 | ||
![]() |
cdbd3a0b4e | ||
![]() |
cdae66c837 | ||
![]() |
268ab5863a | ||
![]() |
c7686f8d5e | ||
![]() |
2016ad72f3 | ||
![]() |
11fb837b51 | ||
![]() |
c2bc363f06 | ||
![]() |
bb795e6a5e | ||
![]() |
fcf7791454 | ||
![]() |
e7090c7514 | ||
![]() |
ba3d71b615 | ||
![]() |
e8b7f21af6 | ||
![]() |
002cb9289d | ||
![]() |
c3bde520cc | ||
![]() |
70a92291fe | ||
![]() |
cbbd858be4 | ||
![]() |
dc3afdbf3b | ||
![]() |
c750030f7a | ||
![]() |
6280cba6e8 | ||
![]() |
6b44d8fb55 | ||
![]() |
af59864ab5 | ||
![]() |
77714e02ca | ||
![]() |
62b2d05d34 | ||
![]() |
19a597bcae | ||
![]() |
ddc029ce54 | ||
![]() |
20ef6c4ef7 | ||
![]() |
5c428d35a6 | ||
![]() |
8ad024e51b | ||
![]() |
acfaa4494f | ||
![]() |
069e1ef84f | ||
![]() |
59ad5c59df | ||
![]() |
4bd02fb04d | ||
![]() |
c88e7481be | ||
![]() |
7fb74a33a1 | ||
![]() |
7ac85d08c7 | ||
![]() |
05cc342dfa | ||
![]() |
1d857605b7 | ||
![]() |
b262164a35 | ||
![]() |
c0ecf8b50f | ||
![]() |
23c8670e79 | ||
![]() |
4c9605910f | ||
![]() |
5fea010406 | ||
![]() |
26d05d7fc9 | ||
![]() |
625c27ca58 | ||
![]() |
7a3d7a7c23 | ||
![]() |
5a0c2bd638 | ||
![]() |
eedafb23f7 | ||
![]() |
57d2eb603b | ||
![]() |
1ef820ecfe | ||
![]() |
c998e9c60b | ||
![]() |
9f0bae4c3f | ||
![]() |
49d8d27770 | ||
![]() |
270136e84a | ||
![]() |
e8dd200fed | ||
![]() |
6ecd480006 | ||
![]() |
7211dd18b4 | ||
![]() |
5dae5e1292 | ||
![]() |
f26a93908e | ||
![]() |
f22d8ee3b9 | ||
![]() |
ec4bd39a92 | ||
![]() |
27acaa013b | ||
![]() |
49e2aabc81 | ||
![]() |
a0aea52a11 | ||
![]() |
e4f4ad5bc3 | ||
![]() |
a3e017bfd2 | ||
![]() |
32f9f452af | ||
![]() |
eb89df4115 | ||
![]() |
a9aa0e3a1a | ||
![]() |
1e998ce3bd | ||
![]() |
2c48050993 | ||
![]() |
1c4f22a54c | ||
![]() |
206d63e038 | ||
![]() |
e2d3c0b2d3 | ||
![]() |
116a258858 | ||
![]() |
792cf95f2d | ||
![]() |
d7175ad834 | ||
![]() |
9f5b08dc93 | ||
![]() |
9fd0fee458 | ||
![]() |
a57ba87859 | ||
![]() |
dbcef41f95 | ||
![]() |
2c745d1b1e | ||
![]() |
f1bef8d8dd | ||
![]() |
9c1918fe46 | ||
![]() |
aaff27d220 | ||
![]() |
eaa159c0a6 | ||
![]() |
137d516882 | ||
![]() |
1e91fc97e2 | ||
![]() |
c4b2fed8bd | ||
![]() |
c3770019cb | ||
![]() |
8e3bdd2391 | ||
![]() |
4c796b89d8 | ||
![]() |
c0e4c02b9d | ||
![]() |
bc579c045e | ||
![]() |
77f0726361 | ||
![]() |
04c759028a | ||
![]() |
4be7546372 | ||
![]() |
fd50be2e62 | ||
![]() |
4fc4f35a8a | ||
![]() |
654f182176 | ||
![]() |
6945c594d5 | ||
![]() |
f15f79df5d | ||
![]() |
cda5ab8b25 | ||
![]() |
97ee40fd7b | ||
![]() |
8a9d2b4b75 | ||
![]() |
161c95f1b7 | ||
![]() |
629717cd13 | ||
![]() |
75cf8e21a7 | ||
![]() |
6ff62c0fe8 | ||
![]() |
a349869906 | ||
![]() |
5f7e7b4b0a | ||
![]() |
4afed62646 | ||
![]() |
be54870c3b | ||
![]() |
5e023fa2ca | ||
![]() |
1763eede48 | ||
![]() |
fb5fe3360f | ||
![]() |
0a43a7b418 | ||
![]() |
678edbe203 | ||
![]() |
5ade917805 | ||
![]() |
2afef458be | ||
![]() |
090078542f | ||
![]() |
a41ab41b8b | ||
![]() |
190acc1fb0 | ||
![]() |
8f47976639 | ||
![]() |
e3b3229d61 | ||
![]() |
732686cc10 | ||
![]() |
ee58278ed2 | ||
![]() |
8214f0f497 | ||
![]() |
c10f52b237 | ||
![]() |
438387be8c | ||
![]() |
86f6fd17ed | ||
![]() |
a32ef1cde1 | ||
![]() |
9698a088db | ||
![]() |
85d9925d24 | ||
![]() |
293a6222f8 | ||
![]() |
cf95b44001 | ||
![]() |
45169d833d | ||
![]() |
1a229f3ce2 | ||
![]() |
4c7fd1648e | ||
![]() |
ad39833ea4 | ||
![]() |
908e23d109 | ||
![]() |
841a62170e | ||
![]() |
964e7ebf21 | ||
![]() |
8ede566c41 | ||
![]() |
a4d5d51549 | ||
![]() |
5254202b20 | ||
![]() |
9858d45815 | ||
![]() |
11e1aff389 | ||
![]() |
6daa135201 | ||
![]() |
0afe1b3684 | ||
![]() |
0871238cac | ||
![]() |
9bf97e3e52 | ||
![]() |
2ac289685a | ||
![]() |
b42d3e431c | ||
![]() |
fab48e5bcc | ||
![]() |
9771c76f25 | ||
![]() |
c0674142a8 | ||
![]() |
9002dc7067 | ||
![]() |
c3a60ed355 | ||
![]() |
412b557a08 | ||
![]() |
fa8f3731c1 | ||
![]() |
d97b6d57de | ||
![]() |
8c780a9564 | ||
![]() |
818bda18c2 | ||
![]() |
2f2c8ce9ec | ||
![]() |
723e21ad6a | ||
![]() |
71d2ccd78f | ||
![]() |
413b0a7da5 | ||
![]() |
0ea23904c4 | ||
![]() |
152a22f3ee | ||
![]() |
16ed10a6e4 | ||
![]() |
cbf4b1aec8 | ||
![]() |
28817a7150 | ||
![]() |
95dec2ac26 | ||
![]() |
d4c7c9871e | ||
![]() |
2cda9b60c9 | ||
![]() |
3336fbafe4 | ||
![]() |
6db24e0dba | ||
![]() |
106084289d | ||
![]() |
5f327dd49f | ||
![]() |
f7aa716a61 | ||
![]() |
4c5104f6d6 | ||
![]() |
8d07f5e733 | ||
![]() |
44fab77c3d | ||
![]() |
718bcdb8bc | ||
![]() |
4f96a1f3b2 | ||
![]() |
5ef260d5fc | ||
![]() |
f2faf72f7f | ||
![]() |
1911c613c7 | ||
![]() |
160e2a8aeb | ||
![]() |
1372d4e4d5 | ||
![]() |
805ebb3924 | ||
![]() |
a77aaf7f9e | ||
![]() |
290f18a1fe | ||
![]() |
d7d4e7b527 | ||
![]() |
cf7aad790c | ||
![]() |
641613c428 | ||
![]() |
96718b7ca0 | ||
![]() |
99315bcca3 | ||
![]() |
1fb2a2f1bd | ||
![]() |
876f49f6ad | ||
![]() |
faaed198b4 | ||
![]() |
5ce60c5d20 | ||
![]() |
993b8d6686 | ||
![]() |
389babf20b | ||
![]() |
e508831561 | ||
![]() |
78732d6733 | ||
![]() |
97f9321e1d | ||
![]() |
5add4c97fa | ||
![]() |
df5f60b6d6 | ||
![]() |
b054229780 | ||
![]() |
59cbfbbdbe | ||
![]() |
f640163ee9 | ||
![]() |
ad7bacbfd8 | ||
![]() |
76dae8d8c1 | ||
![]() |
71fb6469d4 | ||
![]() |
7440782afb | ||
![]() |
f80d11301e | ||
![]() |
cd0fdc3264 | ||
![]() |
4cee79af27 | ||
![]() |
033627ee41 | ||
![]() |
4274cab395 | ||
![]() |
096da11e88 | ||
![]() |
c85f46c4ab | ||
![]() |
07976ad26d | ||
![]() |
f27486e19a | ||
![]() |
f8a5cde3c7 | ||
![]() |
0921edaf59 | ||
![]() |
a97f39151e | ||
![]() |
d22fc550c7 | ||
![]() |
8a0b17598c | ||
![]() |
d34508a316 | ||
![]() |
878f2b54fe | ||
![]() |
ec9c666107 | ||
![]() |
096b6ec462 | ||
![]() |
42decd94e5 | ||
![]() |
ccf17e3cde | ||
![]() |
e44e461ce3 | ||
![]() |
cbcf5d8c08 | ||
![]() |
4520218786 | ||
![]() |
d4d6f60885 | ||
![]() |
f58da31145 | ||
![]() |
f75a019732 | ||
![]() |
934baae9b8 | ||
![]() |
1154b7a9e7 | ||
![]() |
64c6b715ce | ||
![]() |
80be1aa13d | ||
![]() |
1867ba0bc1 | ||
![]() |
aa11e21358 | ||
![]() |
b46632ba07 | ||
![]() |
322f58ea85 | ||
![]() |
ab0da3c30b | ||
![]() |
3944f1c4da | ||
![]() |
779149ecce | ||
![]() |
ec0f25d095 | ||
![]() |
bbe550efa0 | ||
![]() |
1fc203b085 | ||
![]() |
2d187777c0 | ||
![]() |
b13b95a670 | ||
![]() |
f9b8a0667a | ||
![]() |
f1a859d907 | ||
![]() |
9f54cc1eb7 | ||
![]() |
d919f107c7 | ||
![]() |
bdfcd50b1b | ||
![]() |
65ee11ff63 | ||
![]() |
b2568eb02b | ||
![]() |
1ed04ad05d | ||
![]() |
b3ecf82196 | ||
![]() |
899e7cc4f9 | ||
![]() |
bc57358eb0 | ||
![]() |
4d273254b6 | ||
![]() |
6683053f48 | ||
![]() |
57d23c7a68 | ||
![]() |
25d802532c | ||
![]() |
f14b4ba30a | ||
![]() |
0c174c17ad | ||
![]() |
a4b17483b9 | ||
![]() |
2e5f649fd3 | ||
![]() |
3623ba1884 | ||
![]() |
2faad42cb1 | ||
![]() |
323a56e309 | ||
![]() |
6763521ec7 | ||
![]() |
16daad8164 | ||
![]() |
96d064e923 | ||
![]() |
511f5be8b3 | ||
![]() |
e1fda007f6 | ||
![]() |
317177c83d | ||
![]() |
f349ae7702 | ||
![]() |
6b84a29f8c | ||
![]() |
c12795734c | ||
![]() |
e7d212f337 | ||
![]() |
ffdffc7e06 | ||
![]() |
e0b1de923c | ||
![]() |
d875e694f8 | ||
![]() |
2a10d5c20b | ||
![]() |
92aed7e3e0 | ||
![]() |
bc2127b330 | ||
![]() |
1117cf5729 | ||
![]() |
cd1726c009 | ||
![]() |
fabe86362b | ||
![]() |
b443851980 | ||
![]() |
ffa56a1beb | ||
![]() |
d9a9dc5ac0 | ||
![]() |
ea8ecea59a | ||
![]() |
d31aac453e | ||
![]() |
7cf67b2845 | ||
![]() |
9247131b1f | ||
![]() |
43770802f9 | ||
![]() |
296ce528fc | ||
![]() |
f6774d5611 | ||
![]() |
f8a21fff17 | ||
![]() |
0a7c08d16e | ||
![]() |
be21413361 | ||
![]() |
e045995407 | ||
![]() |
4065ca3fca | ||
![]() |
a8d7e08cee | ||
![]() |
cae05c6593 | ||
![]() |
7428a16d2d | ||
![]() |
fe77976765 | ||
![]() |
6af18dc906 | ||
![]() |
b5b2fad5fb | ||
![]() |
4857abdc6b | ||
![]() |
206a9a21e6 | ||
![]() |
704f3ddeb5 | ||
![]() |
7e6a6e75bc | ||
![]() |
fb9180b6eb | ||
![]() |
7c9bd81eca | ||
![]() |
d41320a42e | ||
![]() |
76f43a7a16 | ||
![]() |
f0ddf8d10f | ||
![]() |
990fb6ae5c | ||
![]() |
0f8e530de1 | ||
![]() |
2cf092464b | ||
![]() |
05e0205ad0 | ||
![]() |
af577d2b6d | ||
![]() |
b3ad560e62 | ||
![]() |
8ae4f8f069 | ||
![]() |
410ad4d0f9 | ||
![]() |
be66f5f57f | ||
![]() |
0957902c40 | ||
![]() |
9e0ae5f29d | ||
![]() |
3387c86108 | ||
![]() |
66da95a0ee | ||
![]() |
ec8c292bbe | ||
![]() |
02478c57e5 | ||
![]() |
e62d1a03ac | ||
![]() |
b6404d143e | ||
![]() |
9930863b41 | ||
![]() |
5c537c25f0 | ||
![]() |
956d1c9c4e | ||
![]() |
a83cef5e4c | ||
![]() |
95cfa37bf5 | ||
![]() |
0a1a61bb6c | ||
![]() |
9824981ee8 | ||
![]() |
8a493485e8 | ||
![]() |
b4ef98cbdc | ||
![]() |
a99ee1b1a2 | ||
![]() |
363fcc5b68 | ||
![]() |
7089535848 | ||
![]() |
9a8a9359e4 | ||
![]() |
e92583ffd7 | ||
![]() |
b7fa90e706 | ||
![]() |
34798ff85e | ||
![]() |
5d3084a714 | ||
![]() |
8c8f26f14e | ||
![]() |
787afbbcd0 | ||
![]() |
3c38c7dc25 | ||
![]() |
ffdc100cb9 | ||
![]() |
4c510c12b1 | ||
![]() |
65ac519715 | ||
![]() |
e34aeb5cf6 | ||
![]() |
73afca14eb | ||
![]() |
eca96c635d | ||
![]() |
4caa6063b0 | ||
![]() |
1466afafeb | ||
![]() |
b66c2d5f0a | ||
![]() |
8fadaf01d3 | ||
![]() |
302b9562dc | ||
![]() |
498989ee00 | ||
![]() |
4c846af53e | ||
![]() |
c01aee6c1a | ||
![]() |
78a014ef18 | ||
![]() |
557bf82336 | ||
![]() |
bcf5e5f729 | ||
![]() |
03ec49450d | ||
![]() |
4e2afdf5e1 | ||
![]() |
75f6583c1c | ||
![]() |
f2a6af05b1 | ||
![]() |
f87262185e | ||
![]() |
cc9c3feeae | ||
![]() |
e89e8ba392 | ||
![]() |
5d3c0fb922 | ||
![]() |
c1d0fd1bd7 | ||
![]() |
2063ee5f15 | ||
![]() |
d5e6d02817 | ||
![]() |
c820c87692 | ||
![]() |
d367e8f8a8 | ||
![]() |
3342635237 | ||
![]() |
9e16e904ed | ||
![]() |
6b4838cb2f | ||
![]() |
fde7577117 | ||
![]() |
e3be8a0a15 | ||
![]() |
95acf3960d | ||
![]() |
d87f4da6b1 | ||
![]() |
09e70ebd13 | ||
![]() |
ac60a03ea9 | ||
![]() |
fbf99b8e53 | ||
![]() |
fb5fd22c73 | ||
![]() |
49c621d510 | ||
![]() |
3e86f0532a | ||
![]() |
105f108661 | ||
![]() |
002ca345b8 | ||
![]() |
7e2c5fcc8a | ||
![]() |
ec26c6163c | ||
![]() |
f48ae4aad7 | ||
![]() |
86c416d4c0 | ||
![]() |
f0ab6d824e | ||
![]() |
39a37d82ce | ||
![]() |
cf162e2c54 | ||
![]() |
7e48da5b44 | ||
![]() |
c0d79457f6 | ||
![]() |
8d3f0ffb95 | ||
![]() |
792b552c5c | ||
![]() |
830849211d | ||
![]() |
3422e05684 | ||
![]() |
4c03a9f855 | ||
![]() |
1727702217 | ||
![]() |
647fd030ff | ||
![]() |
3846da69d3 | ||
![]() |
6ec0537408 | ||
![]() |
d6354a2aa7 | ||
![]() |
49628d8c18 | ||
![]() |
ddb061f639 | ||
![]() |
9b6d6a983a | ||
![]() |
5f4701bb3e | ||
![]() |
95403ed9ac | ||
![]() |
6759721e9a | ||
![]() |
19b6cbc616 | ||
![]() |
0cce42fcc6 | ||
![]() |
b03a688b24 | ||
![]() |
7166bb3643 | ||
![]() |
25603c7269 | ||
![]() |
770de31dd9 | ||
![]() |
06079dcae1 | ||
![]() |
8681dbb7a2 | ||
![]() |
39eb1ce70e | ||
![]() |
63a6fd3689 | ||
![]() |
c07fb9a71e | ||
![]() |
b464f91a6e | ||
![]() |
63e6aea5ac | ||
![]() |
6257123157 | ||
![]() |
cc18784479 | ||
![]() |
6dd40603f9 | ||
![]() |
88f3279c3c | ||
![]() |
00c007ed68 | ||
![]() |
11384159e1 | ||
![]() |
778b62df81 | ||
![]() |
718e7342b1 | ||
![]() |
02f1f05697 | ||
![]() |
42230df71a | ||
![]() |
ba017d0669 | ||
![]() |
0d2078d295 | ||
![]() |
73b0047efc | ||
![]() |
df2ebe5d1a | ||
![]() |
c3e47c31cc | ||
![]() |
9b6ef4fcbc | ||
![]() |
0a4e611e37 | ||
![]() |
db36075721 | ||
![]() |
f4c3f0800d | ||
![]() |
436cd5b9b8 | ||
![]() |
1bbeb6ad79 | ||
![]() |
18c3095346 | ||
![]() |
a6e0b598fa | ||
![]() |
456a8b208b | ||
![]() |
cb34cb2a93 | ||
![]() |
daec3c24d8 | ||
![]() |
074289caa3 | ||
![]() |
3fd075b48b | ||
![]() |
ea098aeda1 | ||
![]() |
84be70baf5 | ||
![]() |
075095554a | ||
![]() |
fb7122f07d | ||
![]() |
ecfd57e6f1 | ||
![]() |
eb7aacb51f | ||
![]() |
8df2fd1916 | ||
![]() |
c86e628a4c | ||
![]() |
1891802f08 | ||
![]() |
c414cc650e | ||
![]() |
3fee8b402e | ||
![]() |
2e47210c1a | ||
![]() |
546dd6038c | ||
![]() |
fa9d19027b | ||
![]() |
b1021d53f3 | ||
![]() |
160d64b00a | ||
![]() |
3cf21c66b6 | ||
![]() |
f05f81e8b3 | ||
![]() |
65f7a8006c | ||
![]() |
e6a3cfb350 | ||
![]() |
658897cf4e | ||
![]() |
e61d4aefe6 | ||
![]() |
3cc6cece07 | ||
![]() |
9d19ed940e | ||
![]() |
4ee4c6f594 | ||
![]() |
abb95fc4b3 | ||
![]() |
8775d55adc | ||
![]() |
57de6016f9 | ||
![]() |
a7e1de1e83 | ||
![]() |
949950e592 | ||
![]() |
83cc71feaf | ||
![]() |
79e5d7aa69 | ||
![]() |
c84de8f06b | ||
![]() |
9e551c9f5c | ||
![]() |
c29b7643a5 | ||
![]() |
248025bb6c | ||
![]() |
24bd1c9562 | ||
![]() |
507d5b10b0 | ||
![]() |
a804a1ac09 | ||
![]() |
2d7849282a | ||
![]() |
e885ced0fe | ||
![]() |
82457519fa | ||
![]() |
2a1b81e3c5 | ||
![]() |
9c73c1a532 | ||
![]() |
b42d298b81 | ||
![]() |
6e23c596cc | ||
![]() |
cde16b802b | ||
![]() |
8db462bf6e | ||
![]() |
d6b612257e | ||
![]() |
8c591e2c45 | ||
![]() |
18043131d0 | ||
![]() |
f5cffeedec | ||
![]() |
82f105e32b | ||
![]() |
69475cd1bf | ||
![]() |
7228239eb9 | ||
![]() |
51bb27a131 | ||
![]() |
35fa6b660a | ||
![]() |
fc32280f42 | ||
![]() |
7ff2f43bfd | ||
![]() |
21bdafcfef | ||
![]() |
07ad64adfe | ||
![]() |
db65759b1e | ||
![]() |
0bd41d5354 | ||
![]() |
e4f07206f8 | ||
![]() |
fe8c170c98 | ||
![]() |
8a1184e7b3 | ||
![]() |
cece59df22 | ||
![]() |
ef2f17a514 | ||
![]() |
b156a8b78c | ||
![]() |
17990025bb | ||
![]() |
1d37f5ef9b | ||
![]() |
76413a95d4 | ||
![]() |
9ec21248d7 | ||
![]() |
b4b619abd6 | ||
![]() |
8327090171 | ||
![]() |
d584b07e2c | ||
![]() |
510720b396 | ||
![]() |
9a84390878 | ||
![]() |
ec826732fc | ||
![]() |
abf53f9270 | ||
![]() |
8c0388f477 | ||
![]() |
d9b2c9934a | ||
![]() |
6d65eaf7a1 | ||
![]() |
1dcffc655d | ||
![]() |
95ba158a10 | ||
![]() |
549bee94ad | ||
![]() |
d0ca6ca8f7 | ||
![]() |
301b6af6c6 | ||
![]() |
4b5880671c | ||
![]() |
48d4a67ec5 | ||
![]() |
48f4d8b7f7 | ||
![]() |
15a02d04df | ||
![]() |
2777df411f | ||
![]() |
396716cc2c | ||
![]() |
f33883c308 | ||
![]() |
14d45b580e | ||
![]() |
05c119ce97 | ||
![]() |
11233e4d3e | ||
![]() |
c99af908f1 | ||
![]() |
2d536123c8 | ||
![]() |
e3c9d94500 | ||
![]() |
8323e4b79a | ||
![]() |
9e8ea44925 | ||
![]() |
cd9008e5a9 | ||
![]() |
84a483f5ea | ||
![]() |
edc559cb4d | ||
![]() |
badb30a6c3 | ||
![]() |
22b62f8712 | ||
![]() |
76021c7359 | ||
![]() |
b3e63c335a | ||
![]() |
cb2af4c0bc | ||
![]() |
d1ea3844f7 | ||
![]() |
37529c41da | ||
![]() |
854e5222ae | ||
![]() |
97984b4203 | ||
![]() |
7004914d8c | ||
![]() |
a46ad8fcdf | ||
![]() |
e992ff46d2 | ||
![]() |
7d76c172db | ||
![]() |
fc9321ce26 | ||
![]() |
4811b3463f | ||
![]() |
bd1f7f86ce | ||
![]() |
f62f973956 | ||
![]() |
f0c51eae44 | ||
![]() |
4f03695084 | ||
![]() |
159aa599be | ||
![]() |
660343d200 | ||
![]() |
1e99480ad2 | ||
![]() |
96d2be905b | ||
![]() |
88e6da7273 | ||
![]() |
9f440e5c69 | ||
![]() |
ab18b8794f | ||
![]() |
a05adfce86 | ||
![]() |
9e7e8908a3 | ||
![]() |
04a5c03ea8 | ||
![]() |
ce064de6fd | ||
![]() |
82852774a7 | ||
![]() |
75989673e5 | ||
![]() |
f4f85bad54 | ||
![]() |
ec2902bd3f | ||
![]() |
007ed1f0fe | ||
![]() |
071da47944 | ||
![]() |
15ab35d9b8 | ||
![]() |
3e32fa36b8 | ||
![]() |
bae7fe5be7 | ||
![]() |
d4620d99d3 | ||
![]() |
c19bffb1d9 | ||
![]() |
d0758d0733 | ||
![]() |
4deec2f4be | ||
![]() |
33ea178cd9 | ||
![]() |
ffd008dc75 | ||
![]() |
bf8f4f9521 | ||
![]() |
86a3315bcf | ||
![]() |
56f846cf74 | ||
![]() |
19400c8556 | ||
![]() |
6492f4a18d | ||
![]() |
9cc93e6d41 | ||
![]() |
92b5f2d2e8 | ||
![]() |
aedae6201b | ||
![]() |
ab8cfb3d5b | ||
![]() |
a29b3dd690 | ||
![]() |
34081f6c5c | ||
![]() |
be4f4e4f79 | ||
![]() |
4b50ca2a61 | ||
![]() |
91d5fa5639 | ||
![]() |
a3827b87fe | ||
![]() |
a652212f27 | ||
![]() |
d9817ebe17 | ||
![]() |
603effbb77 | ||
![]() |
f03c28ec31 | ||
![]() |
d58120647a | ||
![]() |
71a5906865 | ||
![]() |
de5a67bf3b | ||
![]() |
279e2d6aeb | ||
![]() |
feed1a83a9 | ||
![]() |
b37870c964 | ||
![]() |
b9314bddc5 | ||
![]() |
e3df3ac5ce | ||
![]() |
d6d2499ad6 | ||
![]() |
43b255f413 | ||
![]() |
6a2cf67289 | ||
![]() |
52261ac02d | ||
![]() |
3816869fce | ||
![]() |
c31b95c916 | ||
![]() |
ae588d796e | ||
![]() |
f24f47d038 | ||
![]() |
8cce9385e2 | ||
![]() |
25abb10de1 | ||
![]() |
d3c4f66d35 | ||
![]() |
0ddd5591af | ||
![]() |
aceab1dcf3 | ||
![]() |
1437ad1dfb | ||
![]() |
c9c7dfa868 | ||
![]() |
069215c538 | ||
![]() |
fe63e30a44 | ||
![]() |
d588167a39 | ||
![]() |
2ae6a4d519 | ||
![]() |
ff26714958 | ||
![]() |
7d8d3eca73 | ||
![]() |
1fce76ad47 | ||
![]() |
52a9098b31 | ||
![]() |
be6f6f2c99 | ||
![]() |
b2a3f33046 | ||
![]() |
5785467016 | ||
![]() |
9ccfb384e8 | ||
![]() |
8ef32617ba | ||
![]() |
9825fbe9ac | ||
![]() |
081e4eecba | ||
![]() |
7298923927 | ||
![]() |
21d552bbdf | ||
![]() |
b41f5eadb3 | ||
![]() |
89eac75085 | ||
![]() |
3ba0311078 | ||
![]() |
4a2e424103 | ||
![]() |
34729b1dc4 | ||
![]() |
a394273ed2 | ||
![]() |
460bef9dbb | ||
![]() |
ba9f88f18c | ||
![]() |
53677d4844 | ||
![]() |
64ecf43663 | ||
![]() |
cab65acc46 | ||
![]() |
51873cd1be | ||
![]() |
47bc269b50 | ||
![]() |
2312bfe3c4 | ||
![]() |
375e822770 | ||
![]() |
0a844f2a30 | ||
![]() |
bf69ffb8f7 | ||
![]() |
daeaea9556 | ||
![]() |
16e1838862 | ||
![]() |
083ed364ba | ||
![]() |
bb570e02d6 | ||
![]() |
a6001fc8f2 | ||
![]() |
95fb11fcff | ||
![]() |
b00529e287 | ||
![]() |
2dc7a62361 | ||
![]() |
67cda9b7f9 | ||
![]() |
fc523733c1 | ||
![]() |
9b9d841770 | ||
![]() |
ba0f1a3be5 | ||
![]() |
d17eb94e84 | ||
![]() |
a6d9fda5f9 | ||
![]() |
2f909c284a | ||
![]() |
2fb0cea7e2 | ||
![]() |
468ec83c1b | ||
![]() |
d8badc948f | ||
![]() |
931b718289 | ||
![]() |
6c6b7ee2bf | ||
![]() |
21e003af22 | ||
![]() |
a6d4b64bec | ||
![]() |
c14e3e2501 | ||
![]() |
0763bc5979 | ||
![]() |
81de7f3d23 | ||
![]() |
19563b4414 | ||
![]() |
4fbf99621d | ||
![]() |
3325e2613d | ||
![]() |
70eefcb849 | ||
![]() |
2ddd74fada | ||
![]() |
abfcdf2cfb | ||
![]() |
da1589f116 | ||
![]() |
f3f3739073 | ||
![]() |
9d3d8fd5b0 | ||
![]() |
1eae139aa9 | ||
![]() |
e434a1dc05 | ||
![]() |
187e57dc81 | ||
![]() |
030b50dce3 | ||
![]() |
a0dc9008a7 | ||
![]() |
5d13eb8e7a | ||
![]() |
ca4ae61c1c | ||
![]() |
a97f6a4945 | ||
![]() |
fee90f353f | ||
![]() |
b920155444 | ||
![]() |
a061bc4173 | ||
![]() |
44e19aa3c7 | ||
![]() |
9e9f331503 | ||
![]() |
cb0ca6151b | ||
![]() |
d2c9b8bcfb | ||
![]() |
b554c2ed83 | ||
![]() |
38cdeb9e60 | ||
![]() |
3f3f6eee1c | ||
![]() |
dd0350f549 | ||
![]() |
9673d20901 | ||
![]() |
15ed45e1a3 | ||
![]() |
28f49c088b | ||
![]() |
025d3477e8 | ||
![]() |
815c2cc995 | ||
![]() |
5b1b383d2a | ||
![]() |
e3b7ed9ae9 | ||
![]() |
f931983469 | ||
![]() |
35e1a27c95 | ||
![]() |
bfcdef499a | ||
![]() |
4ec1643bdb | ||
![]() |
0b55047081 | ||
![]() |
fe4278554b | ||
![]() |
55db123a85 | ||
![]() |
19208cd88d | ||
![]() |
39be00975c | ||
![]() |
e79325adec | ||
![]() |
2cd4e27e98 | ||
![]() |
08a4988e99 | ||
![]() |
8f88ff559e | ||
![]() |
a49ca795af | ||
![]() |
3f45f37672 | ||
![]() |
3846d5f38c | ||
![]() |
2a520fb921 | ||
![]() |
154821acc0 | ||
![]() |
2c1ff2673b | ||
![]() |
4238467b2d | ||
![]() |
930c68278c | ||
![]() |
53dc9d55b5 | ||
![]() |
2c9b5ddff0 | ||
![]() |
16f1554a03 | ||
![]() |
8a89365bb2 | ||
![]() |
a95fb36f72 | ||
![]() |
b75d44c3ae | ||
![]() |
aed8051f50 | ||
![]() |
4be7ffd63f | ||
![]() |
3499aa2b21 | ||
![]() |
8096afc6de | ||
![]() |
988eeb50c6 | ||
![]() |
ee832e4e37 | ||
![]() |
6c3c2df823 | ||
![]() |
73f22e31c7 | ||
![]() |
01edbb8af6 | ||
![]() |
62d90c8500 | ||
![]() |
caff3b5c54 | ||
![]() |
6a2d01bae4 | ||
![]() |
53f0d5538b | ||
![]() |
65ba15c37d | ||
![]() |
16518dcbbb | ||
![]() |
1debf62707 | ||
![]() |
e80714740c | ||
![]() |
111515a29c | ||
![]() |
7ba950c006 | ||
![]() |
3133cacc6a | ||
![]() |
6393412380 | ||
![]() |
7a48b1f0d1 | ||
![]() |
6dfc857b91 | ||
![]() |
e5355d0335 | ||
![]() |
d28ff1175d | ||
![]() |
0931b52b66 | ||
![]() |
c5992edc7d | ||
![]() |
b624664f52 | ||
![]() |
5e3cfe7b57 | ||
![]() |
101cbf6e31 | ||
![]() |
8a537a0092 | ||
![]() |
e3b4d3f406 | ||
![]() |
660e8f50a7 | ||
![]() |
9e91b02ec7 | ||
![]() |
3e815c709c | ||
![]() |
05e19b7848 | ||
![]() |
f6c1ce5b1c | ||
![]() |
961e83e083 | ||
![]() |
792b2fb956 | ||
![]() |
2b2354d302 | ||
![]() |
3c7b5dcaff | ||
![]() |
585f37a797 | ||
![]() |
aafea8ef5d | ||
![]() |
5efef4393c | ||
![]() |
8a28e7cd75 | ||
![]() |
7ade0d0ce4 | ||
![]() |
c7469ce986 | ||
![]() |
d1c61e33a6 | ||
![]() |
251ce98990 | ||
![]() |
a219ba86ea | ||
![]() |
fe7fca7abb | ||
![]() |
4a47db97eb | ||
![]() |
aa8880c681 | ||
![]() |
292dea408f | ||
![]() |
cbb7c9f313 | ||
![]() |
d36ea6ddc1 | ||
![]() |
229a1c1458 | ||
![]() |
e01b437af5 | ||
![]() |
2d5be43747 | ||
![]() |
4411579ae0 | ||
![]() |
05ccd6c32b | ||
![]() |
1ff0c7a52b | ||
![]() |
f5f2433c5a | ||
![]() |
95c0262cd6 | ||
![]() |
d15a86bc69 | ||
![]() |
0be6db50f8 | ||
![]() |
23ea8d1e25 | ||
![]() |
fd5bb6e5db | ||
![]() |
b0b155c949 | ||
![]() |
ed2e587ace | ||
![]() |
2110e27678 | ||
![]() |
b495d6f8ec | ||
![]() |
868f2bcda0 | ||
![]() |
7e4c0f64cd | ||
![]() |
4bd47bcb99 | ||
![]() |
fc1a27b6c9 | ||
![]() |
1a8c3a863b | ||
![]() |
4ea27acd1d | ||
![]() |
345558307d | ||
![]() |
bb5dbd2da8 | ||
![]() |
0bfb9d62de | ||
![]() |
6da1e93edd | ||
![]() |
19768936ae | ||
![]() |
54250d7dd5 | ||
![]() |
ecb899408b | ||
![]() |
53db23142a | ||
![]() |
5323472afd | ||
![]() |
12341118e3 | ||
![]() |
ec6f56768a | ||
![]() |
60c1750a9b | ||
![]() |
68c2012ed1 | ||
![]() |
2754c641cb | ||
![]() |
9ec92ff97b | ||
![]() |
023191be23 | ||
![]() |
8f9ecace4d | ||
![]() |
d5d5a6437c | ||
![]() |
8d07ea7ce5 | ||
![]() |
19956f070d | ||
![]() |
158b3d761d | ||
![]() |
4da1a9359d | ||
![]() |
5a378703fb | ||
![]() |
7949a4ec7c | ||
![]() |
a62c2640b5 | ||
![]() |
1e00fe78c7 | ||
![]() |
8fe9022a6e | ||
![]() |
39069cf4be | ||
![]() |
b12863d27c | ||
![]() |
3681ad2941 | ||
![]() |
c7fce32dff | ||
![]() |
898b52be45 | ||
![]() |
83602ea123 | ||
![]() |
4057c2d8d9 | ||
![]() |
bc4da2047b | ||
![]() |
3ead682af0 | ||
![]() |
25580b4fe9 | ||
![]() |
9c56f70111 | ||
![]() |
dd7a17c345 | ||
![]() |
a0ef489890 | ||
![]() |
6522a8150e | ||
![]() |
1a1f633922 | ||
![]() |
bc0f5502e2 | ||
![]() |
556b5d5044 | ||
![]() |
0b3503cb33 | ||
![]() |
b9dc9dbd78 | ||
![]() |
c675debfb2 | ||
![]() |
239b5d5279 | ||
![]() |
3d4d37375b | ||
![]() |
0042eccb3b | ||
![]() |
1d6918ce41 | ||
![]() |
835ab01cab | ||
![]() |
4f6e770eda | ||
![]() |
4639cac85c | ||
![]() |
4a9fe813a8 | ||
![]() |
e9c29e6a2d | ||
![]() |
742b99f689 | ||
![]() |
070382d599 | ||
![]() |
ae8b8f0c93 | ||
![]() |
b4e62d1cda | ||
![]() |
2cc2a90215 | ||
![]() |
2f7f3e604e | ||
![]() |
d09d0b3147 | ||
![]() |
c45118dacf | ||
![]() |
1001d2da40 | ||
![]() |
e0d7c16788 | ||
![]() |
905a0b2457 | ||
![]() |
05fc2fa7a6 | ||
![]() |
e9089b993f | ||
![]() |
80121303eb | ||
![]() |
c5ba4af25b | ||
![]() |
d7b579a978 | ||
![]() |
2036a0b62a | ||
![]() |
f4a7b5b80c | ||
![]() |
19d054f789 | ||
![]() |
eb7d359efc | ||
![]() |
040ef0640d | ||
![]() |
96fecedabe | ||
![]() |
8451d05c50 | ||
![]() |
806806d61b | ||
![]() |
dd035b0eb2 | ||
![]() |
8c4b142b9e | ||
![]() |
8cbc34de11 | ||
![]() |
896c707cd4 | ||
![]() |
06392247eb | ||
![]() |
a03a03d74e | ||
![]() |
7c8278303b | ||
![]() |
9794a2b865 | ||
![]() |
f4c80dd218 | ||
![]() |
afd9b1883d | ||
![]() |
1b08672945 | ||
![]() |
7187cd9a85 | ||
![]() |
f626916a57 | ||
![]() |
7df7590f7f | ||
![]() |
31134f41a1 | ||
![]() |
2571211957 | ||
![]() |
8b37aa1579 | ||
![]() |
8b9cf152a0 | ||
![]() |
ea81d22f18 | ||
![]() |
fbc2979428 | ||
![]() |
79fd23974c | ||
![]() |
60aae59eeb | ||
![]() |
e0220c6594 | ||
![]() |
c529d0b440 | ||
![]() |
e7027efe7a | ||
![]() |
4c89776a27 | ||
![]() |
0bf0e0b35f | ||
![]() |
a936bafb8c | ||
![]() |
2a17a7e8f8 | ||
![]() |
03777f4a46 | ||
![]() |
dcadbf3364 | ||
![]() |
f2e8a60e6d | ||
![]() |
0ee74a71e2 | ||
![]() |
99c1585ed2 | ||
![]() |
b6a8d0dd71 | ||
![]() |
54d7790e8b | ||
![]() |
d1d6bd2831 | ||
![]() |
ea8a9e0249 | ||
![]() |
fd8afc7e3b | ||
![]() |
6e7cd220dc | ||
![]() |
9352f75220 | ||
![]() |
fdeac8508b | ||
![]() |
ab7c23a787 | ||
![]() |
e384d16d57 | ||
![]() |
223aaeaecd | ||
![]() |
f2926670cc | ||
![]() |
731ac3d3d6 | ||
![]() |
b7c8cb3c41 | ||
![]() |
9e30ec4f16 | ||
![]() |
688a3a0cc2 | ||
![]() |
a87ccee743 | ||
![]() |
f4efb51fe2 | ||
![]() |
dce2ad4ffb | ||
![]() |
f76c7526c9 | ||
![]() |
15aa593790 | ||
![]() |
7b1344fe69 | ||
![]() |
c1ae13b997 | ||
![]() |
16c0eb0d2f | ||
![]() |
0a4a28a90c | ||
![]() |
2683deb0dd | ||
![]() |
26c4d4b328 | ||
![]() |
e5113a1cfc | ||
![]() |
5766c9ac4e | ||
![]() |
c2bcda86e2 | ||
![]() |
e0e9426c2a | ||
![]() |
4586d8f119 | ||
![]() |
be2a51316c | ||
![]() |
20b810d25b | ||
![]() |
c5ba1ea8c1 | ||
![]() |
f09df55ab9 | ||
![]() |
8bd923f5f1 | ||
![]() |
8473ca16fb | ||
![]() |
35b77a4a81 | ||
![]() |
717a474125 | ||
![]() |
993f7b6a2c | ||
![]() |
e3b57cea05 | ||
![]() |
26ee622222 | ||
![]() |
79b5ab822e | ||
![]() |
d23c9b7cd6 | ||
![]() |
f19d913b5d | ||
![]() |
f452ab745e | ||
![]() |
e49cad84e2 | ||
![]() |
c145777e0e | ||
![]() |
d51743a21c | ||
![]() |
c289438b75 | ||
![]() |
0b30a10ab3 | ||
![]() |
608577e05c | ||
![]() |
85dcb73774 | ||
![]() |
a72d4e2462 | ||
![]() |
ae5490e5a5 | ||
![]() |
4a661dead0 | ||
![]() |
fd827a80a9 | ||
![]() |
455bddddcd | ||
![]() |
4d11c658ff | ||
![]() |
6ec5174d8b | ||
![]() |
26a25279bc | ||
![]() |
15c01f20ec | ||
![]() |
9e38b4cc68 | ||
![]() |
35d1a71ed7 | ||
![]() |
3a1c7339cd | ||
![]() |
2f9b9a31be | ||
![]() |
12debd7763 | ||
![]() |
98bbb0d402 | ||
![]() |
328039058e | ||
![]() |
55a5fd59d7 | ||
![]() |
87572871d5 | ||
![]() |
6a022c73db | ||
![]() |
b034c18077 | ||
![]() |
c422b9ef41 | ||
![]() |
ccafb42c82 | ||
![]() |
669e36d674 | ||
![]() |
a90839688c | ||
![]() |
52190e7308 | ||
![]() |
a32cb1bb93 | ||
![]() |
35668fc523 | ||
![]() |
16c13bc110 | ||
![]() |
11f0ffd9a8 | ||
![]() |
b5a9537eea | ||
![]() |
00a0e3f21b | ||
![]() |
05bfc1a9eb | ||
![]() |
cc5a4720e5 | ||
![]() |
7094ff7125 | ||
![]() |
d5d4909c20 | ||
![]() |
d97c154695 | ||
![]() |
d7d7e61f34 | ||
![]() |
7ea75d3c09 | ||
![]() |
f6851cf187 | ||
![]() |
f881e77e66 | ||
![]() |
c25f835aea | ||
![]() |
db6cba6a7b | ||
![]() |
e6e3dfedc8 | ||
![]() |
817227a850 | ||
![]() |
75bca96bc6 | ||
![]() |
e94d11a5b3 | ||
![]() |
9c8c5c1c53 | ||
![]() |
95801bf5cc | ||
![]() |
e2f0aef93b | ||
![]() |
65b6b79e99 | ||
![]() |
edd8eb3279 | ||
![]() |
735300b53c | ||
![]() |
7d395c674c | ||
![]() |
46fb850e02 | ||
![]() |
cdb8a1a2a1 | ||
![]() |
325923b6c6 | ||
![]() |
a09c1648f5 | ||
![]() |
d828d203fc | ||
![]() |
ac058a4c45 | ||
![]() |
1d254be1a4 | ||
![]() |
fccbcfc889 | ||
![]() |
5cd67baf15 | ||
![]() |
8ffdbfebce | ||
![]() |
5aba464270 | ||
![]() |
ff2dc0a547 | ||
![]() |
45052c625e | ||
![]() |
ae531a79f6 | ||
![]() |
fdfde8883f | ||
![]() |
a270d8d623 | ||
![]() |
821be65b03 | ||
![]() |
a4b976f095 | ||
![]() |
4795cca04a | ||
![]() |
ba1185bf28 | ||
![]() |
9ae0304b1e | ||
![]() |
8750e3b577 | ||
![]() |
2ff8978dde | ||
![]() |
85c6d6d37d | ||
![]() |
c063ab4944 | ||
![]() |
f89ff939d8 | ||
![]() |
9dd2f11f4a | ||
![]() |
55428d7dd2 | ||
![]() |
102b99a0e8 | ||
![]() |
8aedb2ff37 | ||
![]() |
1ee699d49d | ||
![]() |
66942b814b | ||
![]() |
deab8c276a | ||
![]() |
6df420f7f3 | ||
![]() |
68bfd048a5 | ||
![]() |
98d4ed0584 | ||
![]() |
ceac9d64c0 | ||
![]() |
9fde8f2d9e | ||
![]() |
92ac041869 | ||
![]() |
fd2ea2605e | ||
![]() |
90502739c3 | ||
![]() |
c9b444e771 | ||
![]() |
1915d69cb8 | ||
![]() |
26339e694f | ||
![]() |
f212899b54 | ||
![]() |
41ffd54fa0 | ||
![]() |
2929afe2fa | ||
![]() |
228e185a15 | ||
![]() |
56695569e7 | ||
![]() |
ac4483a7c5 | ||
![]() |
a5a565f7eb | ||
![]() |
ec28593ce5 | ||
![]() |
bcdeb386cc | ||
![]() |
d3c7d7b09e | ||
![]() |
6b5490ced6 | ||
![]() |
69ef918021 | ||
![]() |
ec6a8f00ad | ||
![]() |
a715077b10 | ||
![]() |
37960990a5 | ||
![]() |
951ece17e1 | ||
![]() |
66c933fb61 | ||
![]() |
171d021ab5 | ||
![]() |
b9ca301527 | ||
![]() |
5e9f522b9a | ||
![]() |
b05401a5ab | ||
![]() |
22f682c378 | ||
![]() |
97636eff8e | ||
![]() |
0e5e644d27 | ||
![]() |
d56cde33ef | ||
![]() |
110879074f | ||
![]() |
a5fb20533c | ||
![]() |
708f05668d | ||
![]() |
2f593e767c | ||
![]() |
f920e1c171 | ||
![]() |
db9d97c947 | ||
![]() |
0d8be7fd3a | ||
![]() |
8bf18430b8 | ||
![]() |
6b2ea2bd1d | ||
![]() |
606f932d92 | ||
![]() |
85dbcf5473 | ||
![]() |
707a633de3 | ||
![]() |
ce60e98f6d | ||
![]() |
73896a3b71 | ||
![]() |
61615203fd | ||
![]() |
7180883fae | ||
![]() |
1bd31c22e1 | ||
![]() |
76c8d4d95b | ||
![]() |
a18ac84229 | ||
![]() |
65bf5ddb1b | ||
![]() |
4c6bb161e2 | ||
![]() |
f2c276d45e | ||
![]() |
2bef4410f9 | ||
![]() |
f291243121 | ||
![]() |
144ce092f0 | ||
![]() |
8e0b8c15ea | ||
![]() |
4642cb8d0a | ||
![]() |
56c2d4b666 | ||
![]() |
b9a6cd8b61 | ||
![]() |
271f905521 | ||
![]() |
15ced09bb2 | ||
![]() |
2bdf4d811a | ||
![]() |
7480c2e46b | ||
![]() |
032e2c2929 | ||
![]() |
e08a875d52 | ||
![]() |
3a7d1cfead | ||
![]() |
039b235ca4 | ||
![]() |
96165a1950 | ||
![]() |
5453c7e97f | ||
![]() |
c0195fc627 | ||
![]() |
f72da8ee7d | ||
![]() |
eb6b5d1219 | ||
![]() |
2cd73ca602 | ||
![]() |
fa62d5abc9 | ||
![]() |
9526a0ff73 | ||
![]() |
8c79b8924e | ||
![]() |
34ae21319e | ||
![]() |
d4d7d35afb | ||
![]() |
635fb9dcdd | ||
![]() |
918f3e9cae | ||
![]() |
1b338b288c | ||
![]() |
d3ed76902e | ||
![]() |
df4c614597 | ||
![]() |
1d29817139 | ||
![]() |
7c627f58d7 | ||
![]() |
8e84529c8d | ||
![]() |
c9b0fbc907 | ||
![]() |
6dd4d50213 | ||
![]() |
f392054e70 | ||
![]() |
2fe3a925fb | ||
![]() |
a4ba3f2891 | ||
![]() |
11c89d43ab | ||
![]() |
bc63f59af2 | ||
![]() |
244154e087 | ||
![]() |
c06ecbef0c | ||
![]() |
39fdbc8ffc | ||
![]() |
5b7a01ba79 | ||
![]() |
13a4582ce2 | ||
![]() |
8eeda60bd0 | ||
![]() |
1482a41524 | ||
![]() |
0997589c45 | ||
![]() |
89115253da | ||
![]() |
309540473b | ||
![]() |
99ad3ae2ca | ||
![]() |
a8af609dfe | ||
![]() |
31aa077cb0 | ||
![]() |
d10326cb4e | ||
![]() |
4a5a53b3b8 | ||
![]() |
b797d1aa50 | ||
![]() |
a8d6e82395 | ||
![]() |
81e33477ea | ||
![]() |
83b638f230 | ||
![]() |
c0a65ba0f6 | ||
![]() |
fa895ed3dc | ||
![]() |
566e3abcea | ||
![]() |
9ba1ba8fa1 | ||
![]() |
d749597591 | ||
![]() |
8a6fe8a8f3 | ||
![]() |
e04f15ff3d | ||
![]() |
e188117823 | ||
![]() |
4612332af7 | ||
![]() |
52645fcc1b | ||
![]() |
553767cc8a | ||
![]() |
a53e83665e | ||
![]() |
358866cd0f | ||
![]() |
ada7a23ddc | ||
![]() |
a72d0245fa | ||
![]() |
fcca8bb4ca | ||
![]() |
46f4f7ff49 | ||
![]() |
391edc7afb | ||
![]() |
de4932d9c5 | ||
![]() |
01684f71fb | ||
![]() |
456c06aa5e | ||
![]() |
678c415bea | ||
![]() |
2df57d2be0 | ||
![]() |
63cb3cdc74 | ||
![]() |
5414cf275b | ||
![]() |
d6fb1859a4 | ||
![]() |
7beb92864e | ||
![]() |
e1f0c484c6 | ||
![]() |
c6cde724f6 | ||
![]() |
d56bbbb5a7 | ||
![]() |
453ba529a6 | ||
![]() |
ce7a8fed36 | ||
![]() |
03d2e32dc1 | ||
![]() |
d7cbfaaa0a | ||
![]() |
60a0be82da | ||
![]() |
cc06a3585e | ||
![]() |
cdab869472 | ||
![]() |
a4bc6075ce | ||
![]() |
6085999e2b | ||
![]() |
ffb257ac17 | ||
![]() |
578a123282 | ||
![]() |
eea19daac6 | ||
![]() |
7de166390e | ||
![]() |
a80f23711e | ||
![]() |
7b078367e8 | ||
![]() |
ae4d901d83 | ||
![]() |
4ca2215684 | ||
![]() |
a592282079 | ||
![]() |
d069ea1421 | ||
![]() |
3b66bbf6d5 | ||
![]() |
e40547ada1 | ||
![]() |
9e99269875 | ||
![]() |
36b6ed8ff9 | ||
![]() |
980ffe3b4e | ||
![]() |
af9a3f646c | ||
![]() |
0b6b4f2441 | ||
![]() |
983abfd6d8 | ||
![]() |
161ba73c8b | ||
![]() |
84f2ca77f7 | ||
![]() |
92c36f187d | ||
![]() |
f4725120a4 | ||
![]() |
45d56915d1 | ||
![]() |
168c7095e8 | ||
![]() |
6972a4f5cf | ||
![]() |
11aa4b9bba | ||
![]() |
ec01428820 | ||
![]() |
58b8bdc2e4 | ||
![]() |
61d392fad4 | ||
![]() |
0780fd3d1e | ||
![]() |
efc29baead | ||
![]() |
1a7de71e79 | ||
![]() |
976405dea3 | ||
![]() |
c722133671 | ||
![]() |
5dab0e8aed | ||
![]() |
cb57f047e7 | ||
![]() |
e1e4577616 | ||
![]() |
e635c16de0 | ||
![]() |
76987fb357 | ||
![]() |
45fb60e883 | ||
![]() |
da44fe3fc9 | ||
![]() |
3db9cf3547 | ||
![]() |
c5d825450a | ||
![]() |
fff4a248be | ||
![]() |
340309561d | ||
![]() |
c2533a45bd | ||
![]() |
a284e438f1 | ||
![]() |
13015a17a4 | ||
![]() |
3b09b82123 | ||
![]() |
44406a8940 | ||
![]() |
77b42344ac | ||
![]() |
bed8913107 | ||
![]() |
47218eeb67 | ||
![]() |
7b27b8f498 | ||
![]() |
4fe0a30ec7 | ||
![]() |
84e2df51be | ||
![]() |
a79ffeb764 | ||
![]() |
5f9e361f5c | ||
![]() |
2f69649bb6 | ||
![]() |
868948f67c | ||
![]() |
c8641ee940 | ||
![]() |
c5d2c82cbb | ||
![]() |
adb848f754 | ||
![]() |
5f280b3029 | ||
![]() |
84e2f6e0e1 | ||
![]() |
b943a53b10 | ||
![]() |
2d13ecde1b | ||
![]() |
30aba24ddc | ||
![]() |
2b8b8a3a97 | ||
![]() |
745607357b | ||
![]() |
2c0fcc2fa7 | ||
![]() |
a750c9c902 | ||
![]() |
a76799b085 | ||
![]() |
7a596b9e55 | ||
![]() |
5c5ecea6f1 | ||
![]() |
a6789b5d5a | ||
![]() |
103817b8b6 | ||
![]() |
557eb51405 | ||
![]() |
6de423606f | ||
![]() |
a4cfd1c69a | ||
![]() |
311248c8b0 | ||
![]() |
63310d72e1 | ||
![]() |
a442679459 | ||
![]() |
2ab3988d9f | ||
![]() |
693b6886b1 | ||
![]() |
9b2e78c915 | ||
![]() |
cadfcd153e | ||
![]() |
14ea32a117 | ||
![]() |
469ecdd28c | ||
![]() |
8d373b0887 | ||
![]() |
51e24dd4f8 | ||
![]() |
04fd8673cd | ||
![]() |
dd30f2c648 | ||
![]() |
c5416aa6aa | ||
![]() |
d097178ab0 | ||
![]() |
69bdd703c2 | ||
![]() |
bfb5e32e1f | ||
![]() |
51acc3e1b9 | ||
![]() |
e72a6e90b9 | ||
![]() |
59dcf2062f | ||
![]() |
6bf7fba2a4 | ||
![]() |
21fa7ea468 | ||
![]() |
bcbcdf87de | ||
![]() |
79f1f4e171 | ||
![]() |
ae970ba2e2 | ||
![]() |
fa06bd01c9 | ||
![]() |
45869958f6 | ||
![]() |
5039a5e54c | ||
![]() |
9a7db98593 | ||
![]() |
21db2351fd | ||
![]() |
527036b1f5 | ||
![]() |
cd76193f3c | ||
![]() |
43621ab9ed | ||
![]() |
75f7fb3d9d | ||
![]() |
36e69b86bf | ||
![]() |
cde824f17f | ||
![]() |
c157837878 | ||
![]() |
a5251cb86b | ||
![]() |
8e0400d531 | ||
![]() |
03835c8183 | ||
![]() |
ef879e8a8a | ||
![]() |
96979a2c4a | ||
![]() |
f8288be03f | ||
![]() |
1ffc366aa9 | ||
![]() |
f308603a3a | ||
![]() |
702698ee29 | ||
![]() |
64b81fd4d3 | ||
![]() |
fa0e4d91f9 | ||
![]() |
48e1f6d899 | ||
![]() |
28fb51c180 | ||
![]() |
68ca62dfd7 | ||
![]() |
dff54d854d | ||
![]() |
7137a0a92f | ||
![]() |
81285273a6 | ||
![]() |
6ecd93eb60 | ||
![]() |
3e9bb3bee1 | ||
![]() |
c52c9cda91 | ||
![]() |
6f0c2cf0d8 | ||
![]() |
94c35de0d2 | ||
![]() |
821c0a9f38 | ||
![]() |
1d1e75236c | ||
![]() |
369f11fe5c | ||
![]() |
eae4132fbb | ||
![]() |
207c60d055 | ||
![]() |
83dc3e25f0 | ||
![]() |
61a9e125db | ||
![]() |
c9d9bfab92 | ||
![]() |
bb7d1fa3ba | ||
![]() |
0612433eef | ||
![]() |
6af58e3385 | ||
![]() |
9bccc8068b | ||
![]() |
3e3fe1e429 | ||
![]() |
006522e437 | ||
![]() |
06f99c220e | ||
![]() |
a6929cf03e | ||
![]() |
ac20605e3f | ||
![]() |
dba59217da | ||
![]() |
9775e76910 | ||
![]() |
4678a4142e | ||
![]() |
33506675c5 | ||
![]() |
ae5b1bab14 | ||
![]() |
aae57cd3fd | ||
![]() |
7ad0af64cc | ||
![]() |
ab223eb1df | ||
![]() |
24614de419 | ||
![]() |
ae9a39ec1f | ||
![]() |
b3dddc77eb | ||
![]() |
b50cf856b3 | ||
![]() |
7413b6b020 | ||
![]() |
44b131e8cf | ||
![]() |
79de83183f | ||
![]() |
225e718270 | ||
![]() |
c9e9f4785f | ||
![]() |
0fc11746c0 | ||
![]() |
a994540860 | ||
![]() |
edf3f35016 | ||
![]() |
ba76b2e339 | ||
![]() |
ae73873b5c | ||
![]() |
b8d66e4d19 | ||
![]() |
e5adc46805 | ||
![]() |
64e6170224 | ||
![]() |
8a18c22c2f | ||
![]() |
21787ecdd3 | ||
![]() |
dac7574c98 | ||
![]() |
5d7e26d620 | ||
![]() |
301d6b4133 | ||
![]() |
12e96ce571 | ||
![]() |
6f59a2ce6e | ||
![]() |
1c77f9f669 | ||
![]() |
1e308dd6c0 | ||
![]() |
d415bd4d7b | ||
![]() |
17ef1503c8 | ||
![]() |
f65917f51a | ||
![]() |
6fea50f735 | ||
![]() |
91646d039c | ||
![]() |
23e6e0ef33 | ||
![]() |
26461d1efe | ||
![]() |
dd7eb36830 | ||
![]() |
30d3bf8bec | ||
![]() |
23ef8b2c64 | ||
![]() |
e4520e7aa7 | ||
![]() |
0b3c8c4a59 | ||
![]() |
50ca0dda2c | ||
![]() |
f183d0810b | ||
![]() |
ab760290a5 | ||
![]() |
a9ce2dbcb4 | ||
![]() |
d20a5b3a09 | ||
![]() |
ec8ece2c9d | ||
![]() |
e692fa9ae4 | ||
![]() |
c04006bc13 | ||
![]() |
3fc3e400b0 | ||
![]() |
422f439bf7 | ||
![]() |
d87a897a7b | ||
![]() |
d9cf49cbfd | ||
![]() |
5fcd0e284b | ||
![]() |
a3fc107d94 | ||
![]() |
19f0fd90d3 | ||
![]() |
ec99bec8cb | ||
![]() |
e35bb6341c | ||
![]() |
310f287f44 | ||
![]() |
f90f5ea369 | ||
![]() |
8b3708b44f | ||
![]() |
fc59515bfd | ||
![]() |
6cfdf697eb | ||
![]() |
4a8ac71711 | ||
![]() |
b51d038b65 | ||
![]() |
0faff5a859 | ||
![]() |
e16506cb52 | ||
![]() |
28b177484d | ||
![]() |
0e733ae14b | ||
![]() |
1046786acf | ||
![]() |
4431ced598 | ||
![]() |
7e68894726 | ||
![]() |
b809429873 | ||
![]() |
aa682d7301 | ||
![]() |
b4a0f0b273 | ||
![]() |
5fb16a8f2c | ||
![]() |
9245b8f89f | ||
![]() |
fa3ed606b4 | ||
![]() |
ba34f420db | ||
![]() |
4ea8f1441d | ||
![]() |
215e0595ab | ||
![]() |
b85a6898af | ||
![]() |
9cd5a87c64 | ||
![]() |
2019c8ad7e | ||
![]() |
19a26729b0 | ||
![]() |
660e8b8c88 | ||
![]() |
8e95b807f7 | ||
![]() |
6c67fc4125 | ||
![]() |
7def380058 | ||
![]() |
6a658007a5 | ||
![]() |
49aa69a301 | ||
![]() |
07829510e7 | ||
![]() |
9f1cd1a753 | ||
![]() |
bb5dab5c2e | ||
![]() |
68fa9d4064 | ||
![]() |
5d05f8758f | ||
![]() |
4ebfd00d67 | ||
![]() |
de413183d4 | ||
![]() |
e7655a7567 | ||
![]() |
34844c9061 | ||
![]() |
5e1a031800 | ||
![]() |
3755814f57 | ||
![]() |
8df078dc9e | ||
![]() |
7369d2441d | ||
![]() |
39c7fa1596 | ||
![]() |
460052c8a0 | ||
![]() |
7d0d6f85f2 | ||
![]() |
dbd31895bc | ||
![]() |
85e18b9172 | ||
![]() |
4ccf60954d | ||
![]() |
9f014b059a | ||
![]() |
a0202df920 | ||
![]() |
61c80840c3 | ||
![]() |
4ab931a361 | ||
![]() |
0e7c103e98 | ||
![]() |
32742571da | ||
![]() |
06de6b725c | ||
![]() |
55e0b5882a | ||
![]() |
54bcc9f145 | ||
![]() |
109b7a6661 | ||
![]() |
5af989384b | ||
![]() |
6f5b197a98 | ||
![]() |
07c74c76d0 | ||
![]() |
ffde3bd33d | ||
![]() |
311c05b401 | ||
![]() |
b541c0f5e0 | ||
![]() |
2ef200003d | ||
![]() |
35b62810c3 | ||
![]() |
4279ad7d6e | ||
![]() |
5e437ee186 | ||
![]() |
5079d47ff5 | ||
![]() |
d42b5604ce | ||
![]() |
b3b6b4f785 | ||
![]() |
4bfab30c02 | ||
![]() |
3485c82246 | ||
![]() |
4fd0ee4eef | ||
![]() |
6fcf4bee8c | ||
![]() |
a7dd5b616c | ||
![]() |
e927359d9c | ||
![]() |
826b34a8ac | ||
![]() |
4cecd4e6e3 | ||
![]() |
38f02f0f3d | ||
![]() |
099d3b377f | ||
![]() |
31cd366935 | ||
![]() |
a5f516893b | ||
![]() |
7325dd6335 | ||
![]() |
0b249618b0 | ||
![]() |
9a688224d0 | ||
![]() |
bf4b133084 | ||
![]() |
49aa0b72a8 | ||
![]() |
7596cb3079 | ||
![]() |
06d9555389 | ||
![]() |
d94a5aa044 | ||
![]() |
4d0cf6135a | ||
![]() |
7667299b48 | ||
![]() |
2a795d5fd0 | ||
![]() |
5cfe293001 | ||
![]() |
9da234cd7c | ||
![]() |
4ab14867da | ||
![]() |
b26cc2cc46 | ||
![]() |
2ba690d31d | ||
![]() |
379537cb6d | ||
![]() |
557fa3900a | ||
![]() |
67f1603833 | ||
![]() |
ef04dee52a | ||
![]() |
4d9e44e09c | ||
![]() |
7afcb1e5d5 | ||
![]() |
4d170614dc | ||
![]() |
b3bfce2cb7 | ||
![]() |
ecec0370ca | ||
![]() |
a6723f556d | ||
![]() |
b6d09ca761 | ||
![]() |
a3a18c9ed3 | ||
![]() |
a8eea9f6a5 | ||
![]() |
5e6edecaa3 | ||
![]() |
8c40a74f29 | ||
![]() |
9966b8a5d6 | ||
![]() |
37c5eeb51d | ||
![]() |
9660a5821f | ||
![]() |
bcecbfdc29 | ||
![]() |
98ab8117d6 | ||
![]() |
62c613f6d2 | ||
![]() |
431650fb7d | ||
![]() |
6fd62c8902 | ||
![]() |
a867d87072 | ||
![]() |
31cfd5a684 | ||
![]() |
aa97b419b2 | ||
![]() |
d9bda631d4 | ||
![]() |
fec2d15989 | ||
![]() |
75ad0c7d31 | ||
![]() |
fdd1e4fbf0 | ||
![]() |
0932d502c7 | ||
![]() |
c851229eea | ||
![]() |
e7ef322268 | ||
![]() |
a1788da410 | ||
![]() |
7708997a67 | ||
![]() |
14514d7087 | ||
![]() |
2800a6a583 | ||
![]() |
98e6a93a78 | ||
![]() |
889e4103d9 | ||
![]() |
9a7795464e | ||
![]() |
831443a2dc | ||
![]() |
4ca466b00b | ||
![]() |
9bcab53c2c | ||
![]() |
dba5e7b17d | ||
![]() |
0c89292a8d | ||
![]() |
319db9573c | ||
![]() |
a15c354329 | ||
![]() |
f7bbdea0b8 | ||
![]() |
0d6496886c | ||
![]() |
d88cc23ca5 | ||
![]() |
a978828c3a | ||
![]() |
cd3f6eac2f | ||
![]() |
3cb4bb391d | ||
![]() |
2b4e02f192 | ||
![]() |
4995d9cbd2 | ||
![]() |
20572a6ed2 | ||
![]() |
c52cf9c8a5 | ||
![]() |
d026f17457 | ||
![]() |
019c1ab09e | ||
![]() |
033d6b28ff | ||
![]() |
e8de411322 | ||
![]() |
97d5d1e491 | ||
![]() |
1d5bdf7d39 | ||
![]() |
0b31c40b9f | ||
![]() |
2f2fb3d8d9 | ||
![]() |
5b55b0d259 | ||
![]() |
b5b03e6c7f | ||
![]() |
f3c1b2a60d | ||
![]() |
103309b88b | ||
![]() |
3eeb79be4f | ||
![]() |
7af57e41b5 | ||
![]() |
bbb68ffefb | ||
![]() |
db862ae725 | ||
![]() |
32bdf3b79d | ||
![]() |
196a0da813 | ||
![]() |
8f0cfc8d44 | ||
![]() |
fba5ec8134 | ||
![]() |
03d7988df3 | ||
![]() |
958cf2cfba | ||
![]() |
45ae409e3f | ||
![]() |
73872a5df0 | ||
![]() |
0a6ca65e3f | ||
![]() |
1c17cb1c45 | ||
![]() |
cd865f896b | ||
![]() |
c62c1433e7 | ||
![]() |
fbac58e3e4 | ||
![]() |
1503955860 | ||
![]() |
f172c5ee13 | ||
![]() |
428eedcd04 | ||
![]() |
c427712449 | ||
![]() |
2eaf99e0aa | ||
![]() |
417677aae4 | ||
![]() |
040300540c | ||
![]() |
dd2a518881 | ||
![]() |
4766e7f348 | ||
![]() |
829f92d00f | ||
![]() |
3e569f8e79 | ||
![]() |
ea595d3161 | ||
![]() |
3333703d25 | ||
![]() |
2499c9382d | ||
![]() |
90465299b4 | ||
![]() |
a71ac71d7f | ||
![]() |
6d8677a78a | ||
![]() |
b363afc091 | ||
![]() |
c65cc75c6b | ||
![]() |
8dfe0898e7 | ||
![]() |
fbe1bf375c | ||
![]() |
46bb821753 | ||
![]() |
ecbe8c3376 | ||
![]() |
93ed3034c0 | ||
![]() |
f39656b6d7 | ||
![]() |
03866ddf9b | ||
![]() |
0ded1c5bac | ||
![]() |
a23944035d | ||
![]() |
b474522245 | ||
![]() |
25ea8f9c9e | ||
![]() |
3639168066 | ||
![]() |
5404d6d8ae | ||
![]() |
103a11d449 | ||
![]() |
6d3fb7eb98 | ||
![]() |
2d6407e7a5 | ||
![]() |
43aac7074b | ||
![]() |
d640d59f99 | ||
![]() |
1c3215257e | ||
![]() |
1a87b605bd | ||
![]() |
cdc63459eb | ||
![]() |
e64bfb9ff5 | ||
![]() |
7e6f954ffe | ||
![]() |
50e3c0054f | ||
![]() |
43e6555fd0 | ||
![]() |
ce5db06ba0 | ||
![]() |
6feda5ae8f | ||
![]() |
d5f2c34eaa | ||
![]() |
9bed4e2e21 | ||
![]() |
038ec341f8 | ||
![]() |
5013788989 | ||
![]() |
dd60ce784c | ||
![]() |
1f7ade2b75 | ||
![]() |
22571ec98e | ||
![]() |
8886de0d8a | ||
![]() |
580893b3fe | ||
![]() |
2998f67eac | ||
![]() |
d7238d9a86 | ||
![]() |
283783c082 | ||
![]() |
ad8c0ee818 | ||
![]() |
f948cbe471 | ||
![]() |
27800f7e4f | ||
![]() |
f81368174b | ||
![]() |
780852efb3 | ||
![]() |
22b5b47045 | ||
![]() |
d66d817c38 | ||
![]() |
5f141a4c13 | ||
![]() |
d077574097 | ||
![]() |
c5e6e87d13 | ||
![]() |
67e80f60e3 | ||
![]() |
f878f892ad | ||
![]() |
4a63326ed9 | ||
![]() |
185bb21bdd | ||
![]() |
4ac136d81d | ||
![]() |
a54a974fa5 | ||
![]() |
f3da48d46a | ||
![]() |
e06a632b72 | ||
![]() |
582e5dbac5 | ||
![]() |
785cdf67f0 | ||
![]() |
b6cda41daf | ||
![]() |
a754205acb | ||
![]() |
f735ee4f36 | ||
![]() |
f47e5402fa | ||
![]() |
78f88cf5c4 | ||
![]() |
cc08bb6f99 | ||
![]() |
a0646f20ba | ||
![]() |
c53ce53058 | ||
![]() |
fa030075c2 | ||
![]() |
cbb6dfd6a5 | ||
![]() |
51dddf63fa | ||
![]() |
2e23f3dd72 | ||
![]() |
831a45f14b | ||
![]() |
d4c56c70a8 | ||
![]() |
d6e9fe38be | ||
![]() |
1398226bb5 | ||
![]() |
15fa2f447b | ||
![]() |
fc889ece74 | ||
![]() |
90dc9bc289 | ||
![]() |
ab0c3e8dd0 | ||
![]() |
d047b28aa2 | ||
![]() |
e3bf4c069b | ||
![]() |
16b802d50c | ||
![]() |
e2175f6ed1 | ||
![]() |
864d8381a7 | ||
![]() |
76345ea3a1 | ||
![]() |
1a1bcd816c | ||
![]() |
8305766afe | ||
![]() |
38f5aee9c3 | ||
![]() |
36dc25a22d | ||
![]() |
e72d48ee29 | ||
![]() |
8029fb16cd | ||
![]() |
4874afb272 | ||
![]() |
6fadf530e0 | ||
![]() |
a05ea0d83b | ||
![]() |
b169db3fd6 | ||
![]() |
90af8562b1 | ||
![]() |
bc4145fcb4 | ||
![]() |
4492a7021c | ||
![]() |
6159252692 | ||
![]() |
00e66cf2e0 | ||
![]() |
3195929596 | ||
![]() |
d1ccb9b86b | ||
![]() |
fdf1ff545f | ||
![]() |
4e3ed8159e | ||
![]() |
ee18cc42f2 | ||
![]() |
ad21b69277 | ||
![]() |
66c292e2ec | ||
![]() |
be98cd56c7 | ||
![]() |
54013737d5 | ||
![]() |
a53839ef44 | ||
![]() |
53ea1e1324 | ||
![]() |
c6b9f8a530 | ||
![]() |
8bad0af849 | ||
![]() |
81c73c235f | ||
![]() |
e01239ccc9 | ||
![]() |
2667ce6981 | ||
![]() |
893dceb198 | ||
![]() |
032770682e | ||
![]() |
9394de6ae7 | ||
![]() |
2202845507 | ||
![]() |
138e77f3b5 | ||
![]() |
629da937f8 | ||
![]() |
ed4602158b | ||
![]() |
71e77e47fa | ||
![]() |
07adc26ce3 | ||
![]() |
8d97f0e81f | ||
![]() |
155c186b17 | ||
![]() |
3debeb637a | ||
![]() |
3c0c051df1 | ||
![]() |
88bb8fac3d | ||
![]() |
9c3fdb8135 | ||
![]() |
fc2ffed5c6 | ||
![]() |
5d152503ee | ||
![]() |
5bd7788950 | ||
![]() |
86201f77be | ||
![]() |
8dc16dd3a7 | ||
![]() |
353c070d00 | ||
![]() |
fb16e80e57 | ||
![]() |
3309425211 | ||
![]() |
49bcbf0f5d | ||
![]() |
a893e6d2a2 | ||
![]() |
49278a4a9b | ||
![]() |
75cd593b60 | ||
![]() |
a490a3fe61 | ||
![]() |
4ca176c291 | ||
![]() |
6a16f6ccdd | ||
![]() |
800f85329e | ||
![]() |
ea902493db | ||
![]() |
4941cde175 | ||
![]() |
69e539fda4 | ||
![]() |
e20755442a | ||
![]() |
58477b71f2 | ||
![]() |
beb1a5c678 | ||
![]() |
22a5b1608c | ||
![]() |
97703587d9 | ||
![]() |
62f2efbe8c | ||
![]() |
1cef2b6a42 | ||
![]() |
aab133ac69 | ||
![]() |
ff59e98a6a | ||
![]() |
351581537f | ||
![]() |
219d186c4d | ||
![]() |
eda5b92e92 | ||
![]() |
4b72ad9b9f | ||
![]() |
175a6fbc5f | ||
![]() |
ebfd65a9ca | ||
![]() |
1992f49343 | ||
![]() |
a9279ece33 | ||
![]() |
c4a9a04d67 | ||
![]() |
3a248951e2 | ||
![]() |
830757d9ce | ||
![]() |
3e8276846e | ||
![]() |
0411810bc0 | ||
![]() |
9b869463dd | ||
![]() |
c050612142 | ||
![]() |
a6d18c400d | ||
![]() |
5f6418ccd7 | ||
![]() |
7cbb11a86c | ||
![]() |
7aff4b178e | ||
![]() |
5a8ea0e0e2 | ||
![]() |
02277133ae | ||
![]() |
26d347be17 | ||
![]() |
ab2eec77d4 | ||
![]() |
2bb63406e9 | ||
![]() |
c4a6a5ccb7 | ||
![]() |
73f8fae036 | ||
![]() |
37d9f940ee | ||
![]() |
09e4348adc | ||
![]() |
48f17efa77 | ||
![]() |
6af1950c8d | ||
![]() |
0ec794376b | ||
![]() |
89e4586653 | ||
![]() |
ea1dfc1fd5 | ||
![]() |
d52b981c3a | ||
![]() |
17ef9f4843 | ||
![]() |
4ad47d9e26 | ||
![]() |
cde607338d | ||
![]() |
4f2999bc04 | ||
![]() |
88d4cb402d | ||
![]() |
a2baf9427d | ||
![]() |
979af6c2a8 | ||
![]() |
f3a6e564ee | ||
![]() |
63f7dfeb8e | ||
![]() |
2c7bb540b4 | ||
![]() |
a5b464c5ca | ||
![]() |
2ea0ef4543 | ||
![]() |
70b26b561a | ||
![]() |
40afc8c5de | ||
![]() |
1b6540a61c | ||
![]() |
312fd5f839 | ||
![]() |
d2257db87f | ||
![]() |
ea72d64992 | ||
![]() |
27f147f421 | ||
![]() |
8b78067cc1 | ||
![]() |
4cebde65ec | ||
![]() |
0399996ee5 | ||
![]() |
66d566f8c0 | ||
![]() |
60d03110f7 | ||
![]() |
1d2a57a9e1 | ||
![]() |
733a362436 | ||
![]() |
6e287a7c5e | ||
![]() |
b473923f42 | ||
![]() |
7682829820 | ||
![]() |
c6d495d643 | ||
![]() |
88f5c04fe0 | ||
![]() |
b8055aeccf | ||
![]() |
6be2d46b53 | ||
![]() |
188bc0e991 | ||
![]() |
a698dda67e | ||
![]() |
b5d218e684 | ||
![]() |
2b521e0c10 | ||
![]() |
82d73d3350 | ||
![]() |
546d869ffb | ||
![]() |
623a775f78 | ||
![]() |
3eb54d878a | ||
![]() |
ab1979e2d3 | ||
![]() |
e5bd6bdeff | ||
![]() |
790d90bf26 | ||
![]() |
23e3b1680b | ||
![]() |
3db2089aa9 | ||
![]() |
771bbe8af7 | ||
![]() |
ddb83787a0 | ||
![]() |
19b971cb24 | ||
![]() |
2657560b63 | ||
![]() |
6805c9d734 | ||
![]() |
b682ce916a | ||
![]() |
bece3bca08 | ||
![]() |
af8e5a90f4 | ||
![]() |
794bbd7177 | ||
![]() |
98e4ba6a12 | ||
![]() |
8a48e994b6 | ||
![]() |
45e55a8ea0 | ||
![]() |
383290a634 | ||
![]() |
1a27dad7bb | ||
![]() |
0e6e137f5d | ||
![]() |
a6ae310f5f | ||
![]() |
83d72cc1d5 | ||
![]() |
0da08031ea | ||
![]() |
f900a3ba7f | ||
![]() |
37e2342086 | ||
![]() |
358d781162 | ||
![]() |
37c56d677a | ||
![]() |
8e791c118c | ||
![]() |
21e3fca4be | ||
![]() |
42f551ec54 | ||
![]() |
ff3c01ecc2 | ||
![]() |
a183e5a72b | ||
![]() |
e2d05bff93 | ||
![]() |
f4f1e1f06f | ||
![]() |
62049089ba | ||
![]() |
106924be9a | ||
![]() |
9d3e1aaafc | ||
![]() |
1bbac1c818 | ||
![]() |
4fde6a81d9 | ||
![]() |
883040e88e | ||
![]() |
d9518eb337 | ||
![]() |
a8c9d999c7 | ||
![]() |
c4c0c987e8 | ||
![]() |
f424765514 | ||
![]() |
27a9a7d7f1 | ||
![]() |
51c2240efa | ||
![]() |
665c9c996a | ||
![]() |
bf99adc3c9 | ||
![]() |
c4cd36980d | ||
![]() |
8b5625bf4e | ||
![]() |
ff20e4d6bc | ||
![]() |
3c3563288d | ||
![]() |
6b9f8e454e | ||
![]() |
e7c9cf4aea | ||
![]() |
3f49380b37 | ||
![]() |
1c2e353193 | ||
![]() |
c552677a52 | ||
![]() |
fa00377d93 | ||
![]() |
aca24ed481 | ||
![]() |
0ba4315ae5 | ||
![]() |
0953be9d7f | ||
![]() |
d058645f97 | ||
![]() |
f01074681a | ||
![]() |
b6b5a33806 | ||
![]() |
ef63037f1a | ||
![]() |
a9726aad0c | ||
![]() |
15112fdbba | ||
![]() |
8cd23489d5 | ||
![]() |
c4da1abb1e | ||
![]() |
4e50ceba48 | ||
![]() |
b35ad6edcb | ||
![]() |
fa0936bf58 | ||
![]() |
1c2bc47c07 | ||
![]() |
9542fcdbcd | ||
![]() |
e971a4332d | ||
![]() |
aff7b100ca | ||
![]() |
8ee1141a70 | ||
![]() |
a9f3532252 | ||
![]() |
37cac414f8 | ||
![]() |
a226dbaa4d | ||
![]() |
c737aa6fbb | ||
![]() |
b192dc0738 | ||
![]() |
8c6cd5396c | ||
![]() |
5492d9148c | ||
![]() |
9c26c0c01e | ||
![]() |
eec927ea95 | ||
![]() |
f607a99127 | ||
![]() |
fa9a327a71 | ||
![]() |
895c913aa9 | ||
![]() |
75f61328ea | ||
![]() |
ecd217d163 | ||
![]() |
cee980c598 | ||
![]() |
05f59fb8ed | ||
![]() |
8cae17bfc8 | ||
![]() |
d0dd3c77ff | ||
![]() |
f52e1889c7 | ||
![]() |
bae0d3b7bb | ||
![]() |
7e3e41952f | ||
![]() |
b194aa240b | ||
![]() |
475742984f | ||
![]() |
21bfd11683 | ||
![]() |
392e16af4d | ||
![]() |
4e817ae6d4 | ||
![]() |
84bd863cf5 | ||
![]() |
6acaa94b32 | ||
![]() |
406832158d | ||
![]() |
3960beece0 | ||
![]() |
daca9e520b | ||
![]() |
b4fde90b55 | ||
![]() |
6a68fc6997 | ||
![]() |
95ded08e3b | ||
![]() |
5b965a3888 | ||
![]() |
27676f738d | ||
![]() |
57d9f696a2 | ||
![]() |
ac8d0abecf | ||
![]() |
184f1b723f | ||
![]() |
ebd98e1a18 | ||
![]() |
137dff620b | ||
![]() |
86d511f244 | ||
![]() |
8c48a4a288 | ||
![]() |
389d340678 | ||
![]() |
680b000bd1 | ||
![]() |
2916cd4575 | ||
![]() |
134ed995c8 | ||
![]() |
a0691a4fd4 | ||
![]() |
10a7e0502a | ||
![]() |
2e0d7e87d0 | ||
![]() |
2147a31f25 | ||
![]() |
5b4b5ca533 | ||
![]() |
7e883e0f41 | ||
![]() |
941b02c6a9 | ||
![]() |
71c0043261 | ||
![]() |
3949fb9e8c | ||
![]() |
88478594bc | ||
![]() |
bc49ee7f2f | ||
![]() |
cf4220a9fb | ||
![]() |
ecb100a62f | ||
![]() |
72f916423e | ||
![]() |
82d355aefe | ||
![]() |
05a1b854ff | ||
![]() |
c2b9ac9dd4 | ||
![]() |
c2d8ed3fd1 | ||
![]() |
4468b14580 | ||
![]() |
1ff3b76451 | ||
![]() |
2ae19ce40d | ||
![]() |
dfe410ea8b | ||
![]() |
227dd2d40a | ||
![]() |
b68c65faee | ||
![]() |
03f9028e9e | ||
![]() |
e2617dc91a | ||
![]() |
0a230d57ee | ||
![]() |
98d921c4b3 | ||
![]() |
1c8b685457 | ||
![]() |
61fd0e2c1c | ||
![]() |
090859bf42 | ||
![]() |
449936c0f1 | ||
![]() |
8a42cb3661 | ||
![]() |
3cc2227810 | ||
![]() |
5f67e5c1e9 | ||
![]() |
8d1a88cab6 | ||
![]() |
5b7795be4b | ||
![]() |
204f3152cb | ||
![]() |
a1639b0279 | ||
![]() |
325742acb4 | ||
![]() |
6e9da70c18 | ||
![]() |
fa2320d837 | ||
![]() |
e4ae81abd8 | ||
![]() |
3019c6eb40 | ||
![]() |
12747b61d5 | ||
![]() |
fdbbe5df3f | ||
![]() |
01fe67be2d | ||
![]() |
681a61d479 | ||
![]() |
8de33ca557 | ||
![]() |
896388d796 | ||
![]() |
ea9ec1fb43 | ||
![]() |
eb02b406d8 | ||
![]() |
2b3d547b7b | ||
![]() |
6de023d54b | ||
![]() |
ca98996e1f | ||
![]() |
8571508b3f | ||
![]() |
0e7abfcf17 | ||
![]() |
6c9a976604 | ||
![]() |
e0a7752fc3 | ||
![]() |
ee6cf744eb | ||
![]() |
6e1f812e35 | ||
![]() |
f7519d805e | ||
![]() |
9b93145a79 | ||
![]() |
4ec96c02a6 | ||
![]() |
9b3ec69b27 | ||
![]() |
74b51d43e1 | ||
![]() |
7321972380 | ||
![]() |
2b2549b573 | ||
![]() |
4c0cce4b1d | ||
![]() |
3b539fdd8d | ||
![]() |
dc25a5fb97 | ||
![]() |
3eec011a7c | ||
![]() |
f1af90d8eb | ||
![]() |
b2fa7358cf | ||
![]() |
2d423514ee | ||
![]() |
5877f20d4b | ||
![]() |
36ba9608bd | ||
![]() |
cb0f1d98db | ||
![]() |
36d2214e39 | ||
![]() |
c172caa288 | ||
![]() |
efc12ae7d4 | ||
![]() |
268dcc8d20 | ||
![]() |
58d3e8c08b | ||
![]() |
c99b70c08c | ||
![]() |
5811122cfd | ||
![]() |
6e939de9d6 | ||
![]() |
e3cca973ec | ||
![]() |
3a2317b7dc | ||
![]() |
e6d6299706 | ||
![]() |
3465cbd839 | ||
![]() |
ddcd657e40 | ||
![]() |
903e699273 | ||
![]() |
b6f226dbaa | ||
![]() |
35eaa4a4e3 | ||
![]() |
01987ef86c | ||
![]() |
7e449b710e | ||
![]() |
b2feae15e4 | ||
![]() |
07e6a0e870 | ||
![]() |
856dc0bab9 | ||
![]() |
e3b1110cce | ||
![]() |
8c4641fc05 | ||
![]() |
17137bbfff | ||
![]() |
ec9bfe0333 | ||
![]() |
807231d184 | ||
![]() |
239ecadeca | ||
![]() |
d5c9de03a2 | ||
![]() |
b5ce269675 | ||
![]() |
393a9120ac | ||
![]() |
511b2d47d1 | ||
![]() |
60fedaa050 | ||
![]() |
64f53c304c | ||
![]() |
b9e9773d04 | ||
![]() |
9d6fd78b63 | ||
![]() |
f5f087b2f8 | ||
![]() |
970da35fb3 | ||
![]() |
51c6444e1d | ||
![]() |
c5f6b57755 | ||
![]() |
8911638075 | ||
![]() |
dccb3b1a46 | ||
![]() |
5a4fc1151a | ||
![]() |
264dc35b95 | ||
![]() |
e45b6dbc1c | ||
![]() |
9323a9d094 | ||
![]() |
8433f638e6 | ||
![]() |
fbda7d5837 | ||
![]() |
81fa9966de | ||
![]() |
7dce27c732 | ||
![]() |
03643d551d | ||
![]() |
76336a67a0 | ||
![]() |
df0cda2d7a | ||
![]() |
6b621baeb3 | ||
![]() |
1b33504e14 | ||
![]() |
82618d2d5f | ||
![]() |
5006b1065a | ||
![]() |
0ae83458d5 | ||
![]() |
85f8047ac4 | ||
![]() |
7b27607f1a | ||
![]() |
b8ac5f1287 | ||
![]() |
373b977cc3 | ||
![]() |
3ba72b53d8 | ||
![]() |
832d22d7ad | ||
![]() |
30fff56aa4 | ||
![]() |
67a6560ec9 | ||
![]() |
6cc702e9ec | ||
![]() |
54dc694be4 | ||
![]() |
ca8e8041ef | ||
![]() |
7bed7d70f0 | ||
![]() |
5c567129ea | ||
![]() |
f38c460433 | ||
![]() |
bd039c8d37 | ||
![]() |
1af64f9729 | ||
![]() |
289ccf3c93 | ||
![]() |
2b5bad7362 | ||
![]() |
e4da606164 | ||
![]() |
85fc423569 | ||
![]() |
f039607afc | ||
![]() |
a4ad064e63 | ||
![]() |
0066e2b344 | ||
![]() |
776a770947 | ||
![]() |
60d8ecbfe6 | ||
![]() |
1c23462b43 | ||
![]() |
2196991df3 | ||
![]() |
28875c431b | ||
![]() |
71aae2743c | ||
![]() |
bcd3e31bd6 | ||
![]() |
9a03ab9dfa | ||
![]() |
910e11a8ab | ||
![]() |
dfe5a727c6 | ||
![]() |
b39faa15ef | ||
![]() |
a6d22f5a68 | ||
![]() |
66c8a13f13 | ||
![]() |
93cb2ff4cf | ||
![]() |
1d48320d8a | ||
![]() |
5d6e381ef6 | ||
![]() |
c291deccfa | ||
![]() |
24de9d39af | ||
![]() |
1dafcd1132 | ||
![]() |
4f4a33b378 | ||
![]() |
e7bee80948 | ||
![]() |
f8aa4b3ff3 | ||
![]() |
572d986a02 | ||
![]() |
a1a03c92f6 | ||
![]() |
43656dc0a7 | ||
![]() |
fd7b18a4f6 | ||
![]() |
cf0a475a2e | ||
![]() |
b34724215b | ||
![]() |
c9d66dcd5f | ||
![]() |
c7f51cde40 | ||
![]() |
7e6cba7359 | ||
![]() |
13cb016042 | ||
![]() |
3c4ab6bd8a | ||
![]() |
14fc0987ac | ||
![]() |
c98a95c276 | ||
![]() |
cffa666bd1 | ||
![]() |
a8abbcc34d | ||
![]() |
9e4ecfde69 | ||
![]() |
d81a37d1be | ||
![]() |
dca9bc97d6 | ||
![]() |
2c0947ebb6 | ||
![]() |
e393fb32a0 | ||
![]() |
d3b6e28387 | ||
![]() |
de71e72e31 | ||
![]() |
e12195705c | ||
![]() |
f37c8ed749 | ||
![]() |
ce634f226e | ||
![]() |
3842c806a6 | ||
![]() |
d5f8da44d1 | ||
![]() |
95481d4c7f | ||
![]() |
b18769fe8e | ||
![]() |
05b39aac5f | ||
![]() |
05d30b0c37 | ||
![]() |
501de2a5e8 | ||
![]() |
89a53457d4 | ||
![]() |
8915e6be92 | ||
![]() |
10fca2371c | ||
![]() |
fee323e42b | ||
![]() |
1b8473902f | ||
![]() |
c2b85c8d6d | ||
![]() |
26b9fc38ed | ||
![]() |
5a554508ca | ||
![]() |
ce30109b5b | ||
![]() |
c81bc38d42 | ||
![]() |
e26cf6b26c | ||
![]() |
d49938d0f5 | ||
![]() |
a50fd963f5 | ||
![]() |
8ea0dfba68 | ||
![]() |
fea5cbaf74 | ||
![]() |
de436e1f76 | ||
![]() |
1fb211f390 | ||
![]() |
bef33d108a | ||
![]() |
ff1a1122ed | ||
![]() |
54107100bb | ||
![]() |
6e2cf2a3ee | ||
![]() |
a6b5e207b2 | ||
![]() |
109d02531e | ||
![]() |
ebf6461c42 | ||
![]() |
6e29bf6e54 | ||
![]() |
8782d0b8df | ||
![]() |
abf83c6985 | ||
![]() |
f5572e24b2 | ||
![]() |
9b17acd168 | ||
![]() |
90d7483d92 | ||
![]() |
db138a530c | ||
![]() |
13951b43c2 | ||
![]() |
5d161b79bb | ||
![]() |
bc0a0386e9 | ||
![]() |
31077f48d2 | ||
![]() |
4e98ce9147 | ||
![]() |
da8000d42d | ||
![]() |
04797bc5a5 | ||
![]() |
4b2f32b778 | ||
![]() |
65e5872d81 | ||
![]() |
3fb80e76ce | ||
![]() |
5cf930d78a | ||
![]() |
95f2478146 | ||
![]() |
edbccb5e19 | ||
![]() |
c2a0c1507b | ||
![]() |
54c9150574 | ||
![]() |
6498ee1996 | ||
![]() |
eb8ca14bf8 | ||
![]() |
3973ec4b5e | ||
![]() |
4f97915d48 | ||
![]() |
b4f092ec74 | ||
![]() |
164778a716 | ||
![]() |
e9c22e4a5c | ||
![]() |
81d238bd46 | ||
![]() |
7c66c5121b | ||
![]() |
9ad6fadf6a | ||
![]() |
f384d6f67e | ||
![]() |
b36b211c26 | ||
![]() |
9736e54734 | ||
![]() |
c7cecf28c8 | ||
![]() |
814edec89f | ||
![]() |
faa31152b4 | ||
![]() |
4e2684f23a | ||
![]() |
ac47a3360e | ||
![]() |
85186ab136 | ||
![]() |
f9c542aa52 | ||
![]() |
dbef50f8ff | ||
![]() |
220f441048 | ||
![]() |
f8e9c6ddbb | ||
![]() |
9fa9b67895 | ||
![]() |
689d74a595 | ||
![]() |
e411ce1937 | ||
![]() |
aca2320075 | ||
![]() |
954056da0c | ||
![]() |
ce59d69520 | ||
![]() |
ca8724ee08 | ||
![]() |
4f03332118 | ||
![]() |
3654d96e07 | ||
![]() |
8cffe4897e | ||
![]() |
056cd6b229 | ||
![]() |
a1dab1611b | ||
![]() |
56577d9fca | ||
![]() |
f13a3c04f7 | ||
![]() |
a2c4a48dd6 | ||
![]() |
b8e019da32 | ||
![]() |
df65c35b31 | ||
![]() |
63c57ed1a4 | ||
![]() |
ad845db6a5 | ||
![]() |
350dfb2ea3 | ||
![]() |
89dad1ad41 | ||
![]() |
99add05aa7 | ||
![]() |
cdb063f007 | ||
![]() |
0b1257266b | ||
![]() |
7bb84890f5 | ||
![]() |
327336e921 | ||
![]() |
7d0fb6f87a | ||
![]() |
2df5a5367f | ||
![]() |
40cd3a7e20 | ||
![]() |
ffdcf9a0d0 | ||
![]() |
da6a7fb2bb | ||
![]() |
5b2d117bcd | ||
![]() |
93661042d9 | ||
![]() |
dfa8b41b96 | ||
![]() |
9ddc3bfd6d | ||
![]() |
641f55f1f1 | ||
![]() |
cc1b83412a | ||
![]() |
9324fd8f2e | ||
![]() |
7305fec4db | ||
![]() |
db8ea7ea1c | ||
![]() |
791efecfdf | ||
![]() |
b7a8b278c8 | ||
![]() |
69defb5edc | ||
![]() |
a5cd81a226 | ||
![]() |
be165a6713 | ||
![]() |
510beef9f8 | ||
![]() |
e0dbb489ae | ||
![]() |
e83bdcdfdc | ||
![]() |
4023d05e93 | ||
![]() |
13613eafb7 | ||
![]() |
3a7f8b3ac3 | ||
![]() |
2666e1efec | ||
![]() |
68fa17e17c | ||
![]() |
f1148ca5ac | ||
![]() |
98f5082191 | ||
![]() |
1dd2cd43dd | ||
![]() |
4f84185b43 | ||
![]() |
a26752a93e | ||
![]() |
7e9e682e09 | ||
![]() |
e163f85ee0 | ||
![]() |
2d15e11830 | ||
![]() |
c5e95a8f8d | ||
![]() |
9233269a2c | ||
![]() |
e2f795067a | ||
![]() |
59affc90aa | ||
![]() |
23e564249c | ||
![]() |
72f5202086 | ||
![]() |
74ca1894de | ||
![]() |
2a343ba916 | ||
![]() |
1e8a129149 | ||
![]() |
13de8f5d98 | ||
![]() |
5d69b2ac4d | ||
![]() |
0621df8d26 | ||
![]() |
505ee0c8ea | ||
![]() |
4cd6ec2530 | ||
![]() |
13b510ad8e | ||
![]() |
5316c4e84a | ||
![]() |
05892a5a1e | ||
![]() |
b51e0eb860 | ||
![]() |
dab1ed6b32 | ||
![]() |
ee00918b7c | ||
![]() |
42a1d2f3b9 | ||
![]() |
1e1bcda003 | ||
![]() |
18c35bb89e | ||
![]() |
5add664874 | ||
![]() |
6acfa14fec | ||
![]() |
54f332fae0 | ||
![]() |
5f88def9c9 | ||
![]() |
14e2c004cd | ||
![]() |
de933c45bc | ||
![]() |
5f268608d7 | ||
![]() |
8f72c97f7b | ||
![]() |
f830800d00 | ||
![]() |
30b7988efa | ||
![]() |
e70fb7fd41 | ||
![]() |
cf64b2214b | ||
![]() |
d70af332c0 | ||
![]() |
f7779c70d6 | ||
![]() |
fdda9f75db | ||
![]() |
8a9f412788 | ||
![]() |
71a1f57ccd | ||
![]() |
9a6552c4b3 | ||
![]() |
fcedb2eecb | ||
![]() |
810057bdb2 | ||
![]() |
af0db342df | ||
![]() |
aaa8c9928c | ||
![]() |
e115e08728 | ||
![]() |
62c5fa1056 | ||
![]() |
3da76ae449 | ||
![]() |
33f713f5ef | ||
![]() |
c1c4b2f6bf | ||
![]() |
bbc6d4f9e8 | ||
![]() |
cd535537f6 | ||
![]() |
6882a7af3b | ||
![]() |
c9177246d2 | ||
![]() |
b5339caa17 | ||
![]() |
f4475ea85b | ||
![]() |
684fba3152 | ||
![]() |
1be9f3bcfa | ||
![]() |
7abafbb1bd | ||
![]() |
ba90a8cb79 | ||
![]() |
c26875e70d | ||
![]() |
a8e109cb3d | ||
![]() |
fd7337fe04 | ||
![]() |
8ebdf2b097 | ||
![]() |
f14daf2081 | ||
![]() |
b15d126d59 | ||
![]() |
7089df2088 | ||
![]() |
8bed369c7f | ||
![]() |
8642c2045c | ||
![]() |
7072f0155e | ||
![]() |
a98d0217a0 | ||
![]() |
4dd1f1f3b5 | ||
![]() |
03f974c9b9 | ||
![]() |
7998f11258 | ||
![]() |
b8e5885c2b | ||
![]() |
8c80ddeb54 | ||
![]() |
cc440ade81 | ||
![]() |
45e401e69d | ||
![]() |
e54d9d10af | ||
![]() |
289af581bb | ||
![]() |
18e9d253e9 | ||
![]() |
0936a76dc9 | ||
![]() |
88dea7a0a8 | ||
![]() |
01661b3f28 | ||
![]() |
5c5d4b189f | ||
![]() |
d8fd4352a3 | ||
![]() |
29bcc83d0f | ||
![]() |
705753f448 | ||
![]() |
c7c11b181c | ||
![]() |
fef0d54559 | ||
![]() |
4408ffce88 | ||
![]() |
c5f440a6aa | ||
![]() |
a2be6c1472 | ||
![]() |
59f0fa1e5e | ||
![]() |
27c4a7db8d | ||
![]() |
01801c881b | ||
![]() |
f2874f2431 | ||
![]() |
faae19f560 | ||
![]() |
0517377dcb | ||
![]() |
4c8750badb | ||
![]() |
a5b406da51 | ||
![]() |
d35c92eccd | ||
![]() |
9fceed39fc | ||
![]() |
803b755554 | ||
![]() |
38cc459c93 | ||
![]() |
4ba64719bd | ||
![]() |
70c89da7ba | ||
![]() |
91e574075d | ||
![]() |
f5e02e72ed | ||
![]() |
9f925bc900 | ||
![]() |
2f0cb8b5f1 | ||
![]() |
c611199632 | ||
![]() |
c7e4a86166 | ||
![]() |
93dffba0ac | ||
![]() |
9ecb91e1bd | ||
![]() |
53eb74698b | ||
![]() |
62a0d5b42d | ||
![]() |
fa0d71f2cf | ||
![]() |
2e65d1543f | ||
![]() |
b687a4fc20 | ||
![]() |
3c84776e0a | ||
![]() |
ad11481dd1 | ||
![]() |
8d9f60ca5e | ||
![]() |
662cdcfb91 | ||
![]() |
7b45b38fe4 | ||
![]() |
8411f5b5c9 | ||
![]() |
7c10b25dc1 | ||
![]() |
c8bb0020ea | ||
![]() |
bebc910447 | ||
![]() |
cb1eee8b2d | ||
![]() |
861fff00ff | ||
![]() |
13e474997c | ||
![]() |
7c8b4991f1 | ||
![]() |
2134c1a875 | ||
![]() |
97d1609c72 | ||
![]() |
4bebb9ca49 | ||
![]() |
930eca0748 | ||
![]() |
ae851bba31 | ||
![]() |
2e2dc7bdc5 | ||
![]() |
8eacdffebd | ||
![]() |
d9a0cc9e9f | ||
![]() |
893919a848 | ||
![]() |
2468f9e26d | ||
![]() |
9042e973d3 | ||
![]() |
d6737fb5fe | ||
![]() |
d0fa4d5189 | ||
![]() |
8ac156622d | ||
![]() |
a3c06aa7bc | ||
![]() |
d82ee2f8c0 | ||
![]() |
58bab86d79 | ||
![]() |
c5db2282ad | ||
![]() |
1d20c84798 | ||
![]() |
8b79040c38 | ||
![]() |
c39b7b8177 | ||
![]() |
bc2cb99780 | ||
![]() |
fdc91f8d2c | ||
![]() |
c5b8ef1529 | ||
![]() |
68687ed0f4 | ||
![]() |
7ab8da949e | ||
![]() |
3acf0c2d73 | ||
![]() |
69ad092fce | ||
![]() |
49b2d8f26c | ||
![]() |
164d3e82e3 | ||
![]() |
8d2dfe872c | ||
![]() |
bebe2f0bbf | ||
![]() |
586a46c7d3 | ||
![]() |
1ac9e7e3a7 | ||
![]() |
e0cb415954 | ||
![]() |
b3e548d2d6 | ||
![]() |
f6ba58e370 | ||
![]() |
6f2f5320f2 | ||
![]() |
4af5189492 | ||
![]() |
9559796337 | ||
![]() |
c57369ee83 | ||
![]() |
475badd087 | ||
![]() |
5eb893011c | ||
![]() |
fc65f39ff2 | ||
![]() |
fcb97bd4e9 | ||
![]() |
ec6b240de2 | ||
![]() |
6236effb14 | ||
![]() |
8b90c08b35 | ||
![]() |
40b2ffcb52 | ||
![]() |
a1efd41649 | ||
![]() |
9b2ddd9cc6 | ||
![]() |
ab4d30fd6b | ||
![]() |
eb92986b88 | ||
![]() |
7582528067 | ||
![]() |
48bb96f507 | ||
![]() |
350eb11277 | ||
![]() |
da59c4ad44 | ||
![]() |
99b78e62f2 | ||
![]() |
08fe16840f | ||
![]() |
6b04efd443 | ||
![]() |
080b14b292 | ||
![]() |
e4f5a5d7b3 | ||
![]() |
735e0dff20 | ||
![]() |
65a04f02b6 | ||
![]() |
2f5dda90b7 | ||
![]() |
1d8a79ef4f | ||
![]() |
ff2978d95f | ||
![]() |
25057022e3 | ||
![]() |
74c8887c8e | ||
![]() |
949ff791e0 | ||
![]() |
b05084e406 | ||
![]() |
c5aa661c89 | ||
![]() |
c5dfc54e54 | ||
![]() |
89a911ee43 | ||
![]() |
d135825e9c | ||
![]() |
e106e22bdd | ||
![]() |
2e4657d111 | ||
![]() |
94d29d8578 | ||
![]() |
5a0c594c71 | ||
![]() |
ae98a12cff | ||
![]() |
ef73a9864f | ||
![]() |
05d6d7d8d1 | ||
![]() |
d8efef9461 | ||
![]() |
30687daf9b | ||
![]() |
4a597c9698 | ||
![]() |
0e0f9a8da3 | ||
![]() |
0b76a2da88 | ||
![]() |
5f4e6dafc5 | ||
![]() |
4c832a9195 | ||
![]() |
86dab3f7e9 | ||
![]() |
eab214e07c | ||
![]() |
a1f1941c3f | ||
![]() |
e48b2c681e | ||
![]() |
e010ea30e5 | ||
![]() |
fb7b47cf07 | ||
![]() |
1138f8cc70 | ||
![]() |
f8cf88f918 | ||
![]() |
13735eb21d | ||
![]() |
18be454011 | ||
![]() |
aa1a5a11c7 | ||
![]() |
994dddc231 | ||
![]() |
bfddfbadc7 | ||
![]() |
1e4e87de51 | ||
![]() |
2807644e7e | ||
![]() |
fb661a99bd | ||
![]() |
143582870c | ||
![]() |
a60bd0c8ac | ||
![]() |
59d0d255d8 | ||
![]() |
60f3ea5e81 | ||
![]() |
567c6d437a | ||
![]() |
8e6f298aa1 | ||
![]() |
1f9b7b0c48 | ||
![]() |
1a5a113655 | ||
![]() |
a2006ce214 | ||
![]() |
42681edaf3 | ||
![]() |
5e74a7b548 | ||
![]() |
2f6f931553 | ||
![]() |
aa54135087 | ||
![]() |
7cdeed54e0 | ||
![]() |
a22206b77a | ||
![]() |
7503b9f18c | ||
![]() |
6cf110b5d0 | ||
![]() |
c86e4c8bd3 | ||
![]() |
a380bbf4bf | ||
![]() |
249852d25c | ||
![]() |
e182bb2a5b | ||
![]() |
253430a765 | ||
![]() |
2882390c82 | ||
![]() |
64f41dea62 | ||
![]() |
881321e763 | ||
![]() |
161b8587bd | ||
![]() |
b221cedf80 | ||
![]() |
e7e03db9f8 | ||
![]() |
ec08dcf61a | ||
![]() |
2307fc3023 | ||
![]() |
ed8f117dd1 | ||
![]() |
dc2f00cca1 | ||
![]() |
62d4652f86 | ||
![]() |
8775e89a4f | ||
![]() |
82e24306e2 | ||
![]() |
cd491e296e | ||
![]() |
01ec0d49ca | ||
![]() |
bcf9c8cb27 | ||
![]() |
d566444d58 | ||
![]() |
de3c03af76 | ||
![]() |
db6242f076 | ||
![]() |
4ee1216aaf | ||
![]() |
3a27a9405f | ||
![]() |
d9f0475701 | ||
![]() |
31373fd55c | ||
![]() |
4310941daa | ||
![]() |
5caad485f1 | ||
![]() |
b6db2ac99d | ||
![]() |
8cb3bd3cd3 | ||
![]() |
d5a5a1cab6 | ||
![]() |
a397353916 | ||
![]() |
e864bda627 | ||
![]() |
794083b647 | ||
![]() |
7fc99a9e11 | ||
![]() |
1cdd1b0209 | ||
![]() |
f9817da397 | ||
![]() |
ccb599f84b | ||
![]() |
eeea19c0ab | ||
![]() |
38ebb8502d | ||
![]() |
4a73b6a219 | ||
![]() |
2adb7e7193 | ||
![]() |
7afe1d9e16 | ||
![]() |
ca6abea97d | ||
![]() |
7d877e286a | ||
![]() |
a64535f57d | ||
![]() |
af81089225 | ||
![]() |
de1f36f2b0 | ||
![]() |
2e28861cf8 | ||
![]() |
b0ba105bd9 | ||
![]() |
590d8d4d5c | ||
![]() |
b846ded487 | ||
![]() |
1b6bf796e1 | ||
![]() |
5285548c75 | ||
![]() |
ce4da82ce9 | ||
![]() |
7e56f46957 | ||
![]() |
33a29c9e4c | ||
![]() |
8cabbb28df | ||
![]() |
4c31a29ff0 | ||
![]() |
a655a4169e | ||
![]() |
68db108b35 | ||
![]() |
2d9896bf40 | ||
![]() |
515122669e | ||
![]() |
04e595dbda | ||
![]() |
16f501a14e | ||
![]() |
5d226ee733 | ||
![]() |
5799c471f1 | ||
![]() |
e1966f8d91 | ||
![]() |
0dc1a3d3af | ||
![]() |
7b162ec93f | ||
![]() |
848e403e37 | ||
![]() |
a1b07ae14c | ||
![]() |
3cdb82c21c | ||
![]() |
bd2bab7aff | ||
![]() |
7b8a08d2e1 | ||
![]() |
c8b6d9b990 | ||
![]() |
a298045f6c | ||
![]() |
fc35b3f72d | ||
![]() |
9d5e369170 | ||
![]() |
d91979cfef | ||
![]() |
ce942baad2 | ||
![]() |
d56fad5f38 | ||
![]() |
1676a836d1 | ||
![]() |
559ff80643 | ||
![]() |
a3a9a5efb9 | ||
![]() |
b066fdc2c6 | ||
![]() |
71313d934d | ||
![]() |
a2366fce53 | ||
![]() |
42ff88bdaf | ||
![]() |
7afaae7ffc | ||
![]() |
c34b6b2324 | ||
![]() |
83ce2dfcb7 | ||
![]() |
7ff14a652b | ||
![]() |
e8cbccf81d | ||
![]() |
76b4b3f827 | ||
![]() |
168993d04d | ||
![]() |
908a3d128f | ||
![]() |
26d9897551 | ||
![]() |
9bc921b342 | ||
![]() |
c222f6f111 | ||
![]() |
8ec99694d2 | ||
![]() |
0374e08550 | ||
![]() |
31aa77a85b | ||
![]() |
e9059b5d84 | ||
![]() |
2e42858537 | ||
![]() |
72c1066ed1 | ||
![]() |
c61464ebaa | ||
![]() |
7d9cddccd2 | ||
![]() |
d2575009a1 | ||
![]() |
14083ad2df | ||
![]() |
5a753c1ab0 | ||
![]() |
eb44b6f7db | ||
![]() |
fa8c7bc334 | ||
![]() |
f6b48c07fc | ||
![]() |
c6eeee1b79 | ||
![]() |
55a46a5c3b | ||
![]() |
0c05a02e67 | ||
![]() |
07a04255da | ||
![]() |
1ce6f76d6e | ||
![]() |
e6e7c73f6e | ||
![]() |
efea18a888 | ||
![]() |
0632ecf556 | ||
![]() |
999ef227d0 | ||
![]() |
50a0bddd8b | ||
![]() |
762f262be7 | ||
![]() |
cc948288bd | ||
![]() |
5ebe53f02d | ||
![]() |
280297bdb7 | ||
![]() |
448dcdc4cf | ||
![]() |
63a9e68af2 | ||
![]() |
2934712e43 | ||
![]() |
a070626729 | ||
![]() |
37a73fd43d | ||
![]() |
1dbbfdfe45 | ||
![]() |
a7f07a1a63 | ||
![]() |
697c9476b7 | ||
![]() |
cb33840a9b | ||
![]() |
e00178a1af | ||
![]() |
00248de15a | ||
![]() |
387bf1478e | ||
![]() |
c76e04f835 | ||
![]() |
e223d46033 | ||
![]() |
313dd1439d | ||
![]() |
c5422a5c48 | ||
![]() |
ac30211853 | ||
![]() |
656673fb58 | ||
![]() |
451650fa32 | ||
![]() |
5a8ae31316 | ||
![]() |
afab5bf497 | ||
![]() |
0de6a05d73 | ||
![]() |
5108d76136 | ||
![]() |
386a386345 | ||
![]() |
cea31c346d | ||
![]() |
ade4bf74ea | ||
![]() |
f2ed2ae09a | ||
![]() |
ebc6253bd4 | ||
![]() |
592d047936 | ||
![]() |
de95585258 | ||
![]() |
c5b8980398 | ||
![]() |
1e07fc024c | ||
![]() |
8a2e4c79fd | ||
![]() |
99d3a32ba2 | ||
![]() |
b591a66b3d | ||
![]() |
00b4b74e82 | ||
![]() |
d3195414dc | ||
![]() |
43ca626774 | ||
![]() |
44916bcacf | ||
![]() |
30085592d4 | ||
![]() |
16c8f75637 | ||
![]() |
cb5b9eb2f6 | ||
![]() |
1bba2c0fc3 | ||
![]() |
9067926a70 | ||
![]() |
2a04ee68b8 | ||
![]() |
be9f86ca9e | ||
![]() |
044d29c927 | ||
![]() |
8f3f21045b | ||
![]() |
aa85099171 | ||
![]() |
c245305f72 | ||
![]() |
fff6283bf7 | ||
![]() |
8904874f76 | ||
![]() |
31bf73517e | ||
![]() |
21f1cd4ec7 | ||
![]() |
c098da9803 | ||
![]() |
f60380cdc8 | ||
![]() |
ac87a4547d | ||
![]() |
2145ab7664 | ||
![]() |
681cfd0bf2 | ||
![]() |
27f4b6f5a4 | ||
![]() |
6cb9a6ebb1 | ||
![]() |
d8481ac7e4 | ||
![]() |
666e0fad35 | ||
![]() |
402005c9e0 | ||
![]() |
94bf4f54da | ||
![]() |
53a796a92e | ||
![]() |
ae20d11124 | ||
![]() |
eee47493a3 | ||
![]() |
e407ce463d | ||
![]() |
189b357b54 | ||
![]() |
2d7b61972c | ||
![]() |
c87357c025 | ||
![]() |
79b360f0a6 | ||
![]() |
1b849fc70a | ||
![]() |
b7ec66e33a | ||
![]() |
f8fbc0930b | ||
![]() |
a5d7b6266d | ||
![]() |
893f997dcb | ||
![]() |
b634b5958b | ||
![]() |
0c3dc8f99b | ||
![]() |
126e46e38a | ||
![]() |
e681678402 | ||
![]() |
7ab389db21 | ||
![]() |
59d6ed9ea4 | ||
![]() |
9e2a1d2e6a | ||
![]() |
3df61d6755 | ||
![]() |
cdf600048f | ||
![]() |
185414721f | ||
![]() |
a9fd0a454a | ||
![]() |
09868434cd | ||
![]() |
04ab6b4082 | ||
![]() |
d4281291e5 | ||
![]() |
d2f3e70b64 | ||
![]() |
e12c25ec2c | ||
![]() |
89fcaf1efd | ||
![]() |
9812cfc6c6 | ||
![]() |
919bb9ce38 | ||
![]() |
dc64d6ad55 | ||
![]() |
49bc97b0ca | ||
![]() |
5178e2af55 | ||
![]() |
ba11bb2b80 | ||
![]() |
ce7fb36337 | ||
![]() |
c8499c89db | ||
![]() |
a96ee8f1d8 | ||
![]() |
5d20b8f19b | ||
![]() |
43acffd41e | ||
![]() |
9c3a44b6a3 | ||
![]() |
d2b8e591f6 | ||
![]() |
ecd16cf24b | ||
![]() |
1b678eccf5 | ||
![]() |
ac4555b361 | ||
![]() |
72bcc0685c | ||
![]() |
b2019e4d71 | ||
![]() |
bc80d686f5 | ||
![]() |
f49d47a0aa | ||
![]() |
be1bd74b4b | ||
![]() |
9f7143af29 | ||
![]() |
7b62c71dd5 | ||
![]() |
465ea7a66e | ||
![]() |
56b319d2d5 | ||
![]() |
449bcc239f | ||
![]() |
bb2f93d427 | ||
![]() |
42dad78dbc | ||
![]() |
232c1e5915 | ||
![]() |
2997e78da3 | ||
![]() |
6f02e5f1f8 | ||
![]() |
148a5a9181 | ||
![]() |
064dcb833d | ||
![]() |
a8bdfadfd0 | ||
![]() |
a5403bdbe5 | ||
![]() |
083621c8db | ||
![]() |
b739c5a837 | ||
![]() |
d24c702b63 | ||
![]() |
4153d9e1b6 | ||
![]() |
fb53eb9a91 | ||
![]() |
ae827721ed | ||
![]() |
9aa9c7e968 | ||
![]() |
098cf76be7 | ||
![]() |
b30b35bf08 | ||
![]() |
f4e2f88e89 | ||
![]() |
8d973a36ed | ||
![]() |
3d95835f22 | ||
![]() |
26caddae23 | ||
![]() |
0799a91073 | ||
![]() |
8e954a4391 | ||
![]() |
78f50518a4 | ||
![]() |
a044578a33 | ||
![]() |
84406f1654 | ||
![]() |
666a851a07 | ||
![]() |
2a34be2eb0 | ||
![]() |
21df228634 | ||
![]() |
88fad0b42a | ||
![]() |
5734cf4bdd | ||
![]() |
f3477f87ac | ||
![]() |
ba69da1d8f | ||
![]() |
effd82fd9c | ||
![]() |
4f988b792c | ||
![]() |
cb8ceba3dd | ||
![]() |
c4f7ea09f1 | ||
![]() |
4fef2ddb4c | ||
![]() |
1abf9eeb80 | ||
![]() |
c3c4f65fea | ||
![]() |
40870f9037 | ||
![]() |
f1867b3d2c | ||
![]() |
ae43551a55 | ||
![]() |
c2d8aa0584 | ||
![]() |
0a673de78a | ||
![]() |
032f55feb6 | ||
![]() |
e230d683ca | ||
![]() |
4a0f5cbd63 | ||
![]() |
0e585570a3 | ||
![]() |
045674745a | ||
![]() |
d489e9d422 | ||
![]() |
aabf02fe29 | ||
![]() |
c43ac7f1d7 | ||
![]() |
5f999fa6a0 | ||
![]() |
40e0e7e35f | ||
![]() |
36064e3d7d | ||
![]() |
6e027b1c4b | ||
![]() |
314c82b2ec | ||
![]() |
2a3bb78679 | ||
![]() |
8820aa8715 | ||
![]() |
066d268007 | ||
![]() |
8bec3be68c | ||
![]() |
83614418b5 | ||
![]() |
ec458292fe | ||
![]() |
0fe0757657 | ||
![]() |
c2b0083f0a | ||
![]() |
ed280e3ec1 | ||
![]() |
edc2224118 | ||
![]() |
587d1b334b | ||
![]() |
bcf16c04bd | ||
![]() |
87daf28421 | ||
![]() |
4101df7a75 | ||
![]() |
599b428e13 | ||
![]() |
26522d0ec5 | ||
![]() |
959a94b98d | ||
![]() |
ffad6eaf80 | ||
![]() |
469ca2f155 | ||
![]() |
e6ce18b019 | ||
![]() |
e217c82895 | ||
![]() |
cdd1c45306 | ||
![]() |
575b43e67d | ||
![]() |
8e52272b28 | ||
![]() |
d619444cb4 | ||
![]() |
8af7ae867d | ||
![]() |
a15f02dcc1 | ||
![]() |
b0b78c0efb | ||
![]() |
fd56ae777e | ||
![]() |
50e0b81713 | ||
![]() |
c58c8c4229 | ||
![]() |
a780a8762b | ||
![]() |
b8847de802 | ||
![]() |
b6e9c42b02 | ||
![]() |
67a9cdc35b | ||
![]() |
edd91d28f5 | ||
![]() |
0cf2b02791 | ||
![]() |
4cd8a95ef7 | ||
![]() |
2b3008f9a8 | ||
![]() |
388abe9d9c | ||
![]() |
755d4180c9 | ||
![]() |
1e134cbb31 | ||
![]() |
f1551d7a5f | ||
![]() |
e0aa405d19 | ||
![]() |
93ec6f3735 | ||
![]() |
56edc2b261 | ||
![]() |
99e6bc3720 | ||
![]() |
595a88b34c | ||
![]() |
15152b62ce | ||
![]() |
dff588d772 | ||
![]() |
2284db1fb5 | ||
![]() |
51c80630f5 | ||
![]() |
8450bc3225 | ||
![]() |
84c383061f | ||
![]() |
3a3ada0c57 | ||
![]() |
bdbcb8df39 | ||
![]() |
7aaccd94d2 | ||
![]() |
d7cfd8b91d | ||
![]() |
ffe0fc7537 | ||
![]() |
4f41501fc7 | ||
![]() |
4b2714acb2 | ||
![]() |
75c58e08e5 | ||
![]() |
6eba383009 | ||
![]() |
39d2c219b5 | ||
![]() |
fecad9bab4 | ||
![]() |
e252fade2c | ||
![]() |
55566bb188 | ||
![]() |
8c5c46454f | ||
![]() |
fc69dd70cf | ||
![]() |
8fa083d79e | ||
![]() |
05728e2b18 | ||
![]() |
f4300afb1c | ||
![]() |
5ca7c285f5 | ||
![]() |
485d8fa77e | ||
![]() |
cfcffe94ce | ||
![]() |
d33b22d127 | ||
![]() |
6e6e6265e4 | ||
![]() |
fb896be201 | ||
![]() |
cca27fc383 | ||
![]() |
201ea7ca6d | ||
![]() |
9998e8a665 | ||
![]() |
86c34a9a33 | ||
![]() |
1f00a182c4 | ||
![]() |
5442508f82 | ||
![]() |
3e1d85eed2 | ||
![]() |
cc5dfd03cd | ||
![]() |
60620dca42 | ||
![]() |
9f0b401f80 | ||
![]() |
29f84b1602 | ||
![]() |
29f42903f3 | ||
![]() |
9c3bdd621b | ||
![]() |
f2b4567a2b | ||
![]() |
2fa500af18 | ||
![]() |
37bb14678a | ||
![]() |
09d8ead4b8 | ||
![]() |
0f11858b0e | ||
![]() |
33f0d4b314 | ||
![]() |
3158b323d8 | ||
![]() |
57058e33fc | ||
![]() |
f44c588dd7 | ||
![]() |
7f98d11454 | ||
![]() |
06642910f4 | ||
![]() |
13b499f910 | ||
![]() |
56c47188d8 | ||
![]() |
56acdf67ba | ||
![]() |
e79a7b9152 | ||
![]() |
fc18cd4cbb | ||
![]() |
3951a940fd | ||
![]() |
1491bc9162 | ||
![]() |
08f8f488a0 | ||
![]() |
baa5417f3e | ||
![]() |
2737166d2b | ||
![]() |
bdee6397eb | ||
![]() |
b580a0b7f3 | ||
![]() |
597b84f684 | ||
![]() |
c8dc7f807f | ||
![]() |
b3c0d417ef | ||
![]() |
13e6afd589 | ||
![]() |
2bbfc56bd8 | ||
![]() |
cc8329f3e4 | ||
![]() |
e9e3000ff9 | ||
![]() |
0dd78aa916 | ||
![]() |
daf9d06c0e | ||
![]() |
2dec21f81b | ||
![]() |
89205438c2 | ||
![]() |
a6c7467fd3 | ||
![]() |
a3fff24fbc | ||
![]() |
50977eef0e | ||
![]() |
fac9151c73 | ||
![]() |
630692d81b | ||
![]() |
f0ffe7b984 | ||
![]() |
658194ccc4 | ||
![]() |
4130c50b01 | ||
![]() |
b572983cc8 | ||
![]() |
9f0f29cd40 | ||
![]() |
8b34f2fca8 | ||
![]() |
94527951a0 | ||
![]() |
4a2baf400e | ||
![]() |
f5e13d5898 | ||
![]() |
218b80e63a | ||
![]() |
148eea1417 | ||
![]() |
2bfcd446a5 | ||
![]() |
494e125432 | ||
![]() |
409a5fb7fc | ||
![]() |
7860469661 | ||
![]() |
4b4f880785 | ||
![]() |
308028e17c | ||
![]() |
b870d932e5 | ||
![]() |
14138f105e | ||
![]() |
49f09f55d0 | ||
![]() |
e4144d8b47 | ||
![]() |
cebb375eac | ||
![]() |
c4bc8b2561 | ||
![]() |
d6461abe78 | ||
![]() |
9f853685ae | ||
![]() |
61ad7bef71 | ||
![]() |
3cc1979adb | ||
![]() |
7df979673d | ||
![]() |
8813f9d3b8 | ||
![]() |
e2abb089f4 | ||
![]() |
dc9a309839 | ||
![]() |
dd07fecc5f | ||
![]() |
3c31d08051 | ||
![]() |
339b1a7723 | ||
![]() |
6a72cc5d48 | ||
![]() |
e7069da7eb | ||
![]() |
54e29e9ff4 | ||
![]() |
589dfdb0e5 | ||
![]() |
496c7c701a | ||
![]() |
7ab3da1e03 | ||
![]() |
89b92b54a7 | ||
![]() |
5456afa8ee | ||
![]() |
1b1e205a30 | ||
![]() |
ef99d37c97 | ||
![]() |
226efdcec0 | ||
![]() |
377f8ce76f | ||
![]() |
4c99c5ff5c | ||
![]() |
a3fdcbdf16 | ||
![]() |
a3d6e8fc52 | ||
![]() |
bb0df2740e | ||
![]() |
af9f0f1cd6 | ||
![]() |
b15c209805 | ||
![]() |
e09ebea7b9 | ||
![]() |
9cc22b635c | ||
![]() |
4071e490e2 | ||
![]() |
fd6cf9010b | ||
![]() |
d9eaa54e14 | ||
![]() |
616562a48a |
92
.circleci/config.yml
Normal file
92
.circleci/config.yml
Normal file
@ -0,0 +1,92 @@
|
||||
version: 2.1
|
||||
|
||||
setup: true
|
||||
orbs:
|
||||
continuation: circleci/continuation@1
|
||||
|
||||
jobs:
|
||||
set-matrix:
|
||||
executor: continuation/default
|
||||
docker:
|
||||
- image: cimg/base:current
|
||||
resource_class: small
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Set matrix
|
||||
command: |
|
||||
MATRIX_JSON=$(python .github/workflows/ci_set_matrix.py)
|
||||
echo "MATRIX_JSON=$MATRIX_JSON"
|
||||
|
||||
BUILDSYSTEM_TOOLCHAIN=(
|
||||
"cmake arm-clang"
|
||||
"cmake esp-idf"
|
||||
"make aarch64-gcc"
|
||||
"make arm-gcc"
|
||||
"make msp430-gcc"
|
||||
"make riscv-gcc"
|
||||
"make rx-gcc"
|
||||
)
|
||||
|
||||
# only build IAR if not forked PR, since IAR token is not shared
|
||||
if [ -z $CIRCLE_PR_USERNAME ]; then
|
||||
BUILDSYSTEM_TOOLCHAIN+=("cmake arm-iar")
|
||||
fi
|
||||
|
||||
RESOURCE_LARGE='["nrf", "imxrt", "stm32f4", "stm32h7"]'
|
||||
|
||||
gen_build_entry() {
|
||||
local build_system="$1"
|
||||
local toolchain="$2"
|
||||
local family="$3"
|
||||
local resource_class="$4"
|
||||
|
||||
if [[ "$toolchain" == "esp-idf" ]]; then
|
||||
echo " - build-vm:" >> .circleci/config2.yml
|
||||
else
|
||||
echo " - build:" >> .circleci/config2.yml
|
||||
fi
|
||||
|
||||
echo " matrix:" >> .circleci/config2.yml
|
||||
echo " parameters:" >> .circleci/config2.yml
|
||||
echo " build-system: ['$build_system']" >> .circleci/config2.yml
|
||||
echo " toolchain: ['$toolchain']" >> .circleci/config2.yml
|
||||
echo " family: $family" >> .circleci/config2.yml
|
||||
echo " resource_class: ['$resource_class']" >> .circleci/config2.yml
|
||||
}
|
||||
|
||||
for e in "${BUILDSYSTEM_TOOLCHAIN[@]}"; do
|
||||
e_arr=($e)
|
||||
build_system="${e_arr[0]}"
|
||||
toolchain="${e_arr[1]}"
|
||||
FAMILY=$(echo $MATRIX_JSON | jq -r ".\"$toolchain\"")
|
||||
echo "FAMILY_${toolchain}=$FAMILY"
|
||||
|
||||
# FAMILY_LARGE = FAMILY - RESOURCE_LARGE
|
||||
# Separate large from medium+ resources
|
||||
FAMILY_LARGE=$(jq -n --argjson family "$FAMILY" --argjson resource "$RESOURCE_LARGE" '$family | map(select(IN($resource[])))')
|
||||
FAMILY=$(jq -n --argjson family "$FAMILY" --argjson resource "$RESOURCE_LARGE" '$family | map(select(IN($resource[]) | not))')
|
||||
|
||||
if [[ $toolchain == esp-idf ]]; then
|
||||
gen_build_entry "$build_system" "$toolchain" "$FAMILY" "large"
|
||||
else
|
||||
gen_build_entry "$build_system" "$toolchain" "$FAMILY" "medium+"
|
||||
|
||||
# add large resources if available
|
||||
if [ "$(echo $FAMILY_LARGE | jq 'length')" -gt 0 ]; then
|
||||
gen_build_entry "$build_system" "$toolchain" "$FAMILY_LARGE" "large"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
- continuation/continue:
|
||||
configuration_path: .circleci/config2.yml
|
||||
|
||||
workflows:
|
||||
set-matrix:
|
||||
# Only build PR here, Push will be built by github action.
|
||||
when:
|
||||
and:
|
||||
- not: << pipeline.git.branch.is_default >>
|
||||
jobs:
|
||||
- set-matrix
|
185
.circleci/config2.yml
Normal file
185
.circleci/config2.yml
Normal file
@ -0,0 +1,185 @@
|
||||
version: 2.1
|
||||
|
||||
commands:
|
||||
setup-toolchain:
|
||||
parameters:
|
||||
toolchain:
|
||||
type: string
|
||||
|
||||
steps:
|
||||
- run:
|
||||
name: Set toolchain url and key
|
||||
command: |
|
||||
toolchain_url=$(jq -r '."<< parameters.toolchain >>"' .github/actions/setup_toolchain/toolchain.json)
|
||||
# only cache if not a github link
|
||||
if [[ $toolchain_url != "https://github.com"* ]]; then
|
||||
echo "<< parameters.toolchain >>-$toolchain_url" > toolchain_key
|
||||
fi
|
||||
echo "export toolchain_url=$toolchain_url" >> $BASH_ENV
|
||||
|
||||
- restore_cache:
|
||||
name: Restore Toolchain Cache
|
||||
key: deps-{{ checksum "toolchain_key" }}
|
||||
paths:
|
||||
- ~/cache/<< parameters.toolchain >>
|
||||
|
||||
- run:
|
||||
name: Install Toolchain
|
||||
command: |
|
||||
# download if folder does not exist (not cached)
|
||||
if [ ! -d ~/cache/<< parameters.toolchain >> ]; then
|
||||
mkdir -p ~/cache/<< parameters.toolchain >>
|
||||
if [[ << parameters.toolchain >> == rx-gcc ]]; then
|
||||
wget --progress=dot:giga $toolchain_url -O toolchain.run
|
||||
chmod +x toolchain.run
|
||||
./toolchain.run -p ~/cache/<< parameters.toolchain >>/gnurx -y
|
||||
elif [[ << parameters.toolchain >> == arm-iar ]]; then
|
||||
wget --progress=dot:giga $toolchain_url -O ~/cache/<< parameters.toolchain >>/toolchain.deb
|
||||
else
|
||||
wget --progress=dot:giga $toolchain_url -O toolchain.tar.gz
|
||||
tar -C ~/cache/<< parameters.toolchain >> -xaf toolchain.tar.gz
|
||||
fi
|
||||
fi
|
||||
|
||||
# Add toolchain to PATH
|
||||
if [[ << parameters.toolchain >> == arm-iar ]]; then
|
||||
# Install IAR since we only cache deb file
|
||||
sudo dpkg --ignore-depends=libusb-1.0-0 -i ~/cache/<< parameters.toolchain >>/toolchain.deb
|
||||
echo "export PATH=$PATH:/opt/iar/cxarm/arm/bin" >> $BASH_ENV
|
||||
else
|
||||
echo "export PATH=$PATH:`echo ~/cache/<< parameters.toolchain >>/*/bin`" >> $BASH_ENV
|
||||
fi
|
||||
|
||||
- save_cache:
|
||||
name: Save Toolchain Cache
|
||||
key: deps-{{ checksum "toolchain_key" }}
|
||||
paths:
|
||||
- ~/cache/<< parameters.toolchain >>
|
||||
|
||||
build:
|
||||
parameters:
|
||||
build-system:
|
||||
type: string
|
||||
toolchain:
|
||||
type: string
|
||||
family:
|
||||
type: string
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Get Dependencies
|
||||
command: |
|
||||
python tools/get_deps.py << parameters.family >>
|
||||
|
||||
# Install ninja if cmake build system
|
||||
if [ << parameters.build-system >> == "cmake" ]; then
|
||||
NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip
|
||||
wget $NINJA_URL -O ninja-linux.zip
|
||||
unzip ninja-linux.zip -d ~/bin
|
||||
fi
|
||||
|
||||
# rx-gcc is 32-bit binary
|
||||
if [[ << parameters.toolchain >> == rx-gcc ]]; then
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update
|
||||
sudo apt install libc6:i386 libstdc++6:i386 zlib1g:i386
|
||||
fi
|
||||
|
||||
# Install Pico SDK
|
||||
if [ << parameters.family >> == "rp2040" ]; then
|
||||
git clone --depth 1 https://github.com/raspberrypi/pico-sdk.git ~/pico-sdk
|
||||
echo "export PICO_SDK_PATH=~/pico-sdk" >> $BASH_ENV
|
||||
fi
|
||||
|
||||
- when:
|
||||
condition:
|
||||
not:
|
||||
equal: [esp-idf, << parameters.toolchain >>]
|
||||
steps:
|
||||
- setup-toolchain:
|
||||
toolchain: << parameters.toolchain >>
|
||||
|
||||
- run:
|
||||
name: Build
|
||||
command: |
|
||||
if [ << parameters.toolchain >> == esp-idf ]; then
|
||||
docker run --rm -v $PWD:/project -w /project espressif/idf:v5.3.2 python tools/build.py << parameters.family >>
|
||||
else
|
||||
# Toolchain option default is gcc
|
||||
if [ << parameters.toolchain >> == arm-clang ]; then
|
||||
TOOLCHAIN_OPTION="--toolchain clang"
|
||||
elif [ << parameters.toolchain >> == arm-iar ]; then
|
||||
TOOLCHAIN_OPTION="--toolchain iar"
|
||||
iccarm --version
|
||||
elif [ << parameters.toolchain >> == arm-gcc ]; then
|
||||
TOOLCHAIN_OPTION="--toolchain gcc"
|
||||
fi
|
||||
|
||||
python tools/build.py -s << parameters.build-system >> $TOOLCHAIN_OPTION << parameters.family >>
|
||||
fi
|
||||
|
||||
jobs:
|
||||
# Build using docker
|
||||
build:
|
||||
parameters:
|
||||
resource_class:
|
||||
type: string
|
||||
default: medium+
|
||||
build-system:
|
||||
type: string
|
||||
toolchain:
|
||||
type: string
|
||||
family:
|
||||
type: string
|
||||
|
||||
docker:
|
||||
- image: cimg/base:current
|
||||
resource_class: << parameters.resource_class >>
|
||||
|
||||
steps:
|
||||
- build:
|
||||
build-system: << parameters.build-system >>
|
||||
toolchain: << parameters.toolchain >>
|
||||
family: << parameters.family >>
|
||||
|
||||
# Build using VM
|
||||
build-vm:
|
||||
parameters:
|
||||
resource_class:
|
||||
type: string
|
||||
default: large
|
||||
build-system:
|
||||
type: string
|
||||
toolchain:
|
||||
type: string
|
||||
family:
|
||||
type: string
|
||||
|
||||
machine:
|
||||
image: ubuntu-2404:current
|
||||
resource_class: << parameters.resource_class >>
|
||||
|
||||
steps:
|
||||
- build:
|
||||
build-system: << parameters.build-system >>
|
||||
toolchain: << parameters.toolchain >>
|
||||
family: << parameters.family >>
|
||||
|
||||
workflows:
|
||||
build:
|
||||
jobs:
|
||||
# - build:
|
||||
# matrix:
|
||||
# parameters:
|
||||
# toolchain: [ 'arm-gcc' ]
|
||||
# build-system: [ 'cmake' ]
|
||||
# family: [ 'nrf' ]
|
||||
# resource_class: ['large']
|
||||
# - build-vm:
|
||||
# matrix:
|
||||
# parameters:
|
||||
# toolchain: ['esp-idf']
|
||||
# build-system: ['cmake']
|
||||
# family: ['-bespressif_kaluga_1']
|
||||
# resource_class: ['large']
|
66
.clang-format
Normal file
66
.clang-format
Normal file
@ -0,0 +1,66 @@
|
||||
# Generated from CLion C/C++ Code Style settings
|
||||
BasedOnStyle: LLVM
|
||||
AccessModifierOffset: -2
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: None
|
||||
AlignOperands: Align
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AllowAllConstructorInitializersOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: Always
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: Always
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: false
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: false
|
||||
AfterFunction: false
|
||||
AfterNamespace: false
|
||||
AfterUnion: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakInheritanceList: BeforeColon
|
||||
ColumnLimit: 0
|
||||
CompactNamespaces: false
|
||||
ContinuationIndentWidth: 4
|
||||
IndentCaseLabels: true
|
||||
IndentPPDirectives: BeforeHash
|
||||
IndentWidth: 2
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
MaxEmptyLinesToKeep: 2
|
||||
NamespaceIndentation: All
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PointerAlignment: Right
|
||||
ReflowComments: false
|
||||
SpaceAfterCStyleCast: true
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: false
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 0
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
TabWidth: 2
|
||||
UseTab: Never
|
10
.codespellrc
Normal file
10
.codespellrc
Normal file
@ -0,0 +1,10 @@
|
||||
# See: https://github.com/codespell-project/codespell#using-a-config-file
|
||||
[codespell]
|
||||
# In the event of a false positive, add the problematic word, in all lowercase, to 'ignore-words.txt' (one word per line).
|
||||
# Or copy & paste the whole problematic line to 'exclude-file.txt'
|
||||
ignore-words = tools/codespell/ignore-words.txt
|
||||
exclude-file = tools/codespell/exclude-file.txt
|
||||
check-filenames =
|
||||
check-hidden =
|
||||
count =
|
||||
skip = *.rb,.cproject,.git,./lib,./examples/*/*/_build,./examples/*/*/ses,./examples/*/*/ozone,./hw/mcu,./tests_obsolete
|
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -1,10 +1,10 @@
|
||||
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||
* text=auto
|
||||
|
||||
*.c text
|
||||
*.cpp text
|
||||
*.c text
|
||||
*.cpp text
|
||||
*.h text
|
||||
*.icf text
|
||||
*.icf text
|
||||
*.js text
|
||||
*.json text
|
||||
*.ld text
|
||||
|
29
.github/ISSUE_TEMPLATE/bug_report.md
vendored
29
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,29 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: Bug 🐞
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Set up**
|
||||
[Mandatory] Provide details of your setup help us to reproduce the issue as quick as possible
|
||||
- **PC OS** : Ubuntu 18.04 / Windows 10/ macOS 10.15
|
||||
- **Board** : Feather nRF52840 Express
|
||||
- **Firmware**: examples/device/cdc_msc
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. See error
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots, bus capture to help explain your problem.
|
||||
|
||||
**Log**
|
||||
Please provide the stack's log (uart/rtt/swo) where the issue occurred, best with comments to explain the actual events. To enable logging, add `LOG=2` to to the make command if building with stock examples or set `CFG_TUSB_DEBUG=2` in your tusb_config.h. More information can be found at [example's readme](/docs/getting_started.md)
|
86
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
86
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
name: Bug Report
|
||||
description: Report a problem with TinyUSB
|
||||
labels: 'Bug 🐞'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
It's okay to leave some blank if it doesn't apply to your problem.
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Operating System
|
||||
options:
|
||||
- Linux
|
||||
- MacOS
|
||||
- RaspberryPi OS
|
||||
- Windows 7
|
||||
- Windows 10
|
||||
- Windows 11
|
||||
- Others
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Board
|
||||
placeholder: e.g Feather nRF52840 Express
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Firmware
|
||||
placeholder: |
|
||||
e.g examples/device/cdc_msc. If it is custom firmware, it is preferably compiled like one in example folder and reviewable for people to comment on. The easiest way is
|
||||
- Fork this repo, checkout a new branch
|
||||
- Add your-own-example based on stock one
|
||||
- Push and post it here.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: What happened ?
|
||||
placeholder: A clear and concise description of what the bug is.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: How to reproduce ?
|
||||
placeholder: |
|
||||
Exact steps in chronological order, details should be specific e.g if you use a command/script to test with, please post it as well.
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. See error
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Debug Log as txt file (LOG/CFG_TUSB_DEBUG=2)
|
||||
placeholder: |
|
||||
Attach your debug log txt file here, where the issue occurred, best with comments to explain the actual events.
|
||||
|
||||
Note1: Please DO NOT paste your lengthy log contents here since it hurts the readability.
|
||||
Note2: To enable logging, add `LOG=2` to to the make command if building with stock examples or set `CFG_TUSB_DEBUG=2` in your tusb_config.h.
|
||||
More information can be found at [example's readme](https://github.com/hathach/tinyusb/blob/master/docs/getting_started.md)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: If applicable, add screenshots to help explain your problem.
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: I have checked existing issues, dicussion and documentation
|
||||
description: You agree to check all the resources above before opening a new issue.
|
||||
options:
|
||||
- label: I confirm I have checked existing issues, dicussion and documentation.
|
||||
required: true
|
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: TinyUSB Discussion
|
||||
url: https://github.com/hathach/tinyusb/discussions
|
||||
about: If you have other questions or need help, post it here.
|
||||
- name: TinyUSB Docs
|
||||
url: https://docs.tinyusb.org/
|
||||
about: Online documentation
|
14
.github/ISSUE_TEMPLATE/feature_request.md
vendored
14
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,14 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: Feature 💡
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
49
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
49
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
name: Feature Request
|
||||
description: Suggest an idea for this project
|
||||
labels: 'Feature 💡'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this request!
|
||||
It's okay to leave some blank if it doesn't apply to your request.
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Related area
|
||||
description: Please briefly explain the area of your Feature Request.
|
||||
placeholder: eg. new port support, device stack, class driver ...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Hardware specification
|
||||
description: Please provide if your proposal depends on specific Hardware.
|
||||
placeholder: eg. rp2040, samd51 ...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Is your feature request related to a problem?
|
||||
description: Please provide a clear and concise description of what the problem is. Add relevant issue link.
|
||||
placeholder: ex. I'm facing the issue/missing function...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the solution you'd like
|
||||
description: Please provide a clear and concise description of what you want to happen.
|
||||
placeholder: ex. When using this function...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: I have checked existing issues, dicussion and documentation
|
||||
description: You agree to check all the resources above before opening a new issue.
|
||||
options:
|
||||
- label: I confirm I have checked existing issues, dicussion and documentation.
|
||||
required: true
|
11
.github/ISSUE_TEMPLATE/porting.md
vendored
11
.github/ISSUE_TEMPLATE/porting.md
vendored
@ -1,11 +0,0 @@
|
||||
---
|
||||
name: Porting
|
||||
about: Adding a new port for this project
|
||||
title: ''
|
||||
labels: Porting
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Description**
|
||||
Describe which API you want to port (DCD/HCD/OSAL/BSP). It is also helpful to go through [porting.md](docs/porting.md) first if you haven't yet.
|
10
.github/ISSUE_TEMPLATE/question.md
vendored
10
.github/ISSUE_TEMPLATE/question.md
vendored
@ -1,10 +0,0 @@
|
||||
---
|
||||
name: Question
|
||||
about: Question for this project
|
||||
title: ''
|
||||
labels: Q&A
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe what the question is**
|
29
.github/actions/get_deps/action.yml
vendored
Normal file
29
.github/actions/get_deps/action.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
name: Get dependencies
|
||||
|
||||
inputs:
|
||||
arg:
|
||||
description: 'Arguments to get_deps.py'
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Checkout pico-sdk for rp2040
|
||||
if: contains(inputs.arg, 'rp2040') || contains(inputs.arg, 'raspberry_pi_pico')
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: raspberrypi/pico-sdk
|
||||
ref: master
|
||||
path: pico-sdk
|
||||
|
||||
- name: Linux dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt install -y ninja-build
|
||||
shell: bash
|
||||
|
||||
- name: Get Dependencies
|
||||
run: |
|
||||
python3 tools/get_deps.py ${{ inputs.arg }}
|
||||
echo "PICO_SDK_PATH=${{ github.workspace }}/pico-sdk" >> $GITHUB_ENV
|
||||
shell: bash
|
59
.github/actions/setup_toolchain/action.yml
vendored
Normal file
59
.github/actions/setup_toolchain/action.yml
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
name: Setup Toolchain
|
||||
|
||||
inputs:
|
||||
toolchain:
|
||||
description: 'Toolchain name'
|
||||
required: true
|
||||
|
||||
outputs:
|
||||
build_option:
|
||||
description: 'Build option for the toolchain e.g --toolchain clang'
|
||||
value: ${{ steps.set-toolchain-option.outputs.build_option }}
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install ARM GCC
|
||||
if: inputs.toolchain == 'arm-gcc'
|
||||
uses: carlosperate/arm-none-eabi-gcc-action@v1
|
||||
with:
|
||||
release: '13.2.Rel1'
|
||||
|
||||
- name: Pull ESP-IDF docker
|
||||
if: inputs.toolchain == 'esp-idf'
|
||||
uses: ./.github/actions/setup_toolchain/espressif
|
||||
with:
|
||||
toolchain: ${{ inputs.toolchain }}
|
||||
|
||||
- name: Get Toolchain URL
|
||||
if: >-
|
||||
inputs.toolchain != 'arm-gcc' &&
|
||||
inputs.toolchain != 'esp-idf'
|
||||
id: set-toolchain-url
|
||||
run: |
|
||||
TOOLCHAIN_URL=$(jq -r '."${{ inputs.toolchain }}"' .github/actions/setup_toolchain/toolchain.json)
|
||||
echo "toolchain_url=$TOOLCHAIN_URL"
|
||||
echo "toolchain_url=$TOOLCHAIN_URL" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
|
||||
- name: Download Toolchain
|
||||
if: >-
|
||||
inputs.toolchain != 'arm-gcc' &&
|
||||
inputs.toolchain != 'esp-idf'
|
||||
uses: ./.github/actions/setup_toolchain/download
|
||||
with:
|
||||
toolchain: ${{ inputs.toolchain }}
|
||||
toolchain_url: ${{ steps.set-toolchain-url.outputs.toolchain_url }}
|
||||
|
||||
- name: Set toolchain option
|
||||
id: set-toolchain-option
|
||||
run: |
|
||||
BUILD_OPTION=""
|
||||
if [[ "${{ inputs.toolchain }}" == *"clang"* ]]; then
|
||||
BUILD_OPTION="--toolchain clang"
|
||||
elif [[ "${{ inputs.toolchain }}" == "arm-iar" ]]; then
|
||||
BUILD_OPTION="--toolchain iar"
|
||||
fi
|
||||
echo "build_option=$BUILD_OPTION"
|
||||
echo "build_option=$BUILD_OPTION" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
47
.github/actions/setup_toolchain/download/action.yml
vendored
Normal file
47
.github/actions/setup_toolchain/download/action.yml
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
name: Download Toolchain
|
||||
|
||||
inputs:
|
||||
toolchain:
|
||||
description: 'Toolchain name'
|
||||
required: true
|
||||
toolchain_url:
|
||||
description: 'Toolchain URL'
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Cache Toolchain
|
||||
if: ${{ !startsWith(inputs.toolchain_url, 'https://github.com') }}
|
||||
uses: actions/cache@v4
|
||||
id: cache-toolchain-download
|
||||
with:
|
||||
path: ~/cache/${{ inputs.toolchain }}
|
||||
key: ${{ runner.os }}-${{ inputs.toolchain }}-${{ inputs.toolchain_url }}
|
||||
|
||||
- name: Install Toolchain
|
||||
if: steps.cache-toolchain-download.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
mkdir -p ~/cache/${{ inputs.toolchain }}
|
||||
|
||||
if [[ ${{ inputs.toolchain }} == rx-gcc ]]; then
|
||||
wget --progress=dot:giga ${{ inputs.toolchain_url }} -O toolchain.run
|
||||
chmod +x toolchain.run
|
||||
./toolchain.run -p ~/cache/${{ inputs.toolchain }}/gnurx -y
|
||||
elif [[ ${{ inputs.toolchain }} == arm-iar ]]; then
|
||||
wget --progress=dot:giga ${{ inputs.toolchain_url }} -O ~/cache/${{ inputs.toolchain }}/cxarm.deb
|
||||
else
|
||||
wget --progress=dot:giga ${{ inputs.toolchain_url }} -O toolchain.tar.gz
|
||||
tar -C ~/cache/${{ inputs.toolchain }} -xaf toolchain.tar.gz
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Setup Toolchain
|
||||
run: |
|
||||
if [[ ${{ inputs.toolchain }} == arm-iar ]]; then
|
||||
sudo apt-get install -y ~/cache/${{ inputs.toolchain }}/cxarm.deb
|
||||
echo >> $GITHUB_PATH "/opt/iar/cxarm/arm/bin"
|
||||
else
|
||||
echo >> $GITHUB_PATH `echo ~/cache/${{ inputs.toolchain }}/*/bin`
|
||||
fi
|
||||
shell: bash
|
48
.github/actions/setup_toolchain/espressif/action.yml
vendored
Normal file
48
.github/actions/setup_toolchain/espressif/action.yml
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
name: Setup ESP-IDF Toolchain
|
||||
|
||||
inputs:
|
||||
toolchain:
|
||||
description: 'Toolchain name'
|
||||
required: true
|
||||
toolchain_version:
|
||||
description: 'Toolchain version'
|
||||
required: false
|
||||
default: 'v5.3.2'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Set DOCKER_ESP_IDF
|
||||
run: |
|
||||
DOCKER_ESP_IDF=$HOME/cache/${{ inputs.toolchain }}/docker_image.tar
|
||||
echo "DOCKER_ESP_IDF=$DOCKER_ESP_IDF" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Cache Docker Image
|
||||
uses: actions/cache@v4
|
||||
id: cache-toolchain-espressif
|
||||
with:
|
||||
path: ${{ env.DOCKER_ESP_IDF }}
|
||||
key: ${{ inputs.toolchain }}-${{ inputs.toolchain_version }}
|
||||
|
||||
- name: Pull and Save Docker Image
|
||||
if: steps.cache-toolchain-espressif.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
docker pull espressif/idf:${{ inputs.toolchain_version }}
|
||||
mkdir -p $(dirname $DOCKER_ESP_IDF)
|
||||
docker save -o $DOCKER_ESP_IDF espressif/idf:${{ inputs.toolchain_version }}
|
||||
du -sh $DOCKER_ESP_IDF
|
||||
shell: bash
|
||||
|
||||
- name: Load Docker Image
|
||||
if: steps.cache-toolchain-espressif.outputs.cache-hit == 'true'
|
||||
run: |
|
||||
du -sh $DOCKER_ESP_IDF
|
||||
docker load --input $DOCKER_ESP_IDF
|
||||
shell: bash
|
||||
|
||||
- name: Tag Local Image
|
||||
run: |
|
||||
docker tag espressif/idf:${{ inputs.toolchain_version }} espressif/idf:tinyusb
|
||||
docker images
|
||||
shell: bash
|
9
.github/actions/setup_toolchain/toolchain.json
vendored
Normal file
9
.github/actions/setup_toolchain/toolchain.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"aarch64-gcc": "https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz",
|
||||
"arm-clang": "https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-19.1.1/LLVM-ET-Arm-19.1.1-Linux-x86_64.tar.xz",
|
||||
"arm-gcc": "https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v13.2.1-1.1/xpack-arm-none-eabi-gcc-13.2.1-1.1-linux-x64.tar.gz",
|
||||
"msp430-gcc": "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2",
|
||||
"riscv-gcc": "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz",
|
||||
"rx-gcc": "https://github.com/hathach/rx_device/releases/download/0.0.1/gcc-8.3.0.202411-GNURX-ELF.run",
|
||||
"arm-iar": "https://netstorage.iar.com/FileStore/STANDARD/001/003/583/cxarm-9.60.4.deb"
|
||||
}
|
349
.github/workflows/build.yml
vendored
349
.github/workflows/build.yml
vendored
@ -1,117 +1,272 @@
|
||||
name: Build
|
||||
|
||||
on: [pull_request, push, repository_dispatch]
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'hw/**'
|
||||
- 'tools/build.py'
|
||||
- 'tools/get_deps.py'
|
||||
- '.github/actions/**'
|
||||
- '.github/workflows/build.yml'
|
||||
- '.github/workflows/build_util.yml'
|
||||
- '.github/workflows/ci_set_matrix.py'
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'hw/**'
|
||||
- 'test/hil/**'
|
||||
- 'tools/build.py'
|
||||
- 'tools/get_deps.py'
|
||||
- '.github/actions/**'
|
||||
- '.github/workflows/build.yml'
|
||||
- '.github/workflows/build_util.yml'
|
||||
- '.github/workflows/ci_set_matrix.py'
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
HIL_JSON: test/hil/tinyusb.json
|
||||
|
||||
jobs:
|
||||
# Unit testing with Ceedling
|
||||
unit-test:
|
||||
# ---------------------------------------
|
||||
#
|
||||
# Build
|
||||
#
|
||||
# ---------------------------------------
|
||||
set-matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
json: ${{ steps.set-matrix-json.outputs.matrix }}
|
||||
hil_json: ${{ steps.set-matrix-json.outputs.hil_matrix }}
|
||||
steps:
|
||||
- name: Setup Ruby
|
||||
uses: actions/setup-ruby@v1
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v2
|
||||
- name: Generate matrix json
|
||||
id: set-matrix-json
|
||||
run: |
|
||||
# build matrix
|
||||
MATRIX_JSON=$(python .github/workflows/ci_set_matrix.py)
|
||||
echo "matrix=$MATRIX_JSON"
|
||||
echo "matrix=$MATRIX_JSON" >> $GITHUB_OUTPUT
|
||||
# hil matrix
|
||||
HIL_MATRIX_JSON=$(python test/hil/hil_ci_set_matrix.py ${{ env.HIL_JSON }})
|
||||
echo "hil_matrix=$HIL_MATRIX_JSON"
|
||||
echo "hil_matrix=$HIL_MATRIX_JSON" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Unit Tests
|
||||
run: |
|
||||
# Install Ceedling
|
||||
gem install ceedling
|
||||
cd test
|
||||
ceedling test:all
|
||||
|
||||
# Build most of the ports
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
# ---------------------------------------
|
||||
# Build CMake
|
||||
# ---------------------------------------
|
||||
cmake:
|
||||
needs: set-matrix
|
||||
uses: ./.github/workflows/build_util.yml
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
example:
|
||||
- 'device/audio_test'
|
||||
- 'device/board_test'
|
||||
- 'device/cdc_dual_ports'
|
||||
- 'device/cdc_msc'
|
||||
- 'device/cdc_msc_freertos'
|
||||
- 'device/dfu_rt'
|
||||
- 'device/hid_composite'
|
||||
- 'device/hid_composite_freertos'
|
||||
- 'device/hid_generic_inout'
|
||||
- 'device/hid_multiple_interface'
|
||||
- 'device/midi_test'
|
||||
- 'device/msc_dual_lun'
|
||||
- 'device/net_lwip_webserver'
|
||||
- 'device/usbtmc'
|
||||
- 'device/webusb_serial'
|
||||
- 'host/cdc_msc_hid'
|
||||
toolchain:
|
||||
# - 'arm-clang' is built by circle-ci in PR
|
||||
- 'aarch64-gcc'
|
||||
- 'arm-gcc'
|
||||
- 'msp430-gcc'
|
||||
- 'riscv-gcc'
|
||||
with:
|
||||
build-system: 'cmake'
|
||||
toolchain: ${{ matrix.toolchain }}
|
||||
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
|
||||
one-per-family: ${{ github.event_name == 'push' }}
|
||||
|
||||
steps:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v1
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v1
|
||||
|
||||
- name: Cache MSP430 Toolchain
|
||||
id: cache-msp430
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: /tmp/dl/
|
||||
# Increment gcc version number at end when updating downloads
|
||||
key: msp430-${{ runner.os }}-9.2.0.50
|
||||
|
||||
- name: Install Toolchains
|
||||
env:
|
||||
MSP430GCC_URL: http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2
|
||||
run: |
|
||||
# ARM & RISC-V GCC from xpack
|
||||
npm install --global xpm
|
||||
xpm install --global @xpack-dev-tools/arm-none-eabi-gcc@latest
|
||||
xpm install --global @xpack-dev-tools/riscv-none-embed-gcc@latest
|
||||
echo `echo $HOME/opt/xPacks/@xpack-dev-tools/arm-none-eabi-gcc/*/.content/bin` >> $GITHUB_PATH
|
||||
echo `echo $HOME/opt/xPacks/@xpack-dev-tools/riscv-none-embed-gcc/*/.content/bin` >> $GITHUB_PATH
|
||||
|
||||
# TI MSP430 GCC
|
||||
mkdir -p /tmp/dl/
|
||||
[ -f "/tmp/dl/msp430-gcc.tar.bz2" ] || wget --progress=dot:mega $MSP430GCC_URL -O /tmp/dl/msp430-gcc.tar.bz2
|
||||
tar -C $HOME -xaf /tmp/dl/msp430-gcc.tar.bz2
|
||||
echo `echo $HOME/msp430-gcc-*_linux64/bin` >> $GITHUB_PATH
|
||||
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
# Cannot do submodule checkout here since LWIP's git server cannot checkout unadventised commits (it must use tags)
|
||||
submodules: 'false'
|
||||
|
||||
- name: Checkout Submodules
|
||||
run: |
|
||||
git submodule sync --recursive
|
||||
# Special case LWIP since GNU's Savannah can't do shallow checkout of non-tagged commits
|
||||
git submodule update --init --recursive lib/lwip
|
||||
git submodule update --init --recursive --depth 1
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
python3 tools/build_all.py ${{ matrix.example }}
|
||||
|
||||
# Build ESP32S
|
||||
build-esp32s:
|
||||
runs-on: ubuntu-latest
|
||||
# ---------------------------------------
|
||||
# Build Make (built by circle-ci in PR, only build on push here)
|
||||
# ---------------------------------------
|
||||
make:
|
||||
if: github.event_name == 'push'
|
||||
needs: set-matrix
|
||||
uses: ./.github/workflows/build_util.yml
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
example: ['board_test', 'cdc_msc_freertos', 'hid_composite_freertos']
|
||||
toolchain:
|
||||
# 'arm-clang'
|
||||
- 'arm-gcc'
|
||||
- 'aarch64-gcc'
|
||||
- 'msp430-gcc'
|
||||
- 'riscv-gcc'
|
||||
- 'rx-gcc'
|
||||
- 'esp-idf'
|
||||
with:
|
||||
build-system: 'make'
|
||||
toolchain: ${{ matrix.toolchain }}
|
||||
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
|
||||
one-per-family: true
|
||||
|
||||
# ---------------------------------------
|
||||
# Build Make on Windows/MacOS
|
||||
# ---------------------------------------
|
||||
make-os:
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: ./.github/workflows/build_util.yml
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-latest, macos-latest]
|
||||
with:
|
||||
os: ${{ matrix.os }}
|
||||
build-system: 'make'
|
||||
toolchain: 'arm-gcc'
|
||||
build-args: '["stm32h7"]'
|
||||
one-per-family: true
|
||||
|
||||
# ---------------------------------------
|
||||
# Build IAR
|
||||
# Since IAR Token secret is not passed to forked PR, only build non-forked PR with make.
|
||||
# cmake is built by circle-ci. Due to IAR limit capacity, only build oe per family
|
||||
# ---------------------------------------
|
||||
arm-iar:
|
||||
if: false # disable for now since we got reach capacity limit too often
|
||||
#if: github.event_name == 'push' && github.repository_owner == 'hathach'
|
||||
needs: set-matrix
|
||||
uses: ./.github/workflows/build_util.yml
|
||||
secrets: inherit
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
build-system:
|
||||
- 'make'
|
||||
with:
|
||||
build-system: ${{ matrix.build-system }}
|
||||
toolchain: 'arm-iar'
|
||||
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)['arm-iar']) }}
|
||||
one-per-family: true
|
||||
|
||||
# ---------------------------------------
|
||||
# Zephyr
|
||||
# ---------------------------------------
|
||||
zephyr:
|
||||
if: github.event_name == 'push'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Pull ESP-IDF docker
|
||||
run: docker pull espressif/idf:latest
|
||||
- name: Setup Zephyr project
|
||||
uses: zephyrproject-rtos/action-zephyr-setup@v1
|
||||
with:
|
||||
app-path: examples
|
||||
toolchains: arm-zephyr-eabi
|
||||
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: 'false'
|
||||
- name: Build
|
||||
run: |
|
||||
west build -b pca10056 -d examples/device/cdc_msc/build examples/device/cdc_msc -- -DRTOS=zephyr
|
||||
west build -b pca10056 -d examples/device/msc_dual_lun/build examples/device/msc_dual_lun -- -DRTOS=zephyr
|
||||
|
||||
- name: Build
|
||||
run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32s.py ${{ matrix.example }}
|
||||
# ---------------------------------------
|
||||
#
|
||||
# Hardware in the loop (HIL)
|
||||
# Run on PR only (hil-tinyusb), hil-hfp only run on non-forked PR
|
||||
# ---------------------------------------
|
||||
|
||||
# ---------------------------------------
|
||||
# Build arm-gcc
|
||||
# ---------------------------------------
|
||||
hil-build:
|
||||
if: |
|
||||
github.repository_owner == 'hathach' &&
|
||||
(github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch')
|
||||
needs: set-matrix
|
||||
uses: ./.github/workflows/build_util.yml
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
toolchain:
|
||||
- 'arm-gcc'
|
||||
- 'esp-idf'
|
||||
with:
|
||||
build-system: 'cmake'
|
||||
toolchain: ${{ matrix.toolchain }}
|
||||
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.hil_json)[matrix.toolchain]) }}
|
||||
one-per-family: true
|
||||
upload-artifacts: true
|
||||
|
||||
# ---------------------------------------
|
||||
# Hardware in the loop (HIL)
|
||||
# self-hosted on local VM, for attached hardware checkout HIL_JSON
|
||||
# ---------------------------------------
|
||||
hil-tinyusb:
|
||||
if: |
|
||||
github.repository_owner == 'hathach' &&
|
||||
(github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch')
|
||||
needs: hil-build
|
||||
runs-on: [self-hosted, X64, hathach, hardware-in-the-loop]
|
||||
steps:
|
||||
- name: Clean workspace
|
||||
run: |
|
||||
echo "Cleaning up previous run"
|
||||
rm -rf "${{ github.workspace }}"
|
||||
mkdir -p "${{ github.workspace }}"
|
||||
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: test/hil
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: cmake-build
|
||||
merge-multiple: true
|
||||
|
||||
- name: Test on actual hardware
|
||||
run: |
|
||||
ls cmake-build/
|
||||
python3 test/hil/hil_test.py ${{ env.HIL_JSON }}
|
||||
|
||||
# ---------------------------------------
|
||||
# Hardware in the loop (HIL)
|
||||
# self-hosted by HFP, build with IAR toolchain, for attached hardware checkout test/hil/hfp.json
|
||||
# Since IAR Token secret is not passed to forked PR, only build non-forked PR
|
||||
# ---------------------------------------
|
||||
hil-hfp:
|
||||
if: |
|
||||
github.repository_owner == 'hathach' &&
|
||||
github.event.pull_request.head.repo.fork == false &&
|
||||
(github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch')
|
||||
runs-on: [self-hosted, Linux, X64, hifiphile]
|
||||
env:
|
||||
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
|
||||
steps:
|
||||
- name: Clean workspace
|
||||
run: |
|
||||
echo "Cleaning up previous run"
|
||||
rm -rf "${{ github.workspace }}"3
|
||||
mkdir -p "${{ github.workspace }}"
|
||||
|
||||
- name: Toolchain version
|
||||
run: |
|
||||
iccarm --version
|
||||
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get build boards
|
||||
run: |
|
||||
MATRIX_JSON=$(python test/hil/hil_ci_set_matrix.py test/hil/hfp.json)
|
||||
BUILD_ARGS=$(echo $MATRIX_JSON | jq -r '.["arm-gcc"] | join(" ")')
|
||||
echo "BUILD_ARGS=$BUILD_ARGS"
|
||||
echo "BUILD_ARGS=$BUILD_ARGS" >> $GITHUB_ENV
|
||||
|
||||
- name: Get Dependencies
|
||||
run: python3 tools/get_deps.py $BUILD_ARGS
|
||||
|
||||
- name: Build
|
||||
run: python3 tools/build.py --toolchain iar $BUILD_ARGS
|
||||
|
||||
- name: Test on actual hardware (hardware in the loop)
|
||||
run: python3 test/hil/hil_test.py hfp.json
|
||||
|
83
.github/workflows/build_util.yml
vendored
Normal file
83
.github/workflows/build_util.yml
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
name: Reusable build util
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-system:
|
||||
required: true
|
||||
type: string
|
||||
toolchain:
|
||||
required: true
|
||||
type: string
|
||||
build-args:
|
||||
required: true
|
||||
type: string
|
||||
one-per-family:
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
upload-artifacts:
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
os:
|
||||
required: false
|
||||
type: string
|
||||
default: 'ubuntu-latest'
|
||||
|
||||
jobs:
|
||||
family:
|
||||
runs-on: ${{ inputs.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arg: ${{ fromJSON(inputs.build-args) }}
|
||||
steps:
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Toolchain
|
||||
id: setup-toolchain
|
||||
uses: ./.github/actions/setup_toolchain
|
||||
with:
|
||||
toolchain: ${{ inputs.toolchain }}
|
||||
|
||||
- name: Get Dependencies
|
||||
uses: ./.github/actions/get_deps
|
||||
with:
|
||||
arg: ${{ matrix.arg }}
|
||||
|
||||
- name: Set build one-per-family option
|
||||
id: set-one-per-family
|
||||
run: |
|
||||
if [[ "${{ inputs.one-per-family }}" == "true" ]]; then
|
||||
BUILD_OPTION="--one-per-family"
|
||||
fi
|
||||
echo "build_option=$BUILD_OPTION"
|
||||
echo "build_option=$BUILD_OPTION" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
|
||||
run: |
|
||||
if [ "${{ inputs.toolchain }}" == "esp-idf" ]; then
|
||||
docker run --rm -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py ${{ matrix.arg }}
|
||||
else
|
||||
python tools/build.py -s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ steps.set-one-per-family.outputs.build_option }} ${{ matrix.arg }}
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Upload Artifacts for Hardware Testing
|
||||
if: ${{ inputs.upload-artifacts }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.arg }}
|
||||
path: |
|
||||
cmake-build/cmake-build-*/*/*/*.elf
|
||||
cmake-build/cmake-build-*/*/*/*.bin
|
||||
cmake-build/cmake-build-*/*/*/*.bin
|
||||
cmake-build/cmake-build-*/*/*/bootloader/bootloader.bin
|
||||
cmake-build/cmake-build-*/*/*/partition_table/partition-table.bin
|
||||
cmake-build/cmake-build-*/*/*/config.env
|
||||
cmake-build/cmake-build-*/*/*/flash_args
|
65
.github/workflows/ci_set_matrix.py
vendored
Executable file
65
.github/workflows/ci_set_matrix.py
vendored
Executable file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
|
||||
# toolchain, url
|
||||
toolchain_list = [
|
||||
"aarch64-gcc",
|
||||
"arm-clang",
|
||||
"arm-iar",
|
||||
"arm-gcc",
|
||||
"esp-idf",
|
||||
"msp430-gcc",
|
||||
"riscv-gcc",
|
||||
"rx-gcc"
|
||||
]
|
||||
|
||||
# family: [supported toolchain]
|
||||
family_list = {
|
||||
"broadcom_32bit": ["arm-gcc"],
|
||||
"broadcom_64bit": ["aarch64-gcc"],
|
||||
"ch32v10x ch32v20x ch32v307 fomu gd32vf103": ["riscv-gcc"],
|
||||
"da1469x": ["arm-gcc"],
|
||||
"imxrt": ["arm-gcc", "arm-clang"],
|
||||
"kinetis_k kinetis_kl kinetis_k32l2": ["arm-gcc", "arm-clang"],
|
||||
"lpc11 lpc13 lpc15": ["arm-gcc", "arm-clang"],
|
||||
"lpc17 lpc18 lpc40 lpc43": ["arm-gcc", "arm-clang"],
|
||||
"lpc51 lpc54 lpc55": ["arm-gcc", "arm-clang"],
|
||||
"max32650 max32666 max32690 max78002": ["arm-gcc"],
|
||||
"mcx": ["arm-gcc"],
|
||||
"mm32": ["arm-gcc"],
|
||||
"msp430": ["msp430-gcc"],
|
||||
"msp432e4 tm4c": ["arm-gcc"],
|
||||
"nrf": ["arm-gcc", "arm-clang"],
|
||||
"ra": ["arm-gcc"],
|
||||
"rp2040": ["arm-gcc"],
|
||||
"rx": ["rx-gcc"],
|
||||
"samd11 saml2x": ["arm-gcc", "arm-clang"],
|
||||
"samd21": ["arm-gcc", "arm-clang"],
|
||||
"samd5x_e5x samg": ["arm-gcc", "arm-clang"],
|
||||
"stm32c0 stm32f0 stm32f1 stm32f2 stm32f3": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"stm32f4": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"stm32f7": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"stm32g0 stm32g4 stm32h5": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"stm32h7": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"stm32l0 stm32l4": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"stm32u5 stm32wb": ["arm-gcc", "arm-clang", "arm-iar"],
|
||||
"xmc4000": ["arm-gcc"],
|
||||
"-bespressif_s2_devkitc": ["esp-idf"],
|
||||
# S3, P4 will be built by hil test
|
||||
# "-bespressif_s3_devkitm": ["esp-idf"],
|
||||
# "-bespressif_p4_function_ev": ["esp-idf"],
|
||||
}
|
||||
|
||||
|
||||
def set_matrix_json():
|
||||
matrix = {}
|
||||
for toolchain in toolchain_list:
|
||||
filtered_families = [family for family, supported_toolchain in family_list.items() if
|
||||
toolchain in supported_toolchain]
|
||||
matrix[toolchain] = filtered_families
|
||||
|
||||
print(json.dumps(matrix))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
set_matrix_json()
|
36
.github/workflows/cifuzz.yml
vendored
Normal file
36
.github/workflows/cifuzz.yml
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
name: CIFuzz
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '**.c'
|
||||
- '**.cc'
|
||||
- '**.cpp'
|
||||
- '**.cxx'
|
||||
- '**.h'
|
||||
jobs:
|
||||
Fuzzing:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Build Fuzzers
|
||||
id: build
|
||||
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
||||
with:
|
||||
oss-fuzz-project-name: 'tinyusb'
|
||||
language: c++
|
||||
|
||||
- name: Run Fuzzers
|
||||
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
|
||||
with:
|
||||
oss-fuzz-project-name: 'tinyusb'
|
||||
language: c++
|
||||
fuzz-seconds: 400
|
||||
|
||||
- name: Upload Crash
|
||||
uses: actions/upload-artifact@v4
|
||||
if: failure() && steps.build.outcome == 'success'
|
||||
with:
|
||||
name: artifacts
|
||||
path: ./out/artifacts
|
6
.github/workflows/codeql-buildscript.sh
vendored
Normal file
6
.github/workflows/codeql-buildscript.sh
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
FAMILY=stm32l4
|
||||
pip install click
|
||||
python3 tools/get_deps.py $FAMILY
|
||||
python3 tools/build.py -s make $FAMILY
|
137
.github/workflows/codeql.yml
vendored
Normal file
137
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ 'master' ]
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'hw/**'
|
||||
- '.github/workflows/codeql.yml'
|
||||
pull_request:
|
||||
branches: [ 'master' ]
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'hw/**'
|
||||
- '.github/workflows/codeql.yml'
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||
# - https://gh.io/supported-runners-and-hardware-resources
|
||||
# - https://gh.io/using-larger-runners
|
||||
# Consider using larger runners for possible analysis time improvements.
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 360
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'c-cpp' ]
|
||||
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
|
||||
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
|
||||
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Toolchain
|
||||
uses: ./.github/actions/setup_toolchain
|
||||
with:
|
||||
toolchain: 'arm-gcc'
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
queries: security-and-quality
|
||||
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
#- name: Autobuild
|
||||
# uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||
|
||||
- run: |
|
||||
./.github/workflows/codeql-buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
upload: false
|
||||
id: step1
|
||||
|
||||
# Filter out rules with low severity or high false positive rate
|
||||
# Also filter out warnings in third-party code
|
||||
- name: Filter out unwanted errors and warnings
|
||||
uses: advanced-security/filter-sarif@v1
|
||||
with:
|
||||
patterns: |
|
||||
-**:cpp/path-injection
|
||||
-**:cpp/world-writable-file-creation
|
||||
-**:cpp/poorly-documented-function
|
||||
-**:cpp/potentially-dangerous-function
|
||||
-**:cpp/use-of-goto
|
||||
-**:cpp/integer-multiplication-cast-to-long
|
||||
-**:cpp/comparison-with-wider-type
|
||||
-**:cpp/leap-year/*
|
||||
-**:cpp/ambiguously-signed-bit-field
|
||||
-**:cpp/suspicious-pointer-scaling
|
||||
-**:cpp/suspicious-pointer-scaling-void
|
||||
-**:cpp/unsigned-comparison-zero
|
||||
-**/third*party/**
|
||||
-**/3rd*party/**
|
||||
-**/external/**
|
||||
input: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||
output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||
|
||||
- name: Upload SARIF
|
||||
uses: github/codeql-action/upload-sarif@v2
|
||||
with:
|
||||
sarif_file: ${{ steps.step1.outputs.sarif-output }}
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
- name: Archive CodeQL results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: codeql-results
|
||||
path: ${{ steps.step1.outputs.sarif-output }}
|
||||
retention-days: 5
|
34
.github/workflows/fail_on_error.py
vendored
Executable file
34
.github/workflows/fail_on_error.py
vendored
Executable file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
# Return whether SARIF file contains error-level results
|
||||
def codeql_sarif_contain_error(filename):
|
||||
with open(filename, 'r') as f:
|
||||
s = json.load(f)
|
||||
|
||||
for run in s.get('runs', []):
|
||||
rules_metadata = run['tool']['driver']['rules']
|
||||
if not rules_metadata:
|
||||
rules_metadata = run['tool']['extensions'][0]['rules']
|
||||
|
||||
for res in run.get('results', []):
|
||||
if 'ruleIndex' in res:
|
||||
rule_index = res['ruleIndex']
|
||||
elif 'rule' in res and 'index' in res['rule']:
|
||||
rule_index = res['rule']['index']
|
||||
else:
|
||||
continue
|
||||
try:
|
||||
rule_level = rules_metadata[rule_index]['defaultConfiguration']['level']
|
||||
except IndexError as e:
|
||||
print(e, rule_index, len(rules_metadata))
|
||||
else:
|
||||
if rule_level == 'error':
|
||||
return True
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
if codeql_sarif_contain_error(sys.argv[1]):
|
||||
sys.exit(1)
|
73
.github/workflows/labeler.yml
vendored
Normal file
73
.github/workflows/labeler.yml
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
name: Labeler
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
label-priority:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Label New Issue or PR
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
let label = '';
|
||||
let username = '';
|
||||
let issueOrPrNumber = 0;
|
||||
|
||||
if (context.eventName === 'issues') {
|
||||
username = context.payload.issue.user.login;
|
||||
issueOrPrNumber = context.payload.issue.number;
|
||||
} else if (context.eventName === 'pull_request_target') {
|
||||
username = context.payload.pull_request.user.login;
|
||||
issueOrPrNumber = context.payload.pull_request.number;
|
||||
}
|
||||
|
||||
// Check if an Adafruit member
|
||||
try {
|
||||
const adafruitResponse = await github.rest.orgs.checkMembershipForUser({
|
||||
org: 'adafruit',
|
||||
username: username
|
||||
});
|
||||
|
||||
if (adafruitResponse.status === 204) {
|
||||
console.log('Adafruit Member');
|
||||
label = 'Prio Urgent';
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('Not an Adafruit member');
|
||||
}
|
||||
|
||||
// Check if a contributor
|
||||
if (label == '') {
|
||||
try {
|
||||
const collaboratorResponse = await github.rest.repos.checkCollaborator({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
username: username
|
||||
});
|
||||
|
||||
if (collaboratorResponse.status === 204) {
|
||||
console.log('Contributor');
|
||||
label = 'Prio Higher';
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('Not a contributor');
|
||||
}
|
||||
}
|
||||
|
||||
if (label !== '') {
|
||||
await github.rest.issues.addLabels({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issueOrPrNumber,
|
||||
labels: [label]
|
||||
});
|
||||
}
|
45
.github/workflows/pre-commit.yml
vendored
Normal file
45
.github/workflows/pre-commit.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
name: pre-commit
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
pre-commit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.0'
|
||||
|
||||
- name: Checkout TinyUSB
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get Dependencies
|
||||
run: |
|
||||
gem install ceedling
|
||||
#cd test/unit-test
|
||||
#ceedling test:all
|
||||
|
||||
- name: Run pre-commit
|
||||
uses: pre-commit/action@v3.0.1
|
||||
|
||||
- name: Build Fuzzer
|
||||
run: |
|
||||
sudo apt install libc++-dev libc++abi-dev
|
||||
clang --version
|
||||
export CC=clang
|
||||
export CXX=clang++
|
||||
fuzz_harness=$(ls -d test/fuzz/device/*/)
|
||||
for h in $fuzz_harness
|
||||
do
|
||||
make -C $h get-deps
|
||||
make -C $h all
|
||||
done
|
54
.github/workflows/trigger.yml
vendored
54
.github/workflows/trigger.yml
vendored
@ -1,14 +1,60 @@
|
||||
name: Trigger Repos
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: master
|
||||
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
|
||||
jobs:
|
||||
trigger:
|
||||
trigger-mynewt:
|
||||
if: github.repository == 'hathach/tinyusb'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: mynewt-tinyusb-example
|
||||
- name: Trigger mynewt-tinyusb-example
|
||||
shell: bash
|
||||
run: |
|
||||
curl -X POST -H "Authorization: token ${{ secrets.GH_REPO_TOKEN }}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" --data '{"event_type": "rebuild"}' https://api.github.com/repos/hathach/mynewt-tinyusb-example/dispatches
|
||||
curl -X POST -H "Authorization: token ${{ secrets.API_TOKEN_GITHUB }}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" --data '{"event_type": "rebuild"}' https://api.github.com/repos/hathach/mynewt-tinyusb-example/dispatches
|
||||
|
||||
mirror-tinyusb-src:
|
||||
if: github.repository == 'hathach/tinyusb'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Push to tinyusb_src
|
||||
run: |
|
||||
# clone tinyusb_src with PAT
|
||||
git config --global user.email "thach@tinyusb.org"
|
||||
git config --global user.name "hathach"
|
||||
git clone --depth 1 --single-branch --branch main "https://${{ secrets.API_TOKEN_GITHUB }}@github.com/hathach/tinyusb_src.git" tinyusb_src
|
||||
|
||||
# Remove all files
|
||||
rm -rf tinyusb_src/*
|
||||
|
||||
# Copy src and other files
|
||||
cp -r src tinyusb_src/
|
||||
cp LICENSE tinyusb_src/
|
||||
cd tinyusb_src
|
||||
|
||||
# Commit if there is changes
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
git add .
|
||||
git commit --message "Update from https://github.com/$GITHUB_REPOSITORY/commit/$GITHUB_SHA"
|
||||
git push
|
||||
fi
|
||||
|
||||
- name: Create tinyusb_src Release
|
||||
if: ${{ github.event_name == 'release' }}
|
||||
run: |
|
||||
# Push tag
|
||||
cd tinyusb_src
|
||||
git tag ${{ github.event.release.tag_name }}
|
||||
git push origin ${{ github.event.release.tag_name }}
|
||||
|
||||
# Send POST reqwuest to release https://docs.github.com/en/rest/reference/repos#create-a-release
|
||||
bb="For release note, please checkout https://github.com/hathach/tinyusb/releases/tag/${{ github.event.release.tag_name }}"
|
||||
curl -X POST -H "Authorization: token ${{ secrets.API_TOKEN_GITHUB }}" -H "Accept: application/vnd.github.v3+json" --data '{"tag_name": "${{ github.event.release.tag_name }}", "name": "${{ github.event.release.name }}", "body": "$bb", "draft": ${{ github.event.release.draft }}, "prerelease": ${{ github.event.release.prerelease }}}' https://api.github.com/repos/hathach/tinyusb_src/releases
|
||||
|
41
.gitignore
vendored
41
.gitignore
vendored
@ -1,23 +1,54 @@
|
||||
html
|
||||
latex
|
||||
*.a
|
||||
*.d
|
||||
*.o
|
||||
*.P
|
||||
*.map
|
||||
*.axf
|
||||
*.bin
|
||||
*.elf
|
||||
*.env
|
||||
*.ind
|
||||
*.log
|
||||
*.map
|
||||
*.obj
|
||||
*.jlink
|
||||
*.emSession
|
||||
*.elf
|
||||
*.ind
|
||||
.env
|
||||
*.ninja*
|
||||
*.eww
|
||||
*.ewp
|
||||
*.ewt
|
||||
*.ewd
|
||||
*.hex
|
||||
cmake_install.cmake
|
||||
CMakeCache.txt
|
||||
settings/
|
||||
.settings/
|
||||
.idea/
|
||||
.vscode/
|
||||
.gdb_history
|
||||
/examples/*/*/build*
|
||||
test_old/
|
||||
tests_obsolete/
|
||||
_build
|
||||
/examples/*/*/ses
|
||||
/examples/*/*/ozone
|
||||
/examples/obsolete
|
||||
hw/bsp/**/cubemx/*/
|
||||
.mxproject
|
||||
# coverity intermediate files
|
||||
cov-int
|
||||
# cppcheck build directories
|
||||
*-build-dir
|
||||
/_bin/
|
||||
__pycache__
|
||||
cmake-build-*
|
||||
sdkconfig
|
||||
.PVS-Studio
|
||||
.vscode/
|
||||
build
|
||||
CMakeFiles
|
||||
Debug
|
||||
RelWithDebInfo
|
||||
Release
|
||||
BrowseInfo
|
||||
.cmake_build
|
||||
|
111
.gitmodules
vendored
111
.gitmodules
vendored
@ -1,111 +0,0 @@
|
||||
[submodule "hw/mcu/nordic/nrfx"]
|
||||
path = hw/mcu/nordic/nrfx
|
||||
url = https://github.com/NordicSemiconductor/nrfx.git
|
||||
[submodule "tools/uf2"]
|
||||
path = tools/uf2
|
||||
url = https://github.com/microsoft/uf2.git
|
||||
[submodule "hw/mcu/sony/cxd56/spresense-exported-sdk"]
|
||||
path = hw/mcu/sony/cxd56/spresense-exported-sdk
|
||||
url = https://github.com/sonydevworld/spresense-exported-sdk.git
|
||||
[submodule "hw/mcu/ti"]
|
||||
path = hw/mcu/ti
|
||||
url = https://github.com/hathach/ti_driver.git
|
||||
[submodule "hw/mcu/nxp"]
|
||||
path = hw/mcu/nxp
|
||||
url = https://github.com/hathach/nxp_driver.git
|
||||
[submodule "hw/mcu/microchip"]
|
||||
path = hw/mcu/microchip
|
||||
url = https://github.com/hathach/microchip_driver.git
|
||||
[submodule "hw/mcu/nuvoton"]
|
||||
path = hw/mcu/nuvoton
|
||||
url = https://github.com/majbthrd/nuc_driver.git
|
||||
[submodule "lib/lwip"]
|
||||
path = lib/lwip
|
||||
url = https://git.savannah.nongnu.org/git/lwip.git
|
||||
[submodule "lib/FreeRTOS"]
|
||||
path = lib/FreeRTOS
|
||||
url = https://github.com/FreeRTOS/FreeRTOS.git
|
||||
[submodule "lib/CMSIS_4"]
|
||||
path = lib/CMSIS_4
|
||||
url = https://github.com/ARM-software/CMSIS.git
|
||||
[submodule "hw/mcu/st/cmsis_device_f4"]
|
||||
path = hw/mcu/st/cmsis_device_f4
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_f4.git
|
||||
[submodule "hw/mcu/st/stm32f4xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32f4xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_f0"]
|
||||
path = hw/mcu/st/cmsis_device_f0
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_f0.git
|
||||
[submodule "hw/mcu/st/stm32f0xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32f0xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_f1"]
|
||||
path = hw/mcu/st/cmsis_device_f1
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_f1.git
|
||||
[submodule "hw/mcu/st/stm32f1xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32f1xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_f2"]
|
||||
path = hw/mcu/st/cmsis_device_f2
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_f2.git
|
||||
[submodule "hw/mcu/st/stm32f2xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32f2xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32f2xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_f3"]
|
||||
path = hw/mcu/st/cmsis_device_f3
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_f3.git
|
||||
[submodule "hw/mcu/st/stm32f3xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32f3xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32f3xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_f7"]
|
||||
path = hw/mcu/st/cmsis_device_f7
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_f7.git
|
||||
[submodule "hw/mcu/st/stm32f7xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32f7xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32f7xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_h7"]
|
||||
path = hw/mcu/st/cmsis_device_h7
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_h7.git
|
||||
[submodule "hw/mcu/st/stm32h7xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32h7xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_l0"]
|
||||
path = hw/mcu/st/cmsis_device_l0
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_l0.git
|
||||
[submodule "hw/mcu/st/stm32l0xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32l0xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32l0xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_l1"]
|
||||
path = hw/mcu/st/cmsis_device_l1
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_l1.git
|
||||
[submodule "hw/mcu/st/stm32l1xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32l1xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32l1xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_l4"]
|
||||
path = hw/mcu/st/cmsis_device_l4
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_l4.git
|
||||
[submodule "hw/mcu/st/stm32l4xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32l4xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32l4xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_g0"]
|
||||
path = hw/mcu/st/cmsis_device_g0
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_g0.git
|
||||
[submodule "hw/mcu/st/stm32g0xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32g0xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_g4"]
|
||||
path = hw/mcu/st/cmsis_device_g4
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_g4.git
|
||||
[submodule "hw/mcu/st/stm32g4xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32g4xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32g4xx_hal_driver.git
|
||||
[submodule "hw/mcu/st/cmsis_device_l5"]
|
||||
path = hw/mcu/st/cmsis_device_l5
|
||||
url = https://github.com/STMicroelectronics/cmsis_device_l5.git
|
||||
[submodule "hw/mcu/st/stm32l5xx_hal_driver"]
|
||||
path = hw/mcu/st/stm32l5xx_hal_driver
|
||||
url = https://github.com/STMicroelectronics/stm32l5xx_hal_driver.git
|
||||
[submodule "lib/CMSIS_5"]
|
||||
path = lib/CMSIS_5
|
||||
url = https://github.com/ARM-software/CMSIS_5.git
|
10
.idea/.gitignore
generated
vendored
Normal file
10
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# GitHub Copilot persisted chat sessions
|
||||
/copilot/chatSessions
|
172
.idea/cmake.xml
generated
Normal file
172
.idea/cmake.xml
generated
Normal file
@ -0,0 +1,172 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeSharedSettings">
|
||||
<configurations>
|
||||
<configuration PROFILE_NAME="raspberrypi_zero" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberrypi_zero -DLOG=1" />
|
||||
<configuration PROFILE_NAME="raspberrypi_zero2" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberrypi_zero2 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="raspberrypi_cm4" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberrypi_cm4 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="raspberry_pi_pico" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico -DLOG=1" />
|
||||
<configuration PROFILE_NAME="raspberry_pi_pico-pio_host" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico -DLOG=1 -DCFLAGS_CLI="-DCFG_TUH_RPI_PIO_USB=1"" />
|
||||
<configuration PROFILE_NAME="raspberry_pi_pico2" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico2 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="raspberry_pi_pico2-pio_host" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico2 -DLOG=1 -DCFLAGS_CLI="-DCFG_TUH_RPI_PIO_USB=1"" />
|
||||
<configuration PROFILE_NAME="feather_rp2040" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pico_sdk -DPICO_BOARD=adafruit_feather_rp2040 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="feather_rp2040_max3421" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_rp2040_max3421 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="metro_rp2040" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pico_sdk -DPICO_BOARD=adafruit_metro_rp2040 -DLOG=1 -DMAX3421_HOST=1" />
|
||||
<configuration PROFILE_NAME="adafruit_metro_rp2350" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=adafruit_metro_rp2350 -DLOG=1 -DCFLAGS_CLI="-DCFG_TUH_RPI_PIO_USB=1"" />
|
||||
<configuration PROFILE_NAME="adafruit_fruit_jam" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=adafruit_fruit_jam -DLOG=1 -DCFLAGS_CLI="-DCFG_TUH_RPI_PIO_USB=1"" />
|
||||
<configuration PROFILE_NAME="adafruit_feather_esp32_v2" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_feather_esp32_v2 -DMAX3421_HOST=1 -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="adafruit_feather_esp32s2" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_feather_esp32s2 -DMAX3421_HOST=1 -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="adafruit_feather_esp32s3" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_feather_esp32s3 -DMAX3421_HOST=1 -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="adafruit_metro_esp32s2" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_metro_esp32s2 -DMAX3421_HOST=1 -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="espressif_kaluga_1" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_kaluga_1 -DMAX3421_HOST=1 -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="espressif_s3_devkitc" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_s3_devkitc -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="espressif_p4_function_ev" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_p4_function_ev -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="espressif_p4_function_ev-DMA" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_p4_function_ev -DLOG=1 -DCFLAGS_CLI="-DCFG_TUD_DWC2_DMA_ENABLE=1 -DCFG_TUH_DWC2_DMA_ENABLE=1"">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="espressif_c3_devkitc" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_c3_devkitc -DMAX3421_HOST=1 -DLOG=1">
|
||||
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
<envs>
|
||||
<env name="ESPBAUD" value="1500000" />
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="feather_m0_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_m0_express -DLOG=1 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||
<configuration PROFILE_NAME="metro_m0_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m0_express -DLOG=1 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||
<configuration PROFILE_NAME="samd11_xplained" ENABLED="false" CONFIG_NAME="MinSizeRel" GENERATION_OPTIONS="-DBOARD=samd11_xplained" />
|
||||
<configuration PROFILE_NAME="atsaml21_xpro" ENABLED="false" GENERATION_OPTIONS="-DBOARD=atsaml21_xpro" />
|
||||
<configuration PROFILE_NAME="feather_m4_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_m4_express -DLOG=1 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||
<configuration PROFILE_NAME="metro_m4_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m4_express -DLOG=1 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||
<configuration PROFILE_NAME="feather_m4_express-zephyr" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_m4_express -DLOG=1 -DMAX3421_HOST=1 -DRTOS=zephyr" />
|
||||
<configuration PROFILE_NAME="itsybitsy_m4" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=itsybitsy_m4" />
|
||||
<configuration PROFILE_NAME="same54_xplained" ENABLED="false" GENERATION_OPTIONS="-DBOARD=same54_xplained -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="samg55_xplained" ENABLED="false" GENERATION_OPTIONS="-DBOARD=samg55_xplained" />
|
||||
<configuration PROFILE_NAME="feather_nrf52840_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_nrf52840_express -DLOG=1 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||
<configuration PROFILE_NAME="pca10056" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pca10056 -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="pca10056-zephyr" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pca10056 -DLOG=1 -DTRACE_ETM=1 -DRTOS=zephyr" BUILD_OPTIONS="-v" />
|
||||
<configuration PROFILE_NAME="pca10095" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pca10095 -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="metro m7 1011 sd" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m7_1011_sd -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="metro_m7_1011" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m7_1011 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="rt1010 evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1010_evk -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="mimxrt1060_evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1060_evk -DLOG=1" />
|
||||
<configuration PROFILE_NAME="mimxrt1064_evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1064_evk" />
|
||||
<configuration PROFILE_NAME="rt1170 evkb" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1170_evkb -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="stm32f072disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f072disco -DLOG=0 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f103_mini_2" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f103_mini_2 -DLOG=1 -DLOGGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f103ze_iar" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f103ze_iar -DLOG=1 -DLOGGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f207nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f207nucleo -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f303disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f303disco -DLOG=0 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f411disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f411disco -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f412disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f412disco -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32f723disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f723disco -DLOG=0" />
|
||||
<configuration PROFILE_NAME="stm32f723disco-DMA" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f723disco -DLOG=1 -DLOGGER=RTT -DCFLAGS_CLI="-DCFG_TUD_DWC2_DMA_ENABLE=1 -DCFG_TUH_DWC2_DMA_ENABLE=1"" />
|
||||
<configuration PROFILE_NAME="stm32f723disco_device1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f723disco -DLOG=0 -DRHPORT_DEVICE=1" />
|
||||
<configuration PROFILE_NAME="stm32f769disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f769disco -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32g0b1nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32g0b1nucleo" />
|
||||
<configuration PROFILE_NAME="stm32g474nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32g474nucleo" />
|
||||
<configuration PROFILE_NAME="b_g474e_dpow1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=b_g474e_dpow1 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32h563nucleo" ENABLED="false" GENERATION_OPTIONS="-DBOARD=stm32h563nucleo -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="stm32h743eval" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h743eval -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="stm32h743eval-DMA" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h743eval -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1 -DCFLAGS_CLI="-DCFG_TUD_DWC2_DMA_ENABLE=1"" />
|
||||
<configuration PROFILE_NAME="stm32h743eval_host1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h743eval -DRHPORT_HOST=1 -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="stm32h743nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h743nucleo -DLOG=1" />
|
||||
<configuration PROFILE_NAME="stm32l0538disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32l0538disco -DLOG=0 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32l476disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32l476disco -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32u575nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32u575nucleo -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32u5a5nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32u5a5nucleo -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="stm32wb55nucleo" ENABLED="false" GENERATION_OPTIONS="-DBOARD=stm32wb55nucleo" />
|
||||
<configuration PROFILE_NAME="ra2a1_ek" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra2a1_ek -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="ra4m1_ek" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra4m1_ek -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="ra4m3_ek" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra4m3_ek -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="ra6m1_ek" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra6m1_ek -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="ra6m5_ek" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra6m5_ek -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="ra6m5_ek PORT0" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra6m5_ek -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1 -DRHPORT_DEVICE=0" />
|
||||
<configuration PROFILE_NAME="ra8m1_ek" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra8m1_ek -DLOG=2 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="ra8m1_ek PORT0" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra8m1_ek -DLOG=2 -DLOGGER=RTT -DTRACE_ETM=1 -DRHPORT_DEVICE=0" />
|
||||
<configuration PROFILE_NAME="uno_r4" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=uno_r4 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="portenta_c33" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=portenta_c33 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="lpcxpresso11u37" ENABLED="false" GENERATION_OPTIONS="-DBOARD=lpcxpresso11u37" />
|
||||
<configuration PROFILE_NAME="lpcxpresso11u68" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso11u68 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="lpcxpresso1347" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso1347 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="lpcxpresso1549" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso1549 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="lpcxpresso1769" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso1769 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="mcb1800" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mcb1800 -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="ea4088 quickstart" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ea4088_quickstart -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="ea4357" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ea4357 -DLOG=1 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||
<configuration PROFILE_NAME="lpcxpresso51u68" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso51u68 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="lpc5414" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso54114 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="lpc54628" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso54628 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="lpc55s69" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso55s69 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="mcxn947brk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mcxn947brk -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="frdm_mcxa153" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=frdm_mcxa153 -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="frdm_kl25z" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=frdm_kl25z -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="frdm_k32l2a4s" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=frdm_k32l2a4s" />
|
||||
<configuration PROFILE_NAME="frdm_k64f" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=frdm_k64f -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="msp430f5529" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=msp_exp430f5529lp" />
|
||||
<configuration PROFILE_NAME="msp_exp432e401y" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=msp_exp432e401y -DLOG=1" />
|
||||
<configuration PROFILE_NAME="ek_tm4c123gxl" ENABLED="false" CONFIG_NAME="MinSizeRel" GENERATION_OPTIONS="-DBOARD=ek_tm4c123gxl -DLOG=1" />
|
||||
<configuration PROFILE_NAME="xmc4500_relax" ENABLED="false" GENERATION_OPTIONS="-DBOARD=xmc4500_relax -DLOG=1 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="xmc4500_relax_dma" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=xmc4500_relax -DLOG=1 -DLOGGER=RTT -DCFLAGS_CLI="-DCFG_TUD_DWC2_DMA=1"" />
|
||||
<configuration PROFILE_NAME="f1c100s" ENABLED="false" GENERATION_OPTIONS="-DBOARD=f1c100s" />
|
||||
<configuration PROFILE_NAME="mm32f327x_mb39" ENABLED="false" GENERATION_OPTIONS="-DBOARD=mm32f327x_mb39" />
|
||||
<configuration PROFILE_NAME="fomu" ENABLED="false" GENERATION_OPTIONS="-DBOARD=fomu" />
|
||||
<configuration PROFILE_NAME="sipeed_longan_nano" ENABLED="false" GENERATION_OPTIONS="-DBOARD=sipeed_longan_nano" />
|
||||
<configuration PROFILE_NAME="nanoch32v203" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=nanoch32v203" />
|
||||
<configuration PROFILE_NAME="ch32v203c_r0_1v0" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ch32v203c_r0_1v0 -DLOG=0" />
|
||||
<configuration PROFILE_NAME="ch32v203c_r0_1v0 USBFS" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ch32v203c_r0_1v0 -DPORT=1" />
|
||||
<configuration PROFILE_NAME="ch32v203g_r0_1v0" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ch32v203g_r0_1v0" />
|
||||
<configuration PROFILE_NAME="ch32v307v_r1_1v0" ENABLED="false" GENERATION_OPTIONS="-DBOARD=ch32v307v_r1_1v0 -DLOG=1" />
|
||||
<configuration PROFILE_NAME="ch32v307v_r1_1v0 USBFS" ENABLED="false" GENERATION_OPTIONS="-DBOARD=ch32v307v_r1_1v0 -DSPEED=full" />
|
||||
<configuration PROFILE_NAME="da14695_dk_usb" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=da14695_dk_usb" />
|
||||
<configuration PROFILE_NAME="max32650fthr" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=max32650fthr -DLOG=0 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="max32666fthr" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=max32666fthr -DLOG=0 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="max32690evkit" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=max32690evkit -DLOG=1 -DLOGGER=RTT" />
|
||||
</configurations>
|
||||
</component>
|
||||
</project>
|
14
.idea/debugServers/esp32s2.xml
generated
Normal file
14
.idea/debugServers/esp32s2.xml
generated
Normal file
@ -0,0 +1,14 @@
|
||||
<component name="DebugServers">
|
||||
<generic-debug-target name="esp32s2" uniqueID="254eff00-2acf-48fe-b255-1d0c0c9c4a7a">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB">$USER_HOME$/.espressif/tools/xtensa-esp-elf-gdb/14.2_20240403/xtensa-esp-elf-gdb/bin/xtensa-esp32s2-elf-gdb</debugger>
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="$USER_HOME$/.espressif/tools/openocd-esp32/v0.12.0-esp32-20241016/openocd-esp32/bin/openocd" args="-f board/esp32s2-kaluga-1.cfg">
|
||||
<env />
|
||||
</gdbserver>
|
||||
<console port="4444" />
|
||||
<target download-type="NONE" reset-command="monitor reset halt" reset-before="false" />
|
||||
<connection extended-remote="false" remote-string="tcp::3333" warmup-ms="500" />
|
||||
</generic-debug-target>
|
||||
</component>
|
14
.idea/debugServers/rp2040.xml
generated
Normal file
14
.idea/debugServers/rp2040.xml
generated
Normal file
@ -0,0 +1,14 @@
|
||||
<component name="DebugServers">
|
||||
<generic-debug-target name="rp2040" uniqueID="006ce655-8571-401e-a94b-6a4f6d519724">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/local/bin/openocd" args="-f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"">
|
||||
<env />
|
||||
</gdbserver>
|
||||
<console enabled="true" port="4444" />
|
||||
<target download-type="UPDATED_ONLY" reset-before="false" />
|
||||
<connection extended-remote="false" remote-string="tcp::3333" warmup-ms="500" />
|
||||
</generic-debug-target>
|
||||
</component>
|
14
.idea/debugServers/rp2350.xml
generated
Normal file
14
.idea/debugServers/rp2350.xml
generated
Normal file
@ -0,0 +1,14 @@
|
||||
<component name="DebugServers">
|
||||
<generic-debug-target name="rp2350" uniqueID="939fdf16-9c30-4261-8435-3e8df7fd5800">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/local/bin/openocd" args="-f interface/cmsis-dap.cfg -f target/rp2350.cfg -c "adapter speed 5000"">
|
||||
<env />
|
||||
</gdbserver>
|
||||
<console enabled="true" port="4444" />
|
||||
<target download-type="UPDATED_ONLY" reset-before="false" />
|
||||
<connection extended-remote="false" remote-string="tcp::3333" warmup-ms="500" />
|
||||
</generic-debug-target>
|
||||
</component>
|
13
.idea/debugServers/rt1060.xml
generated
Normal file
13
.idea/debugServers/rt1060.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="rt1060" uniqueID="851396c6-2030-4694-b86d-21ba9547ddcb">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="MIMXRT1062xxx6A" reset-before="false" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
13
.idea/debugServers/rt1064.xml
generated
Normal file
13
.idea/debugServers/rt1064.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="rt1064" uniqueID="9602472b-6ce8-4a2d-9636-1c03b5fcd6da">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="MIMXRT1064xxx6A" reset-before="false" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
13
.idea/debugServers/sam21.xml
generated
Normal file
13
.idea/debugServers/sam21.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="sam21" uniqueID="b22537b6-0924-4a2b-8721-48a8952239de">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="ATSAMD21G18A" reset-before="false" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
13
.idea/debugServers/sam51.xml
generated
Normal file
13
.idea/debugServers/sam51.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="sam51" uniqueID="481ff0d4-6501-4394-8b6b-f7a2ca4c2675">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="ATSAMD51J19A" reset-before="false" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
13
.idea/debugServers/stm32f769.xml
generated
Normal file
13
.idea/debugServers/stm32f769.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="stm32f769" uniqueID="7a47302f-f7e5-434b-b20b-78e95318dd0c">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="STM32F769NI" reset-before="false" frequency="16000" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
13
.idea/debugServers/stm32h563.xml
generated
Normal file
13
.idea/debugServers/stm32h563.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="stm32h563" uniqueID="a3e9293d-113b-48b3-b83d-dd4249984abe">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="STM32H562ZI" reset-before="false" frequency="16000" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
13
.idea/debugServers/stm32h743.xml
generated
Normal file
13
.idea/debugServers/stm32h743.xml
generated
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="DebugServers">
|
||||
<jlink-debug-target name="stm32h743" uniqueID="6d6a3ed6-f66d-4f6a-9e70-6aafe5c971d0">
|
||||
<debugger version="1">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<env />
|
||||
</debugger>
|
||||
<gdbserver exe="/usr/bin/JLinkGDBServerCLExe" />
|
||||
<console port="19021" />
|
||||
<target device="STM32H743XI" reset-before="false" frequency="16000" />
|
||||
<connection extended-remote="false" port="4444" warmup-ms="500" />
|
||||
<swo />
|
||||
</jlink-debug-target>
|
||||
</component>
|
11
.idea/runConfigurations/k64f.xml
generated
Normal file
11
.idea/runConfigurations/k64f.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="k64f" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "MK64FN1M0xxx12" -if swd -speed 10000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/kl25.xml
generated
Normal file
11
.idea/runConfigurations/kl25.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="kl25" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "MKL25Z128xxx4" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/lpc1857.xml
generated
Normal file
11
.idea/runConfigurations/lpc1857.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="lpc1857" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "lpc1857" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="device_info" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="device_info">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/lpc4088.xml
generated
Normal file
11
.idea/runConfigurations/lpc4088.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="lpc4088" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "lpc4088" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/lpc54628.xml
generated
Normal file
11
.idea/runConfigurations/lpc54628.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="lpc54628" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "LPC54628J512" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/lpc55s69.xml
generated
Normal file
11
.idea/runConfigurations/lpc55s69.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="lpc55s69" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "lpc55s69" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/mcx947.xml
generated
Normal file
11
.idea/runConfigurations/mcx947.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="mcx947" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "MCXN947_M33_0" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $ProjectFileDir$/hw/bsp/mcx/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/nrf52840.xml
generated
Normal file
11
.idea/runConfigurations/nrf52840.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="nrf52840" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nrf" PROGRAM_PARAMS="-select usb=752001685 -device "nrf52840_xxaa" -if swd -speed 8000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/nrf5340.xml
generated
Normal file
11
.idea/runConfigurations/nrf5340.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="nrf5340" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nrf" PROGRAM_PARAMS="-select usb=752001685 -device "nrf5340_xxaa_app" -if swd -speed 16000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/ra2a1.xml
generated
Normal file
11
.idea/runConfigurations/ra2a1.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="ra2a1" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA2A1AB" -if swd -speed 20000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/ra4m1.xml
generated
Normal file
11
.idea/runConfigurations/ra4m1.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="ra4m1" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA4M1AB" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/ra6m1.xml
generated
Normal file
11
.idea/runConfigurations/ra6m1.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="ra6m1" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA6M1AD" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/ra6m5.xml
generated
Normal file
11
.idea/runConfigurations/ra6m5.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="ra6m5" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA6M5BH" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
10
.idea/runConfigurations/rp2040.xml
generated
Normal file
10
.idea/runConfigurations/rp2040.xml
generated
Normal file
@ -0,0 +1,10 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="rp2040" type="com.jetbrains.cidr.embedded.openocd.conf.type" factoryName="com.jetbrains.cidr.embedded.openocd.conf.factory" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<openocd version="1" gdb-port="3333" telnet-port="4444" board-config="$PROJECT_DIR$/hw/bsp/rp2040/rp2040-openocd.cfg" reset-type="INIT" download-type="UPDATED_ONLY">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
</openocd>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/rt1010.xml
generated
Normal file
11
.idea/runConfigurations/rt1010.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="rt1010" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "MIMXRT1011xxx5A" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $ProjectFileDir$/hw/bsp/imxrt/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/rt1060.xml
generated
Normal file
11
.idea/runConfigurations/rt1060.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="rt1060" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="nxp" PROGRAM_PARAMS="-device "MIMXRT1062xxx5A" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="device_info" TARGET_NAME="device_info" version="1" RUN_TARGET_PROJECT_NAME="device_info" RUN_TARGET_NAME="device_info">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/samd21g18.xml
generated
Normal file
11
.idea/runConfigurations/samd21g18.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="samd21g18" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="microchip" PROGRAM_PARAMS="-device "ATSAMD21G18" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/samd51j19.xml
generated
Normal file
11
.idea/runConfigurations/samd51j19.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="samd51j19" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="microchip" PROGRAM_PARAMS="-device "ATSAMD51J19A" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
10
.idea/runConfigurations/stlink.xml
generated
Normal file
10
.idea/runConfigurations/stlink.xml
generated
Normal file
@ -0,0 +1,10 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="stlink" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-p 49578 -cp "$USER_HOME$/st/stm32cubeide_1.16.1/plugins/com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.linux64_2.1.400.202404281720/tools/bin" --frequency 8000 --swd" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="raspberry_pi_pico" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::49578" executable="$USER_HOME$/st/stm32cubeide_1.16.1/plugins/com.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.linux64_2.1.400.202404281720/tools/bin/ST-LINK_gdbserver" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/stm32g474.xml
generated
Normal file
11
.idea/runConfigurations/stm32g474.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="stm32g474" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-device "stm32g474re" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/stm32h563.xml
generated
Normal file
11
.idea/runConfigurations/stm32h563.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="stm32h563" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-device "stm32h563zi" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/stm32h743.xml
generated
Normal file
11
.idea/runConfigurations/stm32h743.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="stm32h743" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-device "stm32h743xi" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc_hid" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc_hid">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/stm32u5a5.xml
generated
Normal file
11
.idea/runConfigurations/stm32u5a5.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="stm32u5a5" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-device "stm32u5a5zj" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
11
.idea/runConfigurations/uno_r4.xml
generated
Normal file
11
.idea/runConfigurations/uno_r4.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="uno_r4" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA4M1AB" -if swd -speed 20000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD" connection-mode="REMOTE" gdbserver-enable="false" console-enabled="false" console-port="0">
|
||||
<debugger kind="GDB" isBundled="true" />
|
||||
<extra-debugger-params debugger-working-dir="" debugger-env-pass-parent="true" custom-script="" />
|
||||
</custom-gdb-server>
|
||||
<method v="2">
|
||||
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
7
.idea/vcs.xml
generated
Normal file
7
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/hw/mcu/raspberry_pi/Pico-PIO-USB" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
59
.pre-commit-config.yaml
Normal file
59
.pre-commit-config.yaml
Normal file
@ -0,0 +1,59 @@
|
||||
# SPDX-FileCopyrightText: 2020 Diego Elio Pettenò
|
||||
#
|
||||
# SPDX-License-Identifier: Unlicense
|
||||
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.4.0
|
||||
hooks:
|
||||
- id: check-yaml
|
||||
- id: trailing-whitespace
|
||||
exclude: |
|
||||
(?x)^(
|
||||
hw/bsp/mcx/sdk/
|
||||
)
|
||||
- id: end-of-file-fixer
|
||||
exclude: |
|
||||
(?x)^(
|
||||
.idea/|
|
||||
hw/bsp/mcx/sdk/|
|
||||
docs/contributing/code_of_conduct.rst|
|
||||
docs/info/contributors.rst
|
||||
)
|
||||
- id: forbid-submodules
|
||||
|
||||
- repo: https://github.com/codespell-project/codespell
|
||||
rev: v2.2.4
|
||||
hooks:
|
||||
- id: codespell
|
||||
args: [-w]
|
||||
exclude: |
|
||||
(?x)^(
|
||||
lib/|
|
||||
hw/bsp/mcx/sdk/
|
||||
)
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: unit-test
|
||||
name: unit-test
|
||||
files: ^(src/|test/unit-test/)
|
||||
entry: sh -c "cd test/unit-test && ceedling test:all"
|
||||
pass_filenames: false
|
||||
types_or: [c, header]
|
||||
language: system
|
||||
|
||||
# - id: build-fuzzer
|
||||
# name: build-fuzzer
|
||||
# files: ^(src/|test/fuzz/)
|
||||
# language: system
|
||||
# types_or: [c, header]
|
||||
# entry: |
|
||||
# bash -c 'export CC=clang
|
||||
# export CXX=clang++
|
||||
# fuzz_harness=$(ls -d test/fuzz/device/*/)
|
||||
# for h in $fuzz_harness
|
||||
# do
|
||||
# make -C $h get-deps
|
||||
# make -C $h all
|
||||
# done'
|
24
.readthedocs.yaml
Normal file
24
.readthedocs.yaml
Normal file
@ -0,0 +1,24 @@
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
version: 2
|
||||
|
||||
# Set the version of Python and other tools you might need
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
|
||||
# Optionally declare the Python requirements required to build your docs
|
||||
python:
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
||||
|
||||
submodules:
|
||||
include: []
|
||||
recursive: false
|
@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at thach@tinyusb.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
88
CODE_OF_CONDUCT.rst
Normal file
88
CODE_OF_CONDUCT.rst
Normal file
@ -0,0 +1,88 @@
|
||||
***************
|
||||
Code of Conduct
|
||||
***************
|
||||
|
||||
Our Pledge
|
||||
----------
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our
|
||||
project and our community a harassment-free experience for everyone,
|
||||
regardless of age, body size, disability, ethnicity, sex
|
||||
characteristics, gender identity and expression, level of experience,
|
||||
education, socio-economic status, nationality, personal appearance,
|
||||
race, religion, or sexual identity and orientation.
|
||||
|
||||
Our Standards
|
||||
-------------
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
- Using welcoming and inclusive language
|
||||
- Being respectful of differing viewpoints and experiences
|
||||
- Gracefully accepting constructive criticism
|
||||
- Focusing on what is best for the community
|
||||
- Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
- The use of sexualized language or imagery and unwelcome sexual
|
||||
attention or advances
|
||||
- Trolling, insulting/derogatory comments, and personal or political
|
||||
attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or
|
||||
electronic address, without explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
Our Responsibilities
|
||||
--------------------
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of
|
||||
acceptable behavior and are expected to take appropriate and fair
|
||||
corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit,
|
||||
or reject comments, commits, code, wiki edits, issues, and other
|
||||
contributions that are not aligned to this Code of Conduct, or to ban
|
||||
temporarily or permanently any contributor for other behaviors that they
|
||||
deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
Scope
|
||||
-----
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public
|
||||
spaces when an individual is representing the project or its community.
|
||||
Examples of representing a project or community include using an
|
||||
official project e-mail address, posting via an official social media
|
||||
account, or acting as an appointed representative at an online or
|
||||
offline event. Representation of a project may be further defined and
|
||||
clarified by project maintainers.
|
||||
|
||||
Enforcement
|
||||
-----------
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may
|
||||
be reported by contacting the project team at thach@tinyusb.org. All
|
||||
complaints will be reviewed and investigated and will result in a
|
||||
response that is deemed necessary and appropriate to the circumstances.
|
||||
The project team is obligated to maintain confidentiality with regard to
|
||||
the reporter of an incident. Further details of specific enforcement
|
||||
policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in
|
||||
good faith may face temporary or permanent repercussions as determined
|
||||
by other members of the project's leadership.
|
||||
|
||||
Attribution
|
||||
-----------
|
||||
|
||||
This Code of Conduct is adapted from the `Contributor
|
||||
Covenant <https://www.contributor-covenant.org>`__, version 1.4,
|
||||
available at
|
||||
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
@ -1,79 +0,0 @@
|
||||
# TinyUSB contributors (sorted alphabetically)
|
||||
|
||||
- **[Adafruit Team](https://github.com/adafruit)**
|
||||
- Main supporter and sponsor for hardware boards and kits
|
||||
- Discussion and suggestion for feature and improvement
|
||||
- Design the project logo
|
||||
|
||||
- **[Ha Thach](https://github.com/hathach)**
|
||||
- *Author and maintainer*
|
||||
- Most features development
|
||||
|
||||
- **[Hristo Gochkov](https://github.com/me-no-dev)**
|
||||
- Improve ESP32s2 DCD
|
||||
|
||||
- **[Jan Dümpelmann](https://github.com/duempel)**
|
||||
- Improve transfer performance for Synopsys DCD for STM32 MCUs
|
||||
|
||||
- **[Jeff Epler](https://github.com/jepler)**
|
||||
- Improve MIDI class driver
|
||||
|
||||
- **[Jerzy Kasenberg](https://github.com/kasjer)**
|
||||
- Add new DCD port for **Dialog DA1469x**
|
||||
- Add new class driver for **Bluetooth HCI**
|
||||
- Add ISO transfer for STM32 Synopsys, Nordic nRF, Dialog DA1469x
|
||||
- Improve Audio driver and add uac2_headset example
|
||||
- Improve STM32 Synopsys DCD with various PRs
|
||||
|
||||
- **[Kamil Tomaszewski](https://github.com/kamtom480)**
|
||||
- Add new DCD port for **Sony CXD56** (spresnese board)
|
||||
|
||||
- **[Kay Sievers](https://github.com/kaysievers)**
|
||||
- Improve MIDI driver with packet API
|
||||
|
||||
- **[Nathan Conrad](https://github.com/pigrew)**
|
||||
- Add new DCD port for **STM32 fsdev** Fullspeed device for STM32 L0, F0, F1, F3 etc ...
|
||||
- Add new class driver for **USB Test and Measurement Class (USBTMC)**
|
||||
- Various improvement e.g Zero-length packet, Lint setup
|
||||
- Board support for STM32F070RB Nucleo, STM32F303 Discovery
|
||||
|
||||
- **[Peter Lawrence](https://github.com/majbthrd)**
|
||||
- Add new DCD port for **Nuvoton NUC 120, 121, 125, 126, 505**
|
||||
- Add new class driver for **USBNET RNDIS, CDC-ECM**
|
||||
- Add *net_lwip_webserver* example for demonstration of usbnet with lwip
|
||||
- Board support for NuTiny NUC120, NUC121s, NUC125s, NUC126V, NUC505
|
||||
- Improve multiple cdc interfaces API & add cdc_dual_ports example
|
||||
|
||||
- **[Reinhard Panhuber](https://github.com/PanRe)**
|
||||
- Add new class driver for **USB Audio Class 2.0 (UAC2)**
|
||||
- Enhance tu_fifo with unmasked pointer, which better support DMA
|
||||
|
||||
- **[Scott Shawcroft](https://github.com/tannewt)**
|
||||
- Add new DCD port for **SAMD21 and SAMD51**
|
||||
- Add new class driver for **Musical Instrument Digital Interface (MIDI)**
|
||||
- Improve USBD control transfer, MSC, CDC class driver
|
||||
- Board support for Metro M0 & M4 express
|
||||
- Write the execellent porting.md documentation
|
||||
- Add initial Makefile
|
||||
|
||||
- **[Sean Cross](https://github.com/xobs)**
|
||||
- Add new DCD port for **ValentyUSB eptri** (fomu board)
|
||||
|
||||
- **[Sylvain "tnt" Munaut](https://github.com/smunaut)**
|
||||
- Add new class driver for DFU Runtime
|
||||
|
||||
- **[Timon Skerutsch](https://github.com/PTS93)**
|
||||
- Add hid_test.js script and extensive test for bi-directional raw HID
|
||||
|
||||
- **[Tod E. Kurt](https://github.com/todbot)**
|
||||
- Add hid_test.js script and extensive test for bi-directional raw HID
|
||||
|
||||
- **[Uwe Bonnes](https://github.com/UweBonnes)**
|
||||
- Improve STM32 Synopsys highspeed DCD
|
||||
|
||||
- **[William D. Jones](https://github.com/cr1901)**
|
||||
- Add new DCD port for **Synopsys DesignWare** for STM32 L4, F2, F4, F7, H7 etc ...
|
||||
- Add new DCD port for **TI MSP430**
|
||||
- Board support for STM32F407 Discovery, STM32H743 Nucleo, pyboard v1.1, msp_exp430f5529lp etc ...
|
||||
|
||||
**[Full contributors list](https://github.com/hathach/tinyusb/contributors).**
|
208
CONTRIBUTORS.rst
Normal file
208
CONTRIBUTORS.rst
Normal file
@ -0,0 +1,208 @@
|
||||
************
|
||||
Contributors
|
||||
************
|
||||
|
||||
Special thanks to all the people who spent their precious time and effort to help this project so far.
|
||||
list contributors and their awesome work for the stack:
|
||||
|
||||
Notable contributors
|
||||
====================
|
||||
|
||||
(sorted alphabetically)
|
||||
|
||||
`Adafruit Team <https://github.com/adafruit>`__
|
||||
-----------------------------------------------
|
||||
|
||||
- Main supporter and sponsor for hardware boards and kits
|
||||
- Discussion and suggestion for feature and improvement
|
||||
- Design the project logo
|
||||
|
||||
|
||||
`Gordon McNab <https://github.com/ftdigdm>`__
|
||||
---------------------------------------------
|
||||
|
||||
- Add new DCD port for Bridgetek FT90x and FT93x
|
||||
|
||||
|
||||
`Ha Thach <https://github.com/hathach>`__
|
||||
-----------------------------------------
|
||||
|
||||
- *Author and maintainer*
|
||||
- Most features development
|
||||
|
||||
|
||||
`Hristo Gochkov <https://github.com/me-no-dev>`__
|
||||
-------------------------------------------------
|
||||
|
||||
- Improve ESP32s2 DCD
|
||||
|
||||
|
||||
`Jacob Berg Potter <https://github.com/j4cbo>`__
|
||||
------------------------------------------------
|
||||
|
||||
- Add new class driver for network CDC-NCM
|
||||
|
||||
|
||||
`Jan Dümpelmann <https://github.com/duempel>`__
|
||||
-----------------------------------------------
|
||||
|
||||
- Improve transfer performance for Synopsys DCD for STM32 MCUs
|
||||
|
||||
|
||||
`Jeff Epler <https://github.com/jepler>`__
|
||||
------------------------------------------
|
||||
|
||||
- Improve MIDI class driver
|
||||
|
||||
|
||||
`Jerzy Kasenberg <https://github.com/kasjer>`__
|
||||
-----------------------------------------------
|
||||
|
||||
- Add new DCD port for Dialog DA1469x
|
||||
- Add new DCD port for PIC32MZ
|
||||
- Add new class driver for Bluetooth HCI
|
||||
- Add ISO transfer for STM32 Synopsys, Nordic nRF, Dialog DA1469x
|
||||
- Improve Audio driver and add uac2\_headset example
|
||||
- Improve STM32 Synopsys DCD with various PRs
|
||||
|
||||
|
||||
`J McCarthy <https://github.com/xmos-jmccarthy>`__
|
||||
--------------------------------------------------
|
||||
|
||||
- Add new DFU 1.1 class driver
|
||||
- Add new example for dfu
|
||||
|
||||
|
||||
`Kamil Tomaszewski <https://github.com/kamtom480>`__
|
||||
----------------------------------------------------
|
||||
|
||||
- Add new DCD port for Sony CXD56 (spresnese board)
|
||||
|
||||
|
||||
`Kay Sievers <https://github.com/kaysievers>`__
|
||||
-----------------------------------------------
|
||||
|
||||
- Improve MIDI driver with packet API
|
||||
|
||||
|
||||
`Koji KITAYAMA <https://github.com/kkitayam>`__
|
||||
-----------------------------------------------
|
||||
|
||||
- Add new DCD and HCD port for NXP Kinetis KL25
|
||||
- Add new DCD and HCD port for Renesas RX family (RX600, RX700 ..) with GR-CITRUS, RX65n target board
|
||||
- Add new DCD and HCD port for Mentor musb with MSP432E4
|
||||
- Add new class driver for USB Video Class (UVC 1.5)
|
||||
|
||||
`Nathan Conrad <https://github.com/pigrew>`__
|
||||
---------------------------------------------
|
||||
|
||||
- Add new DCD port for STM32 fsdev Fullspeed device for STM32 L0,
|
||||
F0, F1, F3 etc ...
|
||||
- Add new class driver for USB Test and Measurement Class (USBTMC)
|
||||
- Various improvement e.g Zero-length packet, Lint setup
|
||||
- Board support for STM32F070RB Nucleo, STM32F303 Discovery
|
||||
|
||||
|
||||
`Peter Lawrence <https://github.com/majbthrd>`__
|
||||
------------------------------------------------
|
||||
|
||||
- Add new DCD port for Nuvoton NUC 120, 121, 125, 126, 505
|
||||
- Add new class driver for network RNDIS, CDC-ECM
|
||||
- Enhance CDC-NCM network driver to compatible with RNDIS/ECM
|
||||
- Add *net\_lwip\_webserver* example for demonstration of usbnet with lwip
|
||||
- Board support for NuTiny NUC120, NUC121s, NUC125s, NUC126V, NUC505
|
||||
- Improve multiple cdc interfaces API & add cdc\_dual\_ports example
|
||||
|
||||
|
||||
`Rafael Silva <https://github.com/perigoso>`__
|
||||
----------------------------------------------
|
||||
|
||||
- Port DCD Synopsys to support Silabs EFM32GG12 with SLTB009A board
|
||||
- Rewrite documentation in rst and setup for readthedocs
|
||||
- Generalize Renesas driver and support RA family with EK-RA4M3 board
|
||||
|
||||
|
||||
`Raspberry Pi Team <https://github.com/raspberrypi>`__
|
||||
------------------------------------------------------
|
||||
|
||||
- Add new DCD port for Raspberry Pi RP2040
|
||||
- Add new HCD port for Raspberry Pi RP2040
|
||||
|
||||
|
||||
`Reinhard Panhuber <https://github.com/PanRe>`__
|
||||
------------------------------------------------
|
||||
|
||||
- Add new class driver for USB Audio Class 2.0 (UAC2)
|
||||
- Rework tu\_fifo with unmasked pointer, add DMA support, and constant address support
|
||||
- Add new DCD/USBD edpt\_xfer\_fifo() API for optimizing endpoint transfer
|
||||
- Add and greatly improve Isochronous transfer
|
||||
- Add new audio examples: audio\_test and audio\_4\_channel\_mic
|
||||
|
||||
|
||||
`Scott Shawcroft <https://github.com/tannewt>`__
|
||||
------------------------------------------------
|
||||
|
||||
- Add new DCD port for SAMD21 and SAMD51
|
||||
- Add new class driver for Musical Instrument Digital Interface (MIDI)
|
||||
- Improve USBD control transfer, MSC, CDC class driver
|
||||
- Board support for Metro M0 & M4 express
|
||||
- Write the excellent porting.md documentation
|
||||
- Add initial Makefile
|
||||
|
||||
`Sean Cross <https://github.com/xobs>`__
|
||||
----------------------------------------
|
||||
|
||||
- Add new DCD port for ValentyUSB eptri (fomu board)
|
||||
|
||||
|
||||
`Sylvain "tnt" Munaut <https://github.com/smunaut>`__
|
||||
-----------------------------------------------------
|
||||
|
||||
- Add new class driver for DFU Runtime
|
||||
|
||||
|
||||
`Tian Yunhao <https://github.com/t123yh>`__
|
||||
-------------------------------------------
|
||||
|
||||
- Add new DCD port for Allwinner F1C100S/F1C200S
|
||||
- Add support for osal_rtx4
|
||||
|
||||
`Timon Skerutsch <https://github.com/PTS93>`__
|
||||
----------------------------------------------
|
||||
|
||||
- Add hid\_test.js script and extensive test for bi-directional raw HID
|
||||
|
||||
|
||||
`Tod E. Kurt <https://github.com/todbot>`__
|
||||
-------------------------------------------
|
||||
|
||||
- Add hid\_test.js script and extensive test for bi-directional raw HID
|
||||
|
||||
|
||||
`Uwe Bonnes <https://github.com/UweBonnes>`__
|
||||
---------------------------------------------
|
||||
|
||||
- Improve STM32 Synopsys highspeed DCD
|
||||
|
||||
|
||||
`William D. Jones <https://github.com/cr1901>`__
|
||||
------------------------------------------------
|
||||
|
||||
- Add new DCD port for Synopsys DesignWare for STM32 L4, F2, F4,
|
||||
F7, H7 etc ...
|
||||
- Add new DCD port for TI MSP430
|
||||
- Board support for STM32F407 Discovery, STM32H743 Nucleo, pyboard v1.1, msp\_exp430f5529lp etc ...
|
||||
|
||||
|
||||
`Zixun Li <https://github.com/HiFiPhile>`__
|
||||
-------------------------------------------
|
||||
|
||||
- Add new DCD port for Microchip SAMx7x
|
||||
- Add IAR compiler support
|
||||
- Improve UAC2, CDC, DFU class driver
|
||||
- Improve stm32_fsdev, chipidea_ci_hs, lpc_ip3511 DCD
|
||||
- Host IAR Build CI & hardware in the loop (HITL) test
|
||||
|
||||
|
||||
`Full contributors list <https://github.com/hathach/tinyusb/contributors>`__
|
||||
============================================================================
|
104
README.md
104
README.md
@ -1,104 +0,0 @@
|
||||
# TinyUSB
|
||||
|
||||

|
||||
|
||||
[](https://github.com/hathach/tinyusb/actions) [](https://opensource.org/licenses/MIT)
|
||||
|
||||
TinyUSB is an open-source cross-platform USB Host/Device stack for embedded system, designed to be memory-safe with no dynamic allocation and thread-safe with all interrupt events are deferred then handled in the non-ISR task function.
|
||||
|
||||

|
||||
|
||||
```
|
||||
.
|
||||
├── docs # Documentation
|
||||
├── examples # Sample with Makefile and Segger Embedded build support
|
||||
├── hw
|
||||
│ ├── bsp # Supported boards source files
|
||||
│ └── mcu # Low level mcu core & peripheral drivers
|
||||
├── lib # Sources from 3rd party such as freeRTOS, fatfs ...
|
||||
├── src # All sources files for TinyUSB stack itself.
|
||||
├── test # Unit tests for the stack
|
||||
└── tools # Files used internally
|
||||
```
|
||||
|
||||
## Contributors
|
||||
|
||||
Special thanks to all the people who spent their precious time and effort to help this project so far. Check out the
|
||||
[CONTRIBUTORS.md](CONTRIBUTORS.md) file for the list of all contributors and their awesome work for the stack.
|
||||
|
||||
## Supported MCUs
|
||||
|
||||
The stack supports the following MCUs:
|
||||
|
||||
- **Espressif:** ESP32-S2
|
||||
- **Dialog:** DA1469x
|
||||
- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55
|
||||
- **NordicSemi:** nRF52833, nRF52840
|
||||
- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505
|
||||
- **NXP:**
|
||||
- LPC Series: 11Uxx, 13xx, 175x_6x, 177x_8x, 18xx, 40xx, 43xx, 51Uxx, 54xxx, 55xx
|
||||
- iMX RT Series: RT1011, RT1015, RT1021, RT1052, RT1062, RT1064
|
||||
- **Sony:** CXD56
|
||||
- **ST:** STM32 series: L0, F0, F1, F2, F3, F4, F7, H7 both FullSpeed and HighSpeed
|
||||
- **TI:** MSP430
|
||||
- **[ValentyUSB](https://github.com/im-tomu/valentyusb)** eptri
|
||||
|
||||
[Here is the list of supported Boards](docs/boards.md) that can be used with provided examples.
|
||||
|
||||
## Device Stack
|
||||
|
||||
Supports multiple device configurations by dynamically changing usb descriptors. Low power functions such like suspend, resume, and remote wakeup. Following device classes are supported:
|
||||
|
||||
- USB Audio Class 2.0 (UAC2) still work in progress
|
||||
- Bluetooth Host Controller Interface (BTH HCI)
|
||||
- Communication Class (CDC)
|
||||
- Device Firmware Update (DFU): only Runtinme
|
||||
- Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
|
||||
- Mass Storage Class (MSC): with multiple LUNs
|
||||
- Musical Instrument Digital Interface (MIDI)
|
||||
- Network with RNDIS, CDC-ECM (work in progress)
|
||||
- USB Test and Measurement Class (USBTMC)
|
||||
- Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
|
||||
- [WebUSB](https://github.com/WICG/webusb) with vendor-specific class
|
||||
|
||||
## Host Stack
|
||||
|
||||
**Most active development is on the Device stack. The Host stack is under rework and largely untested.**
|
||||
|
||||
- Human Interface Device (HID): Keyboard, Mouse, Generic
|
||||
- Mass Storage Class (MSC)
|
||||
- Hub currently only supports 1 level of hub (due to my laziness)
|
||||
|
||||
## OS Abstraction layer
|
||||
|
||||
TinyUSB is completely thread-safe by pushing all ISR events into a central queue, then process it later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as CDC FIFO. Therefore the stack needs to use some of OS's basic APIs. Following OSes are already supported out of the box.
|
||||
|
||||
- **No OS** : Disabling USB IRQ is used as way to provide mutex
|
||||
- **FreeRTOS**
|
||||
- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its [own repo](https://github.com/hathach/mynewt-tinyusb-example)
|
||||
|
||||
## Getting Started
|
||||
|
||||
[Here are the details for getting started](docs/getting_started.md) with the stack.
|
||||
|
||||
## Porting
|
||||
|
||||
Want to help add TinyUSB support for a new MCU? Read [here](docs/porting.md) for an explanation on the low-level API needed by TinyUSB.
|
||||
|
||||
## License
|
||||
|
||||
MIT license for all TinyUSB sources `src` folder, [Full license is here](LICENSE). However, each file is individually licensed especially those in `lib` and `hw/mcu` folder. Please make sure you understand all the license term for files you use in your project.
|
||||
|
||||
## Uses
|
||||
|
||||
TinyUSB is currently used by these other projects:
|
||||
|
||||
- [Adafruit nRF52 Arduino](https://github.com/adafruit/Adafruit_nRF52_Arduino)
|
||||
- [Adafruit nRF52 Bootloader](https://github.com/adafruit/Adafruit_nRF52_Bootloader)
|
||||
- [Adafruit SAMD Arduino](https://github.com/adafruit/ArduinoCore-samd)
|
||||
- [CircuitPython](https://github.com/adafruit/circuitpython)
|
||||
- [MicroPython](https://github.com/micropython/micropython)
|
||||
- [mynewt](https://mynewt.apache.org)
|
||||
- [TinyUSB Arduino Library](https://github.com/adafruit/Adafruit_TinyUSB_Arduino)
|
||||
|
||||
Let me know if your project also uses TinyUSB and want to share.
|
262
README.rst
Normal file
262
README.rst
Normal file
@ -0,0 +1,262 @@
|
||||
|Build Status| |CircleCI Status| |Documentation Status| |Fuzzing Status| |License|
|
||||
|
||||
Sponsors
|
||||
========
|
||||
|
||||
TinyUSB is funded by: Adafruit. Purchasing products from them helps to support this project.
|
||||
|
||||
.. figure:: docs/assets/adafruit_logo.svg
|
||||
:alt: Adafruit Logo
|
||||
:target: https://www.adafruit.com
|
||||
|
||||
TinyUSB Project
|
||||
===============
|
||||
|
||||
.. figure:: docs/assets/logo.svg
|
||||
:alt: TinyUSB
|
||||
|
||||
TinyUSB is an open-source cross-platform USB Host/Device stack for embedded system, designed to be memory-safe with no dynamic allocation and thread-safe with all interrupt events are deferred then handled in the non-ISR task function. Check out the online `documentation <https://docs.tinyusb.org/>`__ for more details.
|
||||
|
||||
.. figure:: docs/assets/stack.svg
|
||||
:width: 500px
|
||||
:alt: stackup
|
||||
|
||||
::
|
||||
|
||||
.
|
||||
├── docs # Documentation
|
||||
├── examples # Examples with make and cmake build system
|
||||
├── hw
|
||||
│ ├── bsp # Supported boards source files
|
||||
│ └── mcu # Low level mcu core & peripheral drivers
|
||||
├── lib # Sources from 3rd party such as FreeRTOS, FatFs ...
|
||||
├── src # All sources files for TinyUSB stack itself.
|
||||
├── test # Tests: unit test, fuzzing, hardware test
|
||||
└── tools # Files used internally
|
||||
|
||||
|
||||
Getting started
|
||||
===============
|
||||
|
||||
See the `online documentation <https://docs.tinyusb.org>`_ for information about using TinyUSB and how it is implemented.
|
||||
|
||||
Check out `Getting Started`_ guide for adding TinyUSB to your project or building the examples. If you are new to TinyUSB, we recommend starting with the ``cdc_msc`` example. There is a handful of `Supported Boards`_ that should work out of the box.
|
||||
|
||||
We use `GitHub Discussions <https://github.com/hathach/tinyusb/discussions>`_ as our forum. It is a great place to ask questions and advice from the community or to discuss your TinyUSB-based projects.
|
||||
|
||||
For bugs and feature requests, please `raise an issue <https://github.com/hathach/tinyusb/issues>`_ and follow the templates there.
|
||||
|
||||
See `Porting`_ guide for adding support for new MCUs and boards.
|
||||
|
||||
Device Stack
|
||||
============
|
||||
|
||||
Supports multiple device configurations by dynamically changing USB descriptors, low power functions such like suspend, resume, and remote wakeup. The following device classes are supported:
|
||||
|
||||
- Audio Class 2.0 (UAC2)
|
||||
- Bluetooth Host Controller Interface (BTH HCI)
|
||||
- Communication Device Class (CDC)
|
||||
- Device Firmware Update (DFU): DFU mode (WIP) and Runtime
|
||||
- Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
|
||||
- Mass Storage Class (MSC): with multiple LUNs
|
||||
- Musical Instrument Digital Interface (MIDI)
|
||||
- Network with RNDIS, Ethernet Control Model (ECM), Network Control Model (NCM)
|
||||
- Test and Measurement Class (USBTMC)
|
||||
- Video class 1.5 (UVC): work in progress
|
||||
- Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
|
||||
- `WebUSB <https://github.com/WICG/webusb>`__ with vendor-specific class
|
||||
|
||||
If you have a special requirement, ``usbd_app_driver_get_cb()`` can be used to write your own class driver without modifying the stack. Here is how the RPi team added their reset interface `raspberrypi/pico-sdk#197 <https://github.com/raspberrypi/pico-sdk/pull/197>`_
|
||||
|
||||
Host Stack
|
||||
==========
|
||||
|
||||
- Human Interface Device (HID): Keyboard, Mouse, Generic
|
||||
- Mass Storage Class (MSC)
|
||||
- Communication Device Class: CDC-ACM
|
||||
- Vendor serial over USB: FTDI, CP210x, CH34x
|
||||
- Hub with multiple-level support
|
||||
|
||||
Similar to the Device Stack, if you have a special requirement, ``usbh_app_driver_get_cb()`` can be used to write your own class driver without modifying the stack.
|
||||
|
||||
Power Delivery Stack
|
||||
====================
|
||||
|
||||
- Power Delivery 3.0 (PD3.0) with USB Type-C support (WIP)
|
||||
- Super early stage, only for testing purpose
|
||||
- Only support STM32 G4
|
||||
|
||||
OS Abstraction layer
|
||||
====================
|
||||
|
||||
TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR) events into a central queue, then processing them later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as Communication Device Class (CDC) FIFO. Therefore the stack needs to use some of the OS's basic APIs. Following OSes are already supported out of the box.
|
||||
|
||||
- **No OS**
|
||||
- **FreeRTOS**
|
||||
- `RT-Thread <https://github.com/RT-Thread/rt-thread>`_: `repo <https://github.com/RT-Thread-packages/tinyusb>`_
|
||||
- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its `own repo <https://github.com/hathach/mynewt-tinyusb-example>`_
|
||||
|
||||
Supported CPUs
|
||||
==============
|
||||
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Manufacturer | Family | Device | Host | Highspeed | Driver | Note |
|
||||
+==============+=============================+========+======+===========+========================+===================+
|
||||
| Allwinner | F1C100s/F1C200s | ✔ | | ✔ | sunxi | musb variant |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Analog | MAX3421E | | ✔ | ✖ | max3421 | via SPI |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | MAX32 650, 666, 690, | ✔ | | ✔ | musb | 1-dir ep |
|
||||
| | MAX78002 | | | | | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Brigetek | FT90x | ✔ | | ✔ | ft9xx | 1-dir ep |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Espressif | S2, S3 | ✔ | ✔ | ✖ | dwc2 or esp32sx | |
|
||||
| ESP32 +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | P4 | ✔ | ✔ | ✔ | dwc2 | |
|
||||
+--------------+----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Infineon | XMC4500 | ✔ | ✔ | ✖ | dwc2 | |
|
||||
+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| MicroChip | SAM | D11, D21, L21, L22 | ✔ | | ✖ | samd | |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | D51, E5x | ✔ | | ✖ | samd | |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | G55 | ✔ | | ✖ | samg | 1-dir ep |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | E70,S70,V70,V71 | ✔ | | ✔ | samx7x | 1-dir ep |
|
||||
| +-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | PIC | 24 | ✔ | | | pic | ci_fs variant |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 32 mm, mk, mx | ✔ | | | pic | ci_fs variant |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | dsPIC33 | ✔ | | | pic | ci_fs variant |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 32mz | ✔ | | | pic32mz | musb variant |
|
||||
+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Mind Montion | mm32 | ✔ | | ✖ | mm32f327x_otg | ci_fs variant |
|
||||
+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| NordicSemi | nRF 52833, 52840, 5340 | ✔ | ✖ | ✖ | nrf5x | only ep8 is ISO |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Nuvoton | NUC120 | ✔ | ✖ | ✖ | nuc120 | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | NUC121/NUC125 | ✔ | ✖ | ✖ | nuc121 | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | NUC126 | ✔ | ✖ | ✖ | nuc121 | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | NUC505 | ✔ | | ✔ | nuc505 | |
|
||||
+--------------+---------+-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| NXP | iMXRT | RT 10xx, 11xx | ✔ | ✔ | ✔ | ci_hs | |
|
||||
| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | Kinetis | KL | ✔ | ⚠ | ✖ | ci_fs, khci | |
|
||||
| | +-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | K32L2 | ✔ | | ✖ | khci | ci_fs variant |
|
||||
| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | |
|
||||
| | +-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 17, 40 | ✔ | ⚠ | ✖ | lpc17_40 | |
|
||||
| | +-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 18, 43 | ✔ | ✔ | ✔ | ci_hs | |
|
||||
| | +-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 51u | ✔ | ✖ | ✖ | lpc_ip3511 | |
|
||||
| | +-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 54, 55 | ✔ | | ✔ | lpc_ip3511 | |
|
||||
| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | MCX | N9, A15 | ✔ | | ✔ | ci_fs, ci_hs | |
|
||||
+--------------+---------+-------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Raspberry Pi | RP2040, RP2350 | ✔ | ✔ | ✖ | rp2040, pio_usb | |
|
||||
+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Renesas | RX | 63N, 65N, 72N | ✔ | ✔ | ✖ | rusb2 | |
|
||||
| +-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | RA | 4M1, 4M3, 6M1 | ✔ | ✔ | ✖ | rusb2 | |
|
||||
| | +-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 6M5 | ✔ | ✔ | ✔ | rusb2 | |
|
||||
+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| ST STM32 | F0 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| +----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | F1 | 102, 103 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| | +------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 105, 107 | ✔ | ✔ | ✖ | dwc2 | |
|
||||
| +----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | F2, F4, F7, H7 | ✔ | ✔ | ✔ | dwc2 | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | F3 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | C0, G0, H5 | ✔ | | ✖ | stm32_fsdev | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | G4 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | L0, L1 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| +----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | L4 | 4x2, 4x3 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| | +------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 4x5, 4x6 | ✔ | ✔ | ✖ | dwc2 | |
|
||||
| +----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | L4+ | ✔ | ✔ | ✖ | dwc2 | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | L5 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
| +----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | U5 | 535, 545 | ✔ | | ✖ | stm32_fsdev | |
|
||||
| | +------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 575, 585 | ✔ | ✔ | ✖ | dwc2 | |
|
||||
| | +------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | | 59x,5Ax,5Fx,5Gx | ✔ | ✔ | ✔ | dwc2 | |
|
||||
| +----+------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | WBx5 | ✔ | ✖ | ✖ | stm32_fsdev | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| TI | MSP430 | ✔ | ✖ | ✖ | msp430x5xx | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | MSP432E4 | ✔ | | ✖ | musb | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | TM4C123 | ✔ | | ✖ | musb | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| WCH | CH32F20x | ✔ | | ✔ | ch32_usbhs | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | CH32V20x | ✔ | | ✖ | stm32_fsdev/ch32_usbfs | |
|
||||
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
| | CH32V307 | ✔ | | ✔ | ch32_usbfs/hs | |
|
||||
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
|
||||
|
||||
Table Legend
|
||||
------------
|
||||
|
||||
========= =========================
|
||||
✔ Supported
|
||||
⚠ Partial support
|
||||
✖ Not supported by hardware
|
||||
\[empty\] Unknown
|
||||
========= =========================
|
||||
|
||||
|
||||
.. |Build Status| image:: https://github.com/hathach/tinyusb/actions/workflows/build.yml/badge.svg
|
||||
:target: https://github.com/hathach/tinyusb/actions
|
||||
.. |CircleCI Status| image:: https://dl.circleci.com/status-badge/img/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master.svg?style=svg
|
||||
:target: https://dl.circleci.com/status-badge/redirect/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master
|
||||
.. |Documentation Status| image:: https://readthedocs.org/projects/tinyusb/badge/?version=latest
|
||||
:target: https://docs.tinyusb.org/en/latest/?badge=latest
|
||||
.. |Fuzzing Status| image:: https://oss-fuzz-build-logs.storage.googleapis.com/badges/tinyusb.svg
|
||||
:target: https://oss-fuzz-build-logs.storage.googleapis.com/index.html#tinyusb
|
||||
.. |License| image:: https://img.shields.io/badge/license-MIT-brightgreen.svg
|
||||
:target: https://opensource.org/licenses/MIT
|
||||
|
||||
|
||||
.. _Changelog: docs/info/changelog.rst
|
||||
.. _Contributors: CONTRIBUTORS.rst
|
||||
.. _Getting Started: docs/reference/getting_started.rst
|
||||
.. _Supported Boards: docs/reference/boards.rst
|
||||
.. _Dependencies: docs/reference/dependencies.rst
|
||||
.. _Concurrency: docs/reference/concurrency.rst
|
||||
.. _Contributing: docs/contributing/index.rst
|
||||
.. _Code of Conduct: CODE_OF_CONDUCT.rst
|
||||
.. _Porting: docs/contributing/porting.rst
|
11
SConscript
Normal file
11
SConscript
Normal file
@ -0,0 +1,11 @@
|
||||
# RT-Thread building script for bridge
|
||||
|
||||
import os
|
||||
from building import *
|
||||
|
||||
objs = []
|
||||
cwd = GetCurrentDir()
|
||||
|
||||
objs = objs + SConscript(cwd + '/lib/rt-thread/SConscript')
|
||||
|
||||
Return('objs')
|
227
changelog.md
227
changelog.md
@ -1,227 +0,0 @@
|
||||
# TinyUSB Changelog
|
||||
|
||||
## 0.7.0 - 2020.11.08
|
||||
|
||||
### Device Controller Driver
|
||||
|
||||
- Added new support for Espressif ESP32-S2
|
||||
- Added new support for Dialog DA1469x
|
||||
- Enhance STM32 Synopsys
|
||||
- Support bus events disconnection/suspend/resume/wakeup
|
||||
- Improve transfer performance with optimizing xfer and fifo size
|
||||
- Support Highspeed port (OTG_HS) with both internal and external PHY
|
||||
- Support multiple usb ports with rhport=1 is highspeed on selected MCUs e.g H743, F23. It is possible to have OTG_HS to run on Fullspeed PHY (e.g lacking external PHY)
|
||||
- Add ISO transfer, fix odd/even frame
|
||||
- Fix FIFO flush during stall
|
||||
- Implement dcd_edpt_close() API
|
||||
- Support F105, F107
|
||||
- Enhance STM32 fsdev
|
||||
- Improve dcd fifo allocation
|
||||
- Fix ISTR race condition
|
||||
- Support remap USB IRQ on supported MCUs
|
||||
- Implement dcd_edpt_close() API
|
||||
- Enhance NUC 505: enhance set configure behavior
|
||||
- Enhance SAMD
|
||||
- Fix race condition with setup packet
|
||||
- Add SAMD11 option `OPT_MCU_SAMD11`
|
||||
- Add SAME5x option `OPT_MCU_SAME5X`
|
||||
- Fix SAMG control data toggle and stall race condition
|
||||
- Enhance nRF
|
||||
- Fix hanged when tud_task() is called within critical section (disabled interrupt)
|
||||
- Fix disconnect bus event not submitted
|
||||
- Implement ISO transfer and dcd_edpt_close()
|
||||
|
||||
### USB Device
|
||||
|
||||
**USBD**
|
||||
|
||||
- Add new class driver for **Bluetooth HCI** class driver with example can be found in [mynewt-tinyusb-example](https://github.com/hathach/mynewt-tinyusb-example) since it needs mynewt OS to run with.
|
||||
- Fix USBD endpoint usage racing condition with `usbd_edpt_claim()/usbd_edpt_release()`
|
||||
- Added `tud_task_event_ready()` and `osal_queue_empty()`. This API is needed to check before enter low power mode with WFI/WFE
|
||||
- Rename USB IRQ Handler to `dcd_int_handler()`. Application must define IRQ handler in which it calls this API.
|
||||
- Add `dcd_connect()` and `dcd_disconnect()` to enable/disable internal pullup on D+/D- on supported MCUs.
|
||||
- Add `usbd_edpt_open()`
|
||||
- Remove `dcd_set_config()`
|
||||
- Add *OPT_OS_CUMSTOM* as hook for application to overwrite and/or add their own OS implementation
|
||||
- Support SET_INTERFACE, GET_INTERFACE request
|
||||
- Add Logging for debug with optional uart/rtt/swo printf retarget or `CFG_TUSB_DEBUG_PRINTF` hook
|
||||
- Add IAR compiler support
|
||||
- Support multiple configuration descriptors. `TUD_CONFIG_DESCRIPTOR()` template has extra config_num as 1st argument
|
||||
- Improve USB Highspeed support with actual link speed detection with `dcd_event_bus_reset()`
|
||||
- Enhance class driver management
|
||||
- `usbd_driver_open()` add max length argument, and return length of interface (0 for not supported). Return value is used for finding appropriate driver
|
||||
- Add application implemented class driver via `usbd_app_driver_get_cb()`
|
||||
- IAD is handled to assign driver id
|
||||
- Added `tud_descriptor_device_qualifier_cb()` callback
|
||||
- Optimize `tu_fifo` bulk write/read transfer
|
||||
- Forward non-std control request to class driver
|
||||
- Let application handle Microsoft OS 1.0 Descriptors (the 0xEE index string)
|
||||
- Fix OSAL FreeRTOS yield from ISR
|
||||
|
||||
**Class Drivers**
|
||||
|
||||
- USBNET: remove ACM-EEM due to lack of support from host
|
||||
- USBTMC: fix descriptors when INT EP is disabled
|
||||
- CDC:
|
||||
- Send zero length packet for end of data when needed
|
||||
- Add `tud_cdc_tx_complete_cb()` callback
|
||||
- Change tud_cdc_n_write_flush() return number of bytes forced to transfer, and flush when writing enough data to fifo
|
||||
- MIDI:
|
||||
- Add packet interface
|
||||
- Add multiple jack descriptors
|
||||
- Fix MIDI driver for sysex
|
||||
- DFU Runtime: fix response to SET_INTERFACE and DFU_GETSTATUS request
|
||||
- Rename some configure macro to make it clear that those are used directly for endpoint transfer
|
||||
- CFG_TUD_HID_BUFSIZE to `CFG_TUD_HID_EP_BUFSIZE
|
||||
- CFG_TUD_CDC_EPSIZE to CFG_TUD_CDC_EP_BUFSIZE
|
||||
- CFG_TUD_MSC_BUFSIZE to CFG_TUD_MSC_EP_BUFSIZE
|
||||
- CFG_TUD_MIDI_EPSIZE to CFG_TUD_MIDI_EP_BUFSIZE
|
||||
- HID:
|
||||
- Fix gamepad template descriptor
|
||||
- Add multiple HID interface API
|
||||
- Add extra comma to HID_REPORT_ID
|
||||
|
||||
### USB Host
|
||||
|
||||
- Rework USB host stack (still work in progress)
|
||||
- Fix compile error with pipehandle
|
||||
- Rework usbh control and enumeration as non-blocking
|
||||
- Improve Hub, MSC, HID host driver
|
||||
|
||||
### Examples
|
||||
|
||||
- Add new hid_composite_freertos
|
||||
- Add new dynamic_configuration to demonstrate how to switch configuration descriptors
|
||||
- Add new hid_multiple_interface
|
||||
- Enhance `net_lwip_webserver` example
|
||||
- Add multiple configuration: RNDIS for Windows, CDC-ECM for macOS (Linux will work with both)
|
||||
- Update lwip to STABLE-2_1_2_RELEASE for net_lwip_webserver
|
||||
- Added new Audio example: audio_test uac2_headsest
|
||||
|
||||
### New Boards
|
||||
|
||||
- Espressif ESP32-S2: saola_1, kaluga_1
|
||||
- STM32: F746 Nucleo, H743 Eval, H743 Nucleo, F723 discovery, stlink v3 mini, STM32L4r5 Nucleo
|
||||
- Dialog DA1469x dk pro and dk usb
|
||||
- Microchip: Great Scoot Gadgets' LUNA, samd11_xplained, D5035-01, atsamd21 xplained pro
|
||||
- nRF: ItsyBitsy nRF52840
|
||||
|
||||
## 0.6.0 - 2020.03.30
|
||||
|
||||
Added **CONTRIBUTORS.md** to give proper credit for contributors to the stack. Special thanks to [Nathan Conrad](https://github.com/pigrew), [Peter Lawrence](https://github.com/majbthrd) and [William D. Jones](https://github.com/cr1901) and others for spending their precious time to add lots of features and ports for this release.
|
||||
|
||||
### Added
|
||||
|
||||
**MCUs**
|
||||
|
||||
- Added support for Microchip SAMG55
|
||||
- Added support for Nordic nRF52833
|
||||
- Added support for Nuvoton: NUC120, NUC121/NUC125, NUC126, NUC505
|
||||
- Added support for NXP LPC: 51Uxx, 54xxx, 55xx
|
||||
- Added support for NXP iMXRT: RT1011, RT1015, RT1021, RT1052, RT1062, RT1064
|
||||
- Added support for Sony CXD56 (Spresense)
|
||||
- Added support for STM32: L0, F0, F1, F2, F3, F4, F7, H7
|
||||
- Added support for TI MSP430
|
||||
- Added support for ValentyUSB's eptri
|
||||
|
||||
**Class Driver**
|
||||
|
||||
- Added DFU Runtime class driver
|
||||
- Added Network class driver with RNDIS, CDC-ECM, CDC-EEM (work in progress)
|
||||
- Added USBTMC class driver
|
||||
- Added WebUSB class driver using vendor-specific class
|
||||
- Added multiple instances support for CDC and MIDI
|
||||
- Added a handful of unit test with Ceedling.
|
||||
- Added LOG support for debugging with CFG_TUSB_DEBUG
|
||||
- Added `tud_descriptor_bos_cb()` for BOS descriptor (required for USB 2.1)
|
||||
- Added `dcd_edpt0_status_complete()` as optional API for DCD
|
||||
|
||||
**Examples**
|
||||
|
||||
Following examples are added:
|
||||
|
||||
- board_test
|
||||
- cdc_dual_ports
|
||||
- dfu_rt
|
||||
- hid_composite
|
||||
- net_lwip_webserver
|
||||
- usbtmc
|
||||
- webusb_serial
|
||||
|
||||
**Boards**
|
||||
|
||||
Following boards are added:
|
||||
|
||||
- adafruit_clue
|
||||
- arduino_nano33_ble
|
||||
- circuitplayground_bluefruit
|
||||
- circuitplayground_express
|
||||
- feather_m0_express
|
||||
- feather_nrf52840_sense
|
||||
- feather_stm32f405
|
||||
- fomu
|
||||
- itsybitsy_m0
|
||||
- itsybitsy_m4
|
||||
- lpcxpresso11u37
|
||||
- lpcxpresso1549
|
||||
- lpcxpresso51u68
|
||||
- lpcxpresso54114
|
||||
- lpcxpresso55s69
|
||||
- mbed1768
|
||||
- mimxrt1010_evk
|
||||
- mimxrt1015_evk
|
||||
- mimxrt1020_evk
|
||||
- mimxrt1050_evkb
|
||||
- mimxrt1060_evk
|
||||
- mimxrt1064_evk
|
||||
- msp_exp430f5529lp
|
||||
- ngx4330
|
||||
- nrf52840_mdk_dongle
|
||||
- nutiny_nuc121s
|
||||
- nutiny_nuc125s
|
||||
- nutiny_nuc126v
|
||||
- nutiny_sdk_nuc120
|
||||
- nutiny_sdk_nuc505
|
||||
- pca10059
|
||||
- pca10100
|
||||
- pyboardv11
|
||||
- raytac_mdbt50q_rx
|
||||
- samg55xplained
|
||||
- seeeduino_xiao
|
||||
- spresense
|
||||
- stm32f070rbnucleo
|
||||
- stm32f072disco
|
||||
- stm32f103bluepill
|
||||
- stm32f207nucleo
|
||||
- stm32f401blackpill
|
||||
- stm32f411blackpill
|
||||
- stm32f411disco
|
||||
- stm32f412disco
|
||||
- stm32f767nucleo
|
||||
- stm32h743nucleo
|
||||
- stm32l0538disco
|
||||
- stm32l476disco
|
||||
- teensy_40
|
||||
|
||||
### Changed
|
||||
|
||||
- Changed `tud_descriptor_string_cb()` to have additional Language ID argument
|
||||
- Merged hal_nrf5x.c into dcd_nrf5x.c
|
||||
- Merged dcd_samd21.c and dcd_samd51.c into dcd_samd.c
|
||||
- Generalized dcd_stm32f4.c to dcd_synopsys.c
|
||||
- Changed cdc_msc_hid to cdc_msc (drop hid) due to limited endpoints number of some MCUs
|
||||
- Improved DCD SAMD stability, fix missing setup packet occasionally
|
||||
- Improved usbd/usbd_control with proper hanlding of zero-length packet (ZLP)
|
||||
- Improved STM32 DCD FSDev
|
||||
- Improved STM32 DCD Synopsys
|
||||
- Migrated CI from Travis to Github Action
|
||||
- Updated nrfx submodule to 2.1.0
|
||||
- Fixed mynewt osal queue definition
|
||||
- Fixed cdc_msc_freertos example build for all MCUs
|
||||
|
||||
## 0.5.0 (Initial Release) - 2019.07.10
|
||||
|
||||
First release, device stack works great, host stack works but still need improvement.
|
||||
- Special thanks to @adafruit team, especially @tannewt to help out immensely to rework device stack: simplify osal & control transfer, adding SAMD21/SAMD51 ports, writing porting docs, adding MIDI class support etc...
|
||||
- Thanks to @cr1901 for adding STM32F4 port.
|
||||
- Thanks to @PTS93 and @todbot for HID raw API
|
21
docs/assets/adafruit_logo.svg
Normal file
21
docs/assets/adafruit_logo.svg
Normal file
@ -0,0 +1,21 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" style="enable-background:new 0 0 1382 768;" xml:space="preserve" width="144" height="80" viewBox="14 12.81 1350 455.81">
|
||||
<style type="text/css">
|
||||
.st0{fill:#0;}
|
||||
</style>
|
||||
<rect x="0" y="0" width="1382" height="768" fill="#fff"/>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M402.26,321.44c6.2-6.18,13.5-8.71,27.53-8.71h56.48c15.72,0,25,2.79,30.63,8.71 c7.04,6.99,9.28,15.16,9.28,41.28v104.52h-43v-17.68c-18.55,15.16-25.28,17.96-39.05,17.96h-21.09 c-13.76,0-21.07-1.68-27.24-7.83c-5.35-5.37-8.97-14.36-8.97-34.57c0-19.11,2.79-30.92,9.56-37.67c7-7.02,15.99-10.4,43.79-10.4 c14.91,0,30.36,1.71,43.01,4.5v-13.77c0-15.17-0.85-18.26-2.82-20.51c-1.98-1.71-4.78-2.28-11.24-2.28h-21.62 c-5.91,0-9.01,0.57-10.7,2.28c-2.24,2.25-2.53,5.34-3.09,14.61h-40.71C393.27,336.06,395.8,327.58,402.26,321.44z M483.18,428.75 v-25.84h-28.36c-16.32,0-20.25,1.12-23.06,3.91c-2.79,2.84-3.36,6.2-3.36,13.23c0,7.88,0.57,12.08,2.81,14.34 c2.25,2.22,5.33,2.5,10.95,2.5h12.07C463.24,436.88,469.13,436.06,483.18,428.75z"/>
|
||||
<path class="st0" d="M642.16,467.24V447.3c-19.39,16.87-26.14,20.23-38.79,20.23h-16.28c-16.32,0-25.01-2.8-31.74-9.54 c-9.26-9.26-12.93-22.78-12.93-68.01c0-45.52,4.47-58.42,14.03-67.99c6.76-6.72,15.73-9.53,31.18-9.53h16.86 c12.92,0,19.95,2.81,37.67,17.69V259.9h43v207.34H642.16z M642.16,426.5v-73.6c-9.01-4.21-15.47-6.17-22.49-6.17h-15.43 c-7.88,0-11.57,1.11-14.08,3.64c-3.93,3.64-5.03,10.13-5.03,39.6c0,29.5,1.11,35.7,5.03,39.65c2.51,2.5,6.2,3.37,14.08,3.37 h14.02C625.57,432.99,632.58,431,642.16,426.5z"/>
|
||||
<path class="st0" d="M716.83,321.44c6.17-6.18,13.49-8.71,27.52-8.71h56.49c15.73,0,24.99,2.79,30.64,8.71 c7.01,6.99,9.26,15.16,9.26,41.28v104.52h-43v-17.68c-18.54,15.16-25.29,17.96-39.05,17.96h-21.05 c-13.78,0-21.11-1.68-27.26-7.83c-5.35-5.37-9.01-14.36-9.01-34.57c0-19.11,2.81-30.92,9.56-37.67 c7.03-7.02,16.02-10.4,43.83-10.4c14.91,0,30.34,1.71,42.99,4.5v-13.77c0-15.17-0.84-18.26-2.81-20.51 c-1.94-1.71-4.79-2.28-11.24-2.28h-21.63c-5.91,0-8.99,0.57-10.67,2.28c-2.27,2.25-2.53,5.34-3.12,14.61h-40.72 C707.84,336.06,710.38,327.58,716.83,321.44z M797.74,428.75v-25.84h-28.35c-16.31,0-20.26,1.12-23.05,3.91 c-2.81,2.84-3.38,6.2-3.38,13.23c0,7.88,0.57,12.08,2.82,14.34c2.24,2.22,5.32,2.5,10.95,2.5h12.06 C777.8,436.88,783.7,436.06,797.74,428.75z"/>
|
||||
<path class="st0" d="M856.96,467.24V305.41c0-19.39,2.55-29.52,9.01-35.96c6.47-6.46,13.77-9.55,30.34-9.55h35.41v32.57h-20.82 c-5.6,0-7.28,0.57-8.96,1.96c-1.42,1.71-1.96,4.75-1.96,12.38v6.19h31.75v33.44h-31.48v120.79H856.96z"/>
|
||||
<path class="st0" d="M947.94,467.24V312.72h42.96v23.59c16.04-16.59,24.17-23.87,36.53-23.87H1044v42.42h-19.94 c-11.79,0-20.78,1.11-33.16,6.17v106.2H947.94z"/>
|
||||
<path class="st0" d="M1199.3,312.72v154.52h-43.27v-20.48c-19.66,17.69-26.13,20.77-40.18,20.77h-18.82 c-13.49,0-21.92-2.8-27.79-8.71c-6.2-6.46-9-14.59-9-37.1v-109h43.27v104.24c0,6.44,0.83,10.11,3.36,12.66 c2.53,2.5,5.06,3.37,12.64,3.37h12.39c7.28,0,13.77-1.71,24.13-6.2V312.72H1199.3z"/>
|
||||
<path class="st0" d="M1257.74,291.34h-42.42V259.9h42.42V291.34z M1257.74,467.24h-42.42V312.72h42.42V467.24z"/>
|
||||
<path class="st0" d="M1349,433.26h-18.53c-7.06,0-9.86-0.59-11.24-1.7c-1.42-1.69-1.98-3.93-1.98-10.68v-74.44H1349v-33.72 h-31.75v-21.38h-43.27v21.38v33.72v85.97c0,15.73,1.96,22.76,7.03,27.81c5.34,5.35,13.19,8.4,27.82,8.4 c11.51,0,23.04-1.68,29.78-3.36l10.39-2.7V433.26z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path class="st0" d="M469.56,213.53c-1.48-9.33-6.54-12.01-18.77-15.91c-9.28-2.98-71.47-22.79-71.47-22.79 s-43.35-16.38-75.48,6.78c-4.32,3.13-8.81,6.68-13.31,10.47c3.78-4.5,7.34-8.99,10.45-13.31c23.09-32.18,6.65-75.5,6.65-75.5 s-19.91-62.13-22.92-71.44c-3.93-12.2-6.6-17.27-15.94-18.72c-9.36-1.48-13.45,2.5-20.94,12.92c-5.71,7.91-43.77,60.94-43.77,60.94 s-28.94,36.16-16.87,73.88c1.64,5.06,3.63,10.43,5.86,15.89c-3.13-5-6.3-9.76-9.46-14.05c-23.47-31.89-69.73-29.66-69.73-29.66 s-65.26-0.26-75.02-0.27c-12.83-0.05-18.46,0.95-22.76,9.37c-4.29,8.42-1.75,13.57,5.83,23.9c5.76,7.88,44.44,60.45,44.44,60.45 s25.44,38.72,65.03,38.88c5.32,0.03,11.02-0.22,16.88-0.64c-5.69,1.42-11.19,2.98-16.24,4.64c-37.59,12.46-49.74,57.17-49.74,57.17 s-20.42,61.99-23.46,71.27c-3.98,12.18-4.79,17.84,1.9,24.51c6.69,6.7,12.36,5.87,24.53,1.85c9.27-3.03,71.24-23.58,71.24-23.58 s44.66-12.24,57.04-49.85c1.68-5.06,3.2-10.55,4.63-16.22c-0.42,5.84-0.64,11.53-0.6,16.85c0.21,39.6,38.98,64.98,38.98,64.98 s52.64,38.55,60.52,44.31c10.37,7.55,15.5,10.08,23.93,5.78c8.41-4.3,9.39-9.93,9.33-22.77c-0.04-9.75-0.43-75.01-0.43-75.01 s2.18-46.27-29.76-69.68c-4.3-3.15-9.05-6.31-14.03-9.41c5.44,2.19,10.79,4.18,15.87,5.77c37.72,12.03,73.85-16.98,73.85-16.98 s52.94-38.15,60.85-43.87C467.06,226.99,471.04,222.86,469.56,213.53z M244.76,165.48c7.13,1.11,10.66,16.26,7.87,33.82 c-2.75,17.56-10.75,30.88-17.88,29.76c-7.11-1.13-10.65-16.26-7.89-33.82C229.63,177.69,237.64,164.36,244.76,165.48z M153.6,212.02c3.25-6.43,18.75-5.09,34.57,2.96c15.85,8.05,26.05,19.8,22.78,26.22c-3.27,6.41-18.75,5.1-34.59-2.95 C160.52,230.2,150.33,218.45,153.6,212.02z M201.66,299.59c-12.56,12.58-26.87,18.63-31.96,13.54 c-5.11-5.09,0.94-19.41,13.49-31.99c12.55-12.59,26.86-18.65,31.97-13.56C220.27,272.68,214.23,287.01,201.66,299.59z M270.82,329.06c-6.43,3.27-18.19-6.89-26.26-22.71c-8.08-15.84-9.43-31.34-3-34.61c6.41-3.27,18.15,6.9,26.24,22.73 C275.88,310.29,277.25,325.78,270.82,329.06z M287.49,255.75c-17.55,2.81-32.7-0.71-33.83-7.82c-1.13-7.12,12.18-15.16,29.74-17.95 c17.54-2.79,32.69,0.71,33.82,7.82C318.35,244.91,305.05,252.96,287.49,255.75z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
18
docs/assets/logo.svg
Normal file
18
docs/assets/logo.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="280" height="140" version="1.1" viewBox="0 0 74.083 37.042" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(-60.931 -79.245)">
|
||||
<g transform="matrix(1.0442 0 0 1.1531 -27.105 33.588)" fill="#fff">
|
||||
<path d="m86.972 39.594c-1.4683 3.2e-5 -2.6588 1.181-2.66 2.6384v26.844c3.3e-5 1.4583 1.1909 2.6404 2.66 2.6404h65.63c1.469-3.2e-5 2.66-1.1822 2.66-2.6404v-26.844c-1e-3 -1.4575-1.1917-2.6384-2.66-2.6384z" color="#000000" fill="#fff" style="-inkscape-stroke:none"/>
|
||||
</g>
|
||||
<g transform="matrix(.35278 0 0 -.35278 -160.36 421.93)" fill="#231f20">
|
||||
<path transform="translate(672.09 955.48)" d="m0 0h-21.484v-12.601h-5.349v-6.436h5.349v-25.383c0-11.331 7.252-13.87 17.223-13.87 4.352 0 8.613 0.272 12.873 0.907v6.073c-0.816-0.09-2.266-0.362-3.535-0.362-3.807 0-5.077 0.816-5.077 4.896v27.739h8.612v6.436h-8.612z"/>
|
||||
<path transform="translate(693.61 925.33)" d="m0 0h-0.049c-1.518 0-2.165-0.896-2.165-2.24v-0.05h4.504v0.05c0 1.344-0.771 2.24-2.29 2.24"/>
|
||||
<path transform="translate(700.92 925.5)" d="m0 0h-0.124c-1.443 0-2.265-0.995-2.265-2.389v-0.074h4.654v0.074c0 1.394-0.822 2.389-2.265 2.389"/>
|
||||
<path transform="translate(750.09 943.78)" d="m0 0c-6.165 0-11.876-2.267-14.505-5.893v4.986h-20.578v-45.326h21.484v36.533c1.27 0.272 2.449 0.453 3.717 0.453 4.715 0 5.44-2.538 5.44-6.436v-30.55h21.484v30.278c0 11.694-7.523 15.955-17.042 15.955"/>
|
||||
<path transform="translate(811.83 942.88)" d="m0 0-10.516-23.57-11.784 23.57h-23.388l24.204-48.046-6.799-15.411h8.249l28.193 63.457z"/>
|
||||
<path transform="translate(706 920)" d="m0 0h-17.421v2.637c0 2.938 1.194 5.675 4.43 5.675h0.124c2.24 0 3.335-1.269 3.932-2.514 0.647 1.469 1.667 2.738 3.883 2.738h0.224c3.086 0 4.828-2.39 4.828-5.774zm-0.598-9.412h-3.16c0.622 1.07 0.971 1.917 0.971 2.737 0 0.871-0.424 1.618-1.493 1.618h-0.05c-0.797 0-1.394-0.249-3.037-1.692-2.339-2.065-3.459-2.912-5.574-2.912h-0.05c-2.787 0-4.555 1.816-4.555 4.231 0 1.219 0.175 1.941 0.548 2.687h3.161c-0.548-0.945-0.797-1.518-0.797-2.314 0-0.845 0.548-1.568 1.493-1.568h0.05c0.821 0 1.12 0.25 2.788 1.692 2.762 2.39 3.832 2.912 5.824 2.912h0.048c2.739 0 4.555-1.917 4.555-4.305 0-1.195-0.298-2.215-0.722-3.086m-4.479-10.93h-12.344v3.011h12.643c1.567 0 2.189 0.548 2.189 1.319 0 0.772-0.622 1.32-2.189 1.32h-12.643v3.01h12.344c3.658 0 5.301-1.841 5.301-4.33 0-2.488-1.643-4.33-5.301-4.33m-9.641 53.817h12.114v-10.601h-12.114zm14.114 2h-16.114v-12.601h-2.685v-45.326h21.484v45.326h-2.685z"/>
|
||||
<path d="m692.79 947.02h2.827v2.319h-2.827z"/>
|
||||
<path d="m699.06 947.02h2.826v2.319h-2.826z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
1
docs/assets/stack.svg
Normal file
1
docs/assets/stack.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 84 KiB |
157
docs/boards.md
157
docs/boards.md
@ -1,157 +0,0 @@
|
||||
# Boards
|
||||
|
||||
The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. It is responsible for getting the MCU started and the USB peripheral clocked with minimal of on-board devices
|
||||
- One LED : for status
|
||||
- One Button : to get input from user
|
||||
- One UART : optional for device, but required for host examples
|
||||
|
||||
## Supported Boards
|
||||
|
||||
This code base already had supported for a handful of following boards (sorted alphabetically)
|
||||
|
||||
### Espressif ESP32-S2
|
||||
|
||||
- [ESP32-S2-Kaluga-1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html)
|
||||
- [ESP32-S2-Saola-1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html)
|
||||
|
||||
### Dialog DA146xx
|
||||
|
||||
- [DA14695 Development Kit – USB](https://www.dialog-semiconductor.com/products/da14695-development-kit-usb)
|
||||
- [DA1469x Development Kit – Pro](https://www.dialog-semiconductor.com/products/da14695-development-kit-pro)
|
||||
|
||||
### MicroChip SAM
|
||||
|
||||
- [Adafruit Circuit Playground Express](https://www.adafruit.com/product/3333)
|
||||
- [Adafruit Feather M0 Express](https://www.adafruit.com/product/3403)
|
||||
- [Adafruit Feather M4 Express](https://www.adafruit.com/product/3857)
|
||||
- [Adafruit ItsyBitsy M0 Express](https://www.adafruit.com/product/3727)
|
||||
- [Adafruit ItsyBitsy M4 Express](https://www.adafruit.com/product/3800)
|
||||
- [Adafruit Metro M0 Express](https://www.adafruit.com/product/3505)
|
||||
- [Adafruit Metro M4 Express](https://www.adafruit.com/product/3382)
|
||||
- [D5035-01](https://github.com/RudolphRiedel/USB_CAN-FD)
|
||||
- [Great Scott Gadgets LUNA](https://greatscottgadgets.com/luna/)
|
||||
- [Microchip SAMD11 Xplained Pro](https://www.microchip.com/developmenttools/ProductDetails/atsamd11-xpro)
|
||||
- [Microchip SAMD21 Xplained Pro](https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO)
|
||||
- [Microchip SAMG55 Xplained Pro](https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/ATSAMG55-XPRO)
|
||||
- [Seeeduino Xiao](https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html)
|
||||
|
||||
### Nordic nRF5x
|
||||
|
||||
- [Adafruit Circuit Playground Bluefruit](https://www.adafruit.com/product/4333)
|
||||
- [Adafruit CLUE](https://www.adafruit.com/product/4500)
|
||||
- [Adafruit Feather nRF52840 Express](https://www.adafruit.com/product/4062)
|
||||
- [Adafruit Feather nRF52840 Sense](https://www.adafruit.com/product/4516)
|
||||
- [Adafruit ItsyBitsy nRF52840 Express](https://www.adafruit.com/product/4481)
|
||||
- [Arduino Nano 33 BLE](https://store.arduino.cc/usa/nano-33-ble)
|
||||
- [Arduino Nano 33 BLE Sense](https://store.arduino.cc/usa/nano-33-ble-sense)
|
||||
- [Maker Diary nRF52840 MDK Dongle](https://wiki.makerdiary.com/nrf52840-mdk-usb-dongle)
|
||||
- [Nordic nRF52840 Development Kit (aka pca10056)](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK)
|
||||
- [Nordic nRF52840 Dongle (aka pca10059)](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle)
|
||||
- [Nordic nRF52833 Development Kit (aka pca10100)](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52833-DK)
|
||||
- [Raytac MDBT50Q-RX Dongle](https://www.raytac.com/product/ins.php?index_id=89)
|
||||
|
||||
### Nuvoton
|
||||
|
||||
- NuTiny SDK NUC120
|
||||
- [NuTiny NUC121S](https://direct.nuvoton.com/en/nutiny-nuc121s)
|
||||
- [NuTiny NUC125S](https://direct.nuvoton.com/en/nutiny-nuc125s)
|
||||
- [NuTiny NUC126V](https://direct.nuvoton.com/en/nutiny-nuc126v)
|
||||
- [NuTiny SDK NUC505Y](https://direct.nuvoton.com/en/nutiny-nuc505y)
|
||||
|
||||
### NXP iMX RT
|
||||
|
||||
- [MIMX RT1010 Evaluation Kit](https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1010-evaluation-kit:MIMXRT1010-EVK)
|
||||
- [MIMX RT1015 Evaluation Kit](https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1015-evaluation-kit:MIMXRT1015-EVK)
|
||||
- [MIMX RT1020 Evaluation Kit](https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1020-evaluation-kit:MIMXRT1020-EVK)
|
||||
- [MIMX RT1050 Evaluation Kit](https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1050-evaluation-kit:MIMXRT1050-EVK)
|
||||
- [MIMX RT1060 Evaluation Kit](https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/mimxrt1060-evk-i.mx-rt1060-evaluation-kit:MIMXRT1060-EVK)
|
||||
- [MIMX RT1064 Evaluation Kit](https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/mimxrt1064-evk-i.mx-rt1064-evaluation-kit:MIMXRT1064-EVK)
|
||||
- [Teensy 4.0 Development Board](https://www.pjrc.com/store/teensy40.html)
|
||||
|
||||
### NXP LPC
|
||||
|
||||
- [ARM mbed LPC1768](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1700-cortex-m3/arm-mbed-lpc1768-board:OM11043)
|
||||
- [Embedded Artists LPC4088 Quick Start board](https://www.embeddedartists.com/products/lpc4088-quickstart-board)
|
||||
- [Embedded Artists LPC4357 Developer Kit](http://www.embeddedartists.com/products/kits/lpc4357_kit.php)
|
||||
- [Keil MCB1800 Evaluation Board](http://www.keil.com/mcb1800)
|
||||
- [LPCXpresso 11u37](https://www.nxp.com/design/microcontrollers-developer-resources/lpcxpresso-boards/lpcxpresso-board-for-lpc11u37h:OM13074)
|
||||
- [LPCXpresso 11u68](https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc11u68:OM13058)
|
||||
- [LPCXpresso 1347](https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc1347:OM13045)
|
||||
- [LPCXpresso 1769](https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc1769:OM13000)
|
||||
- [LPCXpresso 51U68](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpcxpresso51u68-for-the-lpc51u68-mcus:OM40005)
|
||||
- [LPCXpresso 54114](https://www.nxp.com/design/microcontrollers-developer-resources/lpcxpresso-boards/lpcxpresso54114-board:OM13089)
|
||||
- [LPCXpresso 55s69 EVK](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc5500-cortex-m33/lpcxpresso55s69-development-board:LPC55S69-EVK)
|
||||
- [NGX LPC4330-Xplorer](https://www.nxp.com/design/designs/lpc4330-xplorer-board:OM13027)
|
||||
|
||||
### Sony
|
||||
|
||||
- [Sony Spresense CXD5602](https://developer.sony.com/develop/spresense)
|
||||
|
||||
### ST STM32
|
||||
|
||||
- [Adafruit Feather STM32F405](https://www.adafruit.com/product/4382)
|
||||
- [Micro Python PyBoard v1.1](https://store.micropython.org/product/PYBv1.1)
|
||||
- [STLink-V3 Mini](https://www.st.com/en/development-tools/stlink-v3mini.html)
|
||||
- [STM32 L035c8 Discovery](https://www.st.com/en/evaluation-tools/32l0538discovery.html)
|
||||
- [STM32 L4R5zi Nucleo](https://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html)
|
||||
- [STM32 F070rb Nucleo](https://www.st.com/en/evaluation-tools/nucleo-f070rb.html)
|
||||
- [STM32 F072rb Discovery](https://www.st.com/en/evaluation-tools/32f072bdiscovery.html)
|
||||
- STM32 F103c Blue Pill
|
||||
- [STM32 F207zg Nucleo](https://www.st.com/en/evaluation-tools/nucleo-f207zg.html)
|
||||
- [STM32 F303vc Discovery](https://www.st.com/en/evaluation-tools/stm32f3discovery.html)
|
||||
- STM32 F401cc Black Pill
|
||||
- [STM32 F407vg Discovery](https://www.st.com/en/evaluation-tools/stm32f4discovery.html)
|
||||
- STM32 F411ce Black Pill
|
||||
- [STM32 F411ve Discovery](https://www.st.com/en/evaluation-tools/32f411ediscovery.html)
|
||||
- [STM32 F412zg Discovery](https://www.st.com/en/evaluation-tools/32f412gdiscovery.html)
|
||||
- [STM32 F723e Discovery](https://www.st.com/en/evaluation-tools/32f723ediscovery.html)
|
||||
- [STM32 F746zg Nucleo](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html)
|
||||
- [STM32 F746g Discovery](https://www.st.com/en/evaluation-tools/32f746gdiscovery.html)
|
||||
- [STM32 F767zi Nucleo](https://www.st.com/en/evaluation-tools/nucleo-f767zi.html)
|
||||
- [STM32 F769i Discovery](https://www.st.com/en/evaluation-tools/32f769idiscovery.html)
|
||||
- [STM32 H743zi Nucleo](https://www.st.com/en/evaluation-tools/nucleo-h743zi.html)
|
||||
- [STM32 H743i Evaluation](https://www.st.com/en/evaluation-tools/stm32h743i-eval.html)
|
||||
- [STM32 H745i Discovery](https://www.st.com/en/evaluation-tools/stm32h745i-disco.html)
|
||||
|
||||
### TI
|
||||
|
||||
- [MSP430F5529 USB LaunchPad Evaluation Kit](http://www.ti.com/tool/MSP-EXP430F5529LP)
|
||||
|
||||
### Tomu
|
||||
|
||||
- [Fomu](https://www.crowdsupply.com/sutajio-kosagi/fomu)
|
||||
|
||||
## Add your own board
|
||||
|
||||
If you don't possess any of supported board above. Don't worry you can easily implemented your own one by following this guide as long as the mcu is supported.
|
||||
|
||||
- Create new makefile for your board at `hw/bsp/<board name>/board.mk` and linker file as well if needed.
|
||||
- Create new source file for your board at `hw/bsp/<board name>/<board name>.c` and implement following APIs
|
||||
|
||||
### Board APIs
|
||||
|
||||
#### board_init()
|
||||
|
||||
Is responsible for starting the MCU, setting up the USB clock and USB pins. It is also responsible for initializing LED and button pins.
|
||||
One useful clock debugging technique is to set up a PWM output at a known value such as 500hz based on the USB clock so that you can verify it is correct with a logic probe or oscilloscope.
|
||||
Setup your USB in a crystal-less mode when available. That makes the code easier to port across boards.
|
||||
|
||||
#### board_led_write()
|
||||
|
||||
Set the pin corresponding to the led to output a value that lights the LED when `state` is true.
|
||||
|
||||
#### board_button_read()
|
||||
|
||||
Return current state of button, a `1` means active (pressed), a `0` means inactive.
|
||||
|
||||
#### board_millis()
|
||||
|
||||
The function returns the elapsed number of milliseconds since startup. On ARM this is commonly done with SysTick or Timer. This provide examples a way to measure time to blink LED or delay properly. It is only required when run examples without RTOS `CFG_TUSB_OS == OPT_OS_NONE`.
|
||||
|
||||
#### board_uart_read()
|
||||
|
||||
Get characters from UART peripheral.
|
||||
|
||||
#### board_uart_write()
|
||||
|
||||
Send characters to UART peripheral.
|
@ -1,36 +0,0 @@
|
||||
# Concurrency
|
||||
|
||||
The TinyUSB library is designed to operate on single-core MCUs with multi-threaded applications in mind. Interaction with interrupts is especially important to pay attention to.
|
||||
It is compatible with optionally using a RTOS.
|
||||
|
||||
## General
|
||||
|
||||
When writing code, keep in mind that the OS (if using a RTOS) may swap out your code at any time. Also, your code can be preempted by an interrupt at any time.
|
||||
|
||||
## Application Code
|
||||
|
||||
The USB core does not execute application callbacks while in an interrupt context. Calls to application code are from within the USB core task context. Note that the application core will call class drivers from within their own task.
|
||||
|
||||
## Class Drivers
|
||||
|
||||
Class driver code should never be called from an interrupt context by the USB core, though the application is allowed to call class driver functions from interrupts. USB core functions may be called simultaneously by multiple tasks. Use care that proper locking is used to guard the USBD core functions from this case.
|
||||
|
||||
Class drivers are allowed to call `usbd_*` functions, but not `dcd_*` functions.
|
||||
|
||||
## USB Core
|
||||
|
||||
All functions that may be called from an (USB core) interrupt context have a `bool in_isr` parameter to remind the implementer that special care must be taken.
|
||||
|
||||
Interrupt handlers must not directly call class driver code, they must pass a message to the USB core's task.
|
||||
|
||||
`usbd_*` functions may be called from interrupts without any notice. They may also be called simultaneously by multiple tasks.
|
||||
|
||||
## Device Drivers
|
||||
|
||||
Much of the processing of the USB stack is done in an interrupt context, and care must be taken in order to ensure variables are handled in the appropriate ways by the compiler and optimizer.
|
||||
|
||||
In particular:
|
||||
|
||||
- Ensure that all memory-mapped registers (including packet memory) are marked as volatile. GCC's optimizer will even combine memory access (like two 16-bit to be a 32-bit) if you don't mark the pointers as volatile. On some architectures, this can use macros like `_I`, `_O`, or `_IO'.
|
||||
- All defined global variables are marked as `static`.
|
||||
|
58
docs/conf.py
Executable file
58
docs/conf.py
Executable file
@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
#
|
||||
# This file only contains a selection of the most common options. For a full
|
||||
# list see the documentation:
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
# -- Path setup --------------------------------------------------------------
|
||||
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'TinyUSB'
|
||||
copyright = '2024, Ha Thach'
|
||||
author = 'Ha Thach'
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.intersphinx',
|
||||
'sphinx.ext.todo',
|
||||
'sphinx_autodoc_typehints',
|
||||
]
|
||||
|
||||
templates_path = ['_templates']
|
||||
|
||||
exclude_patterns = ['_build']
|
||||
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
|
||||
html_theme = 'furo'
|
||||
html_title = 'TinyUSB'
|
||||
html_logo = 'assets/logo.svg'
|
||||
html_favicon = 'assets/logo.svg'
|
||||
html_theme_options = {
|
||||
'sidebar_hide_name': True,
|
||||
}
|
||||
|
||||
todo_include_todos = True
|
||||
|
||||
# pre-process path in README.rst
|
||||
def preprocess_readme():
|
||||
"""Modify figure paths in README.rst for Sphinx builds."""
|
||||
src = Path(__file__).parent.parent / "README.rst"
|
||||
tgt = Path(__file__).parent.parent / "README_processed.rst"
|
||||
if src.exists():
|
||||
content = src.read_text()
|
||||
content = re.sub(r"docs/", r"", content)
|
||||
content = re.sub(r".rst", r".html", content)
|
||||
tgt.write_text(content)
|
||||
|
||||
preprocess_readme()
|
1
docs/contributing/code_of_conduct.rst
Normal file
1
docs/contributing/code_of_conduct.rst
Normal file
@ -0,0 +1 @@
|
||||
.. include:: ../../CODE_OF_CONDUCT.rst
|
22
docs/contributing/index.rst
Normal file
22
docs/contributing/index.rst
Normal file
@ -0,0 +1,22 @@
|
||||
************
|
||||
Contributing
|
||||
************
|
||||
|
||||
Contributing can be highly rewarding, but it can also be frustrating at times.
|
||||
It takes time to review patches, and as this is an open source project, that
|
||||
sometimes can take a while. The reviewing process depends on the availability
|
||||
of the maintainers, who may not be always available. Please try to be
|
||||
understanding through the process.
|
||||
|
||||
There a few guidelines you need to keep in mind when contributing. Please have
|
||||
a look at them as that will make the contribution process easier for all
|
||||
parties.
|
||||
|
||||
Index
|
||||
=====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
code_of_conduct
|
||||
porting
|
243
docs/contributing/porting.rst
Normal file
243
docs/contributing/porting.rst
Normal file
@ -0,0 +1,243 @@
|
||||
|
||||
*******
|
||||
Porting
|
||||
*******
|
||||
|
||||
TinyUSB is designed to be a universal USB protocol stack for microcontrollers. It
|
||||
handles most of the high level USB protocol and relies on the microcontroller's USB peripheral for
|
||||
data transactions on different endpoints. Porting is the process of adding low-level support for
|
||||
the rest of the common stack. Once the low-level is implemented, it is very easy to add USB support
|
||||
for the microcontroller to other projects, especially those already using TinyUSB such as CircuitPython.
|
||||
|
||||
Below are instructions on how to get the cdc_msc device example running on a new microcontroller. Doing so includes adding the common code necessary for other uses while minimizing other extra code. Whenever you see a phrase or word in ``<>`` it should be replaced.
|
||||
|
||||
Register defs
|
||||
-------------
|
||||
|
||||
The first step to adding support is including the register definitions and startup code for the
|
||||
microcontroller in TinyUSB. We write the TinyUSB implementation against these structs instead of higher level functions to keep the code small and to prevent function name collisions in linking of larger projects. For ARM microcontrollers this is the CMSIS definitions. They should be
|
||||
placed in the ``hw/mcu/<vendor>/<chip_family>`` directory.
|
||||
|
||||
Once this is done, create a directory in ``hw/bsp/<your board name>`` for the specific board you are using to test the code (duplicating an existing board's directory is the best way to get started). The board should be a readily available development board so that others can also test.
|
||||
|
||||
Build
|
||||
-----
|
||||
|
||||
Now that those directories are in place, we can start our iteration process to get the example building successfully. To build, run from the root of TinyUSB:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
make -C examples/device/cdc_msc BOARD=<board>
|
||||
|
||||
Unless you've read ahead, this will fail miserably. Now, lets get it to fail less by updating the files in the board directory. The code in the board's directory is responsible for setting up the microcontroller's clocks and pins so that USB works. TinyUSB itself only operates on the USB peripheral. The board directory also includes information what files are needed to build the example.
|
||||
|
||||
One of the first things to change is the ``-DCFG_TUSB_MCU`` C flag in the ``board.mk`` file. This is used to tell TinyUSB what platform is being built. So, add an entry to ``src/tusb_option.h`` and update the ``CFLAGS`` to match.
|
||||
|
||||
Update ``board.mk``'s VENDOR and CHIP_FAMILY values when creating the directory for the struct files. Duplicate one of the other sources from ``src/portable`` into ``src/portable/<vendor>/<chip_family>`` and delete all of the implementation internals. We'll cover what everything there does later. For now, get it compiling.
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
|
||||
At this point you should get an error due to an implementation issue and hopefully the build is setup for the new MCU. You will still need to modify the ``board.mk`` to include specific ``CFLAGS``, the linker script, linker flags, source files, include directories. All file paths are relative to the top of the TinyUSB repo.
|
||||
|
||||
Board Support (BSP)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. Its responsible for getting the MCU started and the USB peripheral clocked. It also optionally provides LED definitions that are used to blink an LED to show that the code is running.
|
||||
|
||||
It is located in ``hw/bsp/<board name>/board_<board name>.c``.
|
||||
|
||||
``board_init()``
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
``board_init()`` is responsible for starting the MCU, setting up the USB clock and USB pins. It is also responsible for initializing LED pins.
|
||||
|
||||
One useful clock debugging technique is to set up a PWM output at a known value such as 500hz based on the USB clock so that you can verify it is correct with a logic probe or oscilloscope.
|
||||
|
||||
Setup your USB in a crystal-less mode when available. That makes the code easier to port across boards.
|
||||
|
||||
``board_led_write()``
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Feel free to skip this until you want to verify your demo code is running. To implement, set the pin corresponding to the led to output a value that lights the LED when ``state`` is true.
|
||||
|
||||
OS Abstraction Layer (OSAL)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The OS Abstraction Layer is responsible for providing basic data structures for TinyUSB that may allow for concurrency when used with an RTOS. Without an RTOS it simply handles concurrency issues between the main code and interrupts. The code is almost entirely agnostic of MCU and lives in ``src/osal``.
|
||||
|
||||
In RTOS configurations, ``tud_task()``/``tuh_task()`` blocks behind a synchronization structure when the event queue is empty, so that the scheduler may give the CPU to a different task. To take advantage of the library's capability to yield the CPU when there are no actionable USB device events, ensure that the ``CFG_TUSB_OS`` symbol is defined, e.g ``OPT_OS_FREERTOS`` enables the FreeRTOS scheduler to schedule other threads than that which calls ``tud_task()``/``tuh_task()``.
|
||||
|
||||
Device API
|
||||
^^^^^^^^^^
|
||||
|
||||
After the USB device is setup, the USB device code works by processing events on the main thread (by calling ``tud_task()``). These events are queued by the USB interrupt handler. So, there are three parts to the device low-level API: device setup, endpoint setup and interrupt processing.
|
||||
|
||||
All of the code for the low-level device API is in ``src/portable/<vendor>/<chip family>/dcd_<chip family>.c``.
|
||||
|
||||
Device Setup
|
||||
~~~~~~~~~~~~
|
||||
|
||||
``dcd_init()``
|
||||
""""""""""""""
|
||||
|
||||
Initializes the USB peripheral for device mode and enables it.
|
||||
This function should enable internal D+/D- pull-up for enumeration.
|
||||
|
||||
``dcd_int_enable()`` / ``dcd_int_disable()``
|
||||
""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Enables or disables the USB device interrupt(s). May be used to prevent concurrency issues when mutating data structures shared between main code and the interrupt handler.
|
||||
|
||||
``dcd_int_handler()``
|
||||
"""""""""""""""""""""
|
||||
|
||||
Processes all the hardware generated events e.g Bus reset, new data packet from host etc ... It will be called by application in the MCU USB interrupt handler.
|
||||
|
||||
``dcd_set_address()``
|
||||
"""""""""""""""""""""
|
||||
|
||||
Called when the device is given a new bus address.
|
||||
|
||||
If your peripheral automatically changes address during enumeration (like the nrf52) you may leave this empty and also no queue an event for the corresponding SETUP packet.
|
||||
|
||||
``dcd_remote_wakeup()``
|
||||
"""""""""""""""""""""""
|
||||
|
||||
Called to remote wake up host when suspended (e.g hid keyboard)
|
||||
|
||||
``dcd_connect()`` / ``dcd_disconnect()``
|
||||
""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Connect or disconnect the data-line pull-up resistor. Define only if MCU has an internal pull-up. (BSP may define for MCU without internal pull-up.)
|
||||
|
||||
Special events
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
You must let TinyUSB know when certain events occur so that it can continue its work. There are a few methods you can call to queue events for TinyUSB to process.
|
||||
|
||||
``dcd_event_bus_signal()``
|
||||
""""""""""""""""""""""""""
|
||||
|
||||
There are a number of events that your peripheral may communicate about the state of the bus. Here is an overview of what they are. Events in **BOLD** must be provided for TinyUSB to work.
|
||||
|
||||
|
||||
* **DCD_EVENT_RESET** - Triggered when the host resets the bus causing the peripheral to reset. Do any other internal reset you need from the interrupt handler such as resetting the control endpoint.
|
||||
* DCD_EVENT_SOF - Signals the start of a new USB frame.
|
||||
|
||||
Calls to this look like:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
||||
|
||||
|
||||
The first ``0`` is the USB peripheral number. Statically saying ``0`` is common for single USB device MCUs.
|
||||
|
||||
The ``true`` indicates the call is from an interrupt handler and will always be the case when porting in this way.
|
||||
|
||||
``dcd_setup_received()``
|
||||
""""""""""""""""""""""""
|
||||
|
||||
SETUP packets are a special type of transaction that can occur at any time on the control endpoint, numbered ``0``. Since they are unique, most peripherals have special handling for them. Their data is always 8 bytes in length as well.
|
||||
|
||||
Calls to this look like:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
dcd_event_setup_received(0, setup, true);
|
||||
|
||||
|
||||
As before with ``dcd_event_bus_signal()`` the first argument is the USB peripheral number and the third is true to signal its being called from an interrupt handler. The middle argument is byte array of length 8 with the contents of the SETUP packet. It can be stack allocated because it is copied into the queue.
|
||||
|
||||
Endpoints
|
||||
~~~~~~~~~
|
||||
|
||||
Endpoints are the core of the USB data transfer process. They come in a few forms such as control, isochronous, bulk, and interrupt. We won't cover the details here except with some caveats in open below. In general, data is transferred by setting up a buffer of a given length to be transferred on a given endpoint address and then waiting for an interrupt to signal that the transfer is finished. Further details below.
|
||||
|
||||
Endpoints within USB have an address which encodes both the number and direction of an endpoint. TinyUSB provides ``tu_edpt_number()`` and ``tu_edpt_dir()`` to unpack this data from the address. Here is a snippet that does it.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
uint8_t epnum = tu_edpt_number(ep_addr);
|
||||
uint8_t dir = tu_edpt_dir(ep_addr);
|
||||
|
||||
|
||||
``dcd_edpt_open()``
|
||||
"""""""""""""""""""
|
||||
|
||||
Opening an endpoint is done for all non-control endpoints once the host picks a configuration that the device should use. At this point, the endpoint should be enabled in the peripheral and configured to match the endpoint descriptor. Pay special attention to the direction of the endpoint you can get from the helper methods above. It will likely change what registers you are setting.
|
||||
|
||||
Also make sure to enable endpoint specific interrupts.
|
||||
|
||||
``dcd_edpt_close()``
|
||||
""""""""""""""""""""
|
||||
|
||||
Close an endpoint. his function is used for implementing alternate settings.
|
||||
|
||||
After calling this, the device should not respond to any packets directed towards this endpoint. When called, this function must abort any transfers in progress through this endpoint, before returning.
|
||||
|
||||
Implementation is optional. Must be called from the USB task. Interrupts could be disabled or enabled during the call.
|
||||
|
||||
``dcd_edpt_xfer()``
|
||||
"""""""""""""""""""
|
||||
|
||||
``dcd_edpt_xfer()`` is responsible for configuring the peripheral to send or receive data from the host. "xfer" is short for "transfer". **This is one of the core methods you must implement for TinyUSB to work (one other is the interrupt handler).** Data from the host is the OUT direction and data to the host is IN. It is used for all endpoints including the control endpoint 0. Make sure to handle the zero-length packet STATUS packet on endpoint 0 correctly. It may be a special transaction to the peripheral.
|
||||
|
||||
Besides that, all other transactions are relatively straight-forward. The endpoint address provides the endpoint
|
||||
number and direction which usually determines where to write the buffer info. The buffer and its length are usually
|
||||
written to a specific location in memory and the peripheral is told the data is valid. (Maybe by writing a 1 to a
|
||||
register or setting a counter register to 0 for OUT or length for IN.)
|
||||
|
||||
The transmit buffer alignment is determined by ``CFG_TUSB_MEM_ALIGN``.
|
||||
|
||||
One potential pitfall is that the buffer may be longer than the maximum endpoint size of one USB
|
||||
packet. Some peripherals can handle transmitting multiple USB packets for a provided buffer (like the SAMD21).
|
||||
Others (like the nRF52) may need each USB packet queued individually. To make this work you'll need to track
|
||||
some state for yourself and queue up an intermediate USB packet from the interrupt handler.
|
||||
|
||||
Once the transaction is going, the interrupt handler will notify TinyUSB of transfer completion.
|
||||
During transmission, the IN data buffer is guaranteed to remain unchanged in memory until the ``dcd_xfer_complete()`` function is called.
|
||||
|
||||
The ``dcd_edpt_xfer()`` function must never add zero-length-packets (ZLP) on its own to a transfer. If a ZLP is required,
|
||||
then it must be explicitly sent by the stack calling ``dcd_edpt_xfer()``, by calling ``dcd_edpt_xfer()`` a second time with len=0.
|
||||
For control transfers, this is automatically done in ``usbd_control.c``.
|
||||
|
||||
At the moment, only a single buffer can be transmitted at once. There is no provision for double-buffering. new ``dcd_edpt_xfer()`` will not
|
||||
be called again on the same endpoint address until the driver calls ``dcd_xfer_complete()`` (except in cases of USB resets).
|
||||
|
||||
``dcd_xfer_complete()``
|
||||
"""""""""""""""""""""""
|
||||
|
||||
Once a transfer completes you must call ``dcd_xfer_complete()`` from the USB interrupt handler to let TinyUSB know that a transaction has completed. Here is a sample call:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
dcd_event_xfer_complete(0, ep_addr, xfer->actual_len, XFER_RESULT_SUCCESS, true);
|
||||
|
||||
|
||||
The arguments are:
|
||||
|
||||
|
||||
* the USB peripheral number
|
||||
* the endpoint address
|
||||
* the actual length of the transfer. (OUT transfers may be smaller than the buffer given in ``dcd_edpt_xfer()``)
|
||||
* the result of the transfer. Failure isn't handled yet.
|
||||
* ``true`` to note the call is from an interrupt handler.
|
||||
|
||||
``dcd_edpt_stall()`` / ``dcd_edpt_clear_stall()``
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Stalling is one way an endpoint can indicate failure such as when an unsupported command is transmitted. The pair of ``dcd_edpt_stall()``, ``dcd_edpt_clear_stall()`` help manage the stall state of all endpoints.
|
||||
|
||||
Woohoo!
|
||||
-------
|
||||
|
||||
At this point you should have everything working! 🙂 Of course, you may not write perfect code. Here are some tips and tricks for debugging.
|
||||
|
||||
Use `WireShark <https://www.wireshark.org/>`_ or `a Beagle <https://www.totalphase.com/protocols/usb/>`_ to sniff the USB traffic. When things aren't working its likely very early in the USB enumeration process. Figuring out where can help clue in where the issue is. For example:
|
||||
|
||||
|
||||
* If the host sends a SETUP packet and its not ACKed then your USB peripheral probably isn't started correctly.
|
||||
* If the peripheral is started correctly but it still didn't work, then verify your usb clock is correct. (You did output a PWM based on it right? 🙂)
|
||||
* If the SETUP packet is ACKed but nothing is sent back then you interrupt handler isn't queueing the setup packet correctly. (Also, if you are using your own code instead of an example ``tud_task()`` may not be called.) If that's OK, the ``dcd_xfer_complete()`` may not be setting up the next transaction correctly.
|
@ -1,133 +0,0 @@
|
||||
# Getting Started #
|
||||
|
||||
## Add TinyUSB to your project
|
||||
|
||||
It is relatively simple to incorporate tinyusb to your (existing) project
|
||||
|
||||
- Copy or `git submodule` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb*
|
||||
- Add all the .c in the `tinyusb/src` folder to your project
|
||||
- Add *your_project/tinyusb/src* to your include path. Also make sure your current include path also contains the configuration file tusb_config.h.
|
||||
- Make sure all required macros are all defined properly in tusb_config.h (configure file in demo application is sufficient, but you need to add a few more such as CFG_TUSB_MCU, CFG_TUSB_OS since they are passed by IDE/compiler to maintain a unique configure for all boards).
|
||||
- If you use the device stack, make sure you have created/modified usb descriptors for your own need. Ultimately you need to implement all **tud_descriptor_** callbacks for the stack to work.
|
||||
- Add tusb_init() call to your reset initialization code.
|
||||
- Call `tud_int_handler()` (device stack) and/or `tuh_int_handler()` in your USB IRQ Handler
|
||||
- Implement all enabled classes's callbacks.
|
||||
- If you don't use any RTOSes at all, you need to continuously and/or periodically call tud_task()/tuh_task() function. All of the callbacks and functionality are handled and invoke within the call of that task runner.
|
||||
|
||||
~~~{.c}
|
||||
int main(void)
|
||||
{
|
||||
your_init_code();
|
||||
tusb_init(); // initialize tinyusb stack
|
||||
|
||||
while(1) // the mainloop
|
||||
{
|
||||
your_application_code();
|
||||
|
||||
tud_task(); // device task
|
||||
tuh_task(); // host task
|
||||
}
|
||||
}
|
||||
~~~
|
||||
|
||||
## Examples
|
||||
|
||||
For your convenience, TinyUSB contains a handful of examples for both host and device with/without RTOS to quickly test the functionality as well as demonstrate how API() should be used. Most examples will work on most of [the supported Boards](boards.md). Firstly we need to `git clone` if not already
|
||||
|
||||
```
|
||||
$ git clone https://github.com/hathach/tinyusb tinyusb
|
||||
$ cd tinyusb
|
||||
```
|
||||
|
||||
TinyUSB examples includes external repos aka submodules to provide low-level MCU peripheral's driver as well as external libraries such as FreeRTOS to compile with. Therefore we will firstly fetch those mcu driver repo by running this command in the top folder repo
|
||||
|
||||
```
|
||||
$ git submodule update --init --recursive
|
||||
```
|
||||
|
||||
It will takes a bit of time due to the number of supported MCUs, luckily we only need to do this once. Or if you only want to test with a specific mcu, you could only fetch its driver submodule.
|
||||
|
||||
### Build
|
||||
|
||||
To build example, first change directory to an example folder.
|
||||
|
||||
```
|
||||
$ cd examples/device/cdc_msc
|
||||
```
|
||||
|
||||
Then compile with `make BOARD=[board_name] all`, for example
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express all
|
||||
```
|
||||
|
||||
#### Port Selection
|
||||
|
||||
If a board has several ports, one port is chosen by default in the individual board.mk file. Use option `PORT=x` To choose another port. For example to select the HS port of a STM32F746Disco board, use:
|
||||
|
||||
```
|
||||
$ make BOARD=stm32f746disco PORT=1 all
|
||||
```
|
||||
|
||||
#### Port Speed
|
||||
|
||||
A MCU can support multiple operational speed. By default, the example build system will use the fastest supported on the board. Use option `SPEED=full/high` e.g To force F723 operate at full instead of default high speed
|
||||
|
||||
```
|
||||
$ make BOARD=stm32f746disco SPEED=full all
|
||||
```
|
||||
|
||||
### Debug
|
||||
|
||||
To compile for debugging add `DEBUG=1`, for example
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express DEBUG=1 all
|
||||
```
|
||||
|
||||
#### Log
|
||||
|
||||
Should you have an issue running example and/or submitting an bug report. You could enable TinyUSB built-in debug logging with optional `LOG=`. LOG=1 will only print out error message, LOG=2 print more information with on-going events. LOG=3 or higher is not used yet.
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express LOG=2 all
|
||||
```
|
||||
|
||||
#### Logger
|
||||
|
||||
By default log message is printed via on-board UART which is slow and take lots of CPU time comparing to USB speed. If your board support on-board/external debugger, it would be more efficient to use it for logging. There are 2 protocols:
|
||||
|
||||
- `LOGGER=rtt`: use [Segger RTT protocol](https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/)
|
||||
- Cons: requires jlink as the debugger.
|
||||
- Pros: work with most if not all MCUs
|
||||
- Software viewer is JLink RTT Viewer/Client/Logger which is bundled with JLink driver package.
|
||||
- `LOGGER=swo`: Use dedicated SWO pin of ARM Cortex SWD debug header.
|
||||
- Cons: only work with ARM Cortex MCUs minus M0
|
||||
- Pros: should be compatible with more debugger that support SWO.
|
||||
- Software viewer should be provided along with your debugger driver.
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express LOG=2 LOGGER=rtt all
|
||||
$ make BOARD=feather_nrf52840_express LOG=2 LOGGER=swo all
|
||||
```
|
||||
|
||||
### Flash
|
||||
|
||||
`flash` target will use the default on-board debugger (jlink/cmsisdap/stlink/dfu) to flash the binary, please install those support software in advance. Some board use bootloader/DFU via serial which is required to pass to make command
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express flash
|
||||
$ make SERIAL=/dev/ttyACM0 BOARD=feather_nrf52840_express flash
|
||||
```
|
||||
|
||||
Since jlink can be used with most of the boards, there is also `flash-jlink` target for your convenience.
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express flash-jlink
|
||||
```
|
||||
|
||||
Some board use uf2 bootloader for drag & drop in to mass storage device, uf2 can be generated with `uf2` target
|
||||
|
||||
```
|
||||
$ make BOARD=feather_nrf52840_express all uf2
|
||||
```
|
19
docs/index.rst
Normal file
19
docs/index.rst
Normal file
@ -0,0 +1,19 @@
|
||||
:hide-toc:
|
||||
|
||||
.. include:: ../README_processed.rst
|
||||
|
||||
.. toctree::
|
||||
:caption: Index
|
||||
:hidden:
|
||||
|
||||
Info <info/index>
|
||||
Reference <reference/index>
|
||||
Contributing <contributing/index>
|
||||
|
||||
.. toctree::
|
||||
:caption: External Links
|
||||
:hidden:
|
||||
|
||||
Source Code <https://github.com/hathach/tinyusb>
|
||||
Issue Tracker <https://github.com/hathach/tinyusb/issues>
|
||||
Discussions <https://github.com/hathach/tinyusb/discussions>
|
1153
docs/info/changelog.rst
Normal file
1153
docs/info/changelog.rst
Normal file
File diff suppressed because it is too large
Load Diff
1
docs/info/contributors.rst
Normal file
1
docs/info/contributors.rst
Normal file
@ -0,0 +1 @@
|
||||
.. include:: ../../CONTRIBUTORS.rst
|
12
docs/info/index.rst
Normal file
12
docs/info/index.rst
Normal file
@ -0,0 +1,12 @@
|
||||
****
|
||||
Info
|
||||
****
|
||||
|
||||
Index
|
||||
=====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
changelog
|
||||
contributors
|
191
docs/porting.md
191
docs/porting.md
@ -1,191 +0,0 @@
|
||||
# Porting
|
||||
|
||||
TinyUSB is designed to be a universal USB protocol stack for microcontrollers. It
|
||||
handles most of the high level USB protocol and relies on the microcontroller's USB peripheral for
|
||||
data transactions on different endpoints. Porting is the process of adding low-level support for
|
||||
the rest of the common stack. Once the low-level is implemented, it is very easy to add USB support
|
||||
for the microcontroller to other projects, especially those already using TinyUSB such as CircuitPython.
|
||||
|
||||
Below are instructions on how to get the cdc_msc device example running on a new microcontroller. Doing so includes adding the common code necessary for other uses while minimizing other extra code. Whenever you see a phrase or word in <> it should be replaced.
|
||||
|
||||
## Register defs
|
||||
|
||||
The first step to adding support is including the register definitions and startup code for the
|
||||
microcontroller in TinyUSB. We write the TinyUSB implementation against these structs instead of higher level functions to keep the code small and to prevent function name collisions in linking of larger projects. For ARM microcontrollers this is the CMSIS definitions. They should be
|
||||
placed in the `hw/mcu/<vendor>/<chip_family>` directory.
|
||||
|
||||
Once this is done, create a directory in `hw/bsp/<your board name>` for the specific board you are using to test the code. (Duplicating an existing board's directory is the best way to get started.) The board should be a readily available development board so that others can also test.
|
||||
|
||||
## Build
|
||||
Now that those directories are in place, we can start our iteration process to get the example building successfully. To build, run from the root of TinyUSB:
|
||||
|
||||
`make -C examples/device/cdc_msc BOARD=<board>`
|
||||
|
||||
Unless, you've read ahead, this will fail miserably. Now, lets get it to fail less by updating the files in the board directory. The code in the board's directory is responsible for setting up the microcontroller's clocks and pins so that USB works. TinyUSB itself only operates on the USB peripheral. The board directory also includes information what files are needed to build the example.
|
||||
|
||||
One of the first things to change is the `-DCFG_TUSB_MCU` cflag in the `board.mk` file. This is used to tell TinyUSB what platform is being built. So, add an entry to `src/tusb_option.h` and update the CFLAG to match.
|
||||
|
||||
Update `board.mk`'s VENDOR and CHIP_FAMILY values when creating the directory for the struct files. Duplicate one of the other sources from `src/portable` into `src/portable/<vendor>/<chip_family>` and delete all of the implementation internals. We'll cover what everything there does later. For now, get it compiling.
|
||||
|
||||
## Implementation
|
||||
At this point you should get an error due to an implementation issue and hopefully the build is setup for the new MCU. You will still need to modify the `board.mk` to include specific CFLAGS, the linker script, linker flags, source files, include directories. All file paths are relative to the top of the TinyUSB repo.
|
||||
|
||||
### Board Support (BSP)
|
||||
The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. Its responsible for getting the MCU started and the USB peripheral clocked. It also optionally provides LED definitions that are used to blink an LED to show that the code is running.
|
||||
|
||||
It is located in `hw/bsp/<board name>/board_<board name>.c`.
|
||||
|
||||
#### board_init
|
||||
`board_init` is responsible for starting the MCU, setting up the USB clock and USB pins. It is also responsible for initializing LED pins.
|
||||
|
||||
One useful clock debugging technique is to set up a PWM output at a known value such as 500hz based on the USB clock so that you can verify it is correct with a logic probe or oscilloscope.
|
||||
|
||||
Setup your USB in a crystal-less mode when available. That makes the code easier to port across boards.
|
||||
|
||||
#### board_led_write
|
||||
Feel free to skip this until you want to verify your demo code is running. To implement, set the pin corresponding to the led to output a value that lights the LED when `state` is true.
|
||||
|
||||
### OS Abstraction Layer (OSAL)
|
||||
|
||||
The OS Abstraction Layer is responsible for providing basic data structures for TinyUSB that may allow for concurrency when used with an RTOS. Without an RTOS it simply handles concurrency issues between the main code and interrupts.
|
||||
|
||||
The code is almost entirely agnostic of MCU and lives in `src/osal`.
|
||||
|
||||
### Device API
|
||||
|
||||
After the USB device is setup, the USB device code works by processing events on the main thread (by calling `tud_task`). These events are queued by the USB interrupt handler. So, there are three parts to the device low-level API: device setup, endpoint setup and interrupt processing.
|
||||
|
||||
All of the code for the low-level device API is in `src/portable/<vendor>/<chip family>/dcd_<chip family>.c`.
|
||||
|
||||
#### Device Setup
|
||||
|
||||
##### dcd_init
|
||||
|
||||
Initializes the USB peripheral for device mode and enables it.
|
||||
This function should enable internal D+/D- pull-up for enumeration.
|
||||
|
||||
##### dcd_int_enable / dcd_int_disable
|
||||
|
||||
Enables or disables the USB device interrupt(s). May be used to prevent concurrency issues when mutating data structures shared between main code and the interrupt handler.
|
||||
|
||||
##### dcd_int_handler
|
||||
|
||||
Processes all the hardware generated events e.g Bus reset, new data packet from host etc ... It will be called by application in the MCU USB interrupt handler.
|
||||
|
||||
##### dcd_set_address
|
||||
|
||||
Called when the device is given a new bus address.
|
||||
|
||||
If your peripheral automatically changes address during enumeration (like the nrf52) you may leave this empty and also no queue an event for the corresponding SETUP packet.
|
||||
|
||||
##### dcd_remote_wakeup
|
||||
|
||||
Called to remote wake up host when suspended (e.g hid keyboard)
|
||||
|
||||
##### dcd_connect / dcd_disconnect
|
||||
|
||||
Connect or disconnect the data-line pull-up resistor. Define only if MCU has an internal pull-up. (BSP may define for MCU without internal pull-up.)
|
||||
|
||||
#### Special events
|
||||
|
||||
You must let TinyUSB know when certain events occur so that it can continue its work. There are a few methods you can call to queue events for TinyUSB to process.
|
||||
|
||||
##### dcd_event_bus_signal
|
||||
|
||||
There are a number of events that your peripheral may communicate about the state of the bus. Here is an overview of what they are. Events in **BOLD** must be provided for TinyUSB to work.
|
||||
|
||||
* **DCD_EVENT_RESET** - Triggered when the host resets the bus causing the peripheral to reset. Do any other internal reset you need from the interrupt handler such as resetting the control endpoint.
|
||||
* DCD_EVENT_SOF - Signals the start of a new USB frame.
|
||||
|
||||
Calls to this look like:
|
||||
|
||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
||||
|
||||
The first `0` is the USB peripheral number. Statically saying 0 is common for single USB device MCUs.
|
||||
|
||||
The `true` indicates the call is from an interrupt handler and will always be the case when porting in this way.
|
||||
|
||||
##### dcd_setup_received
|
||||
|
||||
SETUP packets are a special type of transaction that can occur at any time on the control endpoint, numbered `0`. Since they are unique, most peripherals have special handling for them. Their data is always 8 bytes in length as well.
|
||||
|
||||
Calls to this look like:
|
||||
|
||||
dcd_event_setup_received(0, setup, true);
|
||||
|
||||
As before with `dcd_event_bus_signal` the first argument is the USB peripheral number and the third is true to signal its being called from an interrupt handler. The middle argument is byte array of length 8 with the contents of the SETUP packet. It can be stack allocated because it is copied into the queue.
|
||||
|
||||
#### Endpoints
|
||||
|
||||
Endpoints are the core of the USB data transfer process. They come in a few forms such as control, isochronous, bulk, and interrupt. We won't cover the details here except with some caveats in open below. In general, data is transferred by setting up a buffer of a given length to be transferred on a given endpoint address and then waiting for an interrupt to signal that the transfer is finished. Further details below.
|
||||
|
||||
Endpoints within USB have an address which encodes both the number and direction of an endpoint. TinyUSB provides `tu_edpt_number` and `tu_edpt_dir` to unpack this data from the address. Here is a snippet that does it.
|
||||
|
||||
uint8_t epnum = tu_edpt_number(ep_addr);
|
||||
uint8_t dir = tu_edpt_dir(ep_addr);
|
||||
|
||||
##### dcd_edpt_open
|
||||
|
||||
Opening an endpoint is done for all non-control endpoints once the host picks a configuration that the device should use. At this point, the endpoint should be enabled in the peripheral and configured to match the endpoint descriptor. Pay special attention to the direction of the endpoint you can get from the helper methods above. It will likely change what registers you are setting.
|
||||
|
||||
Also make sure to enable endpoint specific interrupts.
|
||||
|
||||
##### dcd_edpt_close
|
||||
|
||||
Close an endpoint. his function is used for implementing alternate settings.
|
||||
|
||||
After calling this, the device should not respond to any packets directed towards this endpoint. When called, this function must abort any transfers in progress through this endpoint, before returning.
|
||||
|
||||
Implementation is optional. Must be called from the USB task. Interrupts could be disabled or enabled during the call.
|
||||
|
||||
##### dcd_edpt_xfer
|
||||
|
||||
`dcd_edpt_xfer` is responsible for configuring the peripheral to send or receive data from the host. "xfer" is short for "transfer". **This is one of the core methods you must implement for TinyUSB to work (one other is the interrupt handler).** Data from the host is the OUT direction and data to the host is IN. It is used for all endpoints including the control endpoint 0. Make sure to handle the zero-length packet STATUS packet on endpoint 0 correctly. It may be a special transaction to the peripheral.
|
||||
|
||||
Besides that, all other transactions are relatively straight-forward. The endpoint address provides the endpoint
|
||||
number and direction which usually determines where to write the buffer info. The buffer and its length are usually
|
||||
written to a specific location in memory and the peripheral is told the data is valid. (Maybe by writing a 1 to a
|
||||
register or setting a counter register to 0 for OUT or length for IN.)
|
||||
|
||||
The transmit buffer alignment is determined by `CFG_TUSB_MEM_ALIGN`.
|
||||
|
||||
One potential pitfall is that the buffer may be longer than the maximum endpoint size of one USB
|
||||
packet. Some peripherals can handle transmitting multiple USB packets for a provided buffer (like the SAMD21).
|
||||
Others (like the nRF52) may need each USB packet queued individually. To make this work you'll need to track
|
||||
some state for yourself and queue up an intermediate USB packet from the interrupt handler.
|
||||
|
||||
Once the transaction is going, the interrupt handler will notify TinyUSB of transfer completion.
|
||||
During transmission, the IN data buffer is guarenteed to remain unchanged in memory until the `dcd_xfer_complete` function is called.
|
||||
|
||||
The dcd_edpt_xfer function must never add zero-length-packets (ZLP) on its own to a transfer. If a ZLP is required,
|
||||
then it must be explicitly sent by the stack calling dcd_edpt_xfer(), by calling dcd_edpt_xfer() a second time with len=0.
|
||||
For control transfers, this is automatically done in `usbd_control.c`.
|
||||
|
||||
At the moment, only a single buffer can be transmitted at once. There is no provision for double-buffering. new dcd_edpt_xfer() will not
|
||||
be called again on the same endpoint address until the driver calls dcd_xfer_complete() (except in cases of USB resets).
|
||||
|
||||
##### dcd_xfer_complete
|
||||
|
||||
Once a transfer completes you must call dcd_xfer_complete from the USB interrupt handler to let TinyUSB know that a transaction has completed. Here is a sample call:
|
||||
|
||||
dcd_event_xfer_complete(0, ep_addr, xfer->actual_len, XFER_RESULT_SUCCESS, true);
|
||||
|
||||
The arguments are:
|
||||
* the USB peripheral number
|
||||
* the endpoint address
|
||||
* the actual length of the transfer. (OUT transfers may be smaller than the buffer given in `dcd_edpt_xfer`)
|
||||
* the result of the transfer. Failure isn't handled yet.
|
||||
* `true` to note the call is from an interrupt handler.
|
||||
|
||||
##### dcd_edpt_stall / dcd_edpt_clear_stall
|
||||
|
||||
Stalling is one way an endpoint can indicate failure such as when an unsupported command is transmitted. The pair of `dcd_edpt_stall`, `dcd_edpt_clear_stall` help manage the stall state of all endpoints.
|
||||
|
||||
## Woohoo!
|
||||
|
||||
At this point you should have everything working! ;-) Of course, you may not write perfect code. Here are some tips and tricks for debugging.
|
||||
|
||||
Use [WireShark](https://www.wireshark.org/) or [a Beagle](https://www.totalphase.com/protocols/usb/) to sniff the USB traffic. When things aren't working its likely very early in the USB enumeration process. Figuring out where can help clue in where the issue is. For example:
|
||||
* If the host sends a SETUP packet and its not ACKed then your USB peripheral probably isn't started correctly.
|
||||
* If the peripheral is started correctly but it still didn't work, then verify your usb clock is correct. (You did output a PWM based on it right? ;-) )
|
||||
* If the SETUP packet is ACKed but nothing is sent back then you interrupt handler isn't queueing the setup packet correctly. (Also, if you are using your own code instead of an example `tud_task` may not be called.) If thats OK, the `dcd_xfer_complete` may not be setting up the next transaction correctly.
|
320
docs/reference/boards.rst
Normal file
320
docs/reference/boards.rst
Normal file
@ -0,0 +1,320 @@
|
||||
****************
|
||||
Supported Boards
|
||||
****************
|
||||
|
||||
The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project.
|
||||
It is responsible for getting the MCU started and the USB peripheral clocked with minimal of on-board devices
|
||||
|
||||
- One LED : for status
|
||||
- One Button : to get input from user
|
||||
- One UART : optional for device, but required for host examples
|
||||
|
||||
Following boards are supported
|
||||
|
||||
Analog Devices
|
||||
--------------
|
||||
|
||||
============= ================ ======== =========================================================================================================================== ======
|
||||
Board Name Family URL Note
|
||||
============= ================ ======== =========================================================================================================================== ======
|
||||
max32650evkit MAX32650 EVKIT max32650 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32650-evkit.html#eb-overview
|
||||
max32650fthr MAX32650 Feather max32650 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32650fthr.html
|
||||
max32651evkit MAX32651 EVKIT max32650 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32651-evkit.html
|
||||
max32666evkit MAX32666 EVKIT max32666 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32666evkit.html
|
||||
max32666fthr MAX32666 Feather max32666 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32666fthr.html
|
||||
apard32690 APARD32690-SL max32690 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/ad-apard32690-sl.html
|
||||
max32690evkit MAX32690 EVKIT max32690 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32690evkit.html
|
||||
max78002evkit MAX78002 EVKIT max78002 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max78002evkit.html
|
||||
============= ================ ======== =========================================================================================================================== ======
|
||||
|
||||
Bridgetek
|
||||
---------
|
||||
|
||||
========= ========= ======== ===================================== ======
|
||||
Board Name Family URL Note
|
||||
========= ========= ======== ===================================== ======
|
||||
mm900evxb MM900EVxB brtmm90x https://brtchip.com/product/mm900ev1b
|
||||
========= ========= ======== ===================================== ======
|
||||
|
||||
Espressif
|
||||
---------
|
||||
|
||||
========================= ============================== ========= ======================================================================================================== ======
|
||||
Board Name Family URL Note
|
||||
========================= ============================== ========= ======================================================================================================== ======
|
||||
adafruit_feather_esp32_v2 Adafruit Feather ESP32 v2 espressif https://www.adafruit.com/product/5400
|
||||
adafruit_feather_esp32s2 Adafruit Feather ESP32S2 espressif https://www.adafruit.com/product/5000
|
||||
adafruit_feather_esp32s3 Adafruit Feather ESP32S3 espressif https://www.adafruit.com/product/5323
|
||||
adafruit_magtag_29gray Adafruit MagTag 2.9" Grayscale espressif https://www.adafruit.com/product/4800
|
||||
adafruit_metro_esp32s2 Adafruit Metro ESP32-S2 espressif https://www.adafruit.com/product/4775
|
||||
espressif_addax_1 Espresif Addax-1 espressif n/a
|
||||
espressif_c3_devkitc Espresif C3 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitc-02/index.html
|
||||
espressif_c6_devkitc Espresif C6 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html
|
||||
espressif_kaluga_1 Espresif Kaluga 1 espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-kaluga-1/index.html
|
||||
espressif_p4_function_ev Espresif P4 Function EV espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html
|
||||
espressif_s2_devkitc Espresif S2 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-devkitc-1/index.html
|
||||
espressif_s3_devkitc Espresif S3 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/index.html
|
||||
espressif_s3_devkitm Espresif S3 DevKitM espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitm-1/index.html
|
||||
espressif_saola_1 Espresif S2 Saola 1 espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-saola-1/index.html
|
||||
========================= ============================== ========= ======================================================================================================== ======
|
||||
|
||||
GigaDevice
|
||||
----------
|
||||
|
||||
================== ================== ========= ============================= ======
|
||||
Board Name Family URL Note
|
||||
================== ================== ========= ============================= ======
|
||||
sipeed_longan_nano Sipeed Longan Nano gd32vf103 https://longan.sipeed.com/en/
|
||||
================== ================== ========= ============================= ======
|
||||
|
||||
Infineon
|
||||
--------
|
||||
|
||||
============= ================= ======== ============================================================================= ======
|
||||
Board Name Family URL Note
|
||||
============= ================= ======== ============================================================================= ======
|
||||
xmc4500_relax XMC4500 relax kit xmc4000 https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc45_relax_v1/
|
||||
xmc4700_relax XMC4700 relax kit xmc4000 https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc47_relax_v1/
|
||||
============= ================= ======== ============================================================================= ======
|
||||
|
||||
Microchip
|
||||
---------
|
||||
|
||||
========================= =================================== ========== ================================================================================= ======
|
||||
Board Name Family URL Note
|
||||
========================= =================================== ========== ================================================================================= ======
|
||||
olimex_emz64 Olimex PIC32-EMZ64 pic32mz https://www.olimex.com/Products/PIC/Development/PIC32-EMZ64/open-source-hardware
|
||||
olimex_hmz144 Olimex PIC32-HMZ144 pic32mz https://www.olimex.com/Products/PIC/Development/PIC32-HMZ144/open-source-hardware
|
||||
cynthion_d11 Great Scott Gadgets Cynthion samd11 https://greatscottgadgets.com/cynthion/
|
||||
samd11_xplained SAMD11 Xplained Pro samd11 https://www.microchip.com/en-us/development-tool/ATSAMD11-XPRO
|
||||
atsamd21_xpro SAMD21 Xplained Pro samd21 https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO
|
||||
circuitplayground_express Adafruit Circuit Playground Express samd21 https://www.adafruit.com/product/3333
|
||||
curiosity_nano SAMD21 Curiosty Nano samd21 https://www.microchip.com/en-us/development-tool/dm320119
|
||||
cynthion_d21 Great Scott Gadgets Cynthion samd21 https://greatscottgadgets.com/cynthion/
|
||||
feather_m0_express Adafruit Feather M0 Express samd21 https://www.adafruit.com/product/3403
|
||||
itsybitsy_m0 Adafruit ItsyBitsy M0 samd21 https://www.adafruit.com/product/3727
|
||||
metro_m0_express Adafruit Metro M0 Express samd21 https://www.adafruit.com/product/3505
|
||||
qtpy Adafruit QT Py samd21 https://www.adafruit.com/product/4600
|
||||
seeeduino_xiao Seeeduino XIAO samd21 https://wiki.seeedstudio.com/Seeeduino-XIAO/
|
||||
sparkfun_samd21_mini_usb SparkFun SAMD21 Mini samd21 https://www.sparkfun.com/products/13664
|
||||
trinket_m0 Adafruit Trinket M0 samd21 https://www.adafruit.com/product/3500
|
||||
d5035_01 D5035-01 samd5x_e5x https://github.com/RudolphRiedel/USB_CAN-FD
|
||||
feather_m4_express Adafruit Feather M4 Express samd5x_e5x https://www.adafruit.com/product/3857
|
||||
itsybitsy_m4 Adafruit ItsyBitsy M4 samd5x_e5x https://www.adafruit.com/product/3800
|
||||
metro_m4_express Adafruit Metro M4 Express samd5x_e5x https://www.adafruit.com/product/3382
|
||||
pybadge Adafruit PyBadge samd5x_e5x https://www.adafruit.com/product/4200
|
||||
pyportal Adafruit PyPortal samd5x_e5x https://www.adafruit.com/product/4116
|
||||
same54_xplained SAME54 Xplained Pro samd5x_e5x https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAME54-XPRO
|
||||
samg55_xplained SAMG55 Xplained Pro samg https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMG55-XPRO
|
||||
atsaml21_xpro SAML21 Xplained Pro saml2x https://www.microchip.com/en-us/development-tool/atsaml21-xpro-b
|
||||
saml22_feather SAML22 Feather saml2x https://github.com/joeycastillo/Feather-Projects/tree/main/SAML22%20Feather
|
||||
sensorwatch_m0 SensorWatch saml2x https://github.com/joeycastillo/Sensor-Watch
|
||||
========================= =================================== ========== ================================================================================= ======
|
||||
|
||||
MindMotion
|
||||
----------
|
||||
|
||||
===================== ====================================== ======== =============================================================================================== ======
|
||||
Board Name Family URL Note
|
||||
===================== ====================================== ======== =============================================================================================== ======
|
||||
mm32f327x_mb39 MM32F3273G9P MB-039 mm32 https://www.mindmotion.com.cn/support/development_tools/evaluation_boards/evboard/mm32f3273g9p/
|
||||
mm32f327x_pitaya_lite DshanMCU Pitaya Lite with MM32F3273G8P mm32 https://gitee.com/weidongshan/DshanMCU-Pitaya-c
|
||||
===================== ====================================== ======== =============================================================================================== ======
|
||||
|
||||
NXP
|
||||
---
|
||||
|
||||
================== ========================================= ============= ========================================================================================================================================================================= ======
|
||||
Board Name Family URL Note
|
||||
================== ========================================= ============= ========================================================================================================================================================================= ======
|
||||
metro_m7_1011 Adafruit Metro M7 1011 imxrt https://www.adafruit.com/product/5600
|
||||
metro_m7_1011_sd Adafruit Metro M7 1011 SD imxrt https://www.adafruit.com/product/5600
|
||||
mimxrt1010_evk i.MX RT1010 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1010-evaluation-kit:MIMXRT1010-EVK
|
||||
mimxrt1015_evk i.MX RT1015 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1015-EVK
|
||||
mimxrt1020_evk i.MX RT1020 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1020-EVK
|
||||
mimxrt1024_evk i.MX RT1024 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1024-evaluation-kit:MIMXRT1024-EVK
|
||||
mimxrt1050_evkb i.MX RT1050 Evaluation Kit revB imxrt https://www.nxp.com/part/IMXRT1050-EVKB
|
||||
mimxrt1060_evk i.MX RT1060 Evaluation Kit revB imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1060-EVKB
|
||||
mimxrt1064_evk i.MX RT1064 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1064-EVK
|
||||
mimxrt1170_evkb i.MX RT1070 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1170-evaluation-kit:MIMXRT1170-EVKB
|
||||
teensy_40 Teensy 4.0 imxrt https://www.pjrc.com/store/teensy40.html
|
||||
teensy_41 Teensy 4.1 imxrt https://www.pjrc.com/store/teensy41.html
|
||||
frdm_k64f Freedom K64F kinetis_k https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-k64-k63-and-k24-mcus:FRDM-K64F
|
||||
teensy_35 Teensy 3.5 kinetis_k https://www.pjrc.com/store/teensy35.html
|
||||
frdm_k32l2a4s Freedom K32L2A4S kinetis_k32l2 https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-K32L2A4S
|
||||
frdm_k32l2b Freedom K32L2B3 kinetis_k32l2 https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/nxp-freedom-development-platform-for-k32-l2b-mcus:FRDM-K32L2B3
|
||||
kuiic Kuiic kinetis_k32l2 https://github.com/nxf58843/kuiic
|
||||
frdm_kl25z fomu kinetis_kl https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z
|
||||
lpcxpresso11u37 LPCXpresso11U37 lpc11 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13074
|
||||
lpcxpresso11u68 LPCXpresso11U68 lpc11 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13058
|
||||
lpcxpresso1347 LPCXpresso1347 lpc13 https://www.nxp.com/products/no-longer-manufactured/lpcxpresso-board-for-lpc1347:OM13045
|
||||
lpcxpresso1549 LPCXpresso1549 lpc15 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13056
|
||||
lpcxpresso1769 LPCXpresso1769 lpc17 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13000
|
||||
mbed1768 mbed 1768 lpc17 https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1700-arm-cortex-m3/arm-mbed-lpc1768-board:OM11043
|
||||
lpcxpresso18s37 LPCXpresso18s37 lpc18 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso18s37-development-board:OM13076
|
||||
mcb1800 Keil MCB1800 lpc18 https://www.keil.com/arm/mcb1800/
|
||||
ea4088_quickstart Embedded Artists LPC4088 QuickStart Board lpc40 https://www.embeddedartists.com/products/lpc4088-quickstart-board/
|
||||
ea4357 Embedded Artists LPC4357 Development Kit lpc43 https://www.embeddedartists.com/products/lpc4357-developers-kit/
|
||||
lpcxpresso43s67 LPCXpresso43S67 lpc43 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso43s67-development-board:OM13084
|
||||
lpcxpresso51u68 LPCXpresso51u68 lpc51 https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpcxpresso51u68-for-the-lpc51u68-mcus:OM40005
|
||||
lpcxpresso54114 LPCXpresso54114 lpc54 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso54114-board:OM13089
|
||||
lpcxpresso54608 LPCXpresso54608 lpc54 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-development-board-for-lpc5460x-mcus:OM13092
|
||||
lpcxpresso54628 LPCXpresso54628 lpc54 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso54628-development-board:OM13098
|
||||
double_m33_express Double M33 Express lpc55 https://www.crowdsupply.com/steiert-solutions/double-m33-express
|
||||
lpcxpresso55s28 LPCXpresso55s28 lpc55 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s28-development-board:LPC55S28-EVK
|
||||
lpcxpresso55s69 LPCXpresso55s69 lpc55 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK
|
||||
mcu_link MCU Link lpc55 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK
|
||||
frdm_mcxa153 Freedom MCXA153 mcx https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXA153
|
||||
frdm_mcxn947 Freedom MCXN947 mcx https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXN947
|
||||
mcxn947brk MCXN947 Breakout mcx n/a
|
||||
================== ========================================= ============= ========================================================================================================================================================================= ======
|
||||
|
||||
Nordic Semiconductor
|
||||
--------------------
|
||||
|
||||
=========================== ===================================== ======== ============================================================================== ======
|
||||
Board Name Family URL Note
|
||||
=========================== ===================================== ======== ============================================================================== ======
|
||||
adafruit_clue Adafruit CLUE nrf https://www.adafruit.com/product/4500
|
||||
arduino_nano33_ble Arduino Nano 33 BLE nrf https://store.arduino.cc/arduino-nano-33-ble
|
||||
circuitplayground_bluefruit Adafruit Circuit Playground Bluefruit nrf https://www.adafruit.com/product/4333
|
||||
feather_nrf52840_express Adafruit Feather nRF52840 Express nrf https://www.adafruit.com/product/4062
|
||||
feather_nrf52840_sense Adafruit Feather nRF52840 Sense nrf https://www.adafruit.com/product/4516
|
||||
itsybitsy_nrf52840 Adafruit ItsyBitsy nRF52840 Express nrf https://www.adafruit.com/product/4481
|
||||
pca10056 Nordic nRF52840DK nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK
|
||||
pca10059 Nordic nRF52840 Dongle nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle
|
||||
pca10095 Nordic nRF5340 DK nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK
|
||||
pca10100 Nordic nRF52833 DK nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52833-DK
|
||||
=========================== ===================================== ======== ============================================================================== ======
|
||||
|
||||
Raspberry Pi
|
||||
------------
|
||||
|
||||
================= ================= ============== ========================================================== ======
|
||||
Board Name Family URL Note
|
||||
================= ================= ============== ========================================================== ======
|
||||
raspberrypi_zero Raspberry Pi Zero broadcom_32bit https://www.raspberrypi.org/products/raspberry-pi-zero/
|
||||
raspberrypi_cm4 Raspberry CM4 broadcom_64bit https://www.raspberrypi.org/products/compute-module-4
|
||||
raspberrypi_zero2 Raspberry Zero2 broadcom_64bit https://www.raspberrypi.org/products/raspberry-pi-zero-2-w
|
||||
================= ================= ============== ========================================================== ======
|
||||
|
||||
Renesas
|
||||
-------
|
||||
|
||||
============== =========================== ======== ================================================================================================================================================================ ======
|
||||
Board Name Family URL Note
|
||||
============== =========================== ======== ================================================================================================================================================================ ======
|
||||
da14695_dk_usb DA14695-00HQDEVKT-U da1469x https://www.renesas.com/en/products/wireless-connectivity/bluetooth-low-energy/da14695-00hqdevkt-u-smartbond-da14695-bluetooth-low-energy-52-usb-development-kit
|
||||
da1469x_dk_pro DA1469x Development Kit Pro da1469x https://lpccs-docs.renesas.com/um-b-090-da1469x_getting_started/DA1469x_The_hardware/DA1469x_The_hardware.html
|
||||
portenta_c33 Arduino Portenta C33 ra https://www.arduino.cc/pro/hardware-product-portenta-c33/
|
||||
ra2a1_ek RA2A1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra2a1-evaluation-kit-ra2a1-mcu-group
|
||||
ra4m1_ek RA4M1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m1-evaluation-kit-ra4m1-mcu-group
|
||||
ra4m3_ek RA4M3 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m3-evaluation-kit-ra4m3-mcu-group
|
||||
ra6m1_ek RA6M1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra6m1-evaluation-kit-ra6m1-mcu-group
|
||||
ra6m5_ek RA6M5 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra6m5-evaluation-kit-ra6m5-mcu-group
|
||||
ra8m1_ek RA8M1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra8m1-evaluation-kit-ra8m1-mcu-group
|
||||
uno_r4 Arduino UNO R4 ra https://store-usa.arduino.cc/pages/uno-r4
|
||||
============== =========================== ======== ================================================================================================================================================================ ======
|
||||
|
||||
STMicroelectronics
|
||||
------------------
|
||||
|
||||
=================== ================================= ======== ================================================================= ======
|
||||
Board Name Family URL Note
|
||||
=================== ================================= ======== ================================================================= ======
|
||||
stm32c071nucleo STM32C071 Nucleo stm32c0 https://www.st.com/en/evaluation-tools/nucleo-g071rb.html
|
||||
stm32f070rbnucleo STM32 F070 Nucleo stm32f0 https://www.st.com/en/evaluation-tools/nucleo-f070rb.html
|
||||
stm32f072disco STM32 F072 Discovery stm32f0 https://www.st.com/en/evaluation-tools/32f072bdiscovery.html
|
||||
stm32f072eval STM32 F072 Eval stm32f0 https://www.st.com/en/evaluation-tools/stm32072b-eval.html
|
||||
stm32f103_bluepill STM32 F103 Bluepill stm32f1 https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill
|
||||
stm32f103_mini_2 STM32 F103 Mini v2 stm32f1 https://stm32-base.org/boards/STM32F103RCT6-STM32-Mini-V2.0
|
||||
stm32f103ze_iar IAR STM32 F103ze starter kit stm32f1 n/a
|
||||
stm32f207nucleo STM32 F207 Nucleo stm32f2 https://www.st.com/en/evaluation-tools/nucleo-f207zg.html
|
||||
stm32f303disco STM32 F303 Discovery stm32f3 https://www.st.com/en/evaluation-tools/stm32f3discovery.html
|
||||
feather_stm32f405 Adafruit Feather STM32F405 stm32f4 https://www.adafruit.com/product/4382
|
||||
pyboardv11 Pyboard v1.1 stm32f4 https://www.adafruit.com/product/2390
|
||||
stm32f401blackpill STM32 F401 Blackpill stm32f4 https://stm32-base.org/boards/STM32F401CCU6-WeAct-Black-Pill-V1.2
|
||||
stm32f407blackvet STM32 F407 Blackvet stm32f4 https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0
|
||||
stm32f407disco STM32 F407 Discovery stm32f4 https://www.st.com/en/evaluation-tools/stm32f4discovery.html
|
||||
stm32f411blackpill STM32 F411 Blackpill stm32f4 https://stm32-base.org/boards/STM32F411CEU6-WeAct-Black-Pill-V2.0
|
||||
stm32f411disco STM32 F411 Discovery stm32f4 https://www.st.com/en/evaluation-tools/32f411ediscovery.html
|
||||
stm32f412disco STM32 F412 Discovery stm32f4 https://www.st.com/en/evaluation-tools/32f412gdiscovery.html
|
||||
stm32f412nucleo STM32 F412 Nucleo stm32f4 https://www.st.com/en/evaluation-tools/nucleo-f412zg.html
|
||||
stm32f439nucleo STM32 F439 Nucleo stm32f4 https://www.st.com/en/evaluation-tools/nucleo-f439zi.html
|
||||
stlinkv3mini Stlink-v3 mini stm32f7 https://www.st.com/en/development-tools/stlink-v3mini.html
|
||||
stm32f723disco STM32 F723 Discovery stm32f7 https://www.st.com/en/evaluation-tools/32f723ediscovery.html
|
||||
stm32f746disco STM32 F746 Discovery stm32f7 https://www.st.com/en/evaluation-tools/32f746gdiscovery.html
|
||||
stm32f746nucleo STM32 F746 Nucleo stm32f7 https://www.st.com/en/evaluation-tools/nucleo-f746zg.html
|
||||
stm32f767nucleo STM32 F767 Nucleo stm32f7 https://www.st.com/en/evaluation-tools/nucleo-f767zi.html
|
||||
stm32f769disco STM32 F769 Discovery stm32f7 https://www.st.com/en/evaluation-tools/32f769idiscovery.html
|
||||
stm32g0b1nucleo STM32 G0B1 Nucleo stm32g0 https://www.st.com/en/evaluation-tools/nucleo-g0b1re.html
|
||||
b_g474e_dpow1 STM32 B-G474E-DPOW1 Discovery kit stm32g4 https://www.st.com/en/evaluation-tools/b-g474e-dpow1.html
|
||||
stm32g474nucleo STM32 G474 Nucleo stm32g4 https://www.st.com/en/evaluation-tools/nucleo-g474re.html
|
||||
stm32g491nucleo STM32 G491 Nucleo stm32g4 https://www.st.com/en/evaluation-tools/nucleo-g491re.html
|
||||
stm32h503nucleo STM32 H503 Nucleo stm32h5 https://www.st.com/en/evaluation-tools/nucleo-h503rb.html
|
||||
stm32h563nucleo STM32 H563 Nucleo stm32h5 https://www.st.com/en/evaluation-tools/nucleo-h563zi.html
|
||||
stm32h573i_dk STM32 H573i Discovery stm32h5 https://www.st.com/en/evaluation-tools/stm32h573i-dk.html
|
||||
daisyseed Daisy Seed stm32h7 https://electro-smith.com/products/daisy-seed
|
||||
stm32h723nucleo STM32 H723 Nucleo stm32h7 https://www.st.com/en/evaluation-tools/nucleo-h723zg.html
|
||||
stm32h743eval STM32 H743 Eval stm32h7 https://www.st.com/en/evaluation-tools/stm32h743i-eval.html
|
||||
stm32h743nucleo STM32 H743 Nucleo stm32h7 https://www.st.com/en/evaluation-tools/nucleo-h743zi.html
|
||||
stm32h745disco STM32 H745 Discovery stm32h7 https://www.st.com/en/evaluation-tools/stm32h745i-disco.html
|
||||
stm32h750_weact STM32 H750 WeAct stm32h7 https://www.adafruit.com/product/5032
|
||||
stm32h750bdk STM32 H750b Discovery Kit stm32h7 https://www.st.com/en/evaluation-tools/stm32h750b-dk.html
|
||||
waveshare_openh743i Waveshare Open H743i stm32h7 https://www.waveshare.com/openh743i-c-standard.htm
|
||||
stm32l052dap52 STM32 L052 DAP stm32l0 n/a
|
||||
stm32l0538disco STM32 L0538 Discovery stm32l0 https://www.st.com/en/evaluation-tools/32l0538discovery.html
|
||||
stm32l412nucleo STM32 L412 Nucleo stm32l4 https://www.st.com/en/evaluation-tools/nucleo-l412kb.html
|
||||
stm32l476disco STM32 L476 Disco stm32l4 https://www.st.com/en/evaluation-tools/32l476gdiscovery.html
|
||||
stm32l4p5nucleo STM32 L4P5 Nucleo stm32l4 https://www.st.com/en/evaluation-tools/nucleo-l4p5zg.html
|
||||
stm32l4r5nucleo STM32 L4R5 Nucleo stm32l4 https://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html
|
||||
b_u585i_iot2a STM32 B-U585i IOT2A Discovery kit stm32u5 https://www.st.com/en/evaluation-tools/b-u585i-iot02a.html
|
||||
stm32u545nucleo STM32 U545 Nucleo stm32u5 https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html
|
||||
stm32u575eval STM32 U575 Eval stm32u5 https://www.st.com/en/evaluation-tools/stm32u575i-ev.html
|
||||
stm32u575nucleo STM32 U575 Nucleo stm32u5 https://www.st.com/en/evaluation-tools/nucleo-u575zi-q.html
|
||||
stm32u5a5nucleo STM32 U5a5 Nucleo stm32u5 https://www.st.com/en/evaluation-tools/nucleo-u5a5zj-q.html
|
||||
stm32wb55nucleo STM32 P-NUCLEO-WB55 stm32wb https://www.st.com/en/evaluation-tools/p-nucleo-wb55.html
|
||||
=================== ================================= ======== ================================================================= ======
|
||||
|
||||
Sunxi
|
||||
-----
|
||||
|
||||
======= ================= ======== ========================================= ======
|
||||
Board Name Family URL Note
|
||||
======= ================= ======== ========================================= ======
|
||||
f1c100s Lctech Pi F1C200s f1c100s https://linux-sunxi.org/Lctech_Pi_F1C200s
|
||||
======= ================= ======== ========================================= ======
|
||||
|
||||
Texas Instruments
|
||||
-----------------
|
||||
|
||||
================= ===================== ======== ========================================= ======
|
||||
Board Name Family URL Note
|
||||
================= ===================== ======== ========================================= ======
|
||||
msp_exp430f5529lp MSP430F5529 LaunchPad msp430 https://www.ti.com/tool/MSP-EXP430F5529LP
|
||||
msp_exp432e401y MSP432E401Y LaunchPad msp432e4 https://www.ti.com/tool/MSP-EXP432E401Y
|
||||
ek_tm4c123gxl TM4C123G LaunchPad tm4c https://www.ti.com/tool/EK-TM4C123GXL
|
||||
================= ===================== ======== ========================================= ======
|
||||
|
||||
Tomu
|
||||
----
|
||||
|
||||
======= ====== ======== ========================= ======
|
||||
Board Name Family URL Note
|
||||
======= ====== ======== ========================= ======
|
||||
fomu fomu fomu https://tomu.im/fomu.html
|
||||
======= ====== ======== ========================= ======
|
||||
|
||||
WCH
|
||||
---
|
||||
|
||||
================ ================ ======== ===================================================================== ======
|
||||
Board Name Family URL Note
|
||||
================ ================ ======== ===================================================================== ======
|
||||
ch32f205r-r0 CH32F205r-r0 ch32f20x https://github.com/openwch/ch32f20x
|
||||
ch32v103r_r1_1v0 CH32V103R-R1-1v1 ch32v10x https://github.com/openwch/ch32v103/tree/main/SCHPCB/CH32V103R-R1-1v1
|
||||
ch32v203c_r0_1v0 CH32V203C-R0-1v0 ch32v20x https://github.com/openwch/ch32v20x/tree/main/SCHPCB/CH32V203C-R0
|
||||
ch32v203g_r0_1v0 CH32V203G-R0-1v0 ch32v20x https://github.com/openwch/ch32v20x/tree/main/SCHPCB/CH32V203C-R0
|
||||
nanoch32v203 nanoCH32V203 ch32v20x https://github.com/wuxx/nanoCH32V203
|
||||
ch32v307v_r1_1v0 CH32V307V-R1-1v0 ch32v307 https://github.com/openwch/ch32v307/tree/main/SCHPCB/CH32V307V-R1-1v0
|
||||
================ ================ ======== ===================================================================== ======
|
42
docs/reference/concurrency.rst
Normal file
42
docs/reference/concurrency.rst
Normal file
@ -0,0 +1,42 @@
|
||||
***********
|
||||
Concurrency
|
||||
***********
|
||||
|
||||
The TinyUSB library is designed to operate on single-core MCUs with multi-threaded applications in mind. Interaction with interrupts is especially important to pay attention to.
|
||||
It is compatible with optionally using a RTOS.
|
||||
|
||||
General
|
||||
-------
|
||||
|
||||
When writing code, keep in mind that the OS (if using a RTOS) may swap out your code at any time. Also, your code can be preempted by an interrupt at any time.
|
||||
|
||||
Application Code
|
||||
----------------
|
||||
|
||||
The USB core does not execute application callbacks while in an interrupt context. Calls to application code are from within the USB core task context. Note that the application core will call class drivers from within their own task.
|
||||
|
||||
Class Drivers
|
||||
-------------
|
||||
|
||||
Class driver code should never be called from an interrupt context by the USB core, though the application is allowed to call class driver functions from interrupts. USB core functions may be called simultaneously by multiple tasks. Use care that proper locking is used to guard the USBD core functions from this case.
|
||||
|
||||
Class drivers are allowed to call ``usbd_*`` functions, but not ``dcd_*`` functions.
|
||||
|
||||
USB Core
|
||||
--------
|
||||
|
||||
All functions that may be called from an (USB core) interrupt context have a ``bool in_isr`` parameter to remind the implementer that special care must be taken.
|
||||
|
||||
Interrupt handlers must not directly call class driver code, they must pass a message to the USB core's task.
|
||||
|
||||
``usbd_*`` functions may be called from interrupts without any notice. They may also be called simultaneously by multiple tasks.
|
||||
|
||||
Device Drivers
|
||||
--------------
|
||||
|
||||
Much of the processing of the USB stack is done in an interrupt context, and care must be taken in order to ensure variables are handled in the appropriate ways by the compiler and optimizer.
|
||||
|
||||
In particular:
|
||||
|
||||
* Ensure that all memory-mapped registers (including packet memory) are marked as volatile. GCC's optimizer will even combine memory access (like two 16-bit to be a 32-bit) if you don't mark the pointers as volatile. On some architectures, this can use macros like _I , _O , or _IO.
|
||||
* All defined global variables are marked as ``static``.
|
73
docs/reference/dependencies.rst
Normal file
73
docs/reference/dependencies.rst
Normal file
@ -0,0 +1,73 @@
|
||||
************
|
||||
Dependencies
|
||||
************
|
||||
|
||||
MCU low-level peripheral driver and external libraries for building TinyUSB examples
|
||||
|
||||
======================================== ============================================================== ======================================== ====================================================================================================================================================================================================================================================================================================================================
|
||||
Local Path Repo Commit Required by
|
||||
======================================== ============================================================== ======================================== ====================================================================================================================================================================================================================================================================================================================================
|
||||
hw/mcu/allwinner https://github.com/hathach/allwinner_driver.git 8e5e89e8e132c0fd90e72d5422e5d3d68232b756 fc100s
|
||||
hw/mcu/analog/max32 https://github.com/analogdevicesinc/msdk.git b20b398d3e5e2007594e54a74ba3d2a2e50ddd75 max32650 max32666 max32690 max78002
|
||||
hw/mcu/bridgetek/ft9xx/ft90x-sdk https://github.com/BRTSG-FOSS/ft90x-sdk.git 91060164afe239fcb394122e8bf9eb24d3194eb1 brtmm90x
|
||||
hw/mcu/broadcom https://github.com/adafruit/broadcom-peripherals.git 08370086080759ed54ac1136d62d2ad24c6fa267 broadcom_32bit broadcom_64bit
|
||||
hw/mcu/gd/nuclei-sdk https://github.com/Nuclei-Software/nuclei-sdk.git 7eb7bfa9ea4fbeacfafe1d5f77d5a0e6ed3922e7 gd32vf103
|
||||
hw/mcu/infineon/mtb-xmclib-cat3 https://github.com/Infineon/mtb-xmclib-cat3.git daf5500d03cba23e68c2f241c30af79cd9d63880 xmc4000
|
||||
hw/mcu/microchip https://github.com/hathach/microchip_driver.git 9e8b37e307d8404033bb881623a113931e1edf27 sam3x samd11 samd21 samd51 samd5x_e5x same5x same7x saml2x samg
|
||||
hw/mcu/mindmotion/mm32sdk https://github.com/hathach/mm32sdk.git b93e856211060ae825216c6a1d6aa347ec758843 mm32
|
||||
hw/mcu/nordic/nrfx https://github.com/NordicSemiconductor/nrfx.git 7c47cc0a56ce44658e6da2458e86cd8783ccc4a2 nrf
|
||||
hw/mcu/nuvoton https://github.com/majbthrd/nuc_driver.git 2204191ec76283371419fbcec207da02e1bc22fa nuc
|
||||
hw/mcu/nxp/lpcopen https://github.com/hathach/nxp_lpcopen.git b41cf930e65c734d8ec6de04f1d57d46787c76ae lpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43
|
||||
hw/mcu/nxp/mcux-sdk https://github.com/hathach/mcux-sdk.git 144f1eb7ea8c06512e12f12b27383601c0272410 kinetis_k kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx imxrt
|
||||
hw/mcu/raspberry_pi/Pico-PIO-USB https://github.com/sekigon-gonnoc/Pico-PIO-USB.git fe9133fc513b82cc3dc62c67cb51f2339cf29ef7 rp2040
|
||||
hw/mcu/renesas/fsp https://github.com/renesas/fsp.git edcc97d684b6f716728a60d7a6fea049d9870bd6 ra
|
||||
hw/mcu/renesas/rx https://github.com/kkitayam/rx_device.git 706b4e0cf485605c32351e2f90f5698267996023 rx
|
||||
hw/mcu/silabs/cmsis-dfp-efm32gg12b https://github.com/cmsis-packs/cmsis-dfp-efm32gg12b.git f1c31b7887669cb230b3ea63f9b56769078960bc efm32
|
||||
hw/mcu/sony/cxd56/spresense-exported-sdk https://github.com/sonydevworld/spresense-exported-sdk.git 2ec2a1538362696118dc3fdf56f33dacaf8f4067 spresense
|
||||
hw/mcu/st/cmsis_device_c0 https://github.com/STMicroelectronics/cmsis_device_c0.git fb56b1b70c73b74eacda2a4bcc36886444364ab3 stm32c0
|
||||
hw/mcu/st/cmsis_device_f0 https://github.com/STMicroelectronics/cmsis_device_f0.git 2fc25ee22264bc27034358be0bd400b893ef837e stm32f0
|
||||
hw/mcu/st/cmsis_device_f1 https://github.com/STMicroelectronics/cmsis_device_f1.git 6601104a6397299b7304fd5bcd9a491f56cb23a6 stm32f1
|
||||
hw/mcu/st/cmsis_device_f2 https://github.com/STMicroelectronics/cmsis_device_f2.git 182fcb3681ce116816feb41b7764f1b019ce796f stm32f2
|
||||
hw/mcu/st/cmsis_device_f3 https://github.com/STMicroelectronics/cmsis_device_f3.git 5e4ee5ed7a7b6c85176bb70a9fd3c72d6eb99f1b stm32f3
|
||||
hw/mcu/st/cmsis_device_f4 https://github.com/STMicroelectronics/cmsis_device_f4.git 2615e866fa48fe1ff1af9e31c348813f2b19e7ec stm32f4
|
||||
hw/mcu/st/cmsis_device_f7 https://github.com/STMicroelectronics/cmsis_device_f7.git 25b0463439303b7a38f0d27b161f7d2f3c096e79 stm32f7
|
||||
hw/mcu/st/cmsis_device_g0 https://github.com/STMicroelectronics/cmsis_device_g0.git 3a23e1224417f3f2d00300ecd620495e363f2094 stm32g0
|
||||
hw/mcu/st/cmsis_device_g4 https://github.com/STMicroelectronics/cmsis_device_g4.git ce822adb1dc552b3aedd13621edbc7fdae124878 stm32g4
|
||||
hw/mcu/st/cmsis_device_h5 https://github.com/STMicroelectronics/cmsis_device_h5.git cd2d1d579743de57b88ccaf61a968b9c05848ffc stm32h5
|
||||
hw/mcu/st/cmsis_device_h7 https://github.com/STMicroelectronics/cmsis_device_h7.git 60dc2c913203dc8629dc233d4384dcc41c91e77f stm32h7
|
||||
hw/mcu/st/cmsis_device_l0 https://github.com/STMicroelectronics/cmsis_device_l0.git 69cd5999fd40ae6e546d4905b21635c6ca1bcb92 stm32l0
|
||||
hw/mcu/st/cmsis_device_l1 https://github.com/STMicroelectronics/cmsis_device_l1.git 7f16ec0a1c4c063f84160b4cc6bf88ad554a823e stm32l1
|
||||
hw/mcu/st/cmsis_device_l4 https://github.com/STMicroelectronics/cmsis_device_l4.git 6ca7312fa6a5a460b5a5a63d66da527fdd8359a6 stm32l4
|
||||
hw/mcu/st/cmsis_device_l5 https://github.com/STMicroelectronics/cmsis_device_l5.git d922865fc0326a102c26211c44b8e42f52c1e53d stm32l5
|
||||
hw/mcu/st/cmsis_device_u5 https://github.com/STMicroelectronics/cmsis_device_u5.git 5ad9797c54ec3e55eff770fc9b3cd4a1aefc1309 stm32u5
|
||||
hw/mcu/st/cmsis_device_wb https://github.com/STMicroelectronics/cmsis_device_wb.git 9c5d1920dd9fabbe2548e10561d63db829bb744f stm32wb
|
||||
hw/mcu/st/stm32-mfxstm32l152 https://github.com/STMicroelectronics/stm32-mfxstm32l152.git 7f4389efee9c6a655b55e5df3fceef5586b35f9b stm32h7
|
||||
hw/mcu/st/stm32c0xx_hal_driver https://github.com/STMicroelectronics/stm32c0xx_hal_driver.git 41253e2f1d7ae4a4d0c379cf63f5bcf71fcf8eb3 stm32c0
|
||||
hw/mcu/st/stm32f0xx_hal_driver https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git 0e95cd88657030f640a11e690a8a5186c7712ea5 stm32f0
|
||||
hw/mcu/st/stm32f1xx_hal_driver https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git 1dd9d3662fb7eb2a7f7d3bc0a4c1dc7537915a29 stm32f1
|
||||
hw/mcu/st/stm32f2xx_hal_driver https://github.com/STMicroelectronics/stm32f2xx_hal_driver.git c75ace9b908a9aca631193ebf2466963b8ea33d0 stm32f2
|
||||
hw/mcu/st/stm32f3xx_hal_driver https://github.com/STMicroelectronics/stm32f3xx_hal_driver.git 1761b6207318ede021706e75aae78f452d72b6fa stm32f3
|
||||
hw/mcu/st/stm32f4xx_hal_driver https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git 04e99fbdabd00ab8f370f377c66b0a4570365b58 stm32f4
|
||||
hw/mcu/st/stm32f7xx_hal_driver https://github.com/STMicroelectronics/stm32f7xx_hal_driver.git f7ffdf6bf72110e58b42c632b0a051df5997e4ee stm32f7
|
||||
hw/mcu/st/stm32g0xx_hal_driver https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git e911b12c7f67084d7f6b76157a4c0d4e2ec3779c stm32g0
|
||||
hw/mcu/st/stm32g4xx_hal_driver https://github.com/STMicroelectronics/stm32g4xx_hal_driver.git 8b4518417706d42eef5c14e56a650005abf478a8 stm32g4
|
||||
hw/mcu/st/stm32h5xx_hal_driver https://github.com/STMicroelectronics/stm32h5xx_hal_driver.git 2cf77de584196d619cec1b4586c3b9e2820a254e stm32h5
|
||||
hw/mcu/st/stm32h7xx_hal_driver https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git d8461b980b59b1625207d8c4f2ce0a9c2a7a3b04 stm32h7
|
||||
hw/mcu/st/stm32l0xx_hal_driver https://github.com/STMicroelectronics/stm32l0xx_hal_driver.git fbdacaf6f8c82a4e1eb9bd74ba650b491e97e17b stm32l0
|
||||
hw/mcu/st/stm32l1xx_hal_driver https://github.com/STMicroelectronics/stm32l1xx_hal_driver.git 44efc446fa69ed8344e7fd966e68ed11043b35d9 stm32l1
|
||||
hw/mcu/st/stm32l4xx_hal_driver https://github.com/STMicroelectronics/stm32l4xx_hal_driver.git aee3d5bf283ae5df87532b781bdd01b7caf256fc stm32l4
|
||||
hw/mcu/st/stm32l5xx_hal_driver https://github.com/STMicroelectronics/stm32l5xx_hal_driver.git 675c32a75df37f39d50d61f51cb0dcf53f07e1cb stm32l5
|
||||
hw/mcu/st/stm32u5xx_hal_driver https://github.com/STMicroelectronics/stm32u5xx_hal_driver.git 4d93097a67928e9377e655ddd14622adc31b9770 stm32u5
|
||||
hw/mcu/st/stm32wbxx_hal_driver https://github.com/STMicroelectronics/stm32wbxx_hal_driver.git 2c5f06638be516c1b772f768456ba637f077bac8 stm32wb
|
||||
hw/mcu/ti https://github.com/hathach/ti_driver.git 143ed6cc20a7615d042b03b21e070197d473e6e5 msp430 msp432e4 tm4c
|
||||
hw/mcu/wch/ch32f20x https://github.com/openwch/ch32f20x.git 77c4095087e5ed2c548ec9058e655d0b8757663b ch32f20x
|
||||
hw/mcu/wch/ch32v103 https://github.com/openwch/ch32v103.git 7578cae0b21f86dd053a1f781b2fc6ab99d0ec17 ch32v10x
|
||||
hw/mcu/wch/ch32v20x https://github.com/openwch/ch32v20x.git c4c38f507e258a4e69b059ccc2dc27dde33cea1b ch32v20x
|
||||
hw/mcu/wch/ch32v307 https://github.com/openwch/ch32v307.git 184f21b852cb95eed58e86e901837bc9fff68775 ch32v307
|
||||
lib/CMSIS_5 https://github.com/ARM-software/CMSIS_5.git 2b7495b8535bdcb306dac29b9ded4cfb679d7e5c imxrt kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx mm32 msp432e4 nrf saml2x lpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43 stm32c0 stm32f0 stm32f1 stm32f2 stm32f3 stm32f4 stm32f7 stm32g0 stm32g4 stm32h5 stm32h7 stm32l0 stm32l1 stm32l4 stm32l5 stm32u5 stm32wb sam3x samd11 samd21 samd51 samd5x_e5x same5x same7x saml2x samg tm4c
|
||||
lib/CMSIS_6 https://github.com/ARM-software/CMSIS_6.git b0bbb0423b278ca632cfe1474eb227961d835fd2 ra
|
||||
lib/FreeRTOS-Kernel https://github.com/FreeRTOS/FreeRTOS-Kernel.git cc0e0707c0c748713485b870bb980852b210877f all
|
||||
lib/lwip https://github.com/lwip-tcpip/lwip.git 159e31b689577dbf69cf0683bbaffbd71fa5ee10 all
|
||||
lib/sct_neopixel https://github.com/gsteiert/sct_neopixel.git e73e04ca63495672d955f9268e003cffe168fcd8 lpc55
|
||||
tools/uf2 https://github.com/microsoft/uf2.git c594542b2faa01cc33a2b97c9fbebc38549df80a all
|
||||
======================================== ============================================================== ======================================== ====================================================================================================================================================================================================================================================================================================================================
|
243
docs/reference/getting_started.rst
Normal file
243
docs/reference/getting_started.rst
Normal file
@ -0,0 +1,243 @@
|
||||
***************
|
||||
Getting Started
|
||||
***************
|
||||
|
||||
Add TinyUSB to your project
|
||||
---------------------------
|
||||
|
||||
It is relatively simple to incorporate tinyusb to your project
|
||||
|
||||
* Copy or ``git submodule`` this repo into your project in a subfolder. Let's say it is ``your_project/tinyusb``
|
||||
* Add all the ``.c`` in the ``tinyusb/src`` folder to your project
|
||||
* Add ``your_project/tinyusb/src`` to your include path. Also make sure your current include path also contains the configuration file ``tusb_config.h``.
|
||||
* Make sure all required macros are all defined properly in ``tusb_config.h`` (configure file in demo application is sufficient, but you need to add a few more such as ``CFG_TUSB_MCU``, ``CFG_TUSB_OS`` since they are passed by IDE/compiler to maintain a unique configure for all boards).
|
||||
* If you use the device stack, make sure you have created/modified usb descriptors for your own need. Ultimately you need to implement all **tud descriptor** callbacks for the stack to work.
|
||||
* Add ``tusb_init(rhport, role)`` call to your reset initialization code.
|
||||
* Call ``tusb_int_handler(rhport, in_isr)`` in your USB IRQ Handler
|
||||
* Implement all enabled classes's callbacks.
|
||||
* If you don't use any RTOSes at all, you need to continuously and/or periodically call ``tud_task()``/``tuh_task()`` function. All of the callbacks and functionality are handled and invoked within the call of that task runner.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
int main(void) {
|
||||
tusb_rhport_init_t dev_init = {
|
||||
.role = TUSB_ROLE_DEVICE,
|
||||
.speed = TUSB_SPEED_AUTO
|
||||
};
|
||||
tusb_init(0, &dev_init); // initialize device stack on roothub port 0
|
||||
|
||||
tusb_rhport_init_t host_init = {
|
||||
.role = TUSB_ROLE_HOST,
|
||||
.speed = TUSB_SPEED_AUTO
|
||||
};
|
||||
tusb_init(1, &host_init); // initialize host stack on roothub port 1
|
||||
|
||||
while(1) { // the mainloop
|
||||
your_application_code();
|
||||
tud_task(); // device task
|
||||
tuh_task(); // host task
|
||||
}
|
||||
}
|
||||
|
||||
void USB0_IRQHandler(void) {
|
||||
tusb_int_handler(0, true);
|
||||
}
|
||||
|
||||
void USB1_IRQHandler(void) {
|
||||
tusb_int_handler(1, true);
|
||||
}
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
For your convenience, TinyUSB contains a handful of examples for both host and device with/without RTOS to quickly test the functionality as well as demonstrate how API should be used. Most examples will work on most of `the supported boards <boards.rst>`_. Firstly we need to ``git clone`` if not already
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/hathach/tinyusb tinyusb
|
||||
$ cd tinyusb
|
||||
|
||||
Some ports will also require a port-specific SDK (e.g. RP2040) or binary (e.g. Sony Spresense) to build examples. They are out of scope for tinyusb, you should download/install it first according to its manufacturer guide.
|
||||
|
||||
Dependencies
|
||||
^^^^^^^^^^^^
|
||||
|
||||
The hardware code is located in ``hw/bsp`` folder, and is organized by family/boards. e.g raspberry_pi_pico is located in ``hw/bsp/rp2040/boards/raspberry_pi_pico`` where ``FAMILY=rp2040`` and ``BOARD=raspberry_pi_pico``. Before building, we firstly need to download dependencies such as: MCU low-level peripheral driver and external libraries e.g FreeRTOS (required by some examples). We can do that by either ways:
|
||||
|
||||
1. Run ``tools/get_deps.py {FAMILY}`` script to download all dependencies for a family as follow. Note: For TinyUSB developer to download all dependencies, use FAMILY=all.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ python tools/get_deps.py rp2040
|
||||
|
||||
2. Or run the ``get-deps`` target in one of the example folder as follow.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ cd examples/device/cdc_msc
|
||||
$ make BOARD=raspberry_pi_pico get-deps
|
||||
|
||||
You only need to do this once per family. Check out `complete list of dependencies and their designated path here <dependencies.rst>`_
|
||||
|
||||
Build
|
||||
^^^^^
|
||||
|
||||
To build example, first change directory to an example folder.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ cd examples/device/cdc_msc
|
||||
|
||||
Then compile with ``make BOARD={board_name} all`` , for example
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=raspberry_pi_pico all
|
||||
|
||||
Note: some examples especially those that uses Vendor class (e.g webUSB) may requires udev permission on Linux (and/or macOS) to access usb device. It depends on your OS distro, typically copy ``99-tinyusb.rules`` and reload your udev is good to go
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ cp examples/device/99-tinyusb.rules /etc/udev/rules.d/
|
||||
$ sudo udevadm control --reload-rules && sudo udevadm trigger
|
||||
|
||||
RootHub Port Selection
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If a board has several ports, one port is chosen by default in the individual board.mk file. Use option ``PORT=x`` To choose another port. For example to select the HS port of a STM32F746Disco board, use:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=stm32f746disco PORT=1 all
|
||||
|
||||
Port Speed
|
||||
~~~~~~~~~~
|
||||
|
||||
A MCU can support multiple operational speed. By default, the example build system will use the fastest supported on the board. Use option ``SPEED=full/high`` e.g To force F723 operate at full instead of default high speed
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=stm32f746disco SPEED=full all
|
||||
|
||||
Size Analysis
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
First install `linkermap tool <https://github.com/hathach/linkermap>`_ then ``linkermap`` target can be used to analyze code size. You may want to compile with ``NO_LTO=1`` since ``-flto`` merges code across ``.o`` files and make it difficult to analyze.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express NO_LTO=1 all linkermap
|
||||
|
||||
Debug
|
||||
^^^^^
|
||||
|
||||
To compile for debugging add ``DEBUG=1``\ , for example
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express DEBUG=1 all
|
||||
|
||||
Log
|
||||
~~~
|
||||
|
||||
Should you have an issue running example and/or submitting an bug report. You could enable TinyUSB built-in debug logging with optional ``LOG=``. ``LOG=1`` will only print out error message, ``LOG=2`` print more information with on-going events. ``LOG=3`` or higher is not used yet.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express LOG=2 all
|
||||
|
||||
Logger
|
||||
~~~~~~
|
||||
|
||||
By default log message is printed via on-board UART which is slow and take lots of CPU time comparing to USB speed. If your board support on-board/external debugger, it would be more efficient to use it for logging. There are 2 protocols:
|
||||
|
||||
|
||||
* `LOGGER=rtt`: use `Segger RTT protocol <https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/>`_
|
||||
|
||||
* Cons: requires jlink as the debugger.
|
||||
* Pros: work with most if not all MCUs
|
||||
* Software viewer is JLink RTT Viewer/Client/Logger which is bundled with JLink driver package.
|
||||
|
||||
* ``LOGGER=swo``\ : Use dedicated SWO pin of ARM Cortex SWD debug header.
|
||||
|
||||
* Cons: only work with ARM Cortex MCUs minus M0
|
||||
* Pros: should be compatible with more debugger that support SWO.
|
||||
* Software viewer should be provided along with your debugger driver.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express LOG=2 LOGGER=rtt all
|
||||
$ make BOARD=feather_nrf52840_express LOG=2 LOGGER=swo all
|
||||
|
||||
Flash
|
||||
^^^^^
|
||||
|
||||
``flash`` target will use the default on-board debugger (jlink/cmsisdap/stlink/dfu) to flash the binary, please install those support software in advance. Some board use bootloader/DFU via serial which is required to pass to make command
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express flash
|
||||
$ make SERIAL=/dev/ttyACM0 BOARD=feather_nrf52840_express flash
|
||||
|
||||
Since jlink can be used with most of the boards, there is also ``flash-jlink`` target for your convenience.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express flash-jlink
|
||||
|
||||
Some board use uf2 bootloader for drag & drop in to mass storage device, uf2 can be generated with ``uf2`` target
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make BOARD=feather_nrf52840_express all uf2
|
||||
|
||||
IAR Support
|
||||
-----------
|
||||
|
||||
Use project connection
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
IAR Project Connection files are provided to import TinyUSB stack into your project.
|
||||
|
||||
* A buildable project of your MCU need to be created in advance.
|
||||
|
||||
|
||||
* Take example of STM32F0:
|
||||
|
||||
- You need ``stm32l0xx.h``, ``startup_stm32f0xx.s``, ``system_stm32f0xx.c``.
|
||||
|
||||
- ``STM32L0xx_HAL_Driver`` is only needed to run examples, TinyUSB stack itself doesn't rely on MCU's SDKs.
|
||||
|
||||
* Open ``Tools -> Configure Custom Argument Variables`` (Switch to ``Global`` tab if you want to do it for all your projects)
|
||||
Click ``New Group ...``, name it to ``TUSB``, Click ``Add Variable ...``, name it to ``TUSB_DIR``, change it's value to the path of your TinyUSB stack,
|
||||
for example ``C:\\tinyusb``
|
||||
|
||||
Import stack only
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
1. Open ``Project -> Add project Connection ...``, click ``OK``, choose ``tinyusb\\tools\\iar_template.ipcf``.
|
||||
|
||||
Run examples
|
||||
~~~~~~~~~~~~
|
||||
|
||||
1. (Python3 is needed) Run ``iar_gen.py`` to generate .ipcf files of examples:
|
||||
|
||||
.. code-block::
|
||||
|
||||
> cd C:\tinyusb\tools
|
||||
> python iar_gen.py
|
||||
|
||||
2. Open ``Project -> Add project Connection ...``, click ``OK``, choose ``tinyusb\\examples\\(.ipcf of example)``.
|
||||
For example ``C:\\tinyusb\\examples\\device\\cdc_msc\\iar_cdc_msc.ipcf``
|
||||
|
||||
Native CMake support (9.50.1+)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
With 9.50.1 release, IAR added experimental native CMake support (strangely not mentioned in public release note). Now it's possible to import CMakeLists.txt then build and debug as a normal project.
|
||||
|
||||
Following these steps:
|
||||
|
||||
1. Add IAR compiler binary path to system ``PATH`` environment variable, such as ``C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\bin``.
|
||||
2. Create new project in IAR, in Tool chain dropdown menu, choose CMake for Arm then Import ``CMakeLists.txt`` from chosen example directory.
|
||||
3. Set up board option in ``Option - CMake/CMSIS-TOOLBOX - CMake``, for example ``-DBOARD=stm32f439nucleo -DTOOLCHAIN=iar``, **Uncheck 'Override tools in env'**.
|
||||
4. (For debug only) Choose correct CPU model in ``Option - General Options - Target``, to profit register and memory view.
|
10
docs/reference/index.rst
Normal file
10
docs/reference/index.rst
Normal file
@ -0,0 +1,10 @@
|
||||
Index
|
||||
=====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
getting_started
|
||||
boards
|
||||
dependencies
|
||||
concurrency
|
4
docs/requirements.txt
Normal file
4
docs/requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
sphinx>=5.0
|
||||
furo>=2020.12.30.b24
|
||||
sphinx-autodoc-typehints>=1.10
|
||||
jinja2>=3.0.3
|
11
examples/CMakeLists.txt
Normal file
11
examples/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
#set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../hw/bsp/family_support.cmake)
|
||||
|
||||
project(tinyusb_examples C CXX ASM)
|
||||
|
||||
add_subdirectory(device)
|
||||
add_subdirectory(dual)
|
||||
add_subdirectory(host)
|
||||
add_subdirectory(typec)
|
6
examples/CMakePresets.json
Normal file
6
examples/CMakePresets.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 6,
|
||||
"include": [
|
||||
"../hw/bsp/BoardPresets.json"
|
||||
]
|
||||
}
|
21
examples/build_system/cmake/cpu/arm1176jzf-s.cmake
Normal file
21
examples/build_system/cmake/cpu/arm1176jzf-s.cmake
Normal file
@ -0,0 +1,21 @@
|
||||
if (TOOLCHAIN STREQUAL "gcc")
|
||||
set(TOOLCHAIN_COMMON_FLAGS
|
||||
-mcpu=arm1176jzf-s
|
||||
-ffreestanding
|
||||
)
|
||||
# set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
|
||||
|
||||
elseif (TOOLCHAIN STREQUAL "clang")
|
||||
set(TOOLCHAIN_COMMON_FLAGS
|
||||
--target=arm-none-eabi
|
||||
-mcpu=arm1176jzf-s
|
||||
-mfpu=none
|
||||
-mfloat-abi=soft
|
||||
-ffreestanding
|
||||
)
|
||||
#set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
|
||||
|
||||
elseif (TOOLCHAIN STREQUAL "iar")
|
||||
message(FATAL_ERROR "IAR not supported")
|
||||
|
||||
endif ()
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user