Compare commits
1709 Commits
v1.0.0
...
2023_open_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e03b3b390a | ||
|
|
0aa73a14c2 | ||
|
|
5a10e4153c | ||
|
|
b3f473ec86 | ||
|
|
d35d0bedb2 | ||
|
|
4b579d1c8f | ||
|
|
dfa6b664ac | ||
|
|
eed7d2f37c | ||
|
|
261a2a1653 | ||
|
|
ad2dba22c3 | ||
|
|
6a2e18806a | ||
|
|
eca32c203b | ||
|
|
c3e686c50b | ||
|
|
ab77fe8a09 | ||
|
|
a883474327 | ||
|
|
77b6b8cb97 | ||
|
|
91ee0f7b28 | ||
|
|
c7bbf2935f | ||
|
|
21785c37ee | ||
|
|
0705bdaf1a | ||
|
|
2b44a0c6fb | ||
|
|
d4b47088d2 | ||
|
|
dc25947261 | ||
|
|
c508c2d43b | ||
|
|
1cf3baeb2e | ||
|
|
24023fd343 | ||
|
|
341cfd34bd | ||
|
|
196a8e001a | ||
|
|
3fe9cf3d91 | ||
|
|
3f1be486cf | ||
|
|
f82f41ade7 | ||
|
|
c17c899ea7 | ||
|
|
648aaaae90 | ||
|
|
dd4cfd93c6 | ||
|
|
699c04e94d | ||
|
|
1e651e74b4 | ||
|
|
bc8b003c1e | ||
|
|
56216a530d | ||
|
|
f962cf6919 | ||
|
|
ca0ef77764 | ||
|
|
7f14d047cb | ||
|
|
b8335863ba | ||
|
|
5039ebc85f | ||
|
|
03751e3d1e | ||
|
|
380aa361fe | ||
|
|
ff720789ab | ||
|
|
30b98101ec | ||
|
|
e07d4e2711 | ||
|
|
f85dfb3ccf | ||
|
|
499047e31b | ||
|
|
11ae2bd7da | ||
|
|
bf505768e8 | ||
|
|
0f77f4e86b | ||
|
|
682460747b | ||
|
|
58fe8fc887 | ||
|
|
cf565f5d69 | ||
|
|
40cedd339c | ||
|
|
6c40800dfe | ||
|
|
cc4106dd11 | ||
|
|
e055ffdc2c | ||
|
|
014e51c0ad | ||
|
|
339ea93b09 | ||
|
|
6228e76194 | ||
|
|
5a02b89ffc | ||
|
|
274759aafb | ||
|
|
cb785cf8a1 | ||
|
|
d50d16bc86 | ||
|
|
e745fc9129 | ||
|
|
d884774bca | ||
|
|
085c418faa | ||
|
|
159159ecde | ||
|
|
b82a86d5c0 | ||
|
|
c326f7189e | ||
|
|
6bc375c316 | ||
|
|
4d2e4498cc | ||
|
|
83681208ec | ||
|
|
fb368d24a9 | ||
|
|
aefe92d67d | ||
|
|
efba3f3bf3 | ||
|
|
31b939fbb8 | ||
|
|
a1df906d16 | ||
|
|
74c04f2dbd | ||
|
|
2615c5aab3 | ||
|
|
8c601b031a | ||
|
|
488419a6d0 | ||
|
|
fd608d8e81 | ||
|
|
3fc12f67b9 | ||
|
|
5bb0f2aaf5 | ||
|
|
610810da32 | ||
|
|
e2c32e9e72 | ||
|
|
4b75e1283a | ||
|
|
ff9a1645bd | ||
|
|
8b32c2f4ed | ||
|
|
0278d54a24 | ||
|
|
1c775d42f6 | ||
|
|
1f21fc15b2 | ||
|
|
355e717cb8 | ||
|
|
deb1f63d9e | ||
|
|
68b7484fc5 | ||
|
|
a5a809aa0a | ||
|
|
a289c0d653 | ||
|
|
0f32060aea | ||
|
|
f4c9edd070 | ||
|
|
f848f36efb | ||
|
|
202a43cbcb | ||
|
|
4c9cc39801 | ||
|
|
48c40541f9 | ||
|
|
cdb2be7ca4 | ||
|
|
feb0d29fc9 | ||
|
|
aef55df1dc | ||
|
|
fdc1783300 | ||
|
|
379045d7eb | ||
|
|
7447152767 | ||
|
|
df7de36516 | ||
|
|
3ba4aa845f | ||
|
|
a7d6f8215e | ||
|
|
fbeb75d1f1 | ||
|
|
a6f1215923 | ||
|
|
a274a809cc | ||
|
|
51a5fa5563 | ||
|
|
859184945f | ||
|
|
1eb783cc18 | ||
|
|
7d3d4651d3 | ||
|
|
90b7740ca0 | ||
|
|
7077cf74c2 | ||
|
|
d73470de3c | ||
|
|
34e855a3a9 | ||
|
|
dd383ef424 | ||
|
|
3896242622 | ||
|
|
167bc3c047 | ||
|
|
dd35692866 | ||
|
|
586ceba08e | ||
|
|
a9ebe1e96d | ||
|
|
6d9b66f05f | ||
|
|
d1a198a4bc | ||
|
|
0e82fac640 | ||
|
|
bcf75bd62f | ||
|
|
379cd567a2 | ||
|
|
8becc52a90 | ||
|
|
5f642507b4 | ||
|
|
ed67ff5c62 | ||
| 8c1ad40f81 | |||
| 5510123098 | |||
| d6e7637128 | |||
| 6a2a006a3f | |||
|
|
87a57d0db0 | ||
|
|
da7220a60c | ||
|
|
3acc7e431f | ||
|
|
a51ef1c41f | ||
|
|
e29eb633ca | ||
|
|
63b02913e4 | ||
|
|
ec318c603a | ||
|
|
53619b9b99 | ||
|
|
ec7d9f1fcd | ||
|
|
b481abd4eb | ||
|
|
aa6fb2a8b0 | ||
|
|
3c1129d88a | ||
|
|
27734606f5 | ||
|
|
62eda1e3fa | ||
|
|
e9b4a0de6c | ||
|
|
219575898a | ||
|
|
06b9d67f2d | ||
|
|
ee10eccb26 | ||
|
|
fce13fe874 | ||
|
|
fc4411dad4 | ||
|
|
a25eccfac8 | ||
|
|
0307fb2671 | ||
|
|
b04544f842 | ||
|
|
3efe663ee0 | ||
|
|
8effd59528 | ||
|
|
c56298fa99 | ||
|
|
2df7b63f03 | ||
|
|
9c0eced907 | ||
|
|
21ca38158e | ||
|
|
20ffe20c36 | ||
|
|
1a6ee0234b | ||
|
|
269bc1e3de | ||
|
|
02089a48ee | ||
|
|
6559210341 | ||
|
|
8010ba6a36 | ||
|
|
dd09d79a89 | ||
|
|
4ed02888a2 | ||
|
|
d00ff88dfb | ||
|
|
20037285c0 | ||
|
|
829d0cf836 | ||
|
|
0d80fb6473 | ||
|
|
69d86ef4e4 | ||
|
|
9cb7267371 | ||
|
|
3e13499000 | ||
|
|
a9140851c2 | ||
|
|
3a5c0f44ec | ||
|
|
8b43b56c56 | ||
|
|
077a4e1276 | ||
|
|
c8c5833a6e | ||
|
|
7968c0761d | ||
|
|
4b85ab3058 | ||
|
|
b901be4553 | ||
|
|
b0eabde4f6 | ||
|
|
d8265d3579 | ||
|
|
0d1a4e5f31 | ||
|
|
10482724a9 | ||
|
|
b779734061 | ||
|
|
2a27cc550d | ||
|
|
7740e3c5ef | ||
|
|
8bd8187e82 | ||
|
|
616332962b | ||
|
|
d8021b55f8 | ||
|
|
27e9613dcf | ||
|
|
5baf461e48 | ||
|
|
0aadf64012 | ||
|
|
813b175ca3 | ||
|
|
d663ca7193 | ||
|
|
24fcbb54e8 | ||
|
|
b9e5e97741 | ||
|
|
e0d7761685 | ||
|
|
1ddd8982fb | ||
|
|
2626acd70c | ||
|
|
02b676e910 | ||
|
|
fd48a45c15 | ||
|
|
2610b9295a | ||
|
|
5869154cca | ||
|
|
115f6671e1 | ||
|
|
d33184cbd9 | ||
|
|
c06138364f | ||
|
|
455fd31c7f | ||
|
|
edd5a5ccb9 | ||
|
|
d7aa29e0df | ||
|
|
3aad797827 | ||
|
|
336b733a51 | ||
|
|
1086321a63 | ||
|
|
2638268135 | ||
|
|
42e3b261ab | ||
|
|
3c179e7879 | ||
|
|
7691b90abb | ||
|
|
5900b504e3 | ||
|
|
a95841c277 | ||
|
|
6f3d3b8862 | ||
|
|
200380a92e | ||
|
|
87921c4212 | ||
|
|
9fa479815c | ||
|
|
cf85c4b99c | ||
|
|
5c08cae005 | ||
|
|
dd43dd6d17 | ||
|
|
555b014bc9 | ||
|
|
9995980a1a | ||
|
|
ed1c5eea1f | ||
|
|
26f74120db | ||
|
|
9686534e10 | ||
|
|
b49b3a8107 | ||
|
|
fb9250181f | ||
|
|
5d8375caee | ||
|
|
0cc0693600 | ||
|
|
dcea61d5e0 | ||
|
|
e9b538c2dc | ||
|
|
5a1fe0be3b | ||
|
|
abe0e452f9 | ||
|
|
d60a3475f6 | ||
|
|
e48bd6fd67 | ||
|
|
5b692bd0a5 | ||
|
|
f2b64e4306 | ||
|
|
8ecb3a8804 | ||
|
|
5faa3e7b5a | ||
|
|
938d46d5d9 | ||
|
|
c6af847c73 | ||
|
|
788eb53f39 | ||
|
|
7ba883affe | ||
|
|
3463c8515f | ||
|
|
f82d6d0c24 | ||
|
|
f59139f78e | ||
|
|
0a375fd373 | ||
|
|
67818fbdb8 | ||
|
|
30161b7f24 | ||
|
|
08877cf72d | ||
|
|
832ebbfaec | ||
|
|
c7ac5681e4 | ||
|
|
6601e228f2 | ||
|
|
b545031e5e | ||
|
|
b3563c899d | ||
|
|
a110ab511c | ||
|
|
0788041dcc | ||
|
|
7754a149a9 | ||
|
|
93a8685c31 | ||
|
|
ad944a88d7 | ||
|
|
089f9c8975 | ||
|
|
a056aea50e | ||
|
|
c40518d226 | ||
|
|
b2c76bcac5 | ||
|
|
44810118af | ||
|
|
d67d8e96f0 | ||
|
|
8e5250f047 | ||
|
|
0549dcd363 | ||
|
|
7b427dd3c3 | ||
| 4e5e123799 | |||
| 65220e5aa7 | |||
| 3d5ca66e7a | |||
|
|
13432d41c6 | ||
|
|
3e3cd6ecdc | ||
|
|
6d9cae19c2 | ||
|
|
ffeaf4771e | ||
|
|
01848defec | ||
|
|
07b87016ba | ||
|
|
d90f3e5dac | ||
|
|
db3784b928 | ||
|
|
a9c7733e1e | ||
|
|
61f317abed | ||
|
|
a656ffaa66 | ||
|
|
b97b9c49cd | ||
|
|
4429d743ba | ||
|
|
7aac1926f3 | ||
|
|
91ae4320fa | ||
|
|
12c24ddc73 | ||
|
|
39c8ee354b | ||
|
|
65603817a4 | ||
|
|
912f87ecc9 | ||
|
|
9c5c6b32b1 | ||
|
|
7629077769 | ||
|
|
d3df1f97ef | ||
|
|
c4510ba3e1 | ||
|
|
012111c2cc | ||
|
|
872aba7ccd | ||
|
|
87dc5269ee | ||
|
|
48decbe80f | ||
|
|
9109db0d94 | ||
|
|
e0bc75c405 | ||
|
|
d6ff73acab | ||
|
|
2532ae43d4 | ||
|
|
b825fd7f84 | ||
|
|
813ca3dd20 | ||
|
|
d471bc04db | ||
|
|
2df93dc327 | ||
|
|
078f4babf1 | ||
|
|
33abc16c67 | ||
|
|
4b40ae19dc | ||
|
|
b37885b839 | ||
|
|
042a51dc36 | ||
|
|
fb27201603 | ||
|
|
1161db389d | ||
|
|
0ecb29c887 | ||
|
|
af665f9f29 | ||
|
|
7b33905b3e | ||
|
|
2ec0e796fe | ||
|
|
e231a29f5a | ||
|
|
4f72b78b96 | ||
|
|
8ae4bce9a5 | ||
|
|
20d9a52bdb | ||
|
|
b38e5c1c5c | ||
|
|
54d6c01868 | ||
|
|
d24eb9a57c | ||
|
|
84f78b6435 | ||
|
|
a894bc8940 | ||
|
|
3d16b694dd | ||
|
|
cfadebc3e8 | ||
|
|
6074b2b147 | ||
|
|
692e010e0d | ||
|
|
8bc7546828 | ||
|
|
c63301a870 | ||
|
|
94c6631a24 | ||
|
|
dc5537a64f | ||
|
|
2b3f3de22e | ||
|
|
a9deff5cd0 | ||
|
|
bbb8dd75f8 | ||
|
|
198fabf970 | ||
|
|
5677cd0768 | ||
|
|
0c45a736d3 | ||
|
|
3d9160fa44 | ||
|
|
6b41cdbcfe | ||
|
|
ba7e1a0d3b | ||
|
|
0a58099c51 | ||
|
|
f0240eb702 | ||
|
|
2db9716cc0 | ||
|
|
640c5e6f59 | ||
|
|
e6390ecf73 | ||
|
|
84f453d4ac | ||
|
|
f33c50b97e | ||
|
|
cc8f577ba4 | ||
|
|
85105cb65d | ||
|
|
d615793063 | ||
|
|
3819716568 | ||
|
|
60e1c1bf8f | ||
|
|
669ef1eb2b | ||
|
|
95b049e636 | ||
|
|
a3377c21b6 | ||
|
|
8a589d0eaa | ||
|
|
58057e0b5e | ||
|
|
08388f1b11 | ||
|
|
0a3ba23753 | ||
|
|
0a71b8b62a | ||
|
|
cf1d5a234b | ||
|
|
83d383feab | ||
|
|
47cea831ba | ||
|
|
a4eec2646d | ||
|
|
4db0c44434 | ||
|
|
1776223332 | ||
|
|
79edaf3d17 | ||
|
|
5e499bf975 | ||
|
|
d797a999ae | ||
|
|
a16223f850 | ||
|
|
abba2ce735 | ||
|
|
419b53594f | ||
|
|
179c894840 | ||
|
|
5ae31a37f3 | ||
|
|
195e0085db | ||
|
|
4b0783ab07 | ||
|
|
27ad06f4c1 | ||
|
|
0996e47b88 | ||
|
|
d7e72942b5 | ||
|
|
779444f998 | ||
|
|
35dc835d12 | ||
|
|
918b3663b8 | ||
|
|
eed171df2a | ||
|
|
9b3c321150 | ||
|
|
a286b2292f | ||
|
|
1655d28d63 | ||
|
|
5dc639a133 | ||
|
|
bebc65607e | ||
|
|
7fee9d9e9f | ||
|
|
10c39d930c | ||
|
|
73fbeea117 | ||
|
|
e0c9761f75 | ||
|
|
002325c1d8 | ||
|
|
1b73886dbc | ||
|
|
572cbd201a | ||
|
|
0ebfda21f7 | ||
|
|
3a5d63762b | ||
|
|
3950a6ec28 | ||
|
|
ba51d8ba8e | ||
|
|
c88ce9d708 | ||
|
|
bfe1e72378 | ||
|
|
e6fa8a2603 | ||
|
|
732320f5c9 | ||
|
|
3a6b5d7f4f | ||
|
|
8632d37d14 | ||
|
|
bcb5e48d6a | ||
|
|
d2e6719a0e | ||
|
|
f55da28789 | ||
|
|
b2de31844a | ||
|
|
a590d902f5 | ||
|
|
60dbe78045 | ||
|
|
ff78fcc100 | ||
|
|
aea6a4f63e | ||
|
|
d1da6ae35b | ||
|
|
df2a1043df | ||
|
|
d144306f76 | ||
|
|
55654af275 | ||
|
|
fb11970cab | ||
|
|
806492e271 | ||
|
|
8001b07341 | ||
|
|
c621db2ca7 | ||
|
|
f8b845ca62 | ||
|
|
9ad282c39e | ||
|
|
a4e37b962f | ||
|
|
e4742a480c | ||
|
|
6b091797ae | ||
|
|
e37d8ed7d1 | ||
|
|
1a0880c3f2 | ||
|
|
6010fe5654 | ||
|
|
a7bdd89097 | ||
|
|
32bf012d9a | ||
|
|
ce60710fe6 | ||
|
|
9f6419e5f6 | ||
|
|
4edf73254e | ||
|
|
b933e0decb | ||
|
|
0b5c6b0f9f | ||
|
|
6b4097b941 | ||
|
|
d57552e223 | ||
|
|
4f7f98b0e9 | ||
|
|
27cc89bcef | ||
|
|
38c4419ef9 | ||
|
|
bc014769f5 | ||
|
|
4e1bc3bf04 | ||
|
|
5761bd0916 | ||
|
|
186790f5ec | ||
|
|
1864f39dd2 | ||
|
|
59fa5451ca | ||
|
|
5a64507a84 | ||
|
|
56a014fe98 | ||
|
|
9b334f90e0 | ||
|
|
6a89a12c49 | ||
|
|
04dc796f95 | ||
|
|
a3094c1dd6 | ||
|
|
2df54e7f41 | ||
|
|
6ef80903ce | ||
|
|
4f85bc91e5 | ||
|
|
5622be48ac | ||
|
|
669b7f427e | ||
|
|
b20f041722 | ||
|
|
e802403362 | ||
|
|
19b16f7729 | ||
|
|
465241e569 | ||
|
|
dc8244cc5d | ||
|
|
d0902ca37f | ||
|
|
6fa996d132 | ||
|
|
a782b53423 | ||
|
|
5a3954b726 | ||
|
|
0b49dd1a3c | ||
|
|
9b83bc586e | ||
|
|
2757649473 | ||
|
|
100fe8c2d0 | ||
|
|
4fd39c0dd7 | ||
|
|
d8ac0998b2 | ||
|
|
f1029b81c3 | ||
|
|
1f97dd3d77 | ||
|
|
e5bf0cee41 | ||
|
|
d845bd61b6 | ||
|
|
334d5f1eee | ||
|
|
0125fdf0ef | ||
|
|
22e35a70aa | ||
|
|
8583ea25b6 | ||
|
|
ba31c9e0f8 | ||
|
|
f4b21208e8 | ||
|
|
2a01ff712d | ||
|
|
bc47ae644f | ||
|
|
31189c2939 | ||
|
|
1061ce4dff | ||
|
|
c1976c8d92 | ||
|
|
0d93a91829 | ||
|
|
7145cd6920 | ||
|
|
2a8a11849d | ||
|
|
49df162734 | ||
|
|
5560fc5318 | ||
|
|
987fd6c798 | ||
|
|
ebc61431bd | ||
|
|
7c252bda56 | ||
|
|
e31199a104 | ||
|
|
68cdcbdcce | ||
|
|
06ed03337a | ||
|
|
72e09d82e7 | ||
|
|
164614a75a | ||
|
|
75259c4006 | ||
|
|
992b8f62ab | ||
|
|
afc27bce65 | ||
|
|
96baeb9482 | ||
|
|
2a07e463f6 | ||
|
|
629e8893e3 | ||
|
|
f22fbc3c94 | ||
|
|
14f0e442ad | ||
|
|
32c8701391 | ||
|
|
452699ac02 | ||
|
|
77bae67322 | ||
|
|
02cbcf2b23 | ||
|
|
2bfd6c9aaa | ||
|
|
8bb59ddf3a | ||
|
|
8c929ba701 | ||
|
|
e7175c2745 | ||
|
|
e746639f8a | ||
|
|
d89e018d33 | ||
|
|
c7c7e700ca | ||
|
|
5d6aa56f29 | ||
|
|
00b39cdd55 | ||
|
|
b8cf052d49 | ||
|
|
d3836f1a6f | ||
|
|
33984d8872 | ||
|
|
2bc1de068c | ||
|
|
4f15f1e70b | ||
|
|
d6495c03d2 | ||
|
|
696c9f6fe0 | ||
|
|
9a818b1ef4 | ||
|
|
b5e08c5d43 | ||
|
|
636f803b7b | ||
|
|
51ebd8f604 | ||
|
|
5f4922866e | ||
|
|
d0e42a9b51 | ||
|
|
107913cb61 | ||
|
|
7361d1c65f | ||
|
|
9965ce4c43 | ||
|
|
a39bc41597 | ||
|
|
3352d4be6b | ||
|
|
485555b3a2 | ||
|
|
0bb057c642 | ||
|
|
094986ac76 | ||
|
|
2e383f0c85 | ||
|
|
3c7f322fca | ||
|
|
0504cf0e48 | ||
|
|
234f4fc2ed | ||
|
|
5d0c0f944e | ||
|
|
d2192a0cb1 | ||
|
|
8e5c61c487 | ||
|
|
1a846ba3ae | ||
|
|
6ccaf3f928 | ||
|
|
2d7d5d121d | ||
|
|
7a8766a74d | ||
|
|
7869538b1d | ||
|
|
f9d4484a57 | ||
|
|
15ae618a3b | ||
|
|
b693f91f30 | ||
|
|
c541128122 | ||
|
|
de947e0942 | ||
|
|
4cbb9d5f09 | ||
|
|
a04a4288a7 | ||
|
|
3cddeb1985 | ||
|
|
bf916323e8 | ||
|
|
490d372b47 | ||
|
|
f1515ba075 | ||
|
|
2ce43f3a1b | ||
|
|
6794cb03a8 | ||
|
|
166f88fd46 | ||
|
|
db2faeeba6 | ||
|
|
c815bb3b6e | ||
|
|
df32ed24ed | ||
|
|
0f2f2028ca | ||
|
|
a4f183c62a | ||
|
|
a11ff29402 | ||
|
|
e26c93a666 | ||
|
|
9802c89fd6 | ||
|
|
700a07bc84 | ||
|
|
f2e633348a | ||
|
|
64da177d6a | ||
|
|
deb247165a | ||
|
|
b7a3657c83 | ||
|
|
37bdc4a33f | ||
|
|
9c15e587c4 | ||
|
|
c612502cdc | ||
|
|
f573bc391c | ||
|
|
ba84afb179 | ||
|
|
5c4cf7aba8 | ||
|
|
2b099b8bf5 | ||
|
|
256857b6c5 | ||
|
|
43fdd542da | ||
|
|
891addbfc0 | ||
|
|
b073c38035 | ||
|
|
0f1d2a4868 | ||
|
|
a1ddea8e5e | ||
|
|
b65663af4c | ||
|
|
32fc849390 | ||
|
|
540c9a84d5 | ||
|
|
9fcd539f1b | ||
|
|
012fc146cc | ||
|
|
0b4a3ec960 | ||
|
|
7b17d191fb | ||
|
|
7079f86acb | ||
|
|
7dc887e516 | ||
|
|
ecba6148cb | ||
|
|
48250b7285 | ||
|
|
32b54cee33 | ||
|
|
cd850b90cd | ||
|
|
7052951624 | ||
|
|
51f346e935 | ||
|
|
a154353bbe | ||
|
|
3fa418120c | ||
|
|
088bf02fbd | ||
|
|
281389af1c | ||
|
|
c5872c051e | ||
|
|
104823e26f | ||
|
|
e14fa6ff8e | ||
|
|
6603f121c6 | ||
|
|
485911f15f | ||
|
|
dbca22a1a6 | ||
|
|
96b059cabe | ||
|
|
dcc91fd4a9 | ||
|
|
00c4d601f4 | ||
|
|
fd69c3d400 | ||
|
|
3bc1cffa33 | ||
|
|
0ac4dc05fc | ||
|
|
bcff330830 | ||
|
|
853454058f | ||
|
|
c4eaff938b | ||
|
|
55c8de20d9 | ||
|
|
3bec8f496a | ||
|
|
61fee4da26 | ||
|
|
414c82e83d | ||
|
|
ea3d2f4410 | ||
|
|
43e14a9d52 | ||
|
|
85ed3a2c10 | ||
|
|
6c80a2da18 | ||
|
|
b5495f108a | ||
|
|
7c709bfe9f | ||
|
|
48b454ab70 | ||
|
|
0bacf4bd1d | ||
|
|
3833a4277a | ||
|
|
1fd4e3981d | ||
|
|
5759661e8c | ||
|
|
587ab693c1 | ||
|
|
6c6ef02455 | ||
|
|
15c70aa2b8 | ||
|
|
c014727e2c | ||
|
|
e4f2c3e5aa | ||
|
|
5de4b9eec0 | ||
|
|
b5b3cb9ca7 | ||
|
|
f55022fc46 | ||
|
|
09ff679c4c | ||
|
|
2756937f88 | ||
|
|
5f42111c38 | ||
|
|
f376e568fd | ||
|
|
944225b7ad | ||
|
|
8df0563e64 | ||
|
|
22de65aa20 | ||
|
|
76017d0d0d | ||
|
|
27b546c269 | ||
|
|
6fc09a8864 | ||
|
|
4167f1f0f9 | ||
|
|
d5e47d36f4 | ||
|
|
1ce5ee8e8b | ||
|
|
125a1d1c61 | ||
|
|
8ccf8875ee | ||
|
|
48199d551c | ||
|
|
b5783ca4c5 | ||
|
|
1293577e93 | ||
|
|
afe2a7766d | ||
|
|
0a629fc69d | ||
|
|
50b40bcf1f | ||
|
|
0526e73a6a | ||
|
|
c69397a2b7 | ||
|
|
83112073a9 | ||
|
|
fe21a461a5 | ||
|
|
bf9b87a314 | ||
|
|
252edf1add | ||
|
|
e812b5a49f | ||
|
|
7c30bd3601 | ||
|
|
f9984b5b7d | ||
|
|
92a33bff87 | ||
|
|
d1d41d3990 | ||
|
|
f50ba5292c | ||
|
|
8256124e03 | ||
|
|
88ab1d870d | ||
|
|
ad0132f739 | ||
|
|
bfa8c734c4 | ||
|
|
bcaf4ac6fc | ||
|
|
bdec0d6e20 | ||
|
|
8f6078d40c | ||
|
|
4bee455984 | ||
|
|
8fb4c35a35 | ||
|
|
75a9e76257 | ||
|
|
4a39d325b2 | ||
|
|
38c2864c73 | ||
|
|
a70a31d282 | ||
|
|
9da05bd4b1 | ||
|
|
0de30975aa | ||
|
|
3ec17025d1 | ||
|
|
ba03024617 | ||
|
|
c6bef5fbec | ||
|
|
1bd7200e44 | ||
|
|
357abd6cb0 | ||
|
|
8e5b942427 | ||
|
|
4745f77708 | ||
|
|
0b0b4c24ed | ||
|
|
906398da9f | ||
|
|
cb4a9d03e0 | ||
|
|
21dce4f25e | ||
|
|
214cf55603 | ||
|
|
d94a57c919 | ||
|
|
0927e2e510 | ||
|
|
b1d443ee63 | ||
|
|
4b8e015b26 | ||
|
|
dde22ee0b8 | ||
|
|
d27685965c | ||
|
|
931bc172c1 | ||
|
|
9c0db7ae2d | ||
|
|
e1999f5af9 | ||
|
|
1818e23744 | ||
|
|
6a9b9fba1a | ||
|
|
b585a6ae92 | ||
|
|
6133b5de21 | ||
|
|
7cbccb7eaf | ||
|
|
6404f81ca6 | ||
|
|
308d50c640 | ||
|
|
229749707f | ||
|
|
a6a50a06a0 | ||
|
|
4ff3ad23f4 | ||
|
|
31d11ad641 | ||
|
|
da6f795954 | ||
|
|
71f00ec06f | ||
|
|
4570539016 | ||
|
|
dbe85523c7 | ||
|
|
48c49a83ed | ||
|
|
2ac3d0abdf | ||
|
|
c85fc70551 | ||
|
|
a079e445f9 | ||
|
|
64c65711a1 | ||
|
|
c5a0cbf95e | ||
|
|
d9ecebcf9f | ||
|
|
82af485b5f | ||
|
|
8eca1f72ff | ||
|
|
74fd934a02 | ||
|
|
b4a92c91f5 | ||
|
|
314f162836 | ||
|
|
10b9f4051c | ||
|
|
d28caa835a | ||
|
|
92960a1c5d | ||
|
|
f44c9fe442 | ||
|
|
0b902da332 | ||
|
|
c47aaa6cba | ||
|
|
da565b079d | ||
|
|
1a6f47cf49 | ||
|
|
ebad51e48a | ||
|
|
48c2dde093 | ||
|
|
2c9897e10d | ||
|
|
ee79cd0927 | ||
|
|
9f0a316c6d | ||
|
|
c2d7562f46 | ||
|
|
109de8911b | ||
|
|
f621522551 | ||
|
|
443c0a414d | ||
|
|
45ba8d84ee | ||
|
|
6d77165a86 | ||
|
|
b517740d32 | ||
|
|
c8fc05a0f9 | ||
|
|
c4ab73350b | ||
|
|
3165f2f565 | ||
|
|
e910d5f237 | ||
|
|
72f269ea5d | ||
|
|
6156314ba7 | ||
|
|
3bcbcd6499 | ||
|
|
244fcb9e5d | ||
|
|
310282628f | ||
|
|
81fbf93dd2 | ||
|
|
15a8589770 | ||
|
|
635280ab4b | ||
|
|
2f4e67ae87 | ||
|
|
b605bb5bc1 | ||
|
|
c6e7a6d446 | ||
|
|
1d023c9504 | ||
|
|
d5e16cd9ac | ||
|
|
9d1e3b8ef3 | ||
|
|
31f03a56d6 | ||
|
|
c50767094a | ||
|
|
6d73307caf | ||
|
|
922a3ceef2 | ||
|
|
736189f855 | ||
|
|
320998dee5 | ||
|
|
4e4d6ce223 | ||
|
|
b0e6e4fe49 | ||
|
|
458a7c5d91 | ||
|
|
68179bec6c | ||
|
|
b7648f0f08 | ||
|
|
7e1307a3bb | ||
|
|
1a6e847b6b | ||
|
|
ed8fda915b | ||
|
|
578680f6e5 | ||
|
|
626f2486ef | ||
|
|
bc7913a713 | ||
|
|
29a205e467 | ||
|
|
1d1d394125 | ||
|
|
42cf1290d1 | ||
|
|
cac43f78bf | ||
|
|
f5f9dbe59d | ||
|
|
ebf362bc89 | ||
|
|
517825a52f | ||
|
|
fc60ae4dbd | ||
|
|
ad84a842b0 | ||
|
|
677457daac | ||
|
|
f7ba07eaea | ||
|
|
6bedd6272e | ||
|
|
1ba170c1d2 | ||
|
|
284ea0b00f | ||
|
|
3e36e1c89f | ||
|
|
66d30ed255 | ||
|
|
4ee205876a | ||
|
|
f2355281b1 | ||
|
|
090311b027 | ||
|
|
76039a8f02 | ||
|
|
87fade218f | ||
|
|
876a6c8ff1 | ||
|
|
888d981f8f | ||
|
|
582a5a4043 | ||
|
|
8845864e46 | ||
|
|
8f86dddd57 | ||
|
|
8b82b0cb65 | ||
|
|
65d7a2b1a0 | ||
|
|
f0f1b1c988 | ||
|
|
b3d51efc13 | ||
|
|
8e1f0e1af0 | ||
|
|
7b94b5369e | ||
|
|
5f49d2ba87 | ||
|
|
0c5d9c69d1 | ||
|
|
5af3bceb66 | ||
|
|
1f5d4ac765 | ||
|
|
fabd29aef6 | ||
|
|
6fa7044678 | ||
|
|
24bf772c3f | ||
|
|
2b35970b06 | ||
|
|
222024d857 | ||
|
|
b0b4ea61bb | ||
|
|
e67810a7f6 | ||
|
|
a5bdaad121 | ||
|
|
e72b6aa7c5 | ||
|
|
a6f5a5f79d | ||
|
|
44e0057f2d | ||
|
|
80e08450fe | ||
|
|
c14f2f73e0 | ||
|
|
f5f8fbb38b | ||
|
|
9f0da7fdbf | ||
|
|
5ed641a8fe | ||
|
|
8c23dc14d6 | ||
|
|
4d20855da3 | ||
|
|
e0a47613c3 | ||
|
|
7be59f8417 | ||
|
|
7607282f2a | ||
|
|
d57d8e0a4d | ||
|
|
0a2ef3aba3 | ||
|
|
f1e103ce2f | ||
|
|
7ea3b595c2 | ||
|
|
fefbc902f1 | ||
|
|
c6c0a0f71b | ||
|
|
ad309f90c1 | ||
|
|
2bd07aa244 | ||
|
|
a62208c1c6 | ||
|
|
6f6860618e | ||
|
|
a9410bd9b1 | ||
|
|
b9d2ccee80 | ||
|
|
8d036c46ce | ||
|
|
a8f36fd085 | ||
|
|
36db2b9e9f | ||
|
|
a39b8907e9 | ||
|
|
fb2dd71136 | ||
|
|
40f20e65f1 | ||
|
|
e9ba0966f2 | ||
|
|
60e35914a5 | ||
|
|
9567f88b03 | ||
|
|
04ec9ca069 | ||
|
|
dadfdb85a3 | ||
|
|
1e57c60542 | ||
|
|
85374ebcd0 | ||
|
|
36f4e3bfb8 | ||
|
|
07723b25ef | ||
|
|
7056725c66 | ||
|
|
53a70c5234 | ||
|
|
36f5981036 | ||
|
|
e32ff95bbb | ||
|
|
43e8a941e2 | ||
|
|
3994c3a4a4 | ||
|
|
1334d0e4b2 | ||
|
|
302bf4e1cc | ||
|
|
7fca4e84a4 | ||
|
|
b6407cb68b | ||
|
|
00e0a48ee7 | ||
|
|
94eef33468 | ||
|
|
2487e9ef26 | ||
|
|
52aa3c5abd | ||
|
|
14a198fe5a | ||
|
|
5873feb442 | ||
|
|
88ef0ad96c | ||
|
|
cfebd3357b | ||
|
|
f106ac7c43 | ||
|
|
87910b03a4 | ||
|
|
3c9347b856 | ||
|
|
68d30d3df2 | ||
|
|
cd5686de2e | ||
|
|
8d6e9532cf | ||
|
|
ee132df28a | ||
|
|
de273145c3 | ||
|
|
64109b5120 | ||
|
|
0267668149 | ||
|
|
709fbc5a4b | ||
|
|
0189de57e7 | ||
|
|
909f3cc635 | ||
|
|
2b40ba4d1a | ||
|
|
5338598158 | ||
|
|
33e3b798b7 | ||
|
|
3c4a7c8f0a | ||
|
|
adec8e541c | ||
|
|
67666c1707 | ||
|
|
cb134029d2 | ||
|
|
ef700c0611 | ||
|
|
d8d11ed58e | ||
|
|
3c69cb8d14 | ||
|
|
f3d7e7e3d4 | ||
|
|
c271cd16ea | ||
|
|
279757406e | ||
|
|
525d9d6f11 | ||
|
|
ec446bb44c | ||
|
|
50995f3c1f | ||
|
|
bf93a554ca | ||
|
|
8349aa1aa7 | ||
|
|
30d4201b09 | ||
|
|
522b8848a2 | ||
|
|
e007b5567d | ||
|
|
d18eda5f26 | ||
|
|
5aec4f1b1d | ||
|
|
048c1d0ac4 | ||
|
|
c0061b66c6 | ||
|
|
4c517d283c | ||
|
|
465fe2354f | ||
|
|
49eaf5fc10 | ||
|
|
d04059e356 | ||
|
|
46291764d4 | ||
|
|
cc88f22f14 | ||
|
|
a58e744c45 | ||
|
|
32bce719f6 | ||
|
|
03e120dd0c | ||
|
|
4d898f8210 | ||
|
|
26c3159b61 | ||
|
|
fc100708c2 | ||
|
|
320f4b40d5 | ||
|
|
e3cb9df9b6 | ||
|
|
a09caa272f | ||
|
|
808f00ade1 | ||
|
|
9ac84e7cb4 | ||
|
|
c4613c8866 | ||
|
|
de0aea025b | ||
|
|
afc4b58b74 | ||
|
|
a337904560 | ||
|
|
8c788f676b | ||
|
|
d62179932b | ||
|
|
770a713179 | ||
|
|
03bfe85c2b | ||
|
|
63d26584b7 | ||
|
|
e5296efa91 | ||
|
|
4bfa154ed6 | ||
|
|
8c5c1dcf34 | ||
|
|
8b0deacc4e | ||
|
|
bd1922326e | ||
|
|
99b5c0d9a0 | ||
|
|
e1fe48b96f | ||
|
|
a36ef94337 | ||
|
|
275d2387d4 | ||
|
|
587c2d595e | ||
|
|
85ff8877d4 | ||
|
|
7b3f1dc95f | ||
|
|
aedd1e046e | ||
|
|
82c2dd55fe | ||
|
|
3aa7e1a8de | ||
|
|
ef878c6890 | ||
|
|
7f12a1892b | ||
|
|
51dbbc2e8d | ||
|
|
f46cacc158 | ||
|
|
f693fa78af | ||
|
|
3c42d161c0 | ||
|
|
00c17e9662 | ||
|
|
d74cb3bdb6 | ||
|
|
5a6e853712 | ||
|
|
09d7d3cd6b | ||
|
|
b521274b9f | ||
|
|
7d756cd22d | ||
|
|
92def035b9 | ||
|
|
31c536ef88 | ||
|
|
cd13e10f58 | ||
|
|
0605f45908 | ||
|
|
b939838f52 | ||
|
|
3bb169ba2b | ||
|
|
ba42c2c601 | ||
|
|
72effb4915 | ||
|
|
e2924875d3 | ||
|
|
f1d372dcf7 | ||
|
|
66bb78620f | ||
|
|
90d57368d1 | ||
|
|
6f859b91db | ||
|
|
098ace4b9d | ||
|
|
e78af7f85b | ||
|
|
466486b27c | ||
|
|
2f3ac0549e | ||
|
|
ea58273811 | ||
|
|
37d316f105 | ||
|
|
f25a814f0f | ||
|
|
11193c6860 | ||
|
|
6c1e27c69e | ||
|
|
72ce9d9023 | ||
|
|
e6d53292ca | ||
|
|
41632ed9e9 | ||
|
|
95c1d7abaa | ||
|
|
e49af0e48c | ||
|
|
10a446060a | ||
|
|
d65baebea8 | ||
|
|
355669e402 | ||
|
|
42416d58ef | ||
|
|
f42d049cb0 | ||
|
|
a6b403984e | ||
|
|
f70f04689e | ||
|
|
7621b08585 | ||
|
|
c7878e8b8a | ||
|
|
90f30cf6d2 | ||
|
|
06d163295a | ||
|
|
c868b2d27f | ||
|
|
563479f581 | ||
|
|
313e1da99a | ||
|
|
c4f51c15aa | ||
|
|
46a8819b82 | ||
|
|
137f2493b7 | ||
|
|
fcdb1d8b62 | ||
|
|
da9ff9a53a | ||
|
|
1666d7619b | ||
|
|
ea4e901650 | ||
|
|
59f9671c8c | ||
|
|
a2921db3f6 | ||
|
|
0295b7ca38 | ||
|
|
e5fe777270 | ||
|
|
82f6abb842 | ||
|
|
e6101ab1d4 | ||
|
|
e6ec715e5c | ||
|
|
267aacc9a3 | ||
|
|
ec3939ff91 | ||
|
|
ef28f3057a | ||
|
|
b1d4608026 | ||
|
|
056ff991c3 | ||
|
|
e2e69bf6fc | ||
|
|
8c76480a97 | ||
|
|
4ebcaefa1e | ||
|
|
04201290e2 | ||
|
|
b65c353941 | ||
|
|
0ba458d33c | ||
|
|
bb5f82d303 | ||
|
|
87af9cf75f | ||
|
|
5a0ffaf193 | ||
|
|
658feff666 | ||
|
|
2145cd73f6 | ||
|
|
30d532f35d | ||
|
|
057a6d6bb4 | ||
|
|
ed3c39c9fd | ||
|
|
b763062040 | ||
|
|
408e9f2292 | ||
|
|
5951468186 | ||
|
|
cd422cab9e | ||
|
|
5ade2a983d | ||
|
|
c586edf0da | ||
|
|
88802c0964 | ||
|
|
ad9b7492ae | ||
|
|
baae4c7204 | ||
|
|
0c0313e0f7 | ||
|
|
03905157ad | ||
|
|
1814a2d577 | ||
|
|
a03b4bd13d | ||
|
|
6778158db7 | ||
|
|
f0e6cced1e | ||
|
|
3acf2c227a | ||
|
|
6b090b16ff | ||
|
|
0586c3bd07 | ||
|
|
c70910b65f | ||
|
|
ad657bd2e3 | ||
|
|
d98c22a750 | ||
|
|
a5cfd6dd91 | ||
|
|
61f7f4b43e | ||
|
|
b0ce2bd9f7 | ||
|
|
d66f6f9745 | ||
|
|
56fbb14dad | ||
|
|
8f4e21741a | ||
|
|
f4ba061911 | ||
|
|
4a66817343 | ||
|
|
b0205abc95 | ||
|
|
c214d5e281 | ||
|
|
91594e0e87 | ||
|
|
1cf9939cb2 | ||
|
|
59dbe7058b | ||
|
|
76db961420 | ||
|
|
3b8c9a8ed4 | ||
|
|
03be73275f | ||
|
|
3d647fc6e6 | ||
|
|
f14523331c | ||
|
|
958ad986be | ||
|
|
b92edeecee | ||
|
|
61aff201a6 | ||
|
|
b868fb6c8a | ||
|
|
034fb66f77 | ||
|
|
79b417f101 | ||
|
|
5525c10627 | ||
|
|
0541171749 | ||
|
|
0340217e24 | ||
|
|
c8197adedf | ||
|
|
5d6d85b068 | ||
|
|
363a221533 | ||
|
|
8a7a7035b3 | ||
|
|
85dcdfcdaf | ||
|
|
c9455ea442 | ||
|
|
be221d902b | ||
|
|
8aa53e3aad | ||
|
|
d9acd0756e | ||
|
|
40d0320ef8 | ||
|
|
f13343bf0f | ||
|
|
f74d1dafd7 | ||
|
|
e991c64a1d | ||
|
|
c2a34e3690 | ||
|
|
c2a949f6c8 | ||
|
|
ec7b594345 | ||
|
|
a52854efb6 | ||
|
|
6886a4d73a | ||
|
|
64aa3c4962 | ||
|
|
dbca4aa6af | ||
|
|
1da65160cb | ||
|
|
dfb7db44fb | ||
|
|
2f73d551ee | ||
|
|
be453c9d45 | ||
|
|
c61c6dafea | ||
|
|
be61178e44 | ||
|
|
4843ff9e61 | ||
|
|
81f636cfe0 | ||
|
|
101e6854c0 | ||
|
|
a38c057cd9 | ||
|
|
0e0564f377 | ||
|
|
44124db62c | ||
|
|
8af64eeb89 | ||
|
|
63210858e5 | ||
|
|
3735f221e0 | ||
|
|
1c73eca6e3 | ||
|
|
e5d124231c | ||
|
|
9ffd8fcbbb | ||
|
|
f5d90cf6b8 | ||
|
|
9ae8beaed2 | ||
|
|
96fcdabe42 | ||
|
|
fac1c35d38 | ||
|
|
7ebc769017 | ||
|
|
e69319a1bb | ||
|
|
d2c247f4e0 | ||
|
|
041435971b | ||
|
|
57c22182c2 | ||
|
|
31697c14f2 | ||
|
|
35ab6fcf8f | ||
|
|
cb8da02a88 | ||
|
|
76a080b130 | ||
|
|
68e5436aae | ||
|
|
73c8ee0422 | ||
|
|
fa790d8b03 | ||
|
|
24ab7f81cc | ||
|
|
d528464e90 | ||
|
|
33a7e0deda | ||
|
|
5b10efa5e7 | ||
|
|
35f1cc5d88 | ||
|
|
0f2714d0ff | ||
|
|
cf7b906007 | ||
|
|
67f09231ea | ||
|
|
f83f073fa0 | ||
|
|
fe4019668a | ||
|
|
73d10380ea | ||
|
|
29b8834088 | ||
|
|
16eaea4973 | ||
|
|
acd1cebad3 | ||
|
|
cbdd2b0885 | ||
|
|
32e1e2fec0 | ||
|
|
52bf15ecac | ||
|
|
58390d6ee4 | ||
|
|
b789588fa2 | ||
|
|
f69edc63ba | ||
|
|
30ab8676f1 | ||
|
|
07ba66611d | ||
|
|
898135194f | ||
|
|
5ab2afe54e | ||
|
|
3782798520 | ||
|
|
4ffba50c6a | ||
|
|
c6b5d051a3 | ||
|
|
68f92a45ed | ||
|
|
6be4d4b5ca | ||
|
|
2db01c89dd | ||
|
|
40a12583cc | ||
|
|
8d935beafb | ||
|
|
4a805adf42 | ||
|
|
c6fa34cdb2 | ||
|
|
f57bed1b8d | ||
|
|
1599bb5af7 | ||
|
|
aa9d16c64d | ||
|
|
23099c5326 | ||
|
|
d9b539b51d | ||
|
|
06143fb284 | ||
|
|
4c9a838011 | ||
|
|
b7507101bf | ||
|
|
1c8b10ed74 | ||
|
|
0eb0efc151 | ||
|
|
0ff79809e8 | ||
|
|
598f92babb | ||
|
|
3b377666e2 | ||
|
|
6909bb2947 | ||
|
|
a5f48c65b7 | ||
|
|
96ecc0324f | ||
|
|
3e687f8337 | ||
|
|
918bed7634 | ||
|
|
46a8d5f9e5 | ||
|
|
295ffe0486 | ||
|
|
233024f3f0 | ||
|
|
0501122537 | ||
|
|
9946b33530 | ||
|
|
57e98cb8af | ||
|
|
06b2ed5235 | ||
|
|
316798e98c | ||
|
|
56ab10f0e9 | ||
|
|
ccc9d8e72e | ||
|
|
74683ed165 | ||
|
|
a35e73e7dd | ||
|
|
777408e1b7 | ||
|
|
5ba501eae7 | ||
|
|
de2144aaa9 | ||
|
|
0e4eaaa67f | ||
|
|
3cf06cdcd8 | ||
|
|
4d6caa6182 | ||
|
|
1f041ac321 | ||
|
|
516e6adc5d | ||
|
|
841fa1b5a4 | ||
|
|
b916ebb768 | ||
|
|
71d77936cc | ||
|
|
3191a295aa | ||
|
|
c796fde261 | ||
|
|
ae7c02ad39 | ||
|
|
5078ff66cc | ||
|
|
f45477ab2a | ||
|
|
392591e50d | ||
|
|
abe0247e04 | ||
|
|
9fe5d550b5 | ||
|
|
287cd1bd89 | ||
|
|
3b5cdc402c | ||
|
|
4f5d2fc070 | ||
|
|
f1e8216944 | ||
|
|
eb4538e331 | ||
|
|
a180b2a53b | ||
|
|
ff6554b8df | ||
|
|
0f8336c9e7 | ||
|
|
3c8fcd55cc | ||
|
|
1b047bbabe | ||
|
|
7ece915772 | ||
|
|
cde42331ee | ||
|
|
e4393985f8 | ||
|
|
48dfa06f79 | ||
|
|
9339ffe2fd | ||
|
|
84b27692c0 | ||
|
|
691611de34 | ||
|
|
26e8a1a7e8 | ||
|
|
f942af6c43 | ||
|
|
efd8999988 | ||
|
|
60cd74e296 | ||
|
|
5185501d72 | ||
|
|
a101e994ff | ||
|
|
338f4ad41a | ||
|
|
513cc43f06 | ||
|
|
f46bf7044a | ||
|
|
3bc3577d35 | ||
|
|
0c6f013bfd | ||
|
|
98817fac11 | ||
|
|
2ecded6feb | ||
|
|
bd11453657 | ||
|
|
d7507bcd6e | ||
|
|
521dc56e15 | ||
|
|
e8fb3ca4fd | ||
|
|
5346d8401f | ||
|
|
d5d7ea74c8 | ||
|
|
aa0c438976 | ||
|
|
aa27dea6e9 | ||
|
|
dc811358fe | ||
|
|
b927abfd64 | ||
|
|
7b32e213ce | ||
|
|
8fc1462141 | ||
|
|
7df26b9ce3 | ||
|
|
600d615765 | ||
|
|
df0404b4cc | ||
|
|
1dfcf0edbe | ||
|
|
672229cd0f | ||
|
|
63ec04cf6e | ||
|
|
28cf201808 | ||
|
|
bf17ef10cb | ||
|
|
3a84b9942b | ||
|
|
2c12cac790 | ||
|
|
d5ff9259a0 | ||
|
|
65a3861ea7 | ||
|
|
0dee89982a | ||
|
|
1c5047f47a | ||
|
|
2115572813 | ||
|
|
9223e8214e | ||
|
|
a5066f8a36 | ||
|
|
bc1d8f574b | ||
|
|
546edab7f0 | ||
|
|
27657d6219 | ||
|
|
0172522463 | ||
|
|
109ad93e9e | ||
|
|
d56a5315dd | ||
|
|
169c3c3c5d | ||
|
|
c88dc282fc | ||
|
|
bc87a72f5d | ||
|
|
c0de7ca44c | ||
|
|
27a40042f4 | ||
|
|
3ca98f520d | ||
|
|
aa63e53cbc | ||
|
|
c6458f1f1d | ||
|
|
bac136c51d | ||
|
|
bb0425d1b2 | ||
|
|
51de336db1 | ||
|
|
6972a14f6d | ||
|
|
d789b66ed2 | ||
|
|
2e8383397b | ||
|
|
3a35bee743 | ||
|
|
b6bec0c2b6 | ||
|
|
a49eeaf548 | ||
|
|
e2e127bb0e | ||
|
|
877ef9e221 | ||
|
|
4179e4910b | ||
|
|
6bfbbc18f2 | ||
|
|
c08d854d4b | ||
|
|
ddb889623d | ||
|
|
acd53026b0 | ||
|
|
a0337a42e3 | ||
|
|
d1d4632292 | ||
|
|
1f252e418f | ||
|
|
37c247f4d7 | ||
|
|
3c291f075f | ||
|
|
9904709d70 | ||
|
|
7f24c672dd | ||
|
|
1bd8927c5d | ||
|
|
d1625c7d84 | ||
|
|
37cbb51afa | ||
|
|
711bd5bd15 | ||
|
|
a3db2480a1 | ||
|
|
7c0b7367d1 | ||
|
|
b342734aad | ||
|
|
372c097688 | ||
|
|
62dcbef383 | ||
|
|
a672abce6f | ||
|
|
bd31aad3ef | ||
|
|
97eccb0b36 | ||
|
|
491264e3fc | ||
|
|
fb7a0478e5 | ||
|
|
d59acc2e03 | ||
|
|
17be211288 | ||
|
|
8fa0d977a0 | ||
|
|
aa43d46953 | ||
|
|
2af68252cb | ||
|
|
ebb1321b7c | ||
|
|
f98689fc30 | ||
|
|
8992dce241 | ||
|
|
7ecf1af00f | ||
|
|
5799b31942 | ||
|
|
c20c9c20d2 | ||
|
|
b6bd1de959 | ||
|
|
60442e489a | ||
|
|
be4da6f37d | ||
|
|
b4730f3f87 | ||
|
|
36f2ebbf95 | ||
|
|
12c9220487 | ||
|
|
cb8c68659c | ||
|
|
62df72af5b | ||
|
|
c782dd26c4 | ||
|
|
efb28105e8 | ||
|
|
4640055ab6 | ||
|
|
db225df433 | ||
|
|
19edea21d7 | ||
|
|
856edb7ec6 | ||
|
|
203184e18c | ||
|
|
c07c918150 | ||
|
|
d368db9e76 | ||
|
|
235dcb761c | ||
|
|
4a8ac7c02b | ||
|
|
de27c59e51 | ||
|
|
d71c5fcd2f | ||
|
|
e366c8817c | ||
|
|
f2ba792380 | ||
|
|
cc6c459e7b | ||
|
|
e9e9080ae0 | ||
|
|
ead80da91f | ||
|
|
c9db5635b0 | ||
|
|
3397a5245b | ||
|
|
85cbc7717e | ||
|
|
58060874d6 | ||
|
|
a080d98470 | ||
|
|
4aacf28974 | ||
|
|
1dfb44a706 | ||
|
|
3306194902 | ||
|
|
fa1637ffbd | ||
|
|
c1036ec9a2 | ||
|
|
a7baf1e7ed | ||
|
|
4405b85eae | ||
|
|
b76b1506cd | ||
|
|
b1e7057b17 | ||
|
|
6816dc023a | ||
|
|
644f2bbf37 | ||
|
|
19bd5a4705 | ||
|
|
d99d4e8f52 | ||
|
|
b1264ad3c9 | ||
|
|
607b8ca017 | ||
|
|
a21ca4af2a | ||
|
|
a51473d791 | ||
|
|
20b852eb38 | ||
|
|
60ce72b37a | ||
|
|
20bc1e6e8b | ||
|
|
c78ab5242c | ||
|
|
a42f20ab3c | ||
|
|
668796ee18 | ||
|
|
2356e42955 | ||
|
|
3653ac690d | ||
|
|
c30ba15c6f | ||
|
|
0379084f40 | ||
|
|
e70244d75e | ||
|
|
4fc79c211a | ||
|
|
ac69e135ca | ||
|
|
49caa6e533 | ||
|
|
96ca3b18f1 | ||
|
|
86cb28ee4f | ||
|
|
fe06b461ee | ||
|
|
1c60efe8a8 | ||
|
|
32cb324324 | ||
|
|
592ca413e8 | ||
|
|
f24189d7e1 | ||
|
|
9d970e7832 | ||
|
|
5a8b6d79aa | ||
|
|
e0c78f200b | ||
|
|
86b1d9c77d | ||
|
|
e33b0d0264 | ||
|
|
2b69d31744 | ||
|
|
a9ac7efed2 | ||
|
|
5fe8fb59b2 | ||
|
|
7a172fd136 | ||
|
|
ca74d5cb93 | ||
|
|
251846604a | ||
|
|
2930757728 | ||
|
|
25cd73821f | ||
|
|
eb14677832 | ||
|
|
c631063b7a | ||
|
|
f3d527cf70 | ||
|
|
b3c770dd26 | ||
|
|
8609045f2a | ||
|
|
9959ec6470 | ||
|
|
8b2eee0aa0 | ||
|
|
224201ba55 | ||
|
|
dfdc29b1d8 | ||
|
|
410178e426 | ||
|
|
471e2d7920 | ||
|
|
e69139c6b9 | ||
|
|
4c0b05b752 | ||
|
|
281a3b672a | ||
|
|
7b82f2a60b | ||
|
|
2f86d928c6 | ||
|
|
abe138ab27 | ||
|
|
9bf26cdbf9 | ||
|
|
267528408e | ||
|
|
3f13410d96 | ||
|
|
ac588f2fcf | ||
|
|
7d5149af24 | ||
|
|
48a19fe349 | ||
|
|
25221ac786 | ||
|
|
06c9c6ecc4 | ||
|
|
8f6cac9797 | ||
|
|
8aac82b1b4 | ||
|
|
bea5eda2e0 | ||
|
|
43f19c4b55 | ||
|
|
a184611226 | ||
|
|
0eee31179c | ||
|
|
ecfbdb207f | ||
|
|
ab578dfe0e | ||
|
|
a4f24a29fc | ||
|
|
2aa5c0f0ba | ||
|
|
a5e97b1431 | ||
|
|
92347f7e29 | ||
|
|
b07ad19dc3 | ||
|
|
ebbb30c763 | ||
|
|
58b3e0b6a6 | ||
|
|
a85e9fdb6d | ||
|
|
626cbb084d | ||
|
|
b0f717bee4 | ||
|
|
51d3a8ab41 | ||
|
|
d7e29f19cc | ||
|
|
d7cb0876f6 | ||
|
|
dd5a68916e | ||
|
|
d008cbf09f | ||
|
|
2e209ef174 | ||
|
|
3fdc18e837 | ||
|
|
6be676af78 | ||
|
|
d14ec3cb12 | ||
|
|
21e01b2f6b | ||
|
|
4a07f534d8 | ||
|
|
869e69097f | ||
|
|
d77c1828b2 | ||
|
|
bb93aefe1d | ||
|
|
cd9a3ee143 | ||
|
|
c3e8810e1a | ||
|
|
ce480336d8 | ||
|
|
34ca5a215c | ||
|
|
5b47a83022 | ||
|
|
55dc35f2de | ||
|
|
7f5192351a | ||
|
|
281482855d | ||
|
|
6fc420e6a3 | ||
|
|
2e074a4391 | ||
|
|
6b7a233511 | ||
|
|
b22f9a3851 | ||
|
|
2fcb4ad3ad | ||
|
|
2db749991e | ||
|
|
6dbbfd804e | ||
|
|
41b8b3e896 | ||
|
|
d16c698789 | ||
|
|
c251937f9f | ||
|
|
88d7ef83d3 | ||
|
|
09d86f55b0 | ||
|
|
6664b23234 | ||
|
|
e9af33ca78 | ||
|
|
d542b4dc9b | ||
|
|
6f9be6d790 | ||
|
|
af345b75fb | ||
|
|
3f9904eb53 | ||
|
|
198d61918b | ||
|
|
da37bf4777 | ||
|
|
f87c40f6fb | ||
|
|
f6a0c0b0b7 | ||
|
|
78387f9b16 | ||
|
|
8593dedd37 | ||
|
|
4c1580fab2 | ||
|
|
5786b7dffc | ||
|
|
5b785b0105 | ||
|
|
fc825ea557 | ||
|
|
9a555bc8b5 | ||
|
|
6ad0b192e8 | ||
|
|
a3d753153c | ||
|
|
b9d10a7cf1 | ||
|
|
be3b3b8016 | ||
|
|
9a1a407ea6 | ||
|
|
336c970010 | ||
|
|
168e36d09e | ||
|
|
21f57bf229 | ||
|
|
2d8147a92b | ||
|
|
3b74443dac | ||
|
|
1afdd8c056 | ||
|
|
b3667294ed | ||
|
|
545f1f1b3c | ||
|
|
af42ebca62 | ||
|
|
fde280b6a0 | ||
|
|
c4daa1dc44 | ||
|
|
61cd542d92 | ||
|
|
bf9d610675 | ||
|
|
1c16e3a463 | ||
|
|
f50dab2bde | ||
|
|
60e46d0c3b | ||
|
|
38d2cb3c85 | ||
|
|
fcd14e038e | ||
|
|
903fca4991 | ||
|
|
81323fa992 | ||
|
|
49533d9e84 | ||
|
|
2c9f3f8113 | ||
|
|
d41517ab90 | ||
|
|
5b9cbad759 | ||
|
|
fedd6affc9 | ||
|
|
96af003398 | ||
|
|
4510a95e90 | ||
|
|
2886ca5f78 | ||
|
|
86ef526303 | ||
|
|
fba573cc0b | ||
|
|
36f3e40c55 | ||
|
|
f564ef8d28 | ||
|
|
e603afa739 | ||
|
|
0e496a791f | ||
|
|
223933b6f9 | ||
|
|
1df91a6b3c | ||
|
|
fc505837b9 | ||
|
|
b6b06aa538 | ||
|
|
579956c027 | ||
|
|
994658c08c | ||
|
|
13a4c0f813 | ||
|
|
0ddb5bfd1f | ||
|
|
3a7e7dee79 | ||
|
|
2faece8dc6 | ||
|
|
e85b0832e1 | ||
|
|
d73170d1c6 | ||
|
|
8de08a5ae1 | ||
|
|
cd964dff27 | ||
|
|
6d0f2ca39a | ||
|
|
f5ef4304ff | ||
|
|
b97a54dbed | ||
|
|
9158349752 | ||
|
|
4a7f51a5e9 | ||
|
|
b9a6714ed7 | ||
|
|
e37efc70ce | ||
|
|
cb87bea665 | ||
|
|
b907bfab1c | ||
|
|
804bd57aa0 | ||
|
|
dd3694c6b8 | ||
|
|
dc455ac70d | ||
|
|
8b1a886e13 | ||
|
|
82e7002069 | ||
|
|
4caf2266b8 | ||
|
|
8f2bdc034e | ||
|
|
06c351e27c | ||
|
|
7f1805e498 | ||
|
|
836eae32c4 | ||
|
|
33388e60ab | ||
|
|
7e9c6b16f6 | ||
|
|
89a2236b18 | ||
|
|
92301257f3 | ||
|
|
c079c8f80a | ||
|
|
789ea394c8 | ||
|
|
28503618b5 | ||
|
|
3e65883a7f | ||
|
|
9f56e71545 | ||
|
|
bee2741235 | ||
|
|
54e8b8569b | ||
|
|
a3cb3fd650 | ||
|
|
221bd363c9 | ||
|
|
8b2d6082d1 | ||
|
|
0f7d7f446f | ||
|
|
75c879b9e5 | ||
|
|
013e3c14cc | ||
|
|
9fcd9338d3 | ||
|
|
0daed4872f | ||
|
|
03e646e0d0 | ||
|
|
f48da2b6f9 | ||
|
|
59f6f8d89c | ||
|
|
302079ab81 | ||
|
|
4d594e6bc7 | ||
|
|
b318eb315c | ||
|
|
6300cb511b | ||
|
|
1402fe12e9 | ||
|
|
829f05296a | ||
|
|
86d96159fe | ||
|
|
e012005b45 | ||
|
|
a2d278bb04 | ||
|
|
ed1010d84b | ||
|
|
9fb9a3a2ec | ||
|
|
fc257d1f8b | ||
|
|
6978a341c5 | ||
|
|
6f7cf059ec | ||
|
|
dac189d6cc | ||
|
|
8ccf223eb0 | ||
|
|
340c6fe503 | ||
|
|
f90ac499be | ||
|
|
0602e09627 | ||
|
|
f65b5652d7 | ||
|
|
a8eb0f1617 | ||
|
|
83b223e0db | ||
|
|
0828327cd0 | ||
|
|
e5ec525b13 | ||
|
|
7b3eab0f64 | ||
|
|
4249cb391e | ||
|
|
fad57ab4dd | ||
|
|
c4e0918583 | ||
|
|
1599057195 | ||
|
|
d59964e87f | ||
|
|
a0fb0006ca | ||
|
|
a4dd99c678 | ||
|
|
915c82552d | ||
|
|
3e2b6f6fa9 | ||
|
|
872f8bc9ca | ||
|
|
2b3d0be7da |
13
.gitignore
vendored
@@ -1,8 +1,5 @@
|
||||
xsconfig.h
|
||||
xsconfig.mk
|
||||
.config
|
||||
.config.old
|
||||
build
|
||||
XiUOS.*
|
||||
*.swp
|
||||
.vscode
|
||||
*.vscode
|
||||
*.o
|
||||
*libmusl.a
|
||||
*liblwip.a
|
||||
.DS_Store
|
||||
34
.gitmodules
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
[submodule "Ubiquitous/RT-Thread_Fusion_XiUOS/rt-thread"]
|
||||
path = Ubiquitous/RT-Thread_Fusion_XiUOS/rt-thread
|
||||
url = https://www.gitlink.org.cn/chunyexixiaoyu/rt-thread.git
|
||||
[submodule "Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/k210/kendryte-sdk/kendryte-sdk-source"]
|
||||
path = Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/k210/kendryte-sdk/kendryte-sdk-source
|
||||
url = https://www.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
|
||||
[submodule "Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-riscv64-board/kendryte-sdk/kendryte-sdk-source"]
|
||||
path = Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/aiit-riscv64-board/kendryte-sdk/kendryte-sdk-source
|
||||
url = https://www.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
|
||||
[submodule "Ubiquitous/XiZi/fs/lwext4/lwext4_submodule"]
|
||||
path = Ubiquitous/XiZi/fs/lwext4/lwext4_submodule
|
||||
url = https://gitlink.org.cn/xuos/lwext4_filesystem_support_XiUOS.git
|
||||
[submodule "Ubiquitous/Nuttx_Fusion_XiUOS/nuttx"]
|
||||
path = Ubiquitous/Nuttx_Fusion_XiUOS/nuttx
|
||||
url = https://www.gitlink.org.cn/wgzAIIT/incubator-nuttx.git
|
||||
[submodule "Ubiquitous/Nuttx_Fusion_XiUOS/apps"]
|
||||
path = Ubiquitous/Nuttx_Fusion_XiUOS/apps
|
||||
url = https://www.gitlink.org.cn/wgzAIIT/incubator-nuttx-apps.git
|
||||
[submodule "APP_Framework/Applications/webnet/WebNet_XiUOS"]
|
||||
path = APP_Framework/Applications/webnet/WebNet_XiUOS
|
||||
url = https://gitlink.org.cn/xuos/WebNet_XiUOS.git
|
||||
[submodule "Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-riscv64/kendryte-sdk/kendryte-sdk-source"]
|
||||
path = Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-riscv64/kendryte-sdk/kendryte-sdk-source
|
||||
url = https://www.gitlink.org.cn/chunyexixiaoyu/kendryte-sdk-source.git
|
||||
[submodule "APP_Framework/lib/lorawan/lora_radio_driver"]
|
||||
path = APP_Framework/lib/lorawan/lora_radio_driver
|
||||
url = https://gitlink.org.cn/xuos/lora_radio_driver
|
||||
[submodule "APP_Framework/lib/lorawan/lorawan_devicenode"]
|
||||
path = APP_Framework/lib/lorawan/lorawan_devicenode
|
||||
url = https://gitlink.org.cn/xuos/lorawan_devicenode.git
|
||||
branch = master
|
||||
[submodule "APP_Framework/lib/lorawan/lorawan_gateway_single_channel"]
|
||||
path = APP_Framework/lib/lorawan/lorawan_gateway_single_channel
|
||||
url = https://gitlink.org.cn/xuos/lorawan_gateway_single_channel.git
|
||||
23
APP_Framework/Applications/Kconfig
Normal file
@@ -0,0 +1,23 @@
|
||||
menu "Applications"
|
||||
|
||||
menu "config stack size and priority of main task"
|
||||
config MAIN_KTASK_STACK_SIZE
|
||||
int "Set main task stack size"
|
||||
default 1024
|
||||
config MAIN_KTASK_PRIORITY
|
||||
int
|
||||
default 4 if KTASK_PRIORITY_8
|
||||
default 16 if KTASK_PRIORITY_32
|
||||
default 85 if KTASK_PRIORITY_256
|
||||
endmenu
|
||||
|
||||
source "$APP_DIR/Applications/ota/Kconfig"
|
||||
|
||||
source "$APP_DIR/Applications/app_test/Kconfig"
|
||||
source "$APP_DIR/Applications/connection_app/Kconfig"
|
||||
source "$APP_DIR/Applications/control_app/Kconfig"
|
||||
source "$APP_DIR/Applications/knowing_app/Kconfig"
|
||||
source "$APP_DIR/Applications/sensor_app/Kconfig"
|
||||
source "$APP_DIR/Applications/embedded_database_app/Kconfig"
|
||||
source "$APP_DIR/Applications/webnet/Kconfig"
|
||||
endmenu
|
||||
7
APP_Framework/Applications/Make.defs
Normal file
@@ -0,0 +1,7 @@
|
||||
############################################################################
|
||||
# APP_Framework/Applications/Make.defs
|
||||
############################################################################
|
||||
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Applications
|
||||
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Applications/general_functions/list
|
||||
|
||||
include $(wildcard $(APPDIR)/../../../APP_Framework/Applications/*/Make.defs)
|
||||
44
APP_Framework/Applications/Makefile
Normal file
@@ -0,0 +1,44 @@
|
||||
include $(KERNEL_ROOT)/.config
|
||||
|
||||
ifeq ($(CONFIG_ADD_NUTTX_FEATURES),y)
|
||||
include $(APPDIR)/Make.defs
|
||||
CSRCS +=
|
||||
include $(APPDIR)/Application.mk
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(CONFIG_ADD_XIZI_FEATURES),y)
|
||||
SRC_DIR := general_functions app_test
|
||||
|
||||
SRC_FILES := main.c
|
||||
ifeq ($(CONFIG_LIB_LV),y)
|
||||
SRC_DIR += lv_app
|
||||
SRC_DIR += tinyttf_app
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_OTA),y)
|
||||
SRC_DIR += ota
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR),y)
|
||||
SRC_DIR += sensor_app
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_CONNECTION),y)
|
||||
SRC_DIR += connection_app
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_KNOWING),y)
|
||||
SRC_DIR += knowing_app
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_CONTROL),y)
|
||||
SRC_DIR += control_app
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APP_USING_WEBNET),y)
|
||||
SRC_DIR += webnet
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
endif
|
||||
20
APP_Framework/Applications/SConscript
Normal file
@@ -0,0 +1,20 @@
|
||||
import os
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
|
||||
SOURCES = ['framework_init.c']
|
||||
path = [cwd]
|
||||
objs = []
|
||||
group = DefineGroup('sensor', SOURCES, depend = [], CPPPATH = [cwd])
|
||||
objs = objs + group
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(path, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
310
APP_Framework/Applications/app_test/Kconfig
Normal file
@@ -0,0 +1,310 @@
|
||||
menu "test app"
|
||||
menuconfig USER_TEST
|
||||
bool "Enable application test function "
|
||||
default n
|
||||
|
||||
if USER_TEST
|
||||
menuconfig USER_TEST_ADC
|
||||
bool "Config test adc"
|
||||
default n
|
||||
if USER_TEST_ADC
|
||||
if ADD_XIZI_FEATURES
|
||||
config ADC_DEV_DRIVER
|
||||
string "Set ADC dev path"
|
||||
default "/dev/adc1_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_DAC
|
||||
bool "Config test dac"
|
||||
default n
|
||||
if USER_TEST_DAC
|
||||
if ADD_XIZI_FEATURES
|
||||
config DAC_DEV_DRIVER
|
||||
string "Set DAC dev path"
|
||||
default "/dev/dac_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_FS
|
||||
bool "Config test fs with sd or usb"
|
||||
default n
|
||||
if USER_TEST_FS
|
||||
if ADD_XIZI_FEATURES
|
||||
config FPATH
|
||||
string "Set test file path"
|
||||
default "/test_file"
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
menuconfig USER_TEST_GPIO
|
||||
select BSP_USING_GPIO
|
||||
select RESOURCES_PIN
|
||||
select BSP_USING_LED
|
||||
select BSP_USING_KEY
|
||||
bool "Config test gpio with led and key"
|
||||
default n
|
||||
if USER_TEST_GPIO
|
||||
if ADD_XIZI_FEATURES
|
||||
config GPIO_DEV_DRIVER
|
||||
string "Set gpio dev path"
|
||||
default "/dev/pin_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_LORA
|
||||
select BSP_USING_UART
|
||||
select BSP_USING_GPIO
|
||||
select RESOURCES_PIN
|
||||
select BSP_USING_UART2
|
||||
select BSP_USING_LORA
|
||||
bool "Config test uart(loraE220)"
|
||||
default n
|
||||
if USER_TEST_LORA
|
||||
if ADD_XIZI_FEATURES
|
||||
config LORA_UART_DEV_DRIVER
|
||||
string "Set uart dev path"
|
||||
default "/dev/uart2_dev2"
|
||||
config LORA_PIN_DEV_DRIVER
|
||||
string "Set pin dev path"
|
||||
default "/dev/pin_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_SOCKET
|
||||
select BSP_USING_LWIP
|
||||
bool "Config test socket(lwip)"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_UART
|
||||
select BSP_USING_UART
|
||||
select BSP_USING_UART6
|
||||
bool "Config test uart"
|
||||
default n
|
||||
if USER_TEST_UART
|
||||
if ADD_XIZI_FEATURES
|
||||
config UART_DEV_DRIVER
|
||||
string "Set uart dev path"
|
||||
default "/dev/usart6_dev6"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_RS485
|
||||
select BSP_USING_UART
|
||||
select BSP_USING_GPIO
|
||||
select RESOURCES_PIN
|
||||
select BSP_USING_UART1
|
||||
bool "Config test uart(RS485)"
|
||||
default n
|
||||
if USER_TEST_RS485
|
||||
if ADD_XIZI_FEATURES
|
||||
config RS485_UART_DEV_DRIVER
|
||||
string "Set uart dev path"
|
||||
default "/dev/uart1_dev1"
|
||||
config RS485_PIN_DEV_DRIVER
|
||||
string "Set pin dev path"
|
||||
default "/dev/pin_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_RTC
|
||||
select BSP_USING_RTC
|
||||
bool "Config test rtc"
|
||||
default n
|
||||
if USER_TEST_RTC
|
||||
if ADD_XIZI_FEATURES
|
||||
config RTC_DEV_DRIVER
|
||||
string "Set rtc dev path"
|
||||
default "/dev/rtc_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_HWTIMER
|
||||
select BSP_USING_HWTIMER
|
||||
select BSP_USING_GPIO
|
||||
select RESOURCES_PIN
|
||||
select BSP_USING_LED
|
||||
bool "Config test hwtimer"
|
||||
default n
|
||||
if USER_TEST_HWTIMER
|
||||
if ADD_XIZI_FEATURES
|
||||
config HWTIMER_TIMER_DEV_DRIVER
|
||||
string "Set pin dev path"
|
||||
default "/dev/timer0_dev0"
|
||||
config HWTIMER_PIN_DEV_DRIVER
|
||||
string "Set pin dev path"
|
||||
default "/dev/pin_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_WDT
|
||||
select BSP_USING_WDT0
|
||||
bool "Config test watchdog"
|
||||
default n
|
||||
if USER_TEST_WDT
|
||||
if ADD_XIZI_FEATURES
|
||||
config WDT0_DEV_DRIVER
|
||||
string "Set wdt dev path"
|
||||
default "/dev/wdt0_dev0"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_LCD_EDU
|
||||
select BSP_USING_LCD
|
||||
bool "Config test lcd in PrivOpen"
|
||||
default n
|
||||
if USER_TEST_LCD_EDU
|
||||
if ADD_XIZI_FEATURES
|
||||
config EDU_LCD_DEV_DRIVER
|
||||
string "Set lcd dev path"
|
||||
default "/dev/lcd_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_TOUCH
|
||||
select BSP_USING_TOUCH
|
||||
bool "Config test touch"
|
||||
default n
|
||||
if USER_TEST_TOUCH
|
||||
if ADD_XIZI_FEATURES
|
||||
config TOUCH_DEV_DRIVER
|
||||
string "Set touch dev path"
|
||||
default "/dev/touch_dev"
|
||||
config TOUCH_LCD_DEV_DRIVER
|
||||
string "Set lcd dev path"
|
||||
default "/dev/lcd_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_I2C
|
||||
select BSP_USING_I2C
|
||||
bool "Config test i2c"
|
||||
default n
|
||||
if USER_TEST_I2C
|
||||
if ADD_XIZI_FEATURES
|
||||
config I2C_DEV_DRIVER
|
||||
string "Set i2c dev path"
|
||||
default "/dev/i2c1_dev0"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_CAN
|
||||
select BSP_USING_CAN
|
||||
bool "Config test can"
|
||||
default n
|
||||
if USER_TEST_CAN
|
||||
if ADD_XIZI_FEATURES
|
||||
config CAN_DEV_DRIVER
|
||||
string "Set can dev path"
|
||||
default "/dev/can2_dev1"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_CAMERA
|
||||
select BSP_USING_CAMERA
|
||||
select BSP_USING_LCD
|
||||
bool "Config test camera with lcd"
|
||||
default n
|
||||
if USER_TEST_CAMERA
|
||||
if ADD_XIZI_FEATURES
|
||||
config CAMERA_DEV_DRIVER
|
||||
string "Set camera dev path"
|
||||
default "/dev/camera_dev"
|
||||
config CAMERA_LCD_DEV_DRIVER
|
||||
string "Set lcd dev path"
|
||||
default "/dev/lcd_dev"
|
||||
endif
|
||||
endif
|
||||
|
||||
config USER_TEST_SEMC
|
||||
bool "Config test semc sdram"
|
||||
default n
|
||||
|
||||
config USER_TEST_LCD
|
||||
bool "Config test lcd device"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_ETHERNET
|
||||
bool "Config test ethernet only for edu-riscv64"
|
||||
default n
|
||||
if USER_TEST_ETHERNET
|
||||
if ADD_XIZI_FEATURES
|
||||
choice
|
||||
prompt "set ethernet role as client or server"
|
||||
default ETHERNET_AS_SERVER
|
||||
|
||||
config ETHERNET_AS_SERVER
|
||||
bool "test as server"
|
||||
|
||||
config ETHERNET_AS_CLIENT
|
||||
bool "test as client"
|
||||
endchoice
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_FLASH
|
||||
bool "Config test w25q128 device"
|
||||
default n
|
||||
if USER_TEST_FLASH
|
||||
if ADD_XIZI_FEATURES
|
||||
config FLASH_DEV_DRIVER
|
||||
string "Set flash dev path"
|
||||
default "/dev/qspi_W25Q128"
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig USER_TEST_TIMER
|
||||
bool "Config test soft timer"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_HASH
|
||||
bool "Config test hash"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_RADIX
|
||||
bool "Config test radix tree"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_RBTREE
|
||||
bool "Config test red black tree"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_MODBUS_TCP
|
||||
bool "Config test modbus_tcp"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_WEBSERVER
|
||||
bool "Config test webserver"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_MQTTCLIENT
|
||||
bool "Config test mqtt client"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_FTPCLIENT
|
||||
bool "Config test ftp client"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_FTPCLIENT_RISCV
|
||||
bool "Config test ftp client on riscv"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_LORA_P2P
|
||||
bool "Config test lora p2p"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_LORAWAN_SINGLEGW
|
||||
bool "Config test lorawan single channel gateway"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_CANOPEN
|
||||
bool "Config test CanOpen"
|
||||
default n
|
||||
|
||||
menuconfig USER_TEST_USB_CAMERA
|
||||
bool "Config test usb camera"
|
||||
default n
|
||||
|
||||
endif
|
||||
endmenu
|
||||
7
APP_Framework/Applications/app_test/Make.defs
Executable file
@@ -0,0 +1,7 @@
|
||||
############################################################################
|
||||
# APP_Framework/Applications/app_test/Make.defs
|
||||
############################################################################
|
||||
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Applications/app_test
|
||||
|
||||
include $(wildcard $(APPDIR)/../../../APP_Framework/Applications/app_test/*/Make.defs)
|
||||
|
||||
177
APP_Framework/Applications/app_test/Makefile
Normal file
@@ -0,0 +1,177 @@
|
||||
include $(KERNEL_ROOT)/.config
|
||||
ifeq ($(CONFIG_ADD_NUTTX_FEATURES),y)
|
||||
include $(APPDIR)/Make.defs
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_SEMC),y)
|
||||
CSRCS += test_extsram.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LCD),y)
|
||||
CSRCS += test_lcd.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_BSP_USING_TOUCH),y)
|
||||
CSRCS += test_touch.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_MUSL_LIBC),y)
|
||||
CSRCS += test_musl.c
|
||||
endif
|
||||
|
||||
include $(APPDIR)/Application.mk
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_ADD_XIZI_FEATURES),y)
|
||||
SRC_FILES := test_shell.c
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_ADC),y)
|
||||
SRC_FILES += test_adc.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_DAC),y)
|
||||
SRC_FILES += test_dac.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_FS),y)
|
||||
SRC_FILES += test_fs.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_SEMC),y)
|
||||
SRC_FILES += test_extsram.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LCD),y)
|
||||
SRC_FILES +=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_I2C),y)
|
||||
ifeq ($(CONFIG_BOARD_EDU_RISCV64_EVB),y)
|
||||
SRC_FILES += test_i2c_riscv.c
|
||||
endif
|
||||
ifeq ($(CONFIG_BOARD_EDU_ARM32_EVB),y)
|
||||
SRC_FILES += test_i2c_arm.c
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_UART),y)
|
||||
SRC_FILES += test_uart.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_GPIO),y)
|
||||
SRC_FILES += test_gpio.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LORA),y)
|
||||
SRC_FILES += test_loraE220.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_RTC),y)
|
||||
SRC_FILES += test_rtc.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_RS485),y)
|
||||
ifeq ($(CONFIG_BOARD_EDU_RISCV64_EVB),y)
|
||||
SRC_FILES += test_rs485_riscv.c
|
||||
endif
|
||||
ifeq ($(CONFIG_BOARD_EDU_ARM32_EVB),y)
|
||||
SRC_FILES += test_rs485_arm.c
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_HWTIMER),y)
|
||||
SRC_FILES += test_hwtimer.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LCD_EDU),y)
|
||||
SRC_FILES += test_lcd_edu.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_WDT),y)
|
||||
SRC_FILES += test_wdt.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_TOUCH),y)
|
||||
SRC_FILES += test_touch.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_CAMERA),y)
|
||||
SRC_FILES += test_camera.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_ETHERNET),y)
|
||||
SRC_FILES += test_ethernet.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_FLASH),y)
|
||||
SRC_FILES += test_flash.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_CAN),y)
|
||||
SRC_FILES += test_can.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_TIMER),y)
|
||||
SRC_FILES += test_timer.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_HASH),y)
|
||||
SRC_FILES += test_hash/test_hash.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_RADIX),y)
|
||||
SRC_FILES += test_radix_tree/test_radix_tree.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_RBTREE),y)
|
||||
SRC_FILES += test_rbtree/test_rbtree.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_SOCKET),y)
|
||||
SRC_FILES += test_socket.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_MODBUS_TCP),y)
|
||||
SRC_DIR += test_modbus_tcp
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_WEBSERVER),y)
|
||||
SRC_FILES += test_webserver/test_webserver.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_MQTTCLIENT),y)
|
||||
SRC_DIR:= test_mqttclient
|
||||
SRC_FILES +=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_FTPCLIENT),y)
|
||||
SRC_FILES += test_ftpclient/test_ftpclient.c test_ftpclient/ftp_client/ftp_client.c\
|
||||
test_ftpclient/ftp_client/my_socket.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_FTPCLIENT_RISCV),y)
|
||||
SRC_FILES += test_ftpclient_riscv/test_ftpclient_riscv.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LORA_P2P),y)
|
||||
SRC_FILES +=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LORAWAN_SINGLEGW),y)
|
||||
SRC_FILES +=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_CANOPEN),y)
|
||||
SRC_FILES +=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_USB_CAMERA),y)
|
||||
SRC_FILES +=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_FTPCLIENT_FINAL),y)
|
||||
SRC_FILES += test_ftpclient_final/test_ftpclient_final.c test_ftpclient_final/ftp_client/ftp_client.c test_ftpclient_final/ftp_client/my_socket.c
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
endif
|
||||
11
APP_Framework/Applications/app_test/SConscript
Normal file
@@ -0,0 +1,11 @@
|
||||
import os
|
||||
from building import *
|
||||
Import('RTT_ROOT')
|
||||
Import('rtconfig')
|
||||
cwd = GetCurrentDir()
|
||||
DEPENDS = [""]
|
||||
|
||||
SOURCES = ['test_shell.c']
|
||||
path = [cwd]
|
||||
objs = DefineGroup('app_test', src = SOURCES, depend = DEPENDS,CPPPATH = path)
|
||||
Return("objs")
|
||||
58
APP_Framework/Applications/app_test/test_adc.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_adc.c
|
||||
* @brief: a application of adc function
|
||||
* @version: 1.1
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/1/7
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
void TestAdc(void)
|
||||
{
|
||||
int adc_fd;
|
||||
uint8 adc_channel = 0x1;
|
||||
uint16 adc_sample = 0;
|
||||
|
||||
adc_fd = PrivOpen(ADC_DEV_DRIVER, O_RDWR);
|
||||
if (adc_fd < 0) {
|
||||
printf("open adc fd error %d\n", adc_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
ioctl_cfg.ioctl_driver_type = ADC_TYPE;
|
||||
ioctl_cfg.args = &adc_channel;
|
||||
if (0 != PrivIoctl(adc_fd, OPE_CFG, &ioctl_cfg)) {
|
||||
printf("ioctl adc fd error %d\n", adc_fd);
|
||||
PrivClose(adc_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 10; i ++) {
|
||||
PrivRead(adc_fd, &adc_sample, 2);
|
||||
printf("adc sample %u mv\n", adc_sample);
|
||||
PrivTaskDelay(500);
|
||||
}
|
||||
|
||||
PrivClose(adc_fd);
|
||||
|
||||
return;
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(TestAdc, a adc test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
120
APP_Framework/Applications/app_test/test_camera.c
Normal file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_camera.c
|
||||
* @brief: a application of camera function
|
||||
* @version: 1.1
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/12/7
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
static uint16_t image_buff[384000];
|
||||
|
||||
void TestCamera(int argc, char *argv[])
|
||||
{
|
||||
int frame_counter = 10000;
|
||||
if (argc > 1)
|
||||
{
|
||||
frame_counter = atoi(argv[1]);
|
||||
}
|
||||
printf("This test will refresh %d frames\n", frame_counter);
|
||||
|
||||
int camera_fd = PrivOpen(CAMERA_DEV_DRIVER, O_RDWR);
|
||||
if (camera_fd < 0)
|
||||
{
|
||||
printf("open camera fd error:%d\n", camera_fd);
|
||||
return;
|
||||
}
|
||||
int lcd_fd = PrivOpen(CAMERA_LCD_DEV_DRIVER, O_RDWR);
|
||||
if (lcd_fd < 0)
|
||||
{
|
||||
printf("open lcd fd error:%d\n", lcd_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
//configure the camera's output address
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
ioctl_cfg.ioctl_driver_type = CAMERA_TYPE;
|
||||
struct CameraCfg camera_cfg ={
|
||||
.gain_manu_enable = 0,
|
||||
.gain = 0xFF,
|
||||
.window_w = 800,
|
||||
.window_h = 600,
|
||||
.output_w = IMAGE_WIDTH,
|
||||
.output_h = IMAGE_HEIGHT,
|
||||
.window_xoffset = 0,
|
||||
.window_yoffset = 0
|
||||
};
|
||||
ioctl_cfg.args = &camera_cfg;
|
||||
if (0 != PrivIoctl(camera_fd, OPE_CFG, &ioctl_cfg))
|
||||
{
|
||||
printf("camera pin fd error %d\n", camera_fd);
|
||||
PrivClose(camera_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
ioctl_cfg.args = (void *)image_buff;
|
||||
|
||||
if (0 != PrivRead(camera_fd, image_buff, NULL_PARAMETER))
|
||||
{
|
||||
printf("camera pin fd error %d\n", camera_fd);
|
||||
PrivClose(camera_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
printf("address buff is %x\n", image_buff);
|
||||
|
||||
|
||||
LcdWriteParam graph_param;
|
||||
graph_param.type = LCD_DOT_TYPE;
|
||||
|
||||
//clear the LCD
|
||||
uint16_t back_color[LCD_SIZE];
|
||||
memset(back_color,0,sizeof(back_color));
|
||||
for (int i = 0; i < LCD_SIZE; i++)
|
||||
{
|
||||
graph_param.pixel_info.pixel_color = &back_color;
|
||||
graph_param.pixel_info.x_startpos = 0;
|
||||
graph_param.pixel_info.y_startpos = i;
|
||||
graph_param.pixel_info.x_endpos = LCD_SIZE -1;
|
||||
graph_param.pixel_info.y_endpos = i;
|
||||
PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
|
||||
}
|
||||
|
||||
//refresh the LCD using photo of camera
|
||||
while (frame_counter--)
|
||||
{
|
||||
for (int i = 0; i < IMAGE_HEIGHT; i++)
|
||||
{
|
||||
graph_param.pixel_info.pixel_color = image_buff + i * IMAGE_WIDTH;
|
||||
graph_param.pixel_info.x_startpos = 0;
|
||||
graph_param.pixel_info.y_startpos = i + (LCD_SIZE - IMAGE_HEIGHT) / 2;
|
||||
graph_param.pixel_info.x_endpos = IMAGE_WIDTH - 1;
|
||||
graph_param.pixel_info.y_endpos = i + (LCD_SIZE - IMAGE_HEIGHT) / 2;
|
||||
PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
|
||||
}
|
||||
}
|
||||
|
||||
// close test
|
||||
PrivClose(lcd_fd);
|
||||
PrivClose(camera_fd);
|
||||
printf("The camera test is finished successfully\n");
|
||||
}
|
||||
|
||||
PRIV_SHELL_CMD_FUNCTION(TestCamera, a camera test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
87
APP_Framework/Applications/app_test/test_can.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_can.c
|
||||
* @brief: a application of can function
|
||||
* @version: 1.1
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2023/2/17
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
|
||||
void TestCAN(void)
|
||||
{
|
||||
// config CAN pin(SCL:34.SDA:35) in menuconfig
|
||||
int can_fd = PrivOpen(CAN_DEV_DRIVER, O_RDWR);
|
||||
if (can_fd < 0)
|
||||
{
|
||||
printf("open can_fd fd error:%d\n", can_fd);
|
||||
return;
|
||||
}
|
||||
printf("CAN open successful!\n");
|
||||
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
ioctl_cfg.ioctl_driver_type = CAN_TYPE;
|
||||
|
||||
struct CanDriverConfigure can_config;
|
||||
can_config.brp = 8U;
|
||||
can_config.tbs1 = 1U + 8U;
|
||||
can_config.tbs2 = 4U;
|
||||
can_config.tsjw = 4U;
|
||||
can_config.mode = 0U;
|
||||
|
||||
ioctl_cfg.args = (void *)&can_config;
|
||||
|
||||
if (0 != PrivIoctl(can_fd, OPE_INT, &ioctl_cfg))
|
||||
{
|
||||
printf("init can fd error %d\n", can_fd);
|
||||
PrivClose(can_fd);
|
||||
return;
|
||||
}
|
||||
printf("CAN configure successful!\n");
|
||||
|
||||
uint8_t data_buff[64u] = {1,2,3,4,4,3,2,1};
|
||||
struct CanSendConfigure frame_send;
|
||||
frame_send.ide=0;
|
||||
frame_send.stdid = 0x55;
|
||||
frame_send.rtr=0;
|
||||
frame_send.data_lenth=8;
|
||||
frame_send.data = data_buff;
|
||||
|
||||
struct CanSendConfigure frame_recv;
|
||||
uint8_t recv_buff[65U] = {0};
|
||||
frame_recv.data = recv_buff;
|
||||
|
||||
// CAN write
|
||||
while (1)
|
||||
{
|
||||
PrivTaskDelay(500);
|
||||
PrivWrite(can_fd, &frame_send, NONE);
|
||||
PrivTaskDelay(500);
|
||||
PrivRead(can_fd, &frame_recv, NONE);
|
||||
// if any data has received,Then printf message
|
||||
if(frame_recv.data_lenth > 0){
|
||||
printf("ID %08x:%s\n",frame_recv.exdid,frame_recv.data);
|
||||
}
|
||||
}
|
||||
|
||||
PrivClose(can_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
PRIV_SHELL_CMD_FUNCTION(TestCAN, a can test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
63
APP_Framework/Applications/app_test/test_dac.c
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_dac.c
|
||||
* @brief: a application of dac function
|
||||
* @version: 2.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/1/11
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
static pthread_t test_dac_task;
|
||||
|
||||
static void *TestDacTask(void *parameter)
|
||||
{
|
||||
int dac_fd;
|
||||
uint16 dac_set_value = 4096 * 10;//sin length
|
||||
|
||||
dac_fd = PrivOpen(DAC_DEV_DRIVER, O_RDWR);
|
||||
if (dac_fd < 0) {
|
||||
KPrintf("open dac fd error %d\n", dac_fd);
|
||||
}
|
||||
|
||||
struct PrivIoctlCfg ioctl_cfg;
|
||||
ioctl_cfg.ioctl_driver_type = DAC_TYPE;
|
||||
ioctl_cfg.args = &dac_set_value;
|
||||
if (0 != PrivIoctl(dac_fd, OPE_CFG, &ioctl_cfg)) {
|
||||
KPrintf("ioctl dac fd error %d\n", dac_fd);
|
||||
PrivClose(dac_fd);
|
||||
}
|
||||
|
||||
while (1) {
|
||||
//start dac output sin
|
||||
PrivWrite(dac_fd, NULL, 0);
|
||||
}
|
||||
|
||||
PrivClose(dac_fd);
|
||||
}
|
||||
|
||||
void TestDac(void)
|
||||
{
|
||||
pthread_attr_t tid;
|
||||
tid.schedparam.sched_priority = 20;
|
||||
tid.stacksize = 4096;
|
||||
|
||||
PrivTaskCreate(&test_dac_task, &tid, &TestDacTask, NULL);
|
||||
PrivTaskStartup(&test_dac_task);
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(TestDac, a dac test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
194
APP_Framework/Applications/app_test/test_ethernet.c
Normal file
@@ -0,0 +1,194 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_ethernet.c
|
||||
* @brief: a application of ethernet function
|
||||
* @version: 1.1
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/12/17
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
#include <socket.h>
|
||||
|
||||
#define BUFF_SIZE 128
|
||||
#define RECV_SIZE 16
|
||||
#define TCP_PORT 12345
|
||||
|
||||
const static uint32_t sn = 0;
|
||||
|
||||
#ifdef ETHERNET_AS_SERVER
|
||||
static int32_t wiz_server_op(uint8_t sn, uint8_t *buf, uint32_t buf_size,
|
||||
uint16_t port, enum TCP_OPTION opt) {
|
||||
int32_t ret = 0;
|
||||
uint16_t size = 0, sentsize = 0;
|
||||
switch (getSn_SR(sn)) {
|
||||
case SOCK_ESTABLISHED:
|
||||
if (getSn_IR(sn) & Sn_IR_CON) {
|
||||
printf("%d:Connected\r\n", sn);
|
||||
setSn_IR(sn, Sn_IR_CON);
|
||||
}
|
||||
if (opt == SEND_DATA) {
|
||||
uint32_t sent_size = 0;
|
||||
memset(buf,0,buf_size);
|
||||
strcpy(buf,"The message has been recved");
|
||||
ret = wiz_sock_send(sn, buf, buf_size);
|
||||
if (ret < 0) {
|
||||
wiz_sock_close(sn);
|
||||
return ret;
|
||||
}
|
||||
} else if (opt == RECV_DATA) {
|
||||
uint32_t size = 0;
|
||||
if ((size = getSn_RX_RSR(sn)) > 0) {
|
||||
if (size > buf_size) size = buf_size;
|
||||
memset(buf,0,buf_size);
|
||||
ret = wiz_sock_recv(sn, buf, size);
|
||||
printf("Recv message: %s\n",buf);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SOCK_CLOSE_WAIT:
|
||||
printf("%d:CloseWait\r\n", sn);
|
||||
if ((ret = wiz_sock_disconnect(sn)) != SOCK_OK) return ret;
|
||||
printf("%d:Closed\r\n", sn);
|
||||
break;
|
||||
case SOCK_INIT:
|
||||
printf("%d:Listen, port [%d]\r\n", sn, port);
|
||||
if ((ret = wiz_sock_listen(sn)) != SOCK_OK) return ret;
|
||||
break;
|
||||
case SOCK_CLOSED:
|
||||
printf("%d:LBTStart\r\n", sn);
|
||||
if ((ret = wiz_socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret;
|
||||
printf("%d:Opened\r\n", sn);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TestSocketAsServer(int argc, char *argv[])
|
||||
{
|
||||
x_err_t ret;
|
||||
uint8_t buf[BUFF_SIZE] = {0};
|
||||
|
||||
while (1) {
|
||||
ret = wiz_server_op(0, buf, BUFF_SIZE, TCP_PORT, RECV_DATA);
|
||||
if (ret > 0) {
|
||||
wiz_server_op(0, buf, BUFF_SIZE, TCP_PORT, SEND_DATA);
|
||||
};
|
||||
}
|
||||
|
||||
return ;
|
||||
|
||||
}
|
||||
|
||||
PRIV_SHELL_CMD_FUNCTION(TestSocketAsServer, a w5500 server test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
|
||||
#elif defined ETHERNET_AS_CLIENT
|
||||
|
||||
static uint32_t wiz_client_op(uint8_t sn, uint8_t *buf, uint32_t buf_size,
|
||||
uint8_t dst_ip[4], uint16_t dst_port,
|
||||
enum TCP_OPTION opt) {
|
||||
// assert(buf_size <= g_wiznet_buf_size);
|
||||
int32_t ret;
|
||||
switch (getSn_SR(sn)) {
|
||||
case SOCK_CLOSE_WAIT:
|
||||
wiz_sock_disconnect(sn);
|
||||
break;
|
||||
case SOCK_CLOSED:
|
||||
wiz_socket(sn, Sn_MR_TCP, 5000, 0x00);
|
||||
break;
|
||||
case SOCK_INIT:
|
||||
KPrintf("[SOCKET CLIENT] sock init.\n");
|
||||
wiz_sock_connect(sn, dst_ip, dst_port);
|
||||
break;
|
||||
case SOCK_ESTABLISHED:
|
||||
if (getSn_IR(sn) & Sn_IR_CON) {
|
||||
printf("[SOCKET CLIENT] %d:Connected\r\n", sn);
|
||||
setSn_IR(sn, Sn_IR_CON);
|
||||
}
|
||||
if (opt == SEND_DATA) {
|
||||
uint32_t sent_size = 0;
|
||||
ret = wiz_sock_send(sn, buf, buf_size);
|
||||
if (ret < 0) {
|
||||
wiz_sock_close(sn);
|
||||
return ret;
|
||||
}
|
||||
} else if (opt == RECV_DATA) {
|
||||
uint32_t size = 0;
|
||||
if ((size = getSn_RX_RSR(sn)) > 0) {
|
||||
if (size > buf_size) size = buf_size;
|
||||
ret = wiz_sock_recv(sn, buf, size);
|
||||
if (ret <= 0) return ret;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TestSocketAsClient(int argc, char *argv[])
|
||||
{
|
||||
x_err_t ret;
|
||||
uint8_t buf[BUFF_SIZE] = {0};
|
||||
uint32_t tmp_ip[4];
|
||||
uint32_t port;
|
||||
const uint8_t client_sock = 2;
|
||||
|
||||
if(argc<3){
|
||||
printf("Please enter command like TestSocketAsClient ip:port msg\n");
|
||||
}
|
||||
|
||||
sscanf(argv[1],"%d.%d.%d.%d:%d",tmp_ip,tmp_ip+1,tmp_ip+2,tmp_ip+3,&port);
|
||||
printf("Client to %d.%d.%d.%d:%d\n",tmp_ip[0],tmp_ip[1],tmp_ip[2],tmp_ip[3],port);
|
||||
uint8_t destination_ip[4]={0};
|
||||
for(int i=0;i<4;i++){
|
||||
destination_ip[i]=tmp_ip[i];
|
||||
}
|
||||
|
||||
while(1){
|
||||
ret = wiz_client_op(client_sock, argv[2], strlen(argv[2]), destination_ip, port,SEND_DATA);
|
||||
printf("sizeof:%d\n",strlen(argv[2]));
|
||||
PrivTaskDelay(1000);
|
||||
if (ret > 0) {
|
||||
ret=wiz_client_op(client_sock, buf, BUFF_SIZE, destination_ip, port, RECV_DATA);
|
||||
printf("read ret is %d\n",ret);
|
||||
if(ret>0){
|
||||
printf("client recv msg successfully!\n");
|
||||
printf("%s\n",buf);
|
||||
}
|
||||
};
|
||||
PrivTaskDelay(1000);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return ;
|
||||
|
||||
}
|
||||
|
||||
PRIV_SHELL_CMD_FUNCTION(TestSocketAsClient, a w5500 client-ip-port-msg test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
107
APP_Framework/Applications/app_test/test_extsram.c
Executable file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_extsram.c
|
||||
* @brief: a extsram test application
|
||||
* @version: 2.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/9/26
|
||||
*
|
||||
*/
|
||||
|
||||
#include <transform.h>
|
||||
#include "stdio.h"
|
||||
|
||||
/* parameters for sram peripheral */
|
||||
// /* stm32f4 Bank3:0X68000000 */
|
||||
// #define SRAM_BANK_ADDR ((uint32_t)0X68000000)
|
||||
|
||||
/* OK-1052 semc:0X80000000 */
|
||||
#define SRAM_BANK_ADDR ((uint32_t)0X80000000)
|
||||
|
||||
/* data width: 8, 16, 32 */
|
||||
#define SRAM_DATA_WIDTH 16
|
||||
|
||||
/* sram size */
|
||||
#define SRAM_SIZE ((uint32_t)0x2000000)
|
||||
|
||||
#define TICK_PER_SECOND 100
|
||||
|
||||
int ExtsramTest(void)
|
||||
{
|
||||
int i = 0;
|
||||
uint32_t start_time = 0, time_cast = 0;
|
||||
#if SRAM_DATA_WIDTH == 8
|
||||
char data_width = 1;
|
||||
uint8_t data = 0;
|
||||
#elif SRAM_DATA_WIDTH == 16
|
||||
char data_width = 2;
|
||||
uint16_t data = 0;
|
||||
#else
|
||||
char data_width = 4;
|
||||
uint32_t data = 0;
|
||||
#endif
|
||||
|
||||
/* write data */
|
||||
printf("Writing the %ld bytes data, waiting....\n", SRAM_SIZE);
|
||||
start_time = PrivGetTickTime();
|
||||
for (i = 0; i < SRAM_SIZE / data_width; i++)
|
||||
{
|
||||
#if SRAM_DATA_WIDTH == 8
|
||||
*(volatile uint8_t *)(SRAM_BANK_ADDR + i * data_width) = (uint8_t)0x55;
|
||||
#elif SRAM_DATA_WIDTH == 16
|
||||
*(volatile uint16_t *)(SRAM_BANK_ADDR + i * data_width) = (uint16_t)0x5555;
|
||||
#else
|
||||
*(volatile uint32_t *)(SRAM_BANK_ADDR + i * data_width) = (uint32_t)0x55555555;
|
||||
#endif
|
||||
}
|
||||
time_cast = PrivGetTickTime() - start_time;
|
||||
printf("Write data success, total time: %ld.%03ldS.\n", time_cast / TICK_PER_SECOND,
|
||||
time_cast % TICK_PER_SECOND / ((TICK_PER_SECOND * 1 + 999) / 1000));
|
||||
|
||||
/* read data */
|
||||
printf("start Reading and verifying data, waiting....\n");
|
||||
for (i = 0; i < SRAM_SIZE / data_width; i++)
|
||||
{
|
||||
#if SRAM_DATA_WIDTH == 8
|
||||
data = *(volatile uint8_t *)(SRAM_BANK_ADDR + i * data_width);
|
||||
if (data != 0x55)
|
||||
{
|
||||
printf("SRAM test failed!");
|
||||
break;
|
||||
}
|
||||
#elif SRAM_DATA_WIDTH == 16
|
||||
data = *(volatile uint16_t *)(SRAM_BANK_ADDR + i * data_width);
|
||||
if (data != 0x5555)
|
||||
{
|
||||
printf("SRAM test failed! data = 0x%x\n",data);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
data = *(volatile uint32_t *)(SRAM_BANK_ADDR + i * data_width);
|
||||
if (data != 0x55555555)
|
||||
{
|
||||
printf("SRAM test failed!\n");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (i >= SRAM_SIZE / data_width)
|
||||
{
|
||||
printf("SRAM test success!\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(ExtsramTest, a extsram test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
56
APP_Framework/Applications/app_test/test_flash.c
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_flash.c
|
||||
* @brief: a application of flash function
|
||||
* @version: 1.1
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/12/17
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
void TestFlash(void)
|
||||
{
|
||||
int fd = open(FLASH_DEV_DRIVER,O_RDWR);
|
||||
if(fd<0){
|
||||
printf("fs fd open error:%d\n",fd);
|
||||
return;
|
||||
}
|
||||
struct BusBlockWriteParam flash_writer;
|
||||
uint8_t read_buff[8] = {1,2,3,4,5,6,7,8};
|
||||
flash_writer.pos = 0x000000L;
|
||||
flash_writer.size = 8;
|
||||
flash_writer.buffer = read_buff;
|
||||
struct BusBlockReadParam flash_reader;
|
||||
flash_reader.pos = 0x000000L;
|
||||
flash_reader.size = 8;
|
||||
flash_reader.buffer = read_buff;
|
||||
|
||||
PrivRead(fd,&flash_reader,NONE);
|
||||
printf("Read data is:");
|
||||
for(int i=0;i<flash_writer.size;i++){
|
||||
printf("%02x ",read_buff[i]);
|
||||
read_buff[i]++;
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
PrivWrite(fd,&flash_writer,NONE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
PRIV_SHELL_CMD_FUNCTION(TestFlash, a flash test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
83
APP_Framework/Applications/app_test/test_fs.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_fs.c
|
||||
* @brief: a application of file_system function
|
||||
* @version: 1.1
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2022/11/17
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <transform.h>
|
||||
#ifdef ADD_XIZI_FEATURES
|
||||
|
||||
#define MAX_READ_LENGTH 1000
|
||||
|
||||
// sd card here is loaded as "/"
|
||||
void TestFs(void)
|
||||
{
|
||||
//open the file in sdcard
|
||||
int fd = open(FPATH,O_RDWR|O_CREAT);
|
||||
if(fd<0){
|
||||
printf("fs fd open error:%d\n",fd);
|
||||
return;
|
||||
}
|
||||
|
||||
char filewords[MAX_READ_LENGTH];
|
||||
memset(filewords,0,MAX_READ_LENGTH);
|
||||
const char *input_words = "these words are going to write in fs\n";
|
||||
|
||||
//read and write then close file
|
||||
int err_flag = read(fd,filewords,MAX_READ_LENGTH);
|
||||
if(err_flag<0){
|
||||
printf("read failed,error:%d\n",err_flag);
|
||||
return;
|
||||
}
|
||||
printf("read data is \n%s\n",filewords);
|
||||
|
||||
err_flag = write(fd,input_words,strlen(input_words));
|
||||
if(err_flag<0){
|
||||
printf("write failed,error:%d\n",err_flag);
|
||||
return;
|
||||
}
|
||||
err_flag = close(fd);
|
||||
if(err_flag<0){
|
||||
printf("close failed,error %d\n",err_flag);
|
||||
return ;
|
||||
}
|
||||
|
||||
//re-open the file and re-read the file
|
||||
fd = open(FPATH,O_RDWR);
|
||||
if(fd<0){
|
||||
printf("fs fd open error:%d\n",fd);
|
||||
return;
|
||||
}
|
||||
err_flag = read(fd,filewords,MAX_READ_LENGTH);
|
||||
if(err_flag<0){
|
||||
printf("read failed,error:%d\n",err_flag);
|
||||
return;
|
||||
}
|
||||
|
||||
printf("read data is \n%s\n",filewords);
|
||||
err_flag = close(fd);
|
||||
if(err_flag<0){
|
||||
printf("close failed,error:%d\n",err_flag);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
PRIV_SHELL_CMD_FUNCTION(TestFs, a sd or usb filesystem test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
#endif
|
||||
60
APP_Framework/Applications/app_test/test_ftpclient/README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 初赛一级赛题3:基于矽璓已实现的Lwip,在ARM上实现FTP协议的Client功能
|
||||
|
||||
## 1. 简介
|
||||
本项目是基于矽璓已实现的Lwip,在ARM上实现FTP协议的Client功能
|
||||
test_ftpclient.h声明了下载10个文件的测试函数
|
||||
test_ftpclient.c实现了下载10个文件的测试函数
|
||||
ftp_client文件夹定义了ftp_client的相关类库其中my_socket.h,my_socket.c定义了socket抽象层,并基于
|
||||
Lwip实现了该抽象层,ftp_client.h,ftp_client.c实现了ftp登录,获取文件大小,下载文件等功能
|
||||
|
||||
## 2. 数据结构设计说明
|
||||
- ftp_client.c 的设计
|
||||
分别定义了发送命令和接收数据的socket和相应的缓冲区并且实现了登录、发送命令、接收响应数据、查找文件大小、进入被动模式、下载文件、关闭ftp客户端等操作
|
||||
```c
|
||||
static int m_socket_cmd; // 发送命令的socket文件描述符
|
||||
static int m_socket_data; // 接收ftp服务器文件的socket文件描述符
|
||||
static char m_send_buffer[1024]; // 发送缓冲区
|
||||
static char m_recv_buffer[1024]; // 接收缓冲区
|
||||
```
|
||||
## 3. 测试程序说明
|
||||
- test_ftpclient.c用于测试下载10个文件
|
||||
连接电脑上的ftp服务器下载10个4KB文件,通过终端日志打印确定文件是否下载成功,以及追踪通信流程和下载进度
|
||||
```c
|
||||
void TestFtpClient(int argc, char* argv[])
|
||||
{
|
||||
FtpInitCmd();
|
||||
int ret = FtpLogin("192.168.0.248", 21, "anonymous", "anonymous");
|
||||
int size;
|
||||
char *buf;
|
||||
for(int i = 1;i <= 10;i++){
|
||||
char fileName[20] = "/file";
|
||||
char temp[5] = "";
|
||||
sprintf(temp,"%d",i);
|
||||
strcat(fileName,temp);
|
||||
size = FtpFileSize(fileName);
|
||||
buf = malloc(size);
|
||||
FtpInitData(); // data socket 每次下载都要重新创建,下载完都要关闭
|
||||
ret = FtpDownload(fileName, buf, size);
|
||||
free(buf);
|
||||
}
|
||||
FtpQuit();
|
||||
return;
|
||||
}
|
||||
```
|
||||
|
||||
## 4. 运行结果(##需结合运行测试截图按步骤说明##)
|
||||
1. 配置开启BSP_USING_LWIP、USER_TEST_FTPCLIENT
|
||||

|
||||

|
||||
2. 编译
|
||||

|
||||
3. 烧写
|
||||

|
||||
4. xshell连接串口终端
|
||||

|
||||
6. 配置ip
|
||||

|
||||
7. 运行TestFtpClient,开始下载文件
|
||||

|
||||

|
||||

|
||||
@@ -0,0 +1,256 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: ftp_client.c
|
||||
* @brief: ftp client tool
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/7/25
|
||||
* @reference https://kerndev.blog.csdn.net/article/details/89383888
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include "my_socket.h"
|
||||
#include "ftp_client.h"
|
||||
|
||||
static int m_socket_cmd;
|
||||
static int m_socket_data;
|
||||
static char m_send_buffer[1024];
|
||||
static char m_recv_buffer[1024];
|
||||
|
||||
static int FtpSendCommand(char *cmd)
|
||||
{
|
||||
int ret;
|
||||
printf("send command: %s\r\n", cmd);
|
||||
ret = SocketSend(m_socket_cmd, cmd, (int)strlen(cmd));
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("failed to send command: %s\r\n",cmd);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int FtpRecvRespond(char *resp, int len)
|
||||
{
|
||||
int ret;
|
||||
int off;
|
||||
len -= 1;
|
||||
for(off=0; off<len; off+=ret)
|
||||
{
|
||||
ret = SocketRecv(m_socket_cmd, &resp[off], 1);
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("recv respond error(ret=%d)!\r\n", ret);
|
||||
return 0;
|
||||
}
|
||||
if(resp[off] == '\n')
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
resp[off+1] = 0;
|
||||
printf("respond:%s\r\n", resp);
|
||||
return atoi(resp);
|
||||
}
|
||||
|
||||
static int FtpEnterPasv(char *ipaddr, int *port)
|
||||
{
|
||||
int ret;
|
||||
char *find;
|
||||
int a,b,c,d;
|
||||
int pa,pb;
|
||||
ret = FtpSendCommand("PASV\r\n");
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 227)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
find = strrchr(m_recv_buffer, '(');
|
||||
sscanf(find, "(%d,%d,%d,%d,%d,%d)", &a, &b, &c, &d, &pa, &pb);
|
||||
sprintf(ipaddr, "%d.%d.%d.%d", a, b, c, d);
|
||||
*port = pa * 256 + pb;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int FtpDownload(char *name, char *buf, int len)
|
||||
{
|
||||
int i;
|
||||
int ret;
|
||||
char ipaddr[32];
|
||||
int port;
|
||||
|
||||
//查询数据地址
|
||||
ret = FtpEnterPasv(ipaddr, &port);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
//连接数据端口
|
||||
ret = SocketConnect(m_socket_data, ipaddr, port);
|
||||
if(ret != 1)
|
||||
{
|
||||
printf("failed to connect data port\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//准备下载
|
||||
sprintf(m_send_buffer, "RETR %s\r\n", name);
|
||||
ret = FtpSendCommand(m_send_buffer);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 150)
|
||||
{
|
||||
SocketClose(m_socket_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//开始下载,读取完数据后,服务器会自动关闭连接
|
||||
for(i=0; i<len; i+=ret)
|
||||
{
|
||||
ret = SocketRecv(m_socket_data, ((char *)buf) + i, len);
|
||||
printf("download %d/%d.\r\n", i + ret, len);
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("download was interrupted.\r\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
//下载完成
|
||||
printf("download %d/%d bytes complete.\r\n", i, len);
|
||||
printf("====file content====\n");
|
||||
buf[100] = '\0';
|
||||
printf("%s\n",buf);
|
||||
printf("====================\n");
|
||||
// FILE *fp = NULL;
|
||||
|
||||
// fp = fopen(name+1, "wb");
|
||||
// fwrite(buf,len,1,fp);
|
||||
// fclose(fp);
|
||||
|
||||
SocketClose(m_socket_data);
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
return (ret==226);
|
||||
}
|
||||
|
||||
int FtpFileSize(char *name)
|
||||
{
|
||||
int ret;
|
||||
int size;
|
||||
sprintf(m_send_buffer,"SIZE %s\r\n",name);
|
||||
ret = FtpSendCommand(m_send_buffer);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 213)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
size = atoi(m_recv_buffer + 4);
|
||||
return size;
|
||||
}
|
||||
|
||||
int FtpLogin(char *addr, int port, char *username, char *password)
|
||||
{
|
||||
int ret;
|
||||
printf("connect...\r\n");
|
||||
ret = SocketConnect(m_socket_cmd, addr, port);
|
||||
if(ret != 1)
|
||||
{
|
||||
printf("connect server failed!\r\n");
|
||||
return 0;
|
||||
}
|
||||
printf("connect ok.\r\n");
|
||||
//等待欢迎信息
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 220)
|
||||
{
|
||||
printf("bad server, ret=%d!\r\n", ret);
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("login...\r\n");
|
||||
//发送USER
|
||||
sprintf(m_send_buffer, "USER %s\r\n", username);
|
||||
ret = FtpSendCommand(m_send_buffer);
|
||||
if(ret != 1)
|
||||
{
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 331)
|
||||
{
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//发送PASS
|
||||
sprintf(m_send_buffer, "PASS %s\r\n", password);
|
||||
ret = FtpSendCommand(m_send_buffer);
|
||||
if(ret != 1)
|
||||
{
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 230)
|
||||
{
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
printf("login success.\r\n");
|
||||
|
||||
//设置为二进制模式
|
||||
ret = FtpSendCommand("TYPE I\r\n");
|
||||
if(ret != 1)
|
||||
{
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(m_recv_buffer, 1024);
|
||||
if(ret != 200)
|
||||
{
|
||||
SocketClose(m_socket_cmd);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void FtpQuit(void)
|
||||
{
|
||||
FtpSendCommand("QUIT\r\n");
|
||||
SocketClose(m_socket_cmd);
|
||||
}
|
||||
|
||||
void FtpInitCmd(void)
|
||||
{
|
||||
m_socket_cmd = SocketCreate();
|
||||
}
|
||||
|
||||
void FtpInitData(void){
|
||||
m_socket_data= SocketCreate();
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: ftp_client.h
|
||||
* @brief: ftp client tool
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/7/25
|
||||
*/
|
||||
|
||||
#ifndef FTP_CLIENT_H
|
||||
#define FTP_CLIENT_H
|
||||
|
||||
/* init ftp cmd socket */
|
||||
void FtpInitCmd(void);
|
||||
|
||||
/* init ftp data socket */
|
||||
void FtpInitData(void);
|
||||
|
||||
/* quit ftp */
|
||||
void FtpQuit(void);
|
||||
|
||||
/* fpt login */
|
||||
int FtpLogin(char *addr, int port, char *username, char *password);
|
||||
|
||||
/* get file size */
|
||||
int FtpFileSize(char *name);
|
||||
|
||||
/* ftp download file*/
|
||||
int FtpDownload(char *name, char *buf, int len);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: my_socket.c
|
||||
* @brief: a abstract socket api
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/7/25
|
||||
* @reference https://kerndev.blog.csdn.net/article/details/89383888
|
||||
*/
|
||||
|
||||
#include "my_socket.h"
|
||||
#include <sockets.h>
|
||||
#include <def.h>
|
||||
#include <errno.h>
|
||||
|
||||
int SocketCreate(void){
|
||||
return socket(AF_INET,SOCK_STREAM,0);
|
||||
}
|
||||
|
||||
int SocketConnect(int sock, const char *addr, int port){
|
||||
// unsigned int iRemoteAddr = 0;
|
||||
struct sockaddr_in stRemoteAddr = {0}; //对端,即目标地址信息
|
||||
|
||||
stRemoteAddr.sin_family = AF_INET;
|
||||
stRemoteAddr.sin_port = htons(port);
|
||||
stRemoteAddr.sin_addr.s_addr = inet_addr(addr);
|
||||
// inet_pton(AF_INET, addr, &iRemoteAddr);
|
||||
// stRemoteAddr.sin_addr.s_addr=iRemoteAddr;
|
||||
int res = connect(sock,(struct sockaddr *)&stRemoteAddr,sizeof(stRemoteAddr));
|
||||
if(res == -1){
|
||||
printf("error:%d\n",errno);
|
||||
}
|
||||
return res == 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
int SocketSend(int sock, void *data, int len){
|
||||
return send(sock,data,len,0);
|
||||
}
|
||||
|
||||
int SocketRecv(int sock, void *data, int len){
|
||||
return recv(sock,data,len,0);
|
||||
}
|
||||
|
||||
void SocketClose(int sock){
|
||||
close(sock);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file my_socket.h
|
||||
* @brief a abstract socket api
|
||||
* @version 1.0
|
||||
* @author bdislab_final
|
||||
* @date 2023/7/25
|
||||
*/
|
||||
|
||||
#ifndef MYSOCKET_H
|
||||
#define MYSOCKET_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/* create a socket */
|
||||
int SocketCreate(void);
|
||||
|
||||
/* connect a socket */
|
||||
int SocketConnect(int sock, const char *addr, int port);
|
||||
|
||||
/* send data through socket*/
|
||||
int SocketSend(int sock, void *data, int len);
|
||||
|
||||
/* receive data from socket*/
|
||||
int SocketRecv(int sock, void *data, int len);
|
||||
|
||||
/* close socket*/
|
||||
void SocketClose(int sock);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 48 KiB |
BIN
APP_Framework/Applications/app_test/test_ftpclient/img/image.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: test_ftpclient.c
|
||||
* @brief: a ftpClient test sample
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/7/25
|
||||
*/
|
||||
|
||||
#include "test_ftpclient.h"
|
||||
#include "ftp_client/ftp_client.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <transform.h>
|
||||
|
||||
|
||||
/* test for ftp client */
|
||||
void TestFtpClient(int argc, char* argv[])
|
||||
{
|
||||
FtpInitCmd();
|
||||
int ret = FtpLogin("192.168.1.248", 21, "anonymous", "anonymous");
|
||||
int size;
|
||||
char *buf;
|
||||
for(int i = 1;i <= 10;i++){
|
||||
char fileName[20] = "/file";
|
||||
char temp[5] = "";
|
||||
sprintf(temp,"%d",i-1);
|
||||
strcat(fileName,temp);
|
||||
size = FtpFileSize(fileName);
|
||||
buf = malloc(size);
|
||||
FtpInitData(); // data socket 每次下载都要重新创建,下载完都要关闭
|
||||
ret = FtpDownload(fileName, buf, size);
|
||||
free(buf);
|
||||
}
|
||||
FtpQuit();
|
||||
return;
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(TestFtpClient, a ftpClient test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file test_ftpclient.h
|
||||
* @brief a ftpClient test sample
|
||||
* @version 1.0
|
||||
* @author bdislab_final
|
||||
* @date 2023/7/25
|
||||
*/
|
||||
|
||||
#ifndef TEST_FTPCLIENT_H
|
||||
#define TEST_FTPCLIENT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* test for ftp client */
|
||||
void TestFtpClient(int argc, char* argv[]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,135 @@
|
||||
# 决赛一级赛题3:基于初赛一级赛题3,在云服务器上实现FTP Server功能
|
||||
|
||||
## 1. 简介
|
||||
本项目是基于赛事提供的云服务器,实现FTP协议的Server功能,其功能支持至少10个Client端并发向Server端传输4KB大小的文件,
|
||||
支持Server端并发地向至少10个Client端传输4KB大小的文件。
|
||||
test_ftpclient_final.h声明了多个客户端并发下载文件、并发上传文件的测试函数
|
||||
test_ftpclient_final.c实现了多个客户端并发下载文件、并发上传文件的测试函数
|
||||
ftp_client文件夹定义了ftp_client的相关类库其中my_socket.h,my_socket.c定义了socket抽象层,并基于
|
||||
Lwip实现了该抽象层,ftp_client.h,ftp_client.c实现了ftp登录,获取文件大小,下载文件等功能
|
||||
注意:在赛事提供的云服务器/root/yanglongFTP上有对应服务器代码 ./server运行服务器,为了方便查看代码我们讲服务器代码备份存放在ftp_server目录下
|
||||
## 2. 数据结构设计说明
|
||||
- ftp_client.c 的设计
|
||||
分别定义了发送命令和接收数据的socket和相应的缓冲区并且实现了登录、发送命令、接收响应数据、查找文件大小、进入被动模式、下载文件、关闭ftp客户端等操作
|
||||
```c
|
||||
static int m_socket_cmd[THREAD_NUM]; // 发送命令的socket文件描述符,THREAD_NUM表示线程数目,用来模拟多个客户端并发访问
|
||||
static int m_socket_data[THREAD_NUM]; // 接收ftp服务器文件的socket文件描述符
|
||||
static char m_send_buffer[THREAD_NUM][1024]; // 发送缓冲区
|
||||
static char m_recv_buffer[THREAD_NUM][1024]; // 接收缓冲区
|
||||
```
|
||||
- server.c 的设计(具体代码在赛事提供的云服务器的/root/yanglongFTP下)
|
||||
```c
|
||||
#define THREAD_NUM 10000 // thread num
|
||||
static int isBinary = 0; // transmit binary data
|
||||
static int port = 9992; // service port
|
||||
static int dataPort = 9993; // the port for file download
|
||||
static char order[4]; // receive order
|
||||
static char param[20]; // receive order param
|
||||
static char *respMessage; // respose message
|
||||
static int serverFd; // the server fd for deal with order requests
|
||||
static int dataServerFd; // the server fd for file download
|
||||
sem_t mutex; // mutex lock
|
||||
struct Data{ // 线程间通信传输的数据
|
||||
char fileName[20]; // file name
|
||||
int type; // 0:download 1:upload
|
||||
sem_t isDone; // complete file downlaod
|
||||
sem_t isReady; // 文件准备好了
|
||||
} data;
|
||||
```
|
||||
## 3. 测试程序说明
|
||||
- test_ftpclient_final.c用于测试多个客户端并发下载文件
|
||||
通过多线程模拟多个客户端并发访问服务器,通过 TestFtpClient options threads进行测试
|
||||
其中options=1表示下载options=2表示上传,threads表示线程数/模拟的并发客户端数目
|
||||
```c
|
||||
/* test for 10 ftp client */
|
||||
void TestFtpClient(int argc, char* argv[])
|
||||
{
|
||||
int options = atoi(argv[1]);
|
||||
int n = atoi(argv[2]);
|
||||
pthread_t threads[THREAD_NUM];
|
||||
for(int i = 0;i < n;++i){
|
||||
threadIDs[i] = i;
|
||||
if(options == 1){ // 全部都是下载
|
||||
pthread_create(&threads[i],NULL,&DownLoad,&threadIDs[i]);
|
||||
}else if(options == 2){ // 全部都是上传
|
||||
pthread_create(&threads[i],NULL,&UpLoad,&threadIDs[i]);
|
||||
}else if(options == 3){ // 随机下载/上传
|
||||
int r = rand()%2;
|
||||
if(r == 0){
|
||||
printf("===============download===============\n");
|
||||
pthread_create(&threads[i],NULL,&DownLoad,&threadIDs[i]);
|
||||
}else{
|
||||
printf("===============upload===============\n");
|
||||
pthread_create(&threads[i],NULL,&UpLoad,&threadIDs[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
PRIV_SHELL_CMD_FUNCTION(TestFtpClient, a ftpClient test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||
```
|
||||
|
||||
## 4. 运行结果(##需结合运行测试截图按步骤说明##)
|
||||
1. 配置开启BSP_USING_LWIP、USER_TEST_FTPCLIENT
|
||||

|
||||

|
||||

|
||||
2. 编译
|
||||

|
||||
3. 烧写
|
||||

|
||||
4. xshell连接串口终端并配置ip
|
||||

|
||||
5. 通过./server在云服务器运行FTP服务器
|
||||

|
||||
6. 运行TestFtpClient 1 10,模拟10个客户端并发下载文件
|
||||
- 客户端日志
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
- 服务器日志
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
7. 运行TestFtpClient 2 10,模拟10个客户端并发上传文件
|
||||
- 客户端日志
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
- 服务器日志
|
||||

|
||||

|
||||

|
||||

|
||||
- 上传结果
|
||||

|
||||
8. 运行TestFtpClient 3 10,模拟10个客户端混合并发下载和上传文件
|
||||
- 客户端日志
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
- 服务器日志
|
||||

|
||||

|
||||

|
||||
|
||||
- 下载和上传结果
|
||||

|
||||

|
||||
@@ -0,0 +1,299 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: ftp_client.c
|
||||
* @brief: ftp client tool
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/9/16
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include "my_socket.h"
|
||||
#include "ftp_client.h"
|
||||
|
||||
|
||||
static int m_socket_cmd[THREAD_NUM];
|
||||
static int m_socket_data[THREAD_NUM];
|
||||
static char m_send_buffer[THREAD_NUM][1024];
|
||||
static char m_recv_buffer[THREAD_NUM][1024];
|
||||
|
||||
static int FtpSendCommand(int threadID,char *cmd)
|
||||
{
|
||||
int ret;
|
||||
printf("send command: %s,threadID=%d\r\n", cmd,threadID);
|
||||
ret = SocketSend(m_socket_cmd[threadID], cmd, (int)strlen(cmd));
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("failed to send command: %s\r\n",cmd);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int FtpRecvRespond(int threadID,char *resp, int len)
|
||||
{
|
||||
int ret;
|
||||
int off;
|
||||
len -= 1;
|
||||
for(off=0; off<len; off+=ret)
|
||||
{
|
||||
ret = SocketRecv(m_socket_cmd[threadID], &resp[off], 1);
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("recv respond error(ret=%d)!\r\n", ret);
|
||||
return 0;
|
||||
}
|
||||
if(resp[off] == '\n')
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
resp[off+1] = 0;
|
||||
printf("respond:%s,threadID=%d\r\n", resp,threadID);
|
||||
return atoi(resp);
|
||||
}
|
||||
|
||||
static int FtpEnterPasv(int threadID,char *ipaddr, int *port)
|
||||
{
|
||||
int ret;
|
||||
char *find;
|
||||
int a,b,c,d;
|
||||
int pa,pb;
|
||||
ret = FtpSendCommand(threadID,"PASV\r\n");
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 227)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
find = strrchr(m_recv_buffer[threadID], '(');
|
||||
sscanf(find, "(%d,%d,%d,%d,%d,%d)", &a, &b, &c, &d, &pa, &pb);
|
||||
sprintf(ipaddr, "%d.%d.%d.%d", a, b, c, d);
|
||||
*port = pa * 256 + pb;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int FtpUpload(int threadID,char *name, void *buf, int len)
|
||||
{
|
||||
int ret;
|
||||
char ipaddr[32];
|
||||
int port;
|
||||
|
||||
//查询数据地址
|
||||
ret=FtpEnterPasv(threadID,ipaddr, &port);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret=SocketConnect(m_socket_data[threadID], ipaddr, port);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
//准备上传
|
||||
sprintf(m_send_buffer[threadID], "STOR %s\r\n", name);
|
||||
ret = FtpSendCommand(threadID,m_send_buffer[threadID]);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 150)
|
||||
{
|
||||
SocketClose(m_socket_data[threadID]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//开始上传
|
||||
ret = SocketSend(m_socket_data[threadID], buf, len);
|
||||
if(ret != len)
|
||||
{
|
||||
printf("send data error!\r\n");
|
||||
SocketClose(m_socket_data[threadID]);
|
||||
return 0;
|
||||
}
|
||||
SocketClose(m_socket_data[threadID]);
|
||||
|
||||
//上传完成,等待回应
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
return (ret==226);
|
||||
}
|
||||
|
||||
int FtpDownload(int threadID,char *name, void *buf, int len)
|
||||
{
|
||||
int i;
|
||||
int ret;
|
||||
char ipaddr[32];
|
||||
int port;
|
||||
|
||||
//查询数据地址
|
||||
ret = FtpEnterPasv(threadID,ipaddr, &port);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
printf("m_socket_data[threadID]=%d,threadID=%d\n",m_socket_data[threadID],threadID);
|
||||
//连接数据端口
|
||||
ret = SocketConnect(m_socket_data[threadID], ipaddr, port);
|
||||
if(ret != 1)
|
||||
{
|
||||
printf("failed to connect data port\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//准备下载
|
||||
sprintf(m_send_buffer[threadID], "RETR %s\r\n", name);
|
||||
ret = FtpSendCommand(threadID,m_send_buffer[threadID]);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 150)
|
||||
{
|
||||
SocketClose(m_socket_data[threadID]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//开始下载,读取完数据后,服务器会自动关闭连接
|
||||
for(i=0; i<len; i+=ret)
|
||||
{
|
||||
ret = SocketRecv(m_socket_data[threadID], ((char *)buf) + i, len);
|
||||
printf("download %d/%d.,threadID=%d\r\n", i + ret, len,threadID);
|
||||
if(ret < 0)
|
||||
{
|
||||
printf("download was interrupted.\r\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
//下载完成
|
||||
printf("download %d/%d bytes complete.,threadID=%d\r\n", i, len,threadID);
|
||||
// FILE *fp = NULL;
|
||||
|
||||
// fp = fopen(name+1, "wb");
|
||||
// fwrite(buf,len,1,fp);
|
||||
// fclose(fp);
|
||||
|
||||
SocketClose(m_socket_data[threadID]);
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
return (ret==226);
|
||||
}
|
||||
|
||||
int FtpFileSize(int threadID,char *name)
|
||||
{
|
||||
int ret;
|
||||
int size;
|
||||
sprintf(m_send_buffer[threadID],"SIZE %s\r\n",name);
|
||||
ret = FtpSendCommand(threadID,m_send_buffer[threadID]);
|
||||
if(ret != 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 213)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
size = atoi(m_recv_buffer[threadID] + 4);
|
||||
return size;
|
||||
}
|
||||
|
||||
int FtpLogin(int threadID,char *addr, int port, char *username, char *password)
|
||||
{
|
||||
int ret;
|
||||
printf("connect...,threadID=%d\r\n",threadID);
|
||||
ret = SocketConnect(m_socket_cmd[threadID], addr, port);
|
||||
if(ret != 1)
|
||||
{
|
||||
printf("connect server failed!\r\n");
|
||||
return 0;
|
||||
}
|
||||
printf("connect ok.,threadID=%d\r\n",threadID);
|
||||
//等待欢迎信息
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 220)
|
||||
{
|
||||
printf("bad server, ret=%d!\r\n", ret);
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("login...threadID=%d\r\n",threadID);
|
||||
//发送USER
|
||||
sprintf(m_send_buffer[threadID], "USER %s\r\n", username);
|
||||
ret = FtpSendCommand(threadID,m_send_buffer[threadID]);
|
||||
if(ret != 1)
|
||||
{
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 331)
|
||||
{
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//发送PASS
|
||||
sprintf(m_send_buffer[threadID], "PASS %s\r\n", password);
|
||||
ret = FtpSendCommand(threadID,m_send_buffer[threadID]);
|
||||
if(ret != 1)
|
||||
{
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 230)
|
||||
{
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
printf("login success.threadID=%d\r\n",threadID);
|
||||
|
||||
//设置为二进制模式
|
||||
ret = FtpSendCommand(threadID,"TYPE I\r\n");
|
||||
if(ret != 1)
|
||||
{
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
ret = FtpRecvRespond(threadID,m_recv_buffer[threadID], 1024);
|
||||
if(ret != 200)
|
||||
{
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void FtpQuit(int threadID)
|
||||
{
|
||||
FtpSendCommand(threadID,"QUIT\r\n");
|
||||
SocketClose(m_socket_cmd[threadID]);
|
||||
}
|
||||
|
||||
void FtpInitCmd(int threadID)
|
||||
{
|
||||
m_socket_cmd[threadID] = SocketCreate();
|
||||
}
|
||||
|
||||
void FtpInitData(int threadID){
|
||||
m_socket_data[threadID]= SocketCreate();
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: ftp_client.h
|
||||
* @brief: ftp client tool
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/9/16
|
||||
*/
|
||||
|
||||
#ifndef FTP_CLIENT_H
|
||||
#define FTP_CLIENT_H
|
||||
|
||||
#define THREAD_NUM 10
|
||||
|
||||
/* init ftp cmd socket */
|
||||
void FtpInitCmd(int threadID);
|
||||
|
||||
/* init ftp data socket */
|
||||
void FtpInitData(int threadID);
|
||||
|
||||
/* quit ftp */
|
||||
void FtpQuit(int threadID);
|
||||
|
||||
/* fpt login */
|
||||
int FtpLogin(int threadID,char *addr, int port, char *username, char *password);
|
||||
|
||||
/* get file size */
|
||||
int FtpFileSize(int threadID,char *name);
|
||||
|
||||
/* ftp download file*/
|
||||
int FtpDownload(int threadID,char *name, void *buf, int len);
|
||||
|
||||
/*ftp upload*/
|
||||
int FtpUpload(int threadID,char *name, void *buf, int len);
|
||||
#endif
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: my_socket.c
|
||||
* @brief: a abstract socket api
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/9/16
|
||||
*/
|
||||
|
||||
#include "my_socket.h"
|
||||
#include <sockets.h>
|
||||
#include <def.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
int SocketCreate(void){
|
||||
return socket(AF_INET,SOCK_STREAM,0);
|
||||
}
|
||||
|
||||
int SocketConnect(int sock, const char *addr, int port){
|
||||
// unsigned int iRemoteAddr = 0;
|
||||
struct sockaddr_in stRemoteAddr = {0}; //对端,即目标地址信息
|
||||
|
||||
stRemoteAddr.sin_family = AF_INET;
|
||||
stRemoteAddr.sin_port = htons(port);
|
||||
stRemoteAddr.sin_addr.s_addr = inet_addr(addr);
|
||||
int res = connect(sock,(struct sockaddr *)&stRemoteAddr,sizeof(stRemoteAddr));
|
||||
if(res == -1){
|
||||
printf("error:%d,str error:%s\n",errno,strerror(errno));
|
||||
}
|
||||
return res == 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
int SocketSend(int sock, void *data, int len){
|
||||
return send(sock,data,len,0);
|
||||
}
|
||||
|
||||
int SocketRecv(int sock, void *data, int len){
|
||||
return recv(sock,data,len,0);
|
||||
}
|
||||
|
||||
void SocketClose(int sock){
|
||||
close(sock);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file my_socket.h
|
||||
* @brief a abstract socket api
|
||||
* @version 1.0
|
||||
* @author bdislab_final
|
||||
* @date 2023/9/16
|
||||
*/
|
||||
|
||||
#ifndef MYSOCKET_H
|
||||
#define MYSOCKET_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/* create a socket */
|
||||
int SocketCreate(void);
|
||||
|
||||
/* connect a socket */
|
||||
int SocketConnect(int sock, const char *addr, int port);
|
||||
|
||||
/* send data through socket*/
|
||||
int SocketSend(int sock, void *data, int len);
|
||||
|
||||
/* receive data from socket*/
|
||||
int SocketRecv(int sock, void *data, int len);
|
||||
|
||||
/* close socket*/
|
||||
void SocketClose(int sock);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
BIN
APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/a.out
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
for i in {1..10}
|
||||
do
|
||||
dd if=/dev/zero of="file$i" bs=4K count=1
|
||||
done
|
||||
@@ -0,0 +1 @@
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
BIN
APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server
Executable file
@@ -0,0 +1,251 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: server.c
|
||||
* @brief: a ftpserver
|
||||
* @version: 1.0
|
||||
* @author: bdislab_final
|
||||
* @date: 2023/10/11
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <unistd.h>
|
||||
#include <pthread.h>
|
||||
#include <semaphore.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define THREAD_NUM 10000 // thread num
|
||||
static int isBinary = 0; // transmit binary data
|
||||
static int port = 9992; // service port
|
||||
static int dataPort = 9993; // the port for file download
|
||||
static char order[4]; // receive order
|
||||
static char param[20]; // receive order param
|
||||
static char *respMessage; // respose message
|
||||
static int serverFd; // the server fd for deal with order requests
|
||||
static int dataServerFd; // the server fd for file download
|
||||
sem_t mutex; // mutex lock
|
||||
struct Data{ // 线程间通信传输的数据
|
||||
char fileName[20]; // file name
|
||||
int type; // 0:download 1:upload
|
||||
sem_t isDone; // complete file downlaod
|
||||
sem_t isReady; // 文件准备好了
|
||||
} data;
|
||||
|
||||
void RecvData(int clientFd,char param[20]){
|
||||
recv(clientFd,param,20,0);
|
||||
for(int i = 0;i < 20;++i){
|
||||
if(param[i] == '\r'){
|
||||
param[i] = '\0';
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void SendMessage(int clientFd, char * respMessage){
|
||||
int len = 0;
|
||||
while(respMessage[len] != '\n'){
|
||||
len++;
|
||||
}
|
||||
send(clientFd,respMessage,len+1,0);
|
||||
}
|
||||
|
||||
int CreateServer(int port,int type) {
|
||||
int serverFd = 0;
|
||||
struct sockaddr_in serverAddr = {0};
|
||||
socklen_t socklen = 0;
|
||||
serverFd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if(0 > serverFd)
|
||||
{
|
||||
printf("创建socket失败\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(type == 0){
|
||||
printf("in ftp server:serverFd=%d\n",serverFd);
|
||||
}else{
|
||||
printf("in ftp data server:serverFd=%d\n",serverFd);
|
||||
}
|
||||
serverAddr.sin_family = AF_INET;
|
||||
serverAddr.sin_port = htons(port);
|
||||
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);
|
||||
if(0 > bind(serverFd, (void *)&serverAddr, sizeof(serverAddr)))
|
||||
{
|
||||
printf("绑定失败!\n");
|
||||
return 0;
|
||||
}
|
||||
if(0 > listen(serverFd, 1024))
|
||||
{
|
||||
printf("监听失败!\n");
|
||||
return 0;
|
||||
}
|
||||
return serverFd;
|
||||
}
|
||||
|
||||
// receive file's data
|
||||
void* UpLoadServer(void * args){
|
||||
int clientFd = *(int *) args;
|
||||
char buf[4096];
|
||||
int ret = recv(clientFd,buf,4096,0);
|
||||
printf("ret=%d,errno=%d\n",ret,errno);
|
||||
FILE * file = fopen(data.fileName,"wb");
|
||||
fwrite(buf,4096,1,file);
|
||||
fclose(file);
|
||||
printf("upload complete for client: clientFd=%d,tid=%ld\n",clientFd,pthread_self());
|
||||
// notify for file download complete
|
||||
sem_post(&data.isDone);
|
||||
close(clientFd);
|
||||
}
|
||||
|
||||
// send file's data
|
||||
void* DownLoadServer(void * args){
|
||||
int clientFd = *(int *) args;
|
||||
char buf[4096];
|
||||
FILE * file = fopen(data.fileName,"rb");
|
||||
fread(buf,4096,1,file);
|
||||
send(clientFd,buf,sizeof(buf),0);
|
||||
fclose(file);
|
||||
printf("download complete for client: clientFd=%d,tid=%ld\n",clientFd,pthread_self());
|
||||
// notify for file download complete
|
||||
sem_post(&data.isDone);
|
||||
close(clientFd);
|
||||
}
|
||||
|
||||
// accept a client and new a thread for downlaod/upload
|
||||
void* DataServer(void * args){
|
||||
dataServerFd = CreateServer(dataPort,1);
|
||||
while(1){
|
||||
// wait for a filename
|
||||
sem_wait(&data.isReady);
|
||||
struct sockaddr_in clientAdrr = {0};
|
||||
int socketLen = sizeof(clientAdrr);
|
||||
int clientFd = accept(dataServerFd,(struct sockaddr *)&clientAdrr,&socketLen);
|
||||
pthread_t thread;
|
||||
if(data.type == 0){ // download
|
||||
printf("accept a client for file download: clientFd=%d,tid=%ld\n",clientFd,pthread_self());
|
||||
pthread_create(&thread,NULL,&DownLoadServer,&clientFd);
|
||||
}else if(data.type == 1){ // upload
|
||||
printf("accept a client for file upload: clientFd=%d,tid=%ld\n",clientFd,pthread_self());
|
||||
pthread_create(&thread,NULL,&UpLoadServer,&clientFd);
|
||||
}
|
||||
// release lock
|
||||
sem_post(&mutex);
|
||||
}
|
||||
}
|
||||
|
||||
// deal with order requests
|
||||
void* OrderServer(void * args){
|
||||
int clientFd = *(int *)args;
|
||||
printf("in OrderServer thread: tid=%ld\n",pthread_self());
|
||||
// order format: USER anonymous\r\n
|
||||
// response code format: 213 4096\r\n
|
||||
while(1){
|
||||
recv(clientFd,order,4,0);
|
||||
printf("order=%s,tid=%ld\n",order,pthread_self());
|
||||
if(strcmp(order,"USER") == 0){
|
||||
RecvData(clientFd,param);
|
||||
if(strcmp(param," anonymous") == 0){
|
||||
respMessage = "331 Please specify the password.\r\n";
|
||||
SendMessage(clientFd,respMessage);
|
||||
}
|
||||
}else if(strcmp(order,"PASS") == 0){
|
||||
RecvData(clientFd,param);
|
||||
if(strcmp(param," anonymous") == 0){
|
||||
respMessage = "230 Login successful.\r\n";
|
||||
SendMessage(clientFd,respMessage);
|
||||
printf("login successful in clientFd %d,tid=%ld\n",clientFd,pthread_self());
|
||||
}
|
||||
}else if(strcmp(order,"TYPE") == 0){
|
||||
RecvData(clientFd,param);
|
||||
if(strcmp(param," I") == 0){
|
||||
isBinary = 1;
|
||||
respMessage = "200 Switching to Binary mode.\r\n";
|
||||
SendMessage(clientFd,respMessage);
|
||||
}
|
||||
}else if(strcmp(order,"SIZE") == 0){
|
||||
RecvData(clientFd,param);
|
||||
respMessage = "213 4096\r\n";
|
||||
SendMessage(clientFd,respMessage);
|
||||
}else if(strcmp(order,"PASV") == 0){
|
||||
sem_wait(&mutex); // 锁竞争
|
||||
sem_init(&data.isDone,0,0);
|
||||
RecvData(clientFd,param);
|
||||
char buf[50];
|
||||
sprintf(buf,"227 Entering passive mode (8,140,53,225,%d,%d).\r\n",dataPort/256,dataPort%256);
|
||||
respMessage = buf;
|
||||
SendMessage(clientFd,respMessage);
|
||||
}else if(strcmp(order,"RETR") == 0){
|
||||
RecvData(clientFd,param);
|
||||
sprintf(data.fileName,"./data/%s",param+2);
|
||||
data.type = 0;
|
||||
// notify the thread of waiting fileName
|
||||
sem_post(&data.isReady);
|
||||
char buf[70];
|
||||
sprintf(buf,"150 Opening Binary mode data connection for %s (4096 bytes).\r\n",param+1);
|
||||
respMessage = buf;
|
||||
SendMessage(clientFd,respMessage);
|
||||
// wait for download complete
|
||||
printf("wait for download complete,tid=%ld\n",pthread_self());
|
||||
sem_wait(&data.isDone);
|
||||
respMessage = "226 Transfer complete.\r\n";
|
||||
SendMessage(clientFd,respMessage);
|
||||
}else if(strcmp(order,"STOR") == 0){
|
||||
RecvData(clientFd,param);
|
||||
sprintf(data.fileName,"./out/%s",param+1);
|
||||
data.type = 1;
|
||||
// notify the thread of waiting fileName
|
||||
sem_post(&data.isReady);
|
||||
char buf[70];
|
||||
sprintf(buf,"150 Opening Binary mode data connection for %s (4096 bytes).\r\n",param+1);
|
||||
respMessage = buf;
|
||||
SendMessage(clientFd,respMessage);
|
||||
// wait for upload complete
|
||||
printf("wait for upload complete,tid=%ld\n",pthread_self());
|
||||
sem_wait(&data.isDone);
|
||||
respMessage = "226 Transfer complete.\r\n";
|
||||
SendMessage(clientFd,respMessage);
|
||||
}
|
||||
else if(strcmp(order,"QUIT") == 0){
|
||||
printf("close clientFd=%d,tid=%ld\n",clientFd,pthread_self());
|
||||
close(clientFd);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main(){
|
||||
serverFd = CreateServer(port,0);
|
||||
sem_init(&data.isReady,0,0);
|
||||
sem_init(&mutex,0,1);
|
||||
pthread_t thread;
|
||||
pthread_create(&thread,NULL,&DataServer,NULL);
|
||||
int clientFds[THREAD_NUM];
|
||||
int i = 0;
|
||||
while(1){
|
||||
struct sockaddr_in clientAdrr = {0};
|
||||
int socketLen = sizeof(clientAdrr);
|
||||
clientFds[i] = accept(serverFd,(struct sockaddr *)&clientAdrr,&socketLen);
|
||||
printf("accept a client:fd=%d\n",clientFds[i]);
|
||||
respMessage = "220 (myFtpServer 1.0)\r\n";
|
||||
SendMessage(clientFds[i],respMessage);
|
||||
printf("send welcome message successfully.\n");
|
||||
pthread_t thread;
|
||||
pthread_create(&thread,NULL,&OrderServer,&clientFds[i]);
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 218 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 264 KiB |
|
After Width: | Height: | Size: 207 KiB |
|
After Width: | Height: | Size: 350 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 247 KiB |
|
After Width: | Height: | Size: 336 KiB |
|
After Width: | Height: | Size: 269 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 473 KiB |
|
After Width: | Height: | Size: 331 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 222 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 268 KiB |
|
After Width: | Height: | Size: 250 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 193 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 346 KiB |
|
After Width: | Height: | Size: 412 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 84 KiB |