Merge pull request #14062 from dustin-crossman/pr/dec_asset_update

Cypress Asset Update
pull/14099/head
Martin Kojtal 2021-01-11 13:40:26 +00:00 committed by GitHub
commit 4e34abbbf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1260 changed files with 345546 additions and 73125 deletions

View File

@ -6,4 +6,4 @@
* MAC address is printed during WHD power up
*/
#define NVRAM_GENERATED_MAC_ADDRESS "macaddr=00:A0:50:6f:b2:ea"
#define NVRAM_GENERATED_MAC_ADDRESS "macaddr=00:A0:50:08:ab:72"

View File

@ -1,3 +1,3 @@
#define WHD_VERSION "v1.91.2"
#define WHD_BRANCH "v1.91.2"
#define WHD_DATE "2020-06-25 02:15:47 -0500"
#define WHD_VERSION "v1.92.0"
#define WHD_BRANCH "v1.92.0"
#define WHD_DATE "2020-09-25 03:12:36 -0500"

View File

@ -18,411 +18,410 @@
#if defined(CY_STORAGE_WIFI_DATA)
CY_SECTION_WHD(CY_STORAGE_WIFI_DATA) __attribute__((used))
#endif
const unsigned char wifi_mfg_firmware_clm_blob_image_data[7697] = {
66, 76, 79, 66, 60, 0, 0, 0, 139, 244, 65, 65, 1, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 60, 0, 0, 0, 209, 29, 0, 0, 248, 161, 152, 226, 0, 0,
0, 0, 0, 0, 0, 0, 13, 30, 0, 0, 4, 0, 0, 0, 147, 68, 77, 121, 0, 0,
0, 0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 2, 0, 57, 46, 49,
48, 46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 51, 54,
46, 49, 0, 0, 0, 0, 0, 0, 0, 0, 40, 18, 0, 0, 67, 108, 109, 73, 109,
112, 111, 114, 116, 58, 32, 49, 46, 51, 52, 46, 49, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 66, 114, 111, 97, 100, 99, 111, 109, 45, 48, 46,
48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 132, 17, 0, 0, 16, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 97, 0,
15, 18, 17, 19, 10, 35, 110, 0, 16, 8, 255, 255, 0, 35, 114, 0, 15,
19, 17, 20, 10, 48, 65, 0, 7, 8, 255, 255, 16, 48, 66, 0, 0, 14, 0,
17, 16, 48, 67, 0, 7, 6, 12, 5, 25, 65, 67, 0, 16, 8, 255, 255, 16,
65, 68, 0, 7, 33, 13, 39, 57, 65, 69, 0, 7, 8, 6, 7, 32, 65, 69, 1,
7, 33, 6, 43, 32, 65, 70, 0, 7, 33, 13, 39, 57, 65, 71, 0, 7, 41, 6,
47, 32, 65, 73, 0, 6, 15, 5, 18, 26, 65, 76, 0, 7, 33, 6, 43, 32, 65,
77, 0, 7, 5, 12, 3, 9, 65, 78, 0, 7, 14, 6, 17, 32, 65, 79, 0, 7, 8,
255, 255, 16, 65, 81, 0, 16, 8, 255, 255, 16, 65, 82, 0, 7, 25, 6, 25,
0, 65, 82, 1, 7, 14, 6, 17, 0, 65, 83, 0, 6, 15, 5, 18, 26, 65, 84,
0, 7, 33, 6, 43, 32, 65, 84, 1, 7, 37, 6, 36, 32, 65, 85, 0, 18, 42,
22, 46, 9, 65, 85, 2, 18, 42, 21, 45, 0, 65, 87, 0, 7, 34, 6, 31, 1,
65, 88, 0, 16, 8, 255, 255, 16, 65, 90, 0, 7, 14, 6, 17, 32, 66, 65,
0, 7, 33, 6, 43, 32, 66, 66, 0, 7, 22, 12, 23, 25, 66, 68, 0, 7, 46,
6, 58, 0, 66, 69, 0, 7, 33, 6, 43, 32, 66, 69, 1, 7, 37, 6, 36, 32,
66, 70, 0, 7, 33, 13, 39, 25, 66, 71, 0, 7, 33, 6, 43, 32, 66, 71, 1,
7, 37, 6, 36, 32, 66, 72, 0, 7, 21, 6, 22, 0, 66, 73, 0, 7, 33, 13,
39, 25, 66, 74, 0, 7, 33, 13, 39, 57, 66, 76, 0, 16, 8, 255, 255, 16,
66, 77, 0, 6, 15, 5, 18, 26, 66, 78, 0, 7, 8, 255, 255, 0, 66, 78, 1,
17, 41, 20, 47, 0, 66, 79, 0, 7, 15, 12, 18, 42, 66, 81, 0, 16, 8, 255,
255, 16, 66, 82, 0, 7, 43, 6, 52, 32, 66, 83, 0, 18, 21, 21, 22, 0,
66, 84, 0, 7, 8, 12, 7, 56, 66, 86, 0, 16, 8, 255, 255, 16, 66, 87,
0, 7, 45, 12, 51, 57, 66, 89, 0, 7, 33, 255, 255, 0, 66, 90, 0, 7, 15,
12, 18, 26, 67, 65, 0, 0, 21, 0, 22, 0, 67, 65, 2, 6, 15, 5, 18, 26,
67, 67, 0, 16, 8, 255, 255, 16, 67, 68, 0, 7, 33, 13, 39, 57, 67, 70,
0, 7, 33, 13, 39, 25, 67, 71, 0, 7, 33, 13, 39, 57, 67, 72, 0, 7, 33,
6, 43, 32, 67, 72, 1, 7, 37, 6, 36, 32, 67, 73, 0, 7, 33, 13, 39, 57,
67, 75, 0, 7, 44, 12, 50, 25, 67, 76, 0, 7, 7, 6, 6, 1, 67, 77, 0, 7,
33, 13, 39, 25, 67, 78, 0, 21, 48, 24, 53, 0, 67, 79, 0, 7, 13, 6, 11,
32, 67, 80, 0, 16, 8, 255, 255, 16, 67, 82, 0, 7, 14, 6, 15, 32, 67,
85, 0, 7, 8, 13, 255, 57, 67, 86, 0, 7, 33, 13, 39, 25, 67, 87, 0, 16,
8, 255, 255, 16, 67, 88, 0, 18, 42, 21, 46, 25, 67, 89, 0, 7, 33, 6,
43, 32, 67, 89, 1, 7, 37, 6, 36, 32, 67, 90, 0, 7, 33, 6, 43, 32, 67,
90, 1, 7, 37, 6, 36, 32, 68, 69, 0, 7, 33, 6, 43, 32, 68, 69, 3, 7,
37, 6, 36, 32, 68, 74, 0, 7, 8, 255, 255, 16, 68, 75, 0, 7, 33, 6, 43,
32, 68, 75, 1, 7, 37, 6, 36, 32, 68, 77, 0, 7, 15, 12, 18, 26, 68, 79,
0, 7, 15, 12, 18, 26, 68, 90, 0, 7, 5, 6, 4, 32, 69, 48, 0, 7, 12, 6,
13, 32, 69, 67, 0, 7, 14, 6, 17, 32, 69, 69, 0, 7, 33, 6, 43, 32, 69,
69, 1, 7, 37, 6, 36, 32, 69, 71, 0, 7, 41, 19, 48, 0, 69, 72, 0, 7,
6, 12, 5, 25, 69, 82, 0, 7, 8, 255, 255, 16, 69, 83, 0, 7, 33, 6, 43,
32, 69, 83, 1, 7, 37, 6, 36, 32, 69, 84, 0, 7, 33, 6, 43, 0, 70, 73,
0, 7, 33, 6, 43, 32, 70, 73, 1, 7, 37, 6, 36, 32, 70, 74, 0, 7, 42,
12, 46, 25, 70, 75, 0, 7, 33, 13, 39, 25, 70, 77, 0, 6, 15, 5, 18, 26,
70, 79, 0, 7, 33, 13, 39, 57, 70, 82, 0, 7, 33, 6, 43, 32, 70, 82, 1,
7, 37, 6, 36, 32, 71, 65, 0, 7, 33, 13, 39, 25, 71, 66, 0, 7, 33, 6,
43, 32, 71, 66, 1, 7, 37, 6, 36, 32, 71, 68, 0, 7, 43, 6, 52, 0, 71,
69, 0, 7, 33, 13, 39, 57, 71, 70, 0, 7, 33, 6, 43, 0, 71, 71, 0, 7,
33, 13, 39, 25, 71, 72, 0, 7, 33, 13, 39, 57, 71, 73, 0, 7, 33, 13,
39, 25, 71, 76, 0, 16, 8, 255, 255, 16, 71, 77, 0, 7, 33, 13, 39, 25,
71, 78, 0, 7, 33, 13, 39, 57, 71, 80, 0, 7, 33, 6, 43, 0, 71, 81, 0,
7, 33, 13, 39, 25, 71, 82, 0, 7, 33, 6, 43, 32, 71, 82, 1, 7, 37, 6,
36, 32, 71, 83, 0, 16, 8, 255, 255, 16, 71, 84, 0, 7, 14, 11, 17, 16,
71, 85, 0, 0, 14, 0, 17, 0, 71, 87, 0, 7, 33, 13, 39, 25, 71, 89, 0,
7, 46, 12, 54, 25, 72, 75, 0, 18, 43, 22, 52, 0, 72, 77, 0, 16, 8, 255,
255, 16, 72, 78, 0, 7, 47, 12, 60, 10, 72, 82, 0, 7, 33, 6, 43, 32,
72, 82, 1, 7, 37, 6, 36, 32, 72, 84, 0, 7, 46, 12, 54, 9, 72, 85, 0,
7, 33, 6, 43, 32, 72, 85, 1, 7, 37, 6, 36, 32, 73, 68, 0, 7, 8, 6, 7,
0, 73, 68, 5, 7, 53, 13, 64, 25, 73, 69, 0, 7, 33, 6, 43, 32, 73, 69,
1, 7, 37, 6, 36, 32, 73, 76, 0, 7, 5, 6, 4, 32, 73, 77, 0, 7, 33, 13,
39, 25, 73, 78, 0, 17, 41, 20, 47, 32, 73, 79, 0, 7, 33, 13, 39, 25,
73, 81, 0, 7, 33, 13, 39, 25, 73, 82, 0, 7, 8, 13, 255, 57, 73, 83,
0, 7, 33, 6, 43, 32, 73, 83, 1, 7, 37, 6, 36, 32, 73, 84, 0, 7, 33,
6, 43, 32, 73, 84, 1, 7, 37, 6, 36, 32, 74, 48, 0, 7, 38, 15, 42, 0,
74, 49, 0, 14, 12, 255, 255, 0, 74, 50, 0, 14, 5, 255, 255, 0, 74, 51,
0, 14, 38, 255, 255, 0, 74, 52, 0, 14, 24, 255, 255, 0, 74, 53, 0, 14,
27, 255, 255, 0, 74, 54, 0, 14, 28, 255, 255, 0, 74, 55, 0, 14, 29,
255, 255, 0, 74, 56, 0, 14, 40, 255, 255, 0, 74, 57, 0, 7, 28, 15, 27,
0, 74, 69, 0, 7, 33, 13, 39, 25, 74, 77, 0, 7, 46, 13, 59, 25, 74, 79,
0, 7, 1, 6, 0, 32, 74, 80, 0, 14, 39, 16, 40, 1, 74, 80, 1, 14, 28,
15, 27, 0, 74, 80, 3, 14, 39, 15, 41, 1, 75, 65, 0, 20, 17, 23, 16,
3, 75, 67, 0, 20, 46, 23, 54, 3, 75, 68, 0, 7, 49, 6, 56, 3, 75, 69,
0, 7, 33, 6, 38, 33, 75, 71, 0, 7, 33, 13, 39, 25, 75, 72, 0, 7, 43,
6, 52, 0, 75, 73, 0, 18, 42, 21, 46, 25, 75, 75, 0, 20, 8, 23, 7, 0,
75, 77, 0, 7, 33, 13, 39, 25, 75, 78, 0, 7, 15, 12, 18, 26, 75, 80,
0, 16, 8, 255, 255, 16, 75, 82, 0, 16, 53, 18, 44, 0, 75, 82, 4, 21,
30, 24, 28, 17, 75, 87, 0, 7, 8, 6, 7, 32, 75, 87, 1, 7, 5, 6, 4, 32,
75, 88, 0, 7, 46, 6, 54, 3, 75, 89, 0, 0, 14, 0, 17, 0, 75, 90, 0, 7,
36, 12, 34, 8, 76, 65, 0, 7, 34, 6, 31, 1, 76, 66, 0, 7, 46, 6, 58,
32, 76, 67, 0, 7, 15, 12, 18, 26, 76, 73, 0, 7, 33, 6, 43, 0, 76, 73,
1, 7, 37, 6, 36, 0, 76, 75, 0, 17, 43, 20, 52, 0, 76, 82, 0, 7, 43,
19, 50, 17, 76, 83, 0, 7, 33, 6, 43, 0, 76, 84, 0, 7, 33, 6, 43, 32,
76, 84, 1, 7, 37, 6, 36, 32, 76, 85, 0, 7, 33, 6, 43, 32, 76, 85, 1,
7, 37, 6, 36, 32, 76, 86, 0, 7, 33, 6, 43, 32, 76, 86, 1, 7, 37, 6,
36, 32, 76, 89, 0, 7, 8, 14, 255, 16, 77, 65, 0, 7, 12, 19, 12, 32,
77, 65, 1, 7, 5, 19, 4, 32, 77, 67, 0, 7, 33, 6, 43, 0, 77, 68, 0, 7,
33, 6, 43, 32, 77, 69, 0, 7, 33, 6, 43, 32, 77, 70, 0, 7, 45, 12, 51,
25, 77, 71, 0, 7, 33, 13, 39, 57, 77, 72, 0, 16, 8, 255, 255, 16, 77,
75, 0, 7, 33, 6, 43, 32, 77, 76, 0, 7, 33, 13, 39, 25, 77, 77, 0, 7,
33, 13, 39, 25, 77, 78, 0, 7, 14, 11, 17, 32, 77, 79, 0, 7, 49, 6, 58,
0, 77, 80, 0, 6, 15, 5, 18, 26, 77, 81, 0, 7, 33, 6, 43, 0, 77, 82,
0, 7, 33, 6, 43, 0, 77, 83, 0, 7, 33, 13, 39, 57, 77, 84, 0, 7, 33,
6, 43, 32, 77, 84, 1, 7, 37, 6, 36, 32, 77, 85, 0, 7, 33, 6, 43, 32,
77, 86, 0, 7, 10, 6, 10, 32, 77, 87, 0, 7, 46, 6, 58, 32, 77, 88, 0,
7, 5, 6, 4, 0, 77, 88, 1, 7, 21, 6, 22, 0, 77, 89, 0, 17, 41, 20, 47,
0, 77, 90, 0, 7, 16, 12, 14, 26, 78, 65, 0, 7, 16, 12, 14, 26, 78, 67,
0, 7, 33, 13, 39, 25, 78, 69, 0, 7, 33, 13, 39, 25, 78, 70, 0, 7, 42,
11, 45, 0, 78, 71, 0, 7, 26, 13, 26, 57, 78, 73, 0, 7, 14, 6, 17, 32,
78, 76, 0, 7, 33, 6, 43, 32, 78, 76, 1, 7, 37, 6, 36, 32, 78, 79, 0,
7, 33, 6, 43, 32, 78, 79, 1, 7, 37, 6, 36, 32, 78, 80, 0, 17, 9, 20,
8, 0, 78, 82, 0, 7, 33, 13, 39, 25, 78, 85, 0, 7, 14, 255, 255, 16,
78, 90, 0, 7, 43, 6, 52, 32, 79, 77, 0, 7, 33, 6, 43, 32, 80, 65, 0,
17, 0, 20, 24, 32, 80, 69, 0, 7, 14, 6, 17, 32, 80, 70, 0, 7, 33, 13,
39, 25, 80, 71, 0, 7, 2, 6, 0, 0, 80, 72, 0, 7, 43, 6, 52, 32, 80, 75,
0, 7, 49, 11, 55, 33, 80, 76, 0, 7, 33, 6, 43, 32, 80, 76, 1, 7, 37,
6, 36, 32, 80, 77, 0, 7, 33, 13, 39, 25, 80, 78, 0, 16, 8, 255, 255,
16, 80, 82, 0, 0, 14, 0, 17, 0, 80, 83, 0, 16, 8, 255, 255, 0, 80, 84,
0, 7, 33, 6, 43, 32, 80, 84, 1, 7, 37, 6, 36, 32, 80, 87, 0, 7, 15,
12, 18, 26, 80, 89, 0, 7, 46, 6, 58, 0, 80, 89, 1, 7, 43, 6, 52, 0,
81, 49, 0, 2, 8, 2, 7, 0, 81, 50, 0, 0, 31, 0, 29, 0, 81, 65, 0, 7,
49, 13, 57, 57, 82, 69, 0, 7, 33, 6, 43, 0, 82, 79, 0, 7, 33, 6, 43,
32, 82, 79, 1, 7, 37, 6, 36, 32, 82, 83, 0, 7, 33, 6, 43, 32, 82, 85,
0, 7, 8, 255, 255, 0, 82, 85, 5, 7, 11, 11, 9, 1, 82, 87, 0, 7, 33,
13, 39, 57, 83, 65, 0, 7, 34, 6, 32, 33, 83, 66, 0, 7, 8, 255, 255,
16, 83, 67, 0, 7, 45, 12, 51, 25, 83, 68, 0, 7, 8, 13, 255, 57, 83,
69, 0, 7, 33, 6, 43, 32, 83, 69, 1, 7, 37, 6, 36, 32, 83, 71, 0, 17,
44, 20, 50, 33, 83, 72, 0, 16, 8, 255, 255, 16, 83, 73, 0, 7, 33, 6,
43, 32, 83, 73, 1, 7, 37, 6, 36, 32, 83, 74, 0, 16, 8, 255, 255, 16,
83, 75, 0, 7, 33, 6, 43, 32, 83, 75, 1, 7, 37, 6, 36, 32, 83, 76, 0,
7, 33, 13, 39, 25, 83, 77, 0, 7, 33, 13, 39, 25, 83, 78, 0, 7, 33, 6,
43, 32, 83, 79, 0, 7, 8, 255, 255, 16, 83, 82, 0, 7, 33, 13, 39, 25,
83, 84, 0, 7, 33, 13, 39, 25, 83, 86, 0, 7, 14, 11, 17, 32, 83, 88,
0, 16, 8, 255, 255, 16, 83, 89, 0, 16, 8, 255, 255, 16, 83, 90, 0, 7,
33, 13, 39, 25, 84, 65, 0, 16, 8, 255, 255, 16, 84, 67, 0, 7, 33, 13,
39, 25, 84, 68, 0, 7, 33, 13, 39, 25, 84, 70, 0, 7, 33, 13, 39, 25,
84, 71, 0, 7, 33, 13, 39, 25, 84, 72, 0, 7, 43, 6, 52, 32, 84, 74, 0,
7, 33, 13, 39, 25, 84, 75, 0, 16, 8, 255, 255, 16, 84, 76, 0, 7, 33,
13, 39, 57, 84, 77, 0, 7, 33, 13, 39, 25, 84, 78, 0, 7, 5, 6, 4, 32,
84, 79, 0, 7, 8, 255, 255, 16, 84, 82, 0, 7, 5, 6, 4, 32, 84, 82, 7,
7, 33, 13, 39, 57, 84, 84, 0, 7, 43, 6, 52, 32, 84, 86, 0, 7, 8, 255,
255, 16, 84, 87, 0, 0, 50, 0, 63, 0, 84, 87, 2, 0, 51, 0, 61, 0, 84,
90, 0, 7, 33, 13, 39, 25, 85, 65, 0, 7, 8, 255, 255, 0, 85, 71, 0, 7,
34, 6, 31, 33, 85, 77, 0, 0, 14, 0, 17, 0, 85, 83, 0, 5, 32, 4, 30,
10, 85, 83, 25, 11, 8, 9, 7, 0, 85, 83, 26, 4, 8, 1, 7, 0, 85, 89, 0,
18, 43, 21, 52, 0, 85, 90, 0, 7, 33, 13, 39, 25, 86, 65, 0, 7, 33, 6,
43, 0, 86, 67, 0, 7, 15, 12, 18, 26, 86, 69, 0, 7, 41, 6, 47, 0, 86,
71, 0, 7, 33, 6, 43, 0, 86, 73, 0, 0, 14, 0, 17, 0, 86, 78, 0, 7, 5,
6, 4, 0, 86, 85, 0, 7, 43, 12, 49, 25, 87, 70, 0, 7, 33, 12, 43, 25,
87, 83, 0, 7, 43, 11, 49, 17, 88, 48, 0, 3, 20, 0, 21, 0, 88, 49, 0,
7, 41, 6, 47, 0, 88, 50, 0, 19, 3, 6, 2, 0, 88, 51, 0, 7, 33, 6, 35,
32, 88, 65, 0, 7, 3, 255, 255, 0, 88, 66, 0, 0, 23, 255, 255, 0, 88,
82, 0, 1, 52, 3, 62, 0, 88, 83, 0, 12, 4, 10, 1, 33, 88, 84, 0, 11,
8, 9, 7, 32, 88, 85, 0, 8, 37, 7, 37, 32, 88, 86, 0, 10, 8, 8, 7, 32,
88, 87, 0, 20, 35, 23, 33, 34, 88, 88, 0, 9, 33, 255, 255, 32, 88, 89,
0, 7, 33, 6, 43, 32, 88, 90, 0, 13, 8, 255, 255, 32, 89, 49, 0, 0, 14,
255, 255, 16, 89, 50, 0, 0, 14, 255, 255, 16, 89, 51, 0, 0, 14, 255,
255, 16, 89, 52, 0, 0, 14, 255, 255, 16, 89, 53, 0, 0, 14, 255, 255,
16, 89, 54, 0, 0, 14, 255, 255, 16, 89, 55, 0, 0, 14, 255, 255, 16,
89, 69, 0, 7, 45, 12, 51, 25, 89, 84, 0, 7, 33, 6, 43, 0, 89, 89, 0,
16, 8, 255, 255, 0, 90, 49, 0, 16, 8, 255, 255, 16, 90, 50, 0, 16, 8,
255, 255, 16, 90, 51, 0, 16, 8, 255, 255, 16, 90, 52, 0, 16, 8, 255,
255, 16, 90, 53, 0, 16, 8, 255, 255, 16, 90, 54, 0, 16, 8, 255, 255,
16, 90, 55, 0, 16, 8, 255, 255, 16, 90, 56, 0, 16, 8, 255, 255, 16,
90, 57, 0, 16, 8, 255, 255, 16, 90, 65, 0, 7, 33, 6, 43, 32, 90, 77,
0, 17, 41, 20, 47, 0, 90, 87, 0, 7, 33, 13, 39, 57, 38, 62, 8, 102,
142, 8, 151, 175, 8, 16, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 4, 5, 76, 0, 3, 76, 6, 3, 76, 10, 3, 76, 11, 3, 66, 12,
3, 1, 4, 62, 0, 0, 66, 4, 0, 62, 9, 0, 58, 10, 0, 4, 3, 58, 0, 3, 66,
7, 3, 58, 12, 3, 1, 5, 42, 0, 0, 50, 3, 0, 60, 8, 0, 54, 9, 0, 46, 10,
0, 4, 1, 56, 2, 3, 1, 1, 32, 1, 0, 4, 5, 58, 0, 3, 68, 6, 3, 74, 10,
3, 68, 11, 3, 66, 12, 3, 1, 5, 48, 0, 0, 58, 3, 0, 66, 8, 0, 58, 9,
0, 54, 10, 0, 4, 3, 86, 0, 0, 126, 7, 0, 86, 12, 0, 1, 3, 78, 0, 1,
126, 5, 1, 78, 10, 1, 4, 5, 70, 0, 0, 80, 6, 0, 80, 10, 0, 80, 11, 0,
72, 12, 0, 1, 5, 58, 0, 1, 68, 3, 1, 80, 8, 1, 68, 9, 1, 60, 10, 1,
4, 1, 64, 4, 0, 1, 1, 64, 2, 1, 4, 1, 76, 4, 3, 1, 1, 72, 2, 0, 4, 4,
60, 0, 3, 64, 8, 3, 44, 13, 3, 44, 16, 3, 1, 3, 40, 0, 0, 52, 5, 0,
46, 11, 0, 0, 2, 64, 3, 3, 46, 16, 3, 4, 2, 64, 2, 0, 44, 14, 0, 1,
3, 54, 0, 1, 64, 6, 1, 52, 12, 1, 6, 1, 76, 4, 0, 3, 1, 76, 2, 1, 6,
const unsigned char wifi_mfg_firmware_clm_blob_data[7697] = {
66, 76, 79, 66, 60, 0, 0, 0, 77, 58, 34, 16, 1, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 60, 0, 0, 0, 209, 29, 0, 0, 69, 179, 25, 223, 0, 0, 0, 0,
0, 0, 0, 0, 13, 30, 0, 0, 4, 0, 0, 0, 147, 68, 77, 121, 0, 0, 0, 0,
67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 2, 0, 57, 46, 49, 48, 46,
48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 51, 54, 46, 49,
0, 0, 0, 0, 0, 0, 0, 0, 40, 18, 0, 0, 67, 108, 109, 73, 109, 112, 111,
114, 116, 58, 32, 49, 46, 51, 52, 46, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 66, 114, 111, 97, 100, 99, 111, 109, 45, 48, 46, 48, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 132, 17, 0, 0, 16, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35, 97, 0, 15, 18, 17,
19, 10, 35, 110, 0, 16, 8, 255, 255, 0, 35, 114, 0, 15, 19, 17, 20,
10, 48, 65, 0, 7, 8, 255, 255, 16, 48, 66, 0, 0, 14, 0, 17, 16, 48,
67, 0, 7, 6, 12, 5, 25, 65, 67, 0, 16, 8, 255, 255, 16, 65, 68, 0, 7,
33, 13, 39, 57, 65, 69, 0, 7, 8, 6, 7, 32, 65, 69, 1, 7, 33, 6, 43,
32, 65, 70, 0, 7, 33, 13, 39, 57, 65, 71, 0, 7, 41, 6, 47, 32, 65, 73,
0, 6, 15, 5, 18, 26, 65, 76, 0, 7, 33, 6, 43, 32, 65, 77, 0, 7, 5, 12,
3, 9, 65, 78, 0, 7, 14, 6, 17, 32, 65, 79, 0, 7, 8, 255, 255, 16, 65,
81, 0, 16, 8, 255, 255, 16, 65, 82, 0, 7, 25, 6, 25, 0, 65, 82, 1, 7,
14, 6, 17, 0, 65, 83, 0, 6, 15, 5, 18, 26, 65, 84, 0, 7, 33, 6, 43,
32, 65, 84, 1, 7, 37, 6, 36, 32, 65, 85, 0, 18, 42, 22, 46, 9, 65, 85,
2, 18, 42, 21, 45, 0, 65, 87, 0, 7, 34, 6, 31, 1, 65, 88, 0, 16, 8,
255, 255, 16, 65, 90, 0, 7, 14, 6, 17, 32, 66, 65, 0, 7, 33, 6, 43,
32, 66, 66, 0, 7, 22, 12, 23, 25, 66, 68, 0, 7, 46, 6, 58, 0, 66, 69,
0, 7, 33, 6, 43, 32, 66, 69, 1, 7, 37, 6, 36, 32, 66, 70, 0, 7, 33,
13, 39, 25, 66, 71, 0, 7, 33, 6, 43, 32, 66, 71, 1, 7, 37, 6, 36, 32,
66, 72, 0, 7, 21, 6, 22, 0, 66, 73, 0, 7, 33, 13, 39, 25, 66, 74, 0,
7, 33, 13, 39, 57, 66, 76, 0, 16, 8, 255, 255, 16, 66, 77, 0, 6, 15,
5, 18, 26, 66, 78, 0, 7, 8, 255, 255, 0, 66, 78, 1, 17, 41, 20, 47,
0, 66, 79, 0, 7, 15, 12, 18, 42, 66, 81, 0, 16, 8, 255, 255, 16, 66,
82, 0, 7, 43, 6, 52, 32, 66, 83, 0, 18, 21, 21, 22, 0, 66, 84, 0, 7,
8, 12, 7, 56, 66, 86, 0, 16, 8, 255, 255, 16, 66, 87, 0, 7, 45, 12,
51, 57, 66, 89, 0, 7, 33, 255, 255, 0, 66, 90, 0, 7, 15, 12, 18, 26,
67, 65, 0, 0, 21, 0, 22, 0, 67, 65, 2, 6, 15, 5, 18, 26, 67, 67, 0,
16, 8, 255, 255, 16, 67, 68, 0, 7, 33, 13, 39, 57, 67, 70, 0, 7, 33,
13, 39, 25, 67, 71, 0, 7, 33, 13, 39, 57, 67, 72, 0, 7, 33, 6, 43, 32,
67, 72, 1, 7, 37, 6, 36, 32, 67, 73, 0, 7, 33, 13, 39, 57, 67, 75, 0,
7, 44, 12, 50, 25, 67, 76, 0, 7, 7, 6, 6, 1, 67, 77, 0, 7, 33, 13, 39,
25, 67, 78, 0, 21, 48, 24, 53, 0, 67, 79, 0, 7, 13, 6, 11, 32, 67, 80,
0, 16, 8, 255, 255, 16, 67, 82, 0, 7, 14, 6, 15, 32, 67, 85, 0, 7, 8,
13, 255, 57, 67, 86, 0, 7, 33, 13, 39, 25, 67, 87, 0, 16, 8, 255, 255,
16, 67, 88, 0, 18, 42, 21, 46, 25, 67, 89, 0, 7, 33, 6, 43, 32, 67,
89, 1, 7, 37, 6, 36, 32, 67, 90, 0, 7, 33, 6, 43, 32, 67, 90, 1, 7,
37, 6, 36, 32, 68, 69, 0, 7, 33, 6, 43, 32, 68, 69, 3, 7, 37, 6, 36,
32, 68, 74, 0, 7, 8, 255, 255, 16, 68, 75, 0, 7, 33, 6, 43, 32, 68,
75, 1, 7, 37, 6, 36, 32, 68, 77, 0, 7, 15, 12, 18, 26, 68, 79, 0, 7,
15, 12, 18, 26, 68, 90, 0, 7, 5, 6, 4, 32, 69, 48, 0, 7, 12, 6, 13,
32, 69, 67, 0, 7, 14, 6, 17, 32, 69, 69, 0, 7, 33, 6, 43, 32, 69, 69,
1, 7, 37, 6, 36, 32, 69, 71, 0, 7, 41, 19, 48, 0, 69, 72, 0, 7, 6, 12,
5, 25, 69, 82, 0, 7, 8, 255, 255, 16, 69, 83, 0, 7, 33, 6, 43, 32, 69,
83, 1, 7, 37, 6, 36, 32, 69, 84, 0, 7, 33, 6, 43, 0, 70, 73, 0, 7, 33,
6, 43, 32, 70, 73, 1, 7, 37, 6, 36, 32, 70, 74, 0, 7, 42, 12, 46, 25,
70, 75, 0, 7, 33, 13, 39, 25, 70, 77, 0, 6, 15, 5, 18, 26, 70, 79, 0,
7, 33, 13, 39, 57, 70, 82, 0, 7, 33, 6, 43, 32, 70, 82, 1, 7, 37, 6,
36, 32, 71, 65, 0, 7, 33, 13, 39, 25, 71, 66, 0, 7, 33, 6, 43, 32, 71,
66, 1, 7, 37, 6, 36, 32, 71, 68, 0, 7, 43, 6, 52, 0, 71, 69, 0, 7, 33,
13, 39, 57, 71, 70, 0, 7, 33, 6, 43, 0, 71, 71, 0, 7, 33, 13, 39, 25,
71, 72, 0, 7, 33, 13, 39, 57, 71, 73, 0, 7, 33, 13, 39, 25, 71, 76,
0, 16, 8, 255, 255, 16, 71, 77, 0, 7, 33, 13, 39, 25, 71, 78, 0, 7,
33, 13, 39, 57, 71, 80, 0, 7, 33, 6, 43, 0, 71, 81, 0, 7, 33, 13, 39,
25, 71, 82, 0, 7, 33, 6, 43, 32, 71, 82, 1, 7, 37, 6, 36, 32, 71, 83,
0, 16, 8, 255, 255, 16, 71, 84, 0, 7, 14, 11, 17, 16, 71, 85, 0, 0,
14, 0, 17, 0, 71, 87, 0, 7, 33, 13, 39, 25, 71, 89, 0, 7, 46, 12, 54,
25, 72, 75, 0, 18, 43, 22, 52, 0, 72, 77, 0, 16, 8, 255, 255, 16, 72,
78, 0, 7, 47, 12, 60, 10, 72, 82, 0, 7, 33, 6, 43, 32, 72, 82, 1, 7,
37, 6, 36, 32, 72, 84, 0, 7, 46, 12, 54, 9, 72, 85, 0, 7, 33, 6, 43,
32, 72, 85, 1, 7, 37, 6, 36, 32, 73, 68, 0, 7, 8, 6, 7, 0, 73, 68, 5,
7, 53, 13, 64, 25, 73, 69, 0, 7, 33, 6, 43, 32, 73, 69, 1, 7, 37, 6,
36, 32, 73, 76, 0, 7, 5, 6, 4, 32, 73, 77, 0, 7, 33, 13, 39, 25, 73,
78, 0, 17, 41, 20, 47, 32, 73, 79, 0, 7, 33, 13, 39, 25, 73, 81, 0,
7, 33, 13, 39, 25, 73, 82, 0, 7, 8, 13, 255, 57, 73, 83, 0, 7, 33, 6,
43, 32, 73, 83, 1, 7, 37, 6, 36, 32, 73, 84, 0, 7, 33, 6, 43, 32, 73,
84, 1, 7, 37, 6, 36, 32, 74, 48, 0, 7, 38, 15, 42, 0, 74, 49, 0, 14,
12, 255, 255, 0, 74, 50, 0, 14, 5, 255, 255, 0, 74, 51, 0, 14, 38, 255,
255, 0, 74, 52, 0, 14, 24, 255, 255, 0, 74, 53, 0, 14, 27, 255, 255,
0, 74, 54, 0, 14, 28, 255, 255, 0, 74, 55, 0, 14, 29, 255, 255, 0, 74,
56, 0, 14, 40, 255, 255, 0, 74, 57, 0, 7, 28, 15, 27, 0, 74, 69, 0,
7, 33, 13, 39, 25, 74, 77, 0, 7, 46, 13, 59, 25, 74, 79, 0, 7, 1, 6,
0, 32, 74, 80, 0, 14, 39, 16, 40, 1, 74, 80, 1, 14, 28, 15, 27, 0, 74,
80, 3, 14, 39, 15, 41, 1, 75, 65, 0, 20, 17, 23, 16, 3, 75, 67, 0, 20,
46, 23, 54, 3, 75, 68, 0, 7, 49, 6, 56, 3, 75, 69, 0, 7, 33, 6, 38,
33, 75, 71, 0, 7, 33, 13, 39, 25, 75, 72, 0, 7, 43, 6, 52, 0, 75, 73,
0, 18, 42, 21, 46, 25, 75, 75, 0, 20, 8, 23, 7, 0, 75, 77, 0, 7, 33,
13, 39, 25, 75, 78, 0, 7, 15, 12, 18, 26, 75, 80, 0, 16, 8, 255, 255,
16, 75, 82, 0, 16, 53, 18, 44, 0, 75, 82, 4, 21, 30, 24, 28, 17, 75,
87, 0, 7, 8, 6, 7, 32, 75, 87, 1, 7, 5, 6, 4, 32, 75, 88, 0, 7, 46,
6, 54, 3, 75, 89, 0, 0, 14, 0, 17, 0, 75, 90, 0, 7, 36, 12, 34, 8, 76,
65, 0, 7, 34, 6, 31, 1, 76, 66, 0, 7, 46, 6, 58, 32, 76, 67, 0, 7, 15,
12, 18, 26, 76, 73, 0, 7, 33, 6, 43, 0, 76, 73, 1, 7, 37, 6, 36, 0,
76, 75, 0, 17, 43, 20, 52, 0, 76, 82, 0, 7, 43, 19, 50, 17, 76, 83,
0, 7, 33, 6, 43, 0, 76, 84, 0, 7, 33, 6, 43, 32, 76, 84, 1, 7, 37, 6,
36, 32, 76, 85, 0, 7, 33, 6, 43, 32, 76, 85, 1, 7, 37, 6, 36, 32, 76,
86, 0, 7, 33, 6, 43, 32, 76, 86, 1, 7, 37, 6, 36, 32, 76, 89, 0, 7,
8, 14, 255, 16, 77, 65, 0, 7, 12, 19, 12, 32, 77, 65, 1, 7, 5, 19, 4,
32, 77, 67, 0, 7, 33, 6, 43, 0, 77, 68, 0, 7, 33, 6, 43, 32, 77, 69,
0, 7, 33, 6, 43, 32, 77, 70, 0, 7, 45, 12, 51, 25, 77, 71, 0, 7, 33,
13, 39, 57, 77, 72, 0, 16, 8, 255, 255, 16, 77, 75, 0, 7, 33, 6, 43,
32, 77, 76, 0, 7, 33, 13, 39, 25, 77, 77, 0, 7, 33, 13, 39, 25, 77,
78, 0, 7, 14, 11, 17, 32, 77, 79, 0, 7, 49, 6, 58, 0, 77, 80, 0, 6,
15, 5, 18, 26, 77, 81, 0, 7, 33, 6, 43, 0, 77, 82, 0, 7, 33, 6, 43,
0, 77, 83, 0, 7, 33, 13, 39, 57, 77, 84, 0, 7, 33, 6, 43, 32, 77, 84,
1, 7, 37, 6, 36, 32, 77, 85, 0, 7, 33, 6, 43, 32, 77, 86, 0, 7, 10,
6, 10, 32, 77, 87, 0, 7, 46, 6, 58, 32, 77, 88, 0, 7, 5, 6, 4, 0, 77,
88, 1, 7, 21, 6, 22, 0, 77, 89, 0, 17, 41, 20, 47, 0, 77, 90, 0, 7,
16, 12, 14, 26, 78, 65, 0, 7, 16, 12, 14, 26, 78, 67, 0, 7, 33, 13,
39, 25, 78, 69, 0, 7, 33, 13, 39, 25, 78, 70, 0, 7, 42, 11, 45, 0, 78,
71, 0, 7, 26, 13, 26, 57, 78, 73, 0, 7, 14, 6, 17, 32, 78, 76, 0, 7,
33, 6, 43, 32, 78, 76, 1, 7, 37, 6, 36, 32, 78, 79, 0, 7, 33, 6, 43,
32, 78, 79, 1, 7, 37, 6, 36, 32, 78, 80, 0, 17, 9, 20, 8, 0, 78, 82,
0, 7, 33, 13, 39, 25, 78, 85, 0, 7, 14, 255, 255, 16, 78, 90, 0, 7,
43, 6, 52, 32, 79, 77, 0, 7, 33, 6, 43, 32, 80, 65, 0, 17, 0, 20, 24,
32, 80, 69, 0, 7, 14, 6, 17, 32, 80, 70, 0, 7, 33, 13, 39, 25, 80, 71,
0, 7, 2, 6, 0, 0, 80, 72, 0, 7, 43, 6, 52, 32, 80, 75, 0, 7, 49, 11,
55, 33, 80, 76, 0, 7, 33, 6, 43, 32, 80, 76, 1, 7, 37, 6, 36, 32, 80,
77, 0, 7, 33, 13, 39, 25, 80, 78, 0, 16, 8, 255, 255, 16, 80, 82, 0,
0, 14, 0, 17, 0, 80, 83, 0, 16, 8, 255, 255, 0, 80, 84, 0, 7, 33, 6,
43, 32, 80, 84, 1, 7, 37, 6, 36, 32, 80, 87, 0, 7, 15, 12, 18, 26, 80,
89, 0, 7, 46, 6, 58, 0, 80, 89, 1, 7, 43, 6, 52, 0, 81, 49, 0, 2, 8,
2, 7, 0, 81, 50, 0, 0, 31, 0, 29, 0, 81, 65, 0, 7, 49, 13, 57, 57, 82,
69, 0, 7, 33, 6, 43, 0, 82, 79, 0, 7, 33, 6, 43, 32, 82, 79, 1, 7, 37,
6, 36, 32, 82, 83, 0, 7, 33, 6, 43, 32, 82, 85, 0, 7, 8, 255, 255, 0,
82, 85, 5, 7, 11, 11, 9, 1, 82, 87, 0, 7, 33, 13, 39, 57, 83, 65, 0,
7, 34, 6, 32, 33, 83, 66, 0, 7, 8, 255, 255, 16, 83, 67, 0, 7, 45, 12,
51, 25, 83, 68, 0, 7, 8, 13, 255, 57, 83, 69, 0, 7, 33, 6, 43, 32, 83,
69, 1, 7, 37, 6, 36, 32, 83, 71, 0, 17, 44, 20, 50, 33, 83, 72, 0, 16,
8, 255, 255, 16, 83, 73, 0, 7, 33, 6, 43, 32, 83, 73, 1, 7, 37, 6, 36,
32, 83, 74, 0, 16, 8, 255, 255, 16, 83, 75, 0, 7, 33, 6, 43, 32, 83,
75, 1, 7, 37, 6, 36, 32, 83, 76, 0, 7, 33, 13, 39, 25, 83, 77, 0, 7,
33, 13, 39, 25, 83, 78, 0, 7, 33, 6, 43, 32, 83, 79, 0, 7, 8, 255, 255,
16, 83, 82, 0, 7, 33, 13, 39, 25, 83, 84, 0, 7, 33, 13, 39, 25, 83,
86, 0, 7, 14, 11, 17, 32, 83, 88, 0, 16, 8, 255, 255, 16, 83, 89, 0,
16, 8, 255, 255, 16, 83, 90, 0, 7, 33, 13, 39, 25, 84, 65, 0, 16, 8,
255, 255, 16, 84, 67, 0, 7, 33, 13, 39, 25, 84, 68, 0, 7, 33, 13, 39,
25, 84, 70, 0, 7, 33, 13, 39, 25, 84, 71, 0, 7, 33, 13, 39, 25, 84,
72, 0, 7, 43, 6, 52, 32, 84, 74, 0, 7, 33, 13, 39, 25, 84, 75, 0, 16,
8, 255, 255, 16, 84, 76, 0, 7, 33, 13, 39, 57, 84, 77, 0, 7, 33, 13,
39, 25, 84, 78, 0, 7, 5, 6, 4, 32, 84, 79, 0, 7, 8, 255, 255, 16, 84,
82, 0, 7, 5, 6, 4, 32, 84, 82, 7, 7, 33, 13, 39, 57, 84, 84, 0, 7, 43,
6, 52, 32, 84, 86, 0, 7, 8, 255, 255, 16, 84, 87, 0, 0, 50, 0, 63, 0,
84, 87, 2, 0, 51, 0, 61, 0, 84, 90, 0, 7, 33, 13, 39, 25, 85, 65, 0,
7, 8, 255, 255, 0, 85, 71, 0, 7, 34, 6, 31, 33, 85, 77, 0, 0, 14, 0,
17, 0, 85, 83, 0, 5, 32, 4, 30, 10, 85, 83, 25, 11, 8, 9, 7, 0, 85,
83, 26, 4, 8, 1, 7, 0, 85, 89, 0, 18, 43, 21, 52, 0, 85, 90, 0, 7, 33,
13, 39, 25, 86, 65, 0, 7, 33, 6, 43, 0, 86, 67, 0, 7, 15, 12, 18, 26,
86, 69, 0, 7, 41, 6, 47, 0, 86, 71, 0, 7, 33, 6, 43, 0, 86, 73, 0, 0,
14, 0, 17, 0, 86, 78, 0, 7, 5, 6, 4, 0, 86, 85, 0, 7, 43, 12, 49, 25,
87, 70, 0, 7, 33, 12, 43, 25, 87, 83, 0, 7, 43, 11, 49, 17, 88, 48,
0, 3, 20, 0, 21, 0, 88, 49, 0, 7, 41, 6, 47, 0, 88, 50, 0, 19, 3, 6,
2, 0, 88, 51, 0, 7, 33, 6, 35, 32, 88, 65, 0, 7, 3, 255, 255, 0, 88,
66, 0, 0, 23, 255, 255, 0, 88, 82, 0, 1, 52, 3, 62, 0, 88, 83, 0, 12,
4, 10, 1, 33, 88, 84, 0, 11, 8, 9, 7, 32, 88, 85, 0, 8, 37, 7, 37, 32,
88, 86, 0, 10, 8, 8, 7, 32, 88, 87, 0, 20, 35, 23, 33, 34, 88, 88, 0,
9, 33, 255, 255, 32, 88, 89, 0, 7, 33, 6, 43, 32, 88, 90, 0, 13, 8,
255, 255, 32, 89, 49, 0, 0, 14, 255, 255, 16, 89, 50, 0, 0, 14, 255,
255, 16, 89, 51, 0, 0, 14, 255, 255, 16, 89, 52, 0, 0, 14, 255, 255,
16, 89, 53, 0, 0, 14, 255, 255, 16, 89, 54, 0, 0, 14, 255, 255, 16,
89, 55, 0, 0, 14, 255, 255, 16, 89, 69, 0, 7, 45, 12, 51, 25, 89, 84,
0, 7, 33, 6, 43, 0, 89, 89, 0, 16, 8, 255, 255, 0, 90, 49, 0, 16, 8,
255, 255, 16, 90, 50, 0, 16, 8, 255, 255, 16, 90, 51, 0, 16, 8, 255,
255, 16, 90, 52, 0, 16, 8, 255, 255, 16, 90, 53, 0, 16, 8, 255, 255,
16, 90, 54, 0, 16, 8, 255, 255, 16, 90, 55, 0, 16, 8, 255, 255, 16,
90, 56, 0, 16, 8, 255, 255, 16, 90, 57, 0, 16, 8, 255, 255, 16, 90,
65, 0, 7, 33, 6, 43, 32, 90, 77, 0, 17, 41, 20, 47, 0, 90, 87, 0, 7,
33, 13, 39, 57, 38, 62, 8, 102, 142, 8, 151, 175, 8, 16, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 18, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4, 5, 76, 0, 3, 76,
6, 3, 76, 10, 3, 76, 11, 3, 66, 12, 3, 1, 4, 62, 0, 0, 66, 4, 0, 62,
9, 0, 58, 10, 0, 4, 3, 58, 0, 3, 66, 7, 3, 58, 12, 3, 1, 5, 42, 0, 0,
50, 3, 0, 60, 8, 0, 54, 9, 0, 46, 10, 0, 4, 1, 56, 2, 3, 1, 1, 32, 1,
0, 4, 5, 58, 0, 3, 68, 6, 3, 74, 10, 3, 68, 11, 3, 66, 12, 3, 1, 5,
48, 0, 0, 58, 3, 0, 66, 8, 0, 58, 9, 0, 54, 10, 0, 4, 3, 86, 0, 0, 126,
7, 0, 86, 12, 0, 1, 3, 78, 0, 1, 126, 5, 1, 78, 10, 1, 4, 5, 70, 0,
0, 80, 6, 0, 80, 10, 0, 80, 11, 0, 72, 12, 0, 1, 5, 58, 0, 1, 68, 3,
1, 80, 8, 1, 68, 9, 1, 60, 10, 1, 4, 1, 64, 4, 0, 1, 1, 64, 2, 1, 4,
1, 76, 4, 3, 1, 1, 72, 2, 0, 4, 4, 60, 0, 3, 64, 8, 3, 44, 13, 3, 44,
16, 3, 1, 3, 40, 0, 0, 52, 5, 0, 46, 11, 0, 0, 2, 64, 3, 3, 46, 16,
3, 4, 2, 64, 2, 0, 44, 14, 0, 1, 3, 54, 0, 1, 64, 6, 1, 52, 12, 1, 6,
1, 76, 4, 0, 3, 1, 76, 2, 1, 6, 1, 76, 4, 0, 3, 1, 76, 2, 1, 6, 1, 76,
4, 0, 3, 1, 128, 2, 1, 4, 1, 64, 4, 0, 1, 1, 64, 2, 1, 6, 1, 84, 4,
3, 3, 1, 72, 2, 0, 4, 2, 120, 4, 0, 120, 17, 3, 1, 1, 120, 2, 1, 0,
0, 0, 1, 64, 4, 3, 4, 1, 80, 4, 0, 1, 1, 64, 2, 1, 4, 1, 88, 4, 0, 1,
1, 60, 2, 1, 6, 1, 100, 4, 0, 3, 1, 88, 2, 1, 4, 1, 64, 2, 3, 1, 1,
52, 1, 0, 4, 3, 56, 0, 3, 64, 9, 3, 56, 16, 3, 1, 2, 46, 0, 0, 52, 7,
0, 1, 18, 1, 255, 1, 58, 1, 14, 1, 15, 3, 29, 41, 55, 2, 19, 55, 3,
11, 1, 1, 1, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 2, 2, 2, 10, 2, 11,
2, 12, 3, 9, 10, 10, 11, 11, 12, 12, 12, 13, 12, 14, 13, 13, 14, 14,
34, 46, 36, 48, 36, 64, 36, 116, 36, 140, 36, 144, 36, 161, 36, 165,
36, 177, 52, 52, 52, 60, 52, 64, 52, 124, 52, 140, 52, 144, 52, 165,
56, 60, 56, 64, 64, 64, 64, 100, 100, 100, 100, 116, 100, 140, 100,
144, 100, 165, 104, 128, 104, 136, 104, 140, 104, 165, 132, 140, 132,
144, 132, 165, 140, 140, 144, 144, 144, 165, 149, 149, 149, 161, 149,
165, 149, 177, 153, 161, 165, 165, 0, 145, 0, 146, 0, 147, 0, 148, 0,
149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 0, 4, 0, 0, 0, 28,
18, 0, 0, 42, 42, 42, 58, 42, 106, 42, 122, 42, 138, 42, 155, 42, 171,
58, 58, 106, 106, 106, 122, 106, 138, 106, 155, 122, 122, 122, 138,
122, 171, 138, 138, 138, 155, 155, 155, 155, 171, 42, 106, 106, 42,
58, 106, 106, 58, 42, 122, 122, 42, 58, 122, 122, 58, 42, 138, 138,
42, 58, 138, 138, 58, 106, 138, 138, 106, 42, 155, 155, 42, 58, 155,
155, 58, 106, 155, 155, 106, 122, 155, 155, 122, 138, 155, 155, 138,
42, 171, 171, 42, 58, 171, 171, 58, 106, 171, 171, 106, 122, 171, 171,
122, 138, 171, 171, 138, 0, 0, 1, 0, 0, 0, 164, 17, 0, 0, 1, 0, 0, 0,
81, 17, 0, 0, 1, 0, 0, 0, 6, 18, 0, 0, 24, 0, 159, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 0, 93, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255,
1, 30, 2, 0, 3, 76, 1, 4, 76, 2, 2, 66, 12, 4, 1, 0, 255, 1, 30, 2,
0, 7, 72, 0, 2, 58, 0, 4, 68, 6, 4, 74, 8, 2, 74, 10, 4, 68, 11, 4,
66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 2, 64, 2, 2, 56, 2, 4, 1, 0, 255,
1, 30, 2, 0, 5, 72, 0, 2, 76, 1, 4, 76, 7, 2, 72, 12, 2, 66, 12, 4,
1, 0, 255, 1, 30, 2, 0, 4, 58, 0, 4, 68, 2, 2, 66, 7, 4, 58, 12, 4,
1, 0, 255, 1, 30, 2, 0, 5, 92, 0, 2, 86, 0, 4, 126, 7, 1, 92, 12, 2,
86, 12, 4, 1, 0, 255, 1, 30, 2, 0, 5, 70, 0, 4, 80, 1, 2, 80, 7, 4,
76, 12, 2, 72, 12, 4, 2, 4, 255, 1, 20, 4, 2, 1, 76, 4, 1, 2, 0, 255,
1, 20, 4, 0, 1, 76, 4, 1, 3, 0, 4, 1, 20, 5, 2, 5, 76, 1, 4, 76, 4,
2, 70, 12, 4, 76, 14, 4, 54, 17, 2, 3, 0, 4, 1, 20, 5, 0, 6, 60, 0,
4, 68, 2, 2, 64, 8, 4, 48, 14, 2, 44, 14, 4, 64, 17, 2, 3, 0, 4, 1,
20, 5, 0, 3, 64, 3, 4, 64, 5, 2, 46, 16, 4, 2, 0, 3, 1, 20, 4, 0, 3,
64, 2, 1, 48, 14, 2, 44, 14, 4, 3, 0, 4, 1, 20, 5, 0, 6, 62, 0, 4, 66,
4, 2, 66, 7, 4, 62, 12, 4, 66, 14, 4, 42, 17, 2, 3, 0, 255, 1, 20, 5,
2, 2, 84, 4, 4, 78, 5, 2, 3, 0, 255, 1, 30, 5, 0, 1, 120, 5, 1, 0, 0,
255, 0, 0, 0, 2, 0, 255, 1, 23, 4, 2, 1, 92, 4, 1, 2, 0, 255, 1, 36,
4, 2, 1, 100, 4, 1, 2, 4, 3, 1, 20, 4, 2, 1, 76, 4, 1, 1, 0, 255, 1,
20, 2, 2, 1, 76, 2, 1, 2, 0, 255, 1, 20, 4, 4, 3, 56, 0, 4, 64, 9, 4,
56, 16, 4, 2, 1, 76, 4, 2, 0, 0, 0, 1, 0, 0, 0, 192, 29, 0, 0, 1, 0,
0, 0, 195, 29, 0, 0, 1, 0, 0, 0, 198, 29, 0, 0, 10, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 8, 12, 13, 14, 15, 16, 17, 18, 19, 8, 4, 5,
6, 7, 8, 9, 10, 11, 0, 12, 4, 10, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 3, 3,
4, 4, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 0, 9, 0, 19, 0, 22, 0, 24,
0, 32, 0, 35, 0, 42, 0, 53, 0, 59, 0, 73, 0, 75, 0, 77, 0, 80, 0, 87,
0, 92, 0, 95, 0, 101, 0, 104, 0, 117, 0, 127, 0, 130, 0, 132, 0, 134,
0, 142, 0, 144, 0, 160, 0, 173, 0, 175, 0, 183, 0, 188, 0, 190, 0, 192,
0, 195, 0, 212, 0, 217, 0, 227, 0, 229, 0, 242, 0, 248, 0, 251, 0, 1,
1, 4, 1, 11, 1, 15, 1, 18, 1, 42, 1, 46, 1, 53, 1, 6, 2, 2, 1, 1, 1,
1, 0, 6, 2, 5, 1, 1, 1, 7, 2, 4, 1, 1, 1, 2, 8, 4, 2, 2, 1, 1, 1, 14,
2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 5, 1, 1, 7, 2, 4, 1, 1, 1, 2, 8, 4, 2,
2, 1, 1, 1, 13, 2, 2, 1, 1, 1, 1, 18, 4, 2, 2, 5, 1, 1, 10, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 4, 0, 1, 2, 3, 8, 12, 13, 14, 15, 16, 17, 18, 19, 8, 4, 5, 6, 7,
8, 9, 10, 11, 21, 2, 2, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 50, 48, 50, 48, 45, 48, 49, 45, 50, 55, 32,
50, 50, 58, 48, 51, 58, 48, 52, 0, 0, 3, 0, 0, 0, 196, 11, 0, 0, 1,
14, 1, 0, 3, 0, 0, 0, 120, 14, 0, 0, 42, 58, 16, 106, 138, 16, 155,
171, 16, 0, 0, 0, 3, 0, 0, 0, 28, 23, 0, 0, 21, 2, 2, 0, 9, 0, 19, 0,
22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59, 0, 73, 0, 75, 0, 77, 0,
80, 0, 87, 0, 92, 0, 95, 0, 101, 0, 104, 0, 117, 0, 127, 0, 130, 0,
132, 0, 134, 0, 142, 0, 144, 0, 160, 0, 173, 0, 175, 0, 183, 0, 188,
0, 190, 0, 192, 0, 195, 0, 212, 0, 217, 0, 227, 0, 229, 0, 242, 0, 248,
0, 251, 0, 1, 1, 4, 1, 11, 1, 15, 1, 18, 1, 46, 1, 52, 1, 21, 2, 2,
0, 0, 0, 3, 0, 0, 0, 40, 16, 0, 0, 102, 1, 0, 0, 148, 0, 0, 0, 34, 46,
4, 36, 64, 4, 100, 144, 4, 149, 177, 4, 104, 0, 0, 0, 4, 14, 0, 0, 119,
13, 0, 0, 99, 13, 0, 0, 112, 22, 0, 0, 64, 16, 0, 0, 172, 14, 0, 0,
232, 18, 0, 0, 241, 11, 0, 0, 76, 23, 0, 0, 20, 18, 0, 0, 156, 17, 0,
0, 84, 29, 0, 0, 255, 80, 161, 4, 76, 29, 0, 0, 184, 29, 0, 0, 92, 29,
0, 0, 12, 14, 0, 0, 201, 29, 0, 0, 112, 0, 0, 0, 84, 17, 0, 0, 6, 23,
0, 0, 34, 17, 0, 0, 205, 11, 0, 0, 103, 17, 0, 0, 176, 29, 0, 0, 124,
17, 0, 0, 64, 23, 0, 0, 248, 22, 0, 0, 104, 22, 0, 0, 0, 0, 0, 0, 0,
4, 0, 3, 1, 76, 2, 1, 6, 1, 76, 4, 0, 3, 1, 128, 2, 1, 4, 1, 64, 4,
0, 1, 1, 64, 2, 1, 6, 1, 84, 4, 3, 3, 1, 72, 2, 0, 4, 2, 120, 4, 0,
120, 17, 3, 1, 1, 120, 2, 1, 0, 0, 0, 1, 64, 4, 3, 4, 1, 80, 4, 0, 1,
1, 64, 2, 1, 4, 1, 88, 4, 0, 1, 1, 60, 2, 1, 6, 1, 100, 4, 0, 3, 1,
88, 2, 1, 4, 1, 64, 2, 3, 1, 1, 52, 1, 0, 4, 3, 56, 0, 3, 64, 9, 3,
56, 16, 3, 1, 2, 46, 0, 0, 52, 7, 0, 1, 18, 1, 255, 1, 58, 1, 14, 1,
15, 3, 29, 41, 55, 2, 19, 55, 3, 11, 1, 1, 1, 1, 10, 1, 11, 1, 12, 1,
13, 1, 14, 2, 2, 2, 10, 2, 11, 2, 12, 3, 9, 10, 10, 11, 11, 12, 12,
12, 13, 12, 14, 13, 13, 14, 14, 34, 46, 36, 48, 36, 64, 36, 116, 36,
140, 36, 144, 36, 161, 36, 165, 36, 177, 52, 52, 52, 60, 52, 64, 52,
124, 52, 140, 52, 144, 52, 165, 56, 60, 56, 64, 64, 64, 64, 100, 100,
100, 100, 116, 100, 140, 100, 144, 100, 165, 104, 128, 104, 136, 104,
140, 104, 165, 132, 140, 132, 144, 132, 165, 140, 140, 144, 144, 144,
165, 149, 149, 149, 161, 149, 165, 149, 177, 153, 161, 165, 165, 0,
145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153,
0, 154, 0, 0, 0, 4, 0, 0, 0, 28, 18, 0, 0, 42, 42, 42, 58, 42, 106,
42, 122, 42, 138, 42, 155, 42, 171, 58, 58, 106, 106, 106, 122, 106,
138, 106, 155, 122, 122, 122, 138, 122, 171, 138, 138, 138, 155, 155,
155, 155, 171, 42, 106, 106, 42, 58, 106, 106, 58, 42, 122, 122, 42,
58, 122, 122, 58, 42, 138, 138, 42, 58, 138, 138, 58, 106, 138, 138,
106, 42, 155, 155, 42, 58, 155, 155, 58, 106, 155, 155, 106, 122, 155,
155, 122, 138, 155, 155, 138, 42, 171, 171, 42, 58, 171, 171, 58, 106,
171, 171, 106, 122, 171, 171, 122, 138, 171, 171, 138, 0, 0, 1, 0, 0,
0, 164, 17, 0, 0, 1, 0, 0, 0, 81, 17, 0, 0, 1, 0, 0, 0, 6, 18, 0, 0,
24, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 93, 16, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 1, 30, 2, 0, 3, 76, 1, 4, 76, 2, 2,
66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 7, 72, 0, 2, 58, 0, 4, 68, 6, 4,
74, 8, 2, 74, 10, 4, 68, 11, 4, 66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 2,
64, 2, 2, 56, 2, 4, 1, 0, 255, 1, 30, 2, 0, 5, 72, 0, 2, 76, 1, 4, 76,
7, 2, 72, 12, 2, 66, 12, 4, 1, 0, 255, 1, 30, 2, 0, 4, 58, 0, 4, 68,
2, 2, 66, 7, 4, 58, 12, 4, 1, 0, 255, 1, 30, 2, 0, 5, 92, 0, 2, 86,
0, 4, 126, 7, 1, 92, 12, 2, 86, 12, 4, 1, 0, 255, 1, 30, 2, 0, 5, 70,
0, 4, 80, 1, 2, 80, 7, 4, 76, 12, 2, 72, 12, 4, 2, 4, 255, 1, 20, 4,
2, 1, 76, 4, 1, 2, 0, 255, 1, 20, 4, 0, 1, 76, 4, 1, 3, 0, 4, 1, 20,
5, 2, 5, 76, 1, 4, 76, 4, 2, 70, 12, 4, 76, 14, 4, 54, 17, 2, 3, 0,
4, 1, 20, 5, 0, 6, 60, 0, 4, 68, 2, 2, 64, 8, 4, 48, 14, 2, 44, 14,
4, 64, 17, 2, 3, 0, 4, 1, 20, 5, 0, 3, 64, 3, 4, 64, 5, 2, 46, 16, 4,
2, 0, 3, 1, 20, 4, 0, 3, 64, 2, 1, 48, 14, 2, 44, 14, 4, 3, 0, 4, 1,
20, 5, 0, 6, 62, 0, 4, 66, 4, 2, 66, 7, 4, 62, 12, 4, 66, 14, 4, 42,
17, 2, 3, 0, 255, 1, 20, 5, 2, 2, 84, 4, 4, 78, 5, 2, 3, 0, 255, 1,
30, 5, 0, 1, 120, 5, 1, 0, 0, 255, 0, 0, 0, 2, 0, 255, 1, 23, 4, 2,
1, 92, 4, 1, 2, 0, 255, 1, 36, 4, 2, 1, 100, 4, 1, 2, 4, 3, 1, 20, 4,
2, 1, 76, 4, 1, 1, 0, 255, 1, 20, 2, 2, 1, 76, 2, 1, 2, 0, 255, 1, 20,
4, 4, 3, 56, 0, 4, 64, 9, 4, 56, 16, 4, 2, 1, 76, 4, 2, 0, 0, 0, 1,
0, 0, 0, 192, 29, 0, 0, 1, 0, 0, 0, 195, 29, 0, 0, 1, 0, 0, 0, 198,
29, 0, 0, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 8, 12, 13, 14,
15, 16, 17, 18, 19, 8, 4, 5, 6, 7, 8, 9, 10, 11, 0, 12, 4, 10, 2, 2,
2, 9, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1,
1, 0, 9, 0, 19, 0, 22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59, 0,
73, 0, 75, 0, 77, 0, 80, 0, 87, 0, 92, 0, 95, 0, 101, 0, 104, 0, 117,
0, 127, 0, 130, 0, 132, 0, 134, 0, 142, 0, 144, 0, 160, 0, 173, 0, 175,
0, 183, 0, 188, 0, 190, 0, 192, 0, 195, 0, 212, 0, 217, 0, 227, 0, 229,
0, 242, 0, 248, 0, 251, 0, 1, 1, 4, 1, 11, 1, 15, 1, 18, 1, 42, 1, 46,
1, 53, 1, 6, 2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 1, 1, 1, 7, 2, 4, 1, 1, 1,
2, 8, 4, 2, 2, 1, 1, 1, 14, 2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 5, 1, 1, 7,
2, 4, 1, 1, 1, 2, 8, 4, 2, 2, 1, 1, 1, 13, 2, 2, 1, 1, 1, 1, 18, 4,
2, 2, 5, 1, 1, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 12, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 0, 1, 2, 3, 8, 12, 13, 14, 15, 16,
17, 18, 19, 8, 4, 5, 6, 7, 8, 9, 10, 11, 21, 2, 2, 18, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 50, 48, 50, 48, 45,
48, 57, 45, 48, 57, 32, 48, 49, 58, 51, 53, 58, 49, 54, 0, 0, 3, 0,
0, 0, 196, 11, 0, 0, 1, 14, 1, 0, 3, 0, 0, 0, 120, 14, 0, 0, 42, 58,
16, 106, 138, 16, 155, 171, 16, 0, 0, 0, 3, 0, 0, 0, 28, 23, 0, 0, 21,
2, 2, 0, 9, 0, 19, 0, 22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59,
0, 73, 0, 75, 0, 77, 0, 80, 0, 87, 0, 92, 0, 95, 0, 101, 0, 104, 0,
117, 0, 127, 0, 130, 0, 132, 0, 134, 0, 142, 0, 144, 0, 160, 0, 173,
0, 175, 0, 183, 0, 188, 0, 190, 0, 192, 0, 195, 0, 212, 0, 217, 0, 227,
0, 229, 0, 242, 0, 248, 0, 251, 0, 1, 1, 4, 1, 11, 1, 15, 1, 18, 1,
46, 1, 52, 1, 21, 2, 2, 0, 0, 0, 3, 0, 0, 0, 40, 16, 0, 0, 102, 1, 0,
0, 148, 0, 0, 0, 34, 46, 4, 36, 64, 4, 100, 144, 4, 149, 177, 4, 104,
0, 0, 0, 4, 14, 0, 0, 119, 13, 0, 0, 99, 13, 0, 0, 112, 22, 0, 0, 64,
16, 0, 0, 172, 14, 0, 0, 232, 18, 0, 0, 241, 11, 0, 0, 76, 23, 0, 0,
20, 18, 0, 0, 156, 17, 0, 0, 84, 29, 0, 0, 255, 80, 161, 4, 76, 29,
0, 0, 184, 29, 0, 0, 92, 29, 0, 0, 12, 14, 0, 0, 201, 29, 0, 0, 112,
0, 0, 0, 84, 17, 0, 0, 6, 23, 0, 0, 34, 17, 0, 0, 205, 11, 0, 0, 103,
17, 0, 0, 176, 29, 0, 0, 124, 17, 0, 0, 64, 23, 0, 0, 248, 22, 0, 0,
104, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 18, 0, 0, 136, 17, 0, 0,
10, 2, 255, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70, 28, 2, 58,
36, 2, 70, 55, 2, 14, 0, 255, 2, 23, 19, 23, 55, 2, 2, 84, 19, 2, 84,
55, 2, 14, 0, 255, 2, 23, 19, 23, 55, 0, 2, 66, 19, 2, 66, 55, 2, 23,
1, 1, 4, 23, 19, 17, 29, 23, 40, 30, 55, 2, 2, 84, 22, 2, 84, 55, 2,
24, 1, 5, 2, 23, 23, 30, 55, 0, 4, 56, 19, 2, 58, 29, 2, 60, 41, 2,
70, 55, 2, 15, 1, 255, 1, 23, 20, 2, 1, 84, 20, 2, 15, 1, 255, 1, 23,
20, 2, 1, 84, 20, 2, 20, 1, 255, 2, 21, 20, 21, 55, 2, 2, 84, 20, 2,
84, 55, 2, 0, 0, 255, 0, 0, 0, 19, 1, 255, 2, 23, 20, 23, 54, 0, 2,
66, 20, 2, 66, 54, 2, 20, 1, 255, 2, 23, 20, 20, 55, 0, 2, 66, 20, 2,
64, 55, 2, 20, 1, 255, 2, 23, 20, 20, 55, 2, 2, 92, 20, 2, 80, 55, 2,
9, 0, 255, 1, 23, 19, 2, 1, 84, 19, 2, 9, 0, 255, 1, 20, 19, 0, 1, 56,
19, 2, 11, 2, 255, 3, 17, 19, 24, 31, 30, 55, 0, 5, 56, 19, 2, 70, 28,
2, 58, 36, 2, 68, 40, 2, 70, 55, 2, 13, 2, 255, 3, 17, 19, 24, 32, 30,
55, 0, 5, 56, 19, 2, 78, 28, 2, 64, 36, 2, 68, 38, 2, 78, 46, 2, 26,
1, 255, 2, 23, 20, 30, 42, 2, 2, 84, 23, 2, 112, 55, 2, 13, 2, 255,
3, 17, 19, 24, 32, 30, 55, 0, 7, 58, 19, 2, 84, 27, 2, 76, 35, 2, 72,
38, 2, 80, 44, 2, 68, 50, 2, 80, 52, 2, 27, 0, 255, 1, 30, 26, 0, 1,
120, 26, 2, 26, 2, 255, 1, 30, 25, 0, 1, 120, 25, 2, 10, 2, 2, 3, 17,
19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70, 28, 2, 58, 36, 2, 70, 55, 2,
10, 2, 255, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 66, 28, 2, 60,
36, 2, 66, 55, 2, 20, 2, 255, 2, 23, 20, 33, 55, 2, 2, 84, 20, 2, 84,
55, 2, 10, 2, 1, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70, 28,
2, 58, 36, 2, 70, 55, 2, 32, 2, 255, 1, 30, 40, 2, 1, 84, 40, 2, 29,
2, 255, 2, 21, 29, 30, 55, 0, 2, 60, 29, 2, 68, 55, 2, 29, 1, 255, 2,
30, 29, 30, 55, 2, 2, 112, 29, 2, 112, 55, 2, 5, 2, 0, 2, 23, 18, 23,
19, 2, 2, 84, 18, 2, 84, 19, 2, 7, 2, 0, 2, 23, 18, 23, 20, 2, 2, 84,
18, 2, 84, 20, 2, 8, 2, 0, 3, 23, 18, 23, 20, 30, 40, 2, 2, 84, 18,
2, 84, 22, 2, 6, 1, 255, 4, 14, 18, 14, 19, 20, 30, 20, 54, 0, 4, 48,
18, 2, 48, 19, 2, 60, 30, 2, 60, 54, 2, 14, 0, 255, 2, 17, 19, 30, 55,
0, 2, 56, 19, 2, 68, 55, 2, 12, 2, 255, 3, 17, 19, 24, 32, 30, 56, 0,
6, 62, 19, 2, 90, 28, 2, 80, 37, 2, 90, 43, 2, 86, 48, 2, 118, 56, 2,
22, 1, 255, 2, 23, 20, 30, 40, 2, 1, 84, 22, 2, 25, 1, 255, 1, 23, 24,
2, 1, 84, 24, 2, 14, 0, 6, 2, 17, 19, 20, 55, 0, 2, 56, 19, 2, 60, 55,
2, 18, 1, 255, 2, 20, 20, 20, 47, 2, 2, 72, 20, 2, 72, 47, 2, 22, 1,
255, 2, 23, 20, 30, 40, 2, 1, 84, 22, 2, 22, 2, 255, 1, 20, 22, 0, 2,
62, 20, 2, 66, 40, 2, 16, 2, 255, 2, 20, 20, 28, 40, 2, 2, 84, 20, 2,
112, 40, 2, 4, 0, 255, 1, 23, 18, 2, 1, 84, 18, 2, 20, 1, 255, 2, 23,
20, 30, 55, 2, 2, 84, 20, 2, 84, 55, 2, 21, 1, 255, 3, 23, 20, 30, 39,
30, 49, 2, 2, 84, 21, 2, 84, 49, 2, 26, 1, 255, 3, 23, 20, 24, 41, 30,
55, 2, 1, 84, 25, 2, 26, 1, 255, 3, 23, 20, 24, 41, 30, 55, 2, 1, 84,
25, 2, 17, 1, 255, 2, 23, 20, 30, 42, 2, 2, 84, 20, 2, 112, 42, 2, 34,
0, 255, 1, 27, 55, 2, 1, 84, 55, 2, 34, 0, 255, 1, 30, 55, 0, 1, 78,
55, 2, 34, 0, 255, 1, 27, 55, 2, 1, 84, 55, 2, 34, 0, 255, 1, 20, 55,
2, 1, 76, 55, 2, 31, 2, 255, 2, 17, 35, 30, 55, 0, 2, 68, 35, 2, 68,
55, 2, 30, 2, 255, 3, 17, 35, 24, 40, 30, 55, 0, 3, 56, 35, 2, 68, 40,
2, 68, 55, 2, 28, 2, 255, 3, 17, 29, 24, 40, 30, 55, 0, 3, 56, 29, 2,
58, 40, 2, 62, 55, 2, 33, 0, 255, 1, 27, 54, 2, 1, 84, 54, 2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 4, 1, 5, 1, 18, 2, 18, 19, 4,
18, 19, 30, 54, 2, 18, 20, 2, 18, 22, 1, 19, 3, 19, 29, 55, 3, 19, 31,
55, 3, 19, 32, 56, 2, 19, 33, 2, 19, 55, 1, 20, 2, 20, 40, 2, 20, 42,
2, 20, 47, 2, 20, 54, 2, 20, 55, 2, 21, 49, 1, 22, 2, 22, 55, 2, 23,
55, 1, 24, 1, 25, 1, 26, 3, 29, 40, 55, 2, 29, 55, 3, 35, 40, 55, 2,
35, 55, 1, 40, 1, 54, 1, 55, 0, 0, 0, 1, 0, 0, 0, 220, 16, 0, 0, 4,
0, 0, 0, 227, 16, 0, 0, 5, 0, 0, 0, 255, 16, 0, 0, 50, 50, 32, 114,
114, 32, 163, 163, 32, 0, 0, 0, 3, 0, 0, 0, 236, 22, 0, 0, 84, 0, 69,
1, 74, 1, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 0, 0, 0, 68, 69, 0, 0, 3, 0, 0, 0, 0, 23, 0, 0, 74, 80,
0, 0, 10, 0, 0, 0, 238, 13, 0, 0, 85, 83, 0, 0, 2, 0, 0, 0, 72, 23,
0, 0, 3, 0, 0, 0, 144, 17, 0, 0, 252, 0, 253, 0, 4, 2, 64, 19, 1, 64,
55, 1, 1, 2, 40, 14, 0, 40, 39, 0, 4, 4, 56, 19, 0, 58, 29, 0, 60, 41,
0, 70, 55, 0, 5, 3, 52, 15, 1, 64, 30, 1, 72, 39, 1, 8, 3, 52, 1, 0,
64, 10, 0, 72, 17, 0, 4, 3, 60, 20, 1, 60, 40, 1, 60, 55, 1, 1, 3, 56,
14, 0, 60, 25, 0, 60, 39, 0, 6, 1, 84, 20, 0, 7, 1, 84, 15, 1, 10, 1,
84, 1, 0, 4, 1, 60, 20, 1, 1, 1, 56, 15, 0, 6, 1, 84, 20, 0, 7, 1, 88,
15, 1, 10, 1, 88, 1, 0, 6, 2, 84, 20, 0, 84, 55, 0, 7, 2, 84, 15, 1,
84, 39, 1, 10, 2, 84, 1, 0, 84, 17, 0, 0, 0, 4, 2, 66, 20, 1, 66, 54,
1, 1, 2, 54, 15, 0, 54, 39, 0, 6, 2, 92, 20, 0, 80, 55, 0, 7, 2, 88,
15, 1, 76, 39, 1, 10, 2, 88, 1, 0, 76, 17, 0, 4, 2, 66, 20, 1, 64, 55,
1, 1, 2, 56, 15, 0, 56, 39, 0, 4, 1, 56, 19, 1, 1, 1, 48, 14, 0, 4,
1, 60, 19, 1, 1, 1, 56, 14, 0, 4, 1, 60, 19, 1, 1, 1, 56, 14, 0, 6,
2, 84, 23, 0, 112, 55, 0, 7, 2, 88, 19, 1, 116, 39, 1, 10, 2, 88, 4,
0, 116, 17, 0, 4, 5, 56, 19, 1, 70, 28, 1, 58, 36, 1, 68, 40, 1, 70,
55, 1, 1, 7, 52, 13, 0, 66, 22, 0, 68, 23, 0, 52, 26, 0, 62, 27, 0,
72, 33, 0, 74, 39, 0, 4, 11, 58, 19, 0, 84, 27, 0, 76, 34, 0, 76, 36,
0, 72, 38, 0, 80, 44, 0, 68, 50, 0, 80, 51, 0, 80, 53, 0, 80, 57, 0,
80, 58, 0, 5, 10, 58, 13, 1, 66, 22, 1, 80, 23, 1, 62, 26, 1, 66, 27,
1, 82, 32, 1, 74, 35, 1, 76, 37, 1, 72, 38, 1, 80, 41, 1, 8, 5, 52,
0, 0, 58, 7, 0, 50, 8, 0, 82, 13, 0, 72, 17, 0, 4, 6, 56, 19, 1, 68,
28, 1, 56, 36, 1, 68, 38, 1, 68, 45, 1, 68, 55, 1, 1, 6, 48, 14, 0,
68, 23, 0, 48, 26, 0, 62, 27, 0, 74, 33, 0, 72, 39, 0, 4, 5, 56, 19,
0, 78, 28, 0, 64, 36, 0, 68, 38, 0, 78, 46, 0, 5, 10, 62, 13, 1, 62,
22, 1, 78, 23, 1, 50, 26, 1, 56, 27, 1, 78, 32, 1, 78, 35, 1, 78, 37,
1, 60, 38, 1, 78, 41, 1, 8, 6, 58, 0, 0, 64, 7, 0, 76, 8, 0, 76, 12,
0, 78, 15, 0, 72, 17, 0, 4, 1, 120, 26, 0, 5, 1, 120, 21, 1, 12, 1,
120, 6, 0, 76, 34, 120, 19, 0, 120, 20, 0, 120, 21, 0, 120, 22, 0, 120,
23, 0, 120, 24, 0, 120, 25, 0, 120, 26, 0, 120, 27, 0, 120, 28, 0, 120,
29, 0, 120, 30, 0, 120, 31, 0, 120, 32, 0, 120, 33, 0, 120, 34, 0, 120,
35, 0, 120, 36, 0, 120, 37, 0, 120, 38, 0, 120, 39, 0, 120, 40, 0, 120,
41, 0, 120, 42, 0, 120, 43, 0, 120, 44, 0, 120, 45, 0, 120, 46, 0, 120,
47, 0, 120, 48, 0, 120, 49, 0, 120, 50, 0, 120, 51, 0, 120, 52, 0, 9,
1, 120, 2, 0, 4, 1, 120, 25, 0, 5, 1, 120, 20, 1, 12, 1, 120, 5, 0,
76, 24, 120, 19, 0, 120, 20, 0, 120, 21, 0, 120, 22, 0, 120, 23, 0,
120, 24, 0, 120, 25, 0, 120, 26, 0, 120, 27, 0, 120, 28, 0, 120, 29,
0, 120, 30, 0, 120, 31, 0, 120, 32, 0, 120, 33, 0, 120, 34, 0, 120,
35, 0, 120, 36, 0, 120, 37, 0, 120, 38, 0, 120, 39, 0, 120, 40, 0, 120,
41, 0, 120, 42, 0, 9, 1, 120, 1, 0, 4, 4, 56, 19, 1, 70, 28, 1, 58,
36, 1, 70, 55, 1, 1, 4, 48, 14, 0, 62, 23, 0, 48, 26, 0, 60, 39, 0,
4, 4, 56, 19, 1, 66, 28, 1, 60, 36, 1, 66, 55, 1, 1, 3, 56, 14, 0, 60,
24, 0, 60, 39, 0, 6, 2, 84, 20, 0, 84, 55, 0, 7, 2, 88, 15, 1, 88, 39,
1, 10, 2, 88, 1, 0, 88, 17, 0, 4, 4, 56, 19, 1, 70, 28, 1, 58, 36, 1,
70, 55, 1, 1, 4, 48, 14, 0, 62, 23, 0, 48, 26, 0, 60, 39, 0, 4, 2, 60,
29, 1, 68, 55, 1, 1, 2, 56, 24, 0, 56, 39, 0, 6, 2, 112, 29, 0, 112,
55, 0, 7, 2, 112, 24, 1, 112, 39, 1, 10, 2, 112, 7, 0, 112, 17, 0, 0,
2, 64, 18, 1, 64, 20, 1, 4, 4, 48, 18, 0, 48, 19, 0, 60, 30, 0, 60,
54, 0, 5, 2, 48, 17, 1, 48, 39, 1, 8, 2, 48, 2, 0, 48, 17, 0, 4, 2,
56, 19, 1, 68, 55, 1, 1, 2, 48, 14, 0, 60, 39, 0, 4, 6, 62, 19, 0, 90,
28, 0, 80, 37, 0, 90, 43, 0, 86, 48, 0, 118, 56, 0, 5, 6, 74, 14, 1,
98, 23, 1, 66, 26, 1, 74, 27, 1, 98, 34, 1, 118, 40, 1, 8, 5, 74, 0,
0, 78, 7, 0, 82, 9, 0, 98, 15, 0, 118, 18, 0, 6, 1, 84, 24, 0, 7, 1,
88, 20, 1, 10, 1, 88, 5, 0, 6, 1, 84, 24, 0, 7, 1, 88, 20, 1, 10, 1,
88, 5, 0, 4, 2, 56, 19, 0, 60, 55, 0, 5, 2, 48, 14, 1, 60, 39, 1, 8,
2, 64, 0, 0, 70, 17, 0, 6, 2, 72, 20, 0, 72, 47, 0, 3, 2, 76, 15, 1,
76, 35, 1, 4, 2, 60, 20, 1, 60, 40, 1, 1, 2, 56, 15, 0, 64, 29, 0, 4,
2, 60, 20, 1, 60, 40, 1, 1, 1, 56, 18, 0, 4, 2, 84, 20, 1, 84, 40, 1,
1, 1, 56, 18, 0, 6, 1, 84, 22, 0, 7, 1, 88, 18, 1, 10, 1, 88, 3, 0,
6, 1, 84, 22, 0, 7, 1, 88, 18, 1, 10, 1, 88, 3, 0, 6, 2, 84, 20, 0,
112, 40, 0, 3, 2, 68, 15, 1, 96, 29, 1, 4, 2, 66, 20, 0, 66, 40, 0,
1, 2, 42, 15, 1, 64, 29, 1, 4, 2, 62, 20, 1, 66, 40, 1, 1, 2, 42, 15,
0, 64, 29, 0, 4, 2, 60, 20, 0, 60, 40, 0, 1, 2, 56, 15, 1, 64, 29, 1,
0, 0, 4, 4, 60, 20, 1, 60, 39, 1, 60, 47, 1, 60, 55, 1, 1, 4, 56, 15,
0, 60, 28, 0, 60, 35, 0, 60, 39, 0, 6, 2, 84, 21, 0, 84, 49, 0, 7, 2,
88, 16, 1, 88, 36, 1, 10, 2, 88, 2, 0, 88, 16, 0, 4, 2, 60, 20, 1, 60,
55, 1, 1, 2, 56, 15, 0, 60, 39, 0, 0, 2, 60, 20, 1, 60, 55, 1, 6, 1,
84, 25, 0, 7, 1, 84, 20, 1, 10, 1, 84, 5, 0, 6, 1, 84, 25, 0, 7, 1,
88, 20, 1, 10, 1, 88, 5, 0, 6, 2, 84, 20, 0, 112, 42, 0, 7, 2, 88, 15,
1, 116, 31, 1, 10, 2, 88, 1, 0, 116, 11, 0, 4, 3, 60, 20, 1, 60, 40,
1, 60, 55, 1, 1, 3, 56, 15, 0, 64, 29, 0, 60, 39, 0, 4, 1, 60, 55, 1,
1, 1, 52, 39, 0, 6, 1, 80, 55, 0, 7, 1, 80, 39, 1, 10, 1, 80, 17, 0,
6, 1, 80, 55, 0, 7, 1, 80, 39, 1, 10, 1, 80, 17, 0, 6, 1, 76, 55, 0,
7, 1, 68, 39, 1, 10, 1, 68, 17, 0, 6, 1, 76, 55, 0, 7, 1, 76, 39, 1,
10, 1, 76, 17, 0, 4, 1, 60, 55, 1, 1, 1, 60, 39, 0, 6, 1, 84, 55, 0,
7, 1, 88, 39, 1, 10, 1, 88, 17, 0, 4, 1, 78, 55, 0, 5, 1, 78, 39, 1,
8, 1, 78, 17, 0, 4, 3, 56, 35, 1, 68, 40, 1, 68, 55, 1, 1, 4, 48, 26,
0, 62, 27, 0, 74, 33, 0, 72, 39, 0, 4, 3, 56, 29, 1, 58, 40, 1, 62,
55, 1, 1, 4, 46, 23, 0, 48, 26, 0, 56, 29, 0, 56, 39, 0, 4, 2, 68, 35,
1, 68, 55, 1, 1, 2, 66, 26, 0, 60, 39, 0, 2, 1, 84, 54, 0, 0, 0, 88,
65, 0, 0, 2, 0, 0, 0, 144, 14, 0, 0, 88, 84, 0, 0, 47, 0, 0, 0, 168,
17, 0, 0, 88, 86, 0, 0, 48, 0, 0, 0, 124, 16, 0, 0, 3, 0, 0, 0, 212,
22, 0, 0, 3, 0, 0, 0, 40, 29, 0, 0, 3, 3, 3, 9, 3, 11, 4, 4, 4, 7, 4,
8, 4, 10, 4, 11, 5, 7, 8, 8, 9, 9, 9, 11, 11, 11, 38, 38, 38, 46, 38,
62, 38, 110, 38, 118, 38, 134, 38, 142, 38, 159, 38, 175, 46, 46, 54,
54, 54, 62, 54, 134, 62, 62, 102, 102, 102, 110, 102, 134, 102, 142,
102, 159, 110, 126, 110, 134, 110, 142, 134, 134, 134, 159, 142, 142,
151, 151, 151, 159, 151, 175, 159, 159, 1, 0, 0, 0, 116, 13, 0, 0, 3,
0, 0, 0, 148, 14, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 50, 50, 114,
50, 163, 114, 163, 4, 168, 0, 0
12, 18, 0, 0, 136, 17, 0, 0, 10, 2, 255, 3, 17, 19, 24, 29, 30, 55,
0, 4, 56, 19, 2, 70, 28, 2, 58, 36, 2, 70, 55, 2, 14, 0, 255, 2, 23,
19, 23, 55, 2, 2, 84, 19, 2, 84, 55, 2, 14, 0, 255, 2, 23, 19, 23, 55,
0, 2, 66, 19, 2, 66, 55, 2, 23, 1, 1, 4, 23, 19, 17, 29, 23, 40, 30,
55, 2, 2, 84, 22, 2, 84, 55, 2, 24, 1, 5, 2, 23, 23, 30, 55, 0, 4, 56,
19, 2, 58, 29, 2, 60, 41, 2, 70, 55, 2, 15, 1, 255, 1, 23, 20, 2, 1,
84, 20, 2, 15, 1, 255, 1, 23, 20, 2, 1, 84, 20, 2, 20, 1, 255, 2, 21,
20, 21, 55, 2, 2, 84, 20, 2, 84, 55, 2, 0, 0, 255, 0, 0, 0, 19, 1, 255,
2, 23, 20, 23, 54, 0, 2, 66, 20, 2, 66, 54, 2, 20, 1, 255, 2, 23, 20,
20, 55, 0, 2, 66, 20, 2, 64, 55, 2, 20, 1, 255, 2, 23, 20, 20, 55, 2,
2, 92, 20, 2, 80, 55, 2, 9, 0, 255, 1, 23, 19, 2, 1, 84, 19, 2, 9, 0,
255, 1, 20, 19, 0, 1, 56, 19, 2, 11, 2, 255, 3, 17, 19, 24, 31, 30,
55, 0, 5, 56, 19, 2, 70, 28, 2, 58, 36, 2, 68, 40, 2, 70, 55, 2, 13,
2, 255, 3, 17, 19, 24, 32, 30, 55, 0, 5, 56, 19, 2, 78, 28, 2, 64, 36,
2, 68, 38, 2, 78, 46, 2, 26, 1, 255, 2, 23, 20, 30, 42, 2, 2, 84, 23,
2, 112, 55, 2, 13, 2, 255, 3, 17, 19, 24, 32, 30, 55, 0, 7, 58, 19,
2, 84, 27, 2, 76, 35, 2, 72, 38, 2, 80, 44, 2, 68, 50, 2, 80, 52, 2,
27, 0, 255, 1, 30, 26, 0, 1, 120, 26, 2, 26, 2, 255, 1, 30, 25, 0, 1,
120, 25, 2, 10, 2, 2, 3, 17, 19, 24, 29, 30, 55, 0, 4, 56, 19, 2, 70,
28, 2, 58, 36, 2, 70, 55, 2, 10, 2, 255, 3, 17, 19, 24, 29, 30, 55,
0, 4, 56, 19, 2, 66, 28, 2, 60, 36, 2, 66, 55, 2, 20, 2, 255, 2, 23,
20, 33, 55, 2, 2, 84, 20, 2, 84, 55, 2, 10, 2, 1, 3, 17, 19, 24, 29,
30, 55, 0, 4, 56, 19, 2, 70, 28, 2, 58, 36, 2, 70, 55, 2, 32, 2, 255,
1, 30, 40, 2, 1, 84, 40, 2, 29, 2, 255, 2, 21, 29, 30, 55, 0, 2, 60,
29, 2, 68, 55, 2, 29, 1, 255, 2, 30, 29, 30, 55, 2, 2, 112, 29, 2, 112,
55, 2, 5, 2, 0, 2, 23, 18, 23, 19, 2, 2, 84, 18, 2, 84, 19, 2, 7, 2,
0, 2, 23, 18, 23, 20, 2, 2, 84, 18, 2, 84, 20, 2, 8, 2, 0, 3, 23, 18,
23, 20, 30, 40, 2, 2, 84, 18, 2, 84, 22, 2, 6, 1, 255, 4, 14, 18, 14,
19, 20, 30, 20, 54, 0, 4, 48, 18, 2, 48, 19, 2, 60, 30, 2, 60, 54, 2,
14, 0, 255, 2, 17, 19, 30, 55, 0, 2, 56, 19, 2, 68, 55, 2, 12, 2, 255,
3, 17, 19, 24, 32, 30, 56, 0, 6, 62, 19, 2, 90, 28, 2, 80, 37, 2, 90,
43, 2, 86, 48, 2, 118, 56, 2, 22, 1, 255, 2, 23, 20, 30, 40, 2, 1, 84,
22, 2, 25, 1, 255, 1, 23, 24, 2, 1, 84, 24, 2, 14, 0, 6, 2, 17, 19,
20, 55, 0, 2, 56, 19, 2, 60, 55, 2, 18, 1, 255, 2, 20, 20, 20, 47, 2,
2, 72, 20, 2, 72, 47, 2, 22, 1, 255, 2, 23, 20, 30, 40, 2, 1, 84, 22,
2, 22, 2, 255, 1, 20, 22, 0, 2, 62, 20, 2, 66, 40, 2, 16, 2, 255, 2,
20, 20, 28, 40, 2, 2, 84, 20, 2, 112, 40, 2, 4, 0, 255, 1, 23, 18, 2,
1, 84, 18, 2, 20, 1, 255, 2, 23, 20, 30, 55, 2, 2, 84, 20, 2, 84, 55,
2, 21, 1, 255, 3, 23, 20, 30, 39, 30, 49, 2, 2, 84, 21, 2, 84, 49, 2,
26, 1, 255, 3, 23, 20, 24, 41, 30, 55, 2, 1, 84, 25, 2, 26, 1, 255,
3, 23, 20, 24, 41, 30, 55, 2, 1, 84, 25, 2, 17, 1, 255, 2, 23, 20, 30,
42, 2, 2, 84, 20, 2, 112, 42, 2, 34, 0, 255, 1, 27, 55, 2, 1, 84, 55,
2, 34, 0, 255, 1, 30, 55, 0, 1, 78, 55, 2, 34, 0, 255, 1, 27, 55, 2,
1, 84, 55, 2, 34, 0, 255, 1, 20, 55, 2, 1, 76, 55, 2, 31, 2, 255, 2,
17, 35, 30, 55, 0, 2, 68, 35, 2, 68, 55, 2, 30, 2, 255, 3, 17, 35, 24,
40, 30, 55, 0, 3, 56, 35, 2, 68, 40, 2, 68, 55, 2, 28, 2, 255, 3, 17,
29, 24, 40, 30, 55, 0, 3, 56, 29, 2, 58, 40, 2, 62, 55, 2, 33, 0, 255,
1, 27, 54, 2, 1, 84, 54, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
1, 4, 1, 5, 1, 18, 2, 18, 19, 4, 18, 19, 30, 54, 2, 18, 20, 2, 18, 22,
1, 19, 3, 19, 29, 55, 3, 19, 31, 55, 3, 19, 32, 56, 2, 19, 33, 2, 19,
55, 1, 20, 2, 20, 40, 2, 20, 42, 2, 20, 47, 2, 20, 54, 2, 20, 55, 2,
21, 49, 1, 22, 2, 22, 55, 2, 23, 55, 1, 24, 1, 25, 1, 26, 3, 29, 40,
55, 2, 29, 55, 3, 35, 40, 55, 2, 35, 55, 1, 40, 1, 54, 1, 55, 0, 0,
0, 1, 0, 0, 0, 220, 16, 0, 0, 4, 0, 0, 0, 227, 16, 0, 0, 5, 0, 0, 0,
255, 16, 0, 0, 50, 50, 32, 114, 114, 32, 163, 163, 32, 0, 0, 0, 3, 0,
0, 0, 236, 22, 0, 0, 84, 0, 69, 1, 74, 1, 18, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, 0, 68, 69, 0, 0, 3,
0, 0, 0, 0, 23, 0, 0, 74, 80, 0, 0, 10, 0, 0, 0, 238, 13, 0, 0, 85,
83, 0, 0, 2, 0, 0, 0, 72, 23, 0, 0, 3, 0, 0, 0, 144, 17, 0, 0, 252,
0, 253, 0, 4, 2, 64, 19, 1, 64, 55, 1, 1, 2, 40, 14, 0, 40, 39, 0, 4,
4, 56, 19, 0, 58, 29, 0, 60, 41, 0, 70, 55, 0, 5, 3, 52, 15, 1, 64,
30, 1, 72, 39, 1, 8, 3, 52, 1, 0, 64, 10, 0, 72, 17, 0, 4, 3, 60, 20,
1, 60, 40, 1, 60, 55, 1, 1, 3, 56, 14, 0, 60, 25, 0, 60, 39, 0, 6, 1,
84, 20, 0, 7, 1, 84, 15, 1, 10, 1, 84, 1, 0, 4, 1, 60, 20, 1, 1, 1,
56, 15, 0, 6, 1, 84, 20, 0, 7, 1, 88, 15, 1, 10, 1, 88, 1, 0, 6, 2,
84, 20, 0, 84, 55, 0, 7, 2, 84, 15, 1, 84, 39, 1, 10, 2, 84, 1, 0, 84,
17, 0, 0, 0, 4, 2, 66, 20, 1, 66, 54, 1, 1, 2, 54, 15, 0, 54, 39, 0,
6, 2, 92, 20, 0, 80, 55, 0, 7, 2, 88, 15, 1, 76, 39, 1, 10, 2, 88, 1,
0, 76, 17, 0, 4, 2, 66, 20, 1, 64, 55, 1, 1, 2, 56, 15, 0, 56, 39, 0,
4, 1, 56, 19, 1, 1, 1, 48, 14, 0, 4, 1, 60, 19, 1, 1, 1, 56, 14, 0,
4, 1, 60, 19, 1, 1, 1, 56, 14, 0, 6, 2, 84, 23, 0, 112, 55, 0, 7, 2,
88, 19, 1, 116, 39, 1, 10, 2, 88, 4, 0, 116, 17, 0, 4, 5, 56, 19, 1,
70, 28, 1, 58, 36, 1, 68, 40, 1, 70, 55, 1, 1, 7, 52, 13, 0, 66, 22,
0, 68, 23, 0, 52, 26, 0, 62, 27, 0, 72, 33, 0, 74, 39, 0, 4, 11, 58,
19, 0, 84, 27, 0, 76, 34, 0, 76, 36, 0, 72, 38, 0, 80, 44, 0, 68, 50,
0, 80, 51, 0, 80, 53, 0, 80, 57, 0, 80, 58, 0, 5, 10, 58, 13, 1, 66,
22, 1, 80, 23, 1, 62, 26, 1, 66, 27, 1, 82, 32, 1, 74, 35, 1, 76, 37,
1, 72, 38, 1, 80, 41, 1, 8, 5, 52, 0, 0, 58, 7, 0, 50, 8, 0, 82, 13,
0, 72, 17, 0, 4, 6, 56, 19, 1, 68, 28, 1, 56, 36, 1, 68, 38, 1, 68,
45, 1, 68, 55, 1, 1, 6, 48, 14, 0, 68, 23, 0, 48, 26, 0, 62, 27, 0,
74, 33, 0, 72, 39, 0, 4, 5, 56, 19, 0, 78, 28, 0, 64, 36, 0, 68, 38,
0, 78, 46, 0, 5, 10, 62, 13, 1, 62, 22, 1, 78, 23, 1, 50, 26, 1, 56,
27, 1, 78, 32, 1, 78, 35, 1, 78, 37, 1, 60, 38, 1, 78, 41, 1, 8, 6,
58, 0, 0, 64, 7, 0, 76, 8, 0, 76, 12, 0, 78, 15, 0, 72, 17, 0, 4, 1,
120, 26, 0, 5, 1, 120, 21, 1, 12, 1, 120, 6, 0, 76, 34, 120, 19, 0,
120, 20, 0, 120, 21, 0, 120, 22, 0, 120, 23, 0, 120, 24, 0, 120, 25,
0, 120, 26, 0, 120, 27, 0, 120, 28, 0, 120, 29, 0, 120, 30, 0, 120,
31, 0, 120, 32, 0, 120, 33, 0, 120, 34, 0, 120, 35, 0, 120, 36, 0, 120,
37, 0, 120, 38, 0, 120, 39, 0, 120, 40, 0, 120, 41, 0, 120, 42, 0, 120,
43, 0, 120, 44, 0, 120, 45, 0, 120, 46, 0, 120, 47, 0, 120, 48, 0, 120,
49, 0, 120, 50, 0, 120, 51, 0, 120, 52, 0, 9, 1, 120, 2, 0, 4, 1, 120,
25, 0, 5, 1, 120, 20, 1, 12, 1, 120, 5, 0, 76, 24, 120, 19, 0, 120,
20, 0, 120, 21, 0, 120, 22, 0, 120, 23, 0, 120, 24, 0, 120, 25, 0, 120,
26, 0, 120, 27, 0, 120, 28, 0, 120, 29, 0, 120, 30, 0, 120, 31, 0, 120,
32, 0, 120, 33, 0, 120, 34, 0, 120, 35, 0, 120, 36, 0, 120, 37, 0, 120,
38, 0, 120, 39, 0, 120, 40, 0, 120, 41, 0, 120, 42, 0, 9, 1, 120, 1,
0, 4, 4, 56, 19, 1, 70, 28, 1, 58, 36, 1, 70, 55, 1, 1, 4, 48, 14, 0,
62, 23, 0, 48, 26, 0, 60, 39, 0, 4, 4, 56, 19, 1, 66, 28, 1, 60, 36,
1, 66, 55, 1, 1, 3, 56, 14, 0, 60, 24, 0, 60, 39, 0, 6, 2, 84, 20, 0,
84, 55, 0, 7, 2, 88, 15, 1, 88, 39, 1, 10, 2, 88, 1, 0, 88, 17, 0, 4,
4, 56, 19, 1, 70, 28, 1, 58, 36, 1, 70, 55, 1, 1, 4, 48, 14, 0, 62,
23, 0, 48, 26, 0, 60, 39, 0, 4, 2, 60, 29, 1, 68, 55, 1, 1, 2, 56, 24,
0, 56, 39, 0, 6, 2, 112, 29, 0, 112, 55, 0, 7, 2, 112, 24, 1, 112, 39,
1, 10, 2, 112, 7, 0, 112, 17, 0, 0, 2, 64, 18, 1, 64, 20, 1, 4, 4, 48,
18, 0, 48, 19, 0, 60, 30, 0, 60, 54, 0, 5, 2, 48, 17, 1, 48, 39, 1,
8, 2, 48, 2, 0, 48, 17, 0, 4, 2, 56, 19, 1, 68, 55, 1, 1, 2, 48, 14,
0, 60, 39, 0, 4, 6, 62, 19, 0, 90, 28, 0, 80, 37, 0, 90, 43, 0, 86,
48, 0, 118, 56, 0, 5, 6, 74, 14, 1, 98, 23, 1, 66, 26, 1, 74, 27, 1,
98, 34, 1, 118, 40, 1, 8, 5, 74, 0, 0, 78, 7, 0, 82, 9, 0, 98, 15, 0,
118, 18, 0, 6, 1, 84, 24, 0, 7, 1, 88, 20, 1, 10, 1, 88, 5, 0, 6, 1,
84, 24, 0, 7, 1, 88, 20, 1, 10, 1, 88, 5, 0, 4, 2, 56, 19, 0, 60, 55,
0, 5, 2, 48, 14, 1, 60, 39, 1, 8, 2, 64, 0, 0, 70, 17, 0, 6, 2, 72,
20, 0, 72, 47, 0, 3, 2, 76, 15, 1, 76, 35, 1, 4, 2, 60, 20, 1, 60, 40,
1, 1, 2, 56, 15, 0, 64, 29, 0, 4, 2, 60, 20, 1, 60, 40, 1, 1, 1, 56,
18, 0, 4, 2, 84, 20, 1, 84, 40, 1, 1, 1, 56, 18, 0, 6, 1, 84, 22, 0,
7, 1, 88, 18, 1, 10, 1, 88, 3, 0, 6, 1, 84, 22, 0, 7, 1, 88, 18, 1,
10, 1, 88, 3, 0, 6, 2, 84, 20, 0, 112, 40, 0, 3, 2, 68, 15, 1, 96, 29,
1, 4, 2, 66, 20, 0, 66, 40, 0, 1, 2, 42, 15, 1, 64, 29, 1, 4, 2, 62,
20, 1, 66, 40, 1, 1, 2, 42, 15, 0, 64, 29, 0, 4, 2, 60, 20, 0, 60, 40,
0, 1, 2, 56, 15, 1, 64, 29, 1, 0, 0, 4, 4, 60, 20, 1, 60, 39, 1, 60,
47, 1, 60, 55, 1, 1, 4, 56, 15, 0, 60, 28, 0, 60, 35, 0, 60, 39, 0,
6, 2, 84, 21, 0, 84, 49, 0, 7, 2, 88, 16, 1, 88, 36, 1, 10, 2, 88, 2,
0, 88, 16, 0, 4, 2, 60, 20, 1, 60, 55, 1, 1, 2, 56, 15, 0, 60, 39, 0,
0, 2, 60, 20, 1, 60, 55, 1, 6, 1, 84, 25, 0, 7, 1, 84, 20, 1, 10, 1,
84, 5, 0, 6, 1, 84, 25, 0, 7, 1, 88, 20, 1, 10, 1, 88, 5, 0, 6, 2, 84,
20, 0, 112, 42, 0, 7, 2, 88, 15, 1, 116, 31, 1, 10, 2, 88, 1, 0, 116,
11, 0, 4, 3, 60, 20, 1, 60, 40, 1, 60, 55, 1, 1, 3, 56, 15, 0, 64, 29,
0, 60, 39, 0, 4, 1, 60, 55, 1, 1, 1, 52, 39, 0, 6, 1, 80, 55, 0, 7,
1, 80, 39, 1, 10, 1, 80, 17, 0, 6, 1, 80, 55, 0, 7, 1, 80, 39, 1, 10,
1, 80, 17, 0, 6, 1, 76, 55, 0, 7, 1, 68, 39, 1, 10, 1, 68, 17, 0, 6,
1, 76, 55, 0, 7, 1, 76, 39, 1, 10, 1, 76, 17, 0, 4, 1, 60, 55, 1, 1,
1, 60, 39, 0, 6, 1, 84, 55, 0, 7, 1, 88, 39, 1, 10, 1, 88, 17, 0, 4,
1, 78, 55, 0, 5, 1, 78, 39, 1, 8, 1, 78, 17, 0, 4, 3, 56, 35, 1, 68,
40, 1, 68, 55, 1, 1, 4, 48, 26, 0, 62, 27, 0, 74, 33, 0, 72, 39, 0,
4, 3, 56, 29, 1, 58, 40, 1, 62, 55, 1, 1, 4, 46, 23, 0, 48, 26, 0, 56,
29, 0, 56, 39, 0, 4, 2, 68, 35, 1, 68, 55, 1, 1, 2, 66, 26, 0, 60, 39,
0, 2, 1, 84, 54, 0, 0, 0, 88, 65, 0, 0, 2, 0, 0, 0, 144, 14, 0, 0, 88,
84, 0, 0, 47, 0, 0, 0, 168, 17, 0, 0, 88, 86, 0, 0, 48, 0, 0, 0, 124,
16, 0, 0, 3, 0, 0, 0, 212, 22, 0, 0, 3, 0, 0, 0, 40, 29, 0, 0, 3, 3,
3, 9, 3, 11, 4, 4, 4, 7, 4, 8, 4, 10, 4, 11, 5, 7, 8, 8, 9, 9, 9, 11,
11, 11, 38, 38, 38, 46, 38, 62, 38, 110, 38, 118, 38, 134, 38, 142,
38, 159, 38, 175, 46, 46, 54, 54, 54, 62, 54, 134, 62, 62, 102, 102,
102, 110, 102, 134, 102, 142, 102, 159, 110, 126, 110, 134, 110, 142,
134, 134, 134, 159, 142, 142, 151, 151, 151, 159, 151, 175, 159, 159,
1, 0, 0, 0, 116, 13, 0, 0, 3, 0, 0, 0, 148, 14, 0, 0, 2, 2, 2, 2, 2,
2, 2, 2, 2, 50, 50, 50, 114, 50, 163, 114, 163, 4, 168, 0, 0
};
const resource_hnd_t wifi_mfg_firmware_clm_blob = { RESOURCE_IN_MEMORY, 7697, {.mem = { (const char *) wifi_mfg_firmware_clm_blob_image_data }}};
const resource_hnd_t wifi_mfg_firmware_clm_blob = { RESOURCE_IN_MEMORY, 7697, {.mem = { (const char *) wifi_mfg_firmware_clm_blob_data }}};

View File

@ -18,9 +18,9 @@
#if defined(CY_STORAGE_WIFI_DATA)
CY_SECTION_WHD(CY_STORAGE_WIFI_DATA) __attribute__((used))
#endif
const unsigned char wifi_firmware_clm_blob_image_data[7697] = {
66, 76, 79, 66, 60, 0, 0, 0, 118, 196, 112, 169, 1, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 60, 0, 0, 0, 209, 29, 0, 0, 236, 81, 84, 207, 0, 0, 0,
const unsigned char wifi_firmware_clm_blob_data[7697] = {
66, 76, 79, 66, 60, 0, 0, 0, 227, 75, 186, 247, 1, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 60, 0, 0, 0, 209, 29, 0, 0, 79, 39, 210, 178, 0, 0, 0,
0, 0, 0, 0, 0, 13, 30, 0, 0, 4, 0, 0, 0, 147, 68, 77, 121, 0, 0, 0,
0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 2, 0, 57, 46, 49, 48,
46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 46, 51, 54, 46,
@ -257,7 +257,7 @@ const unsigned char wifi_firmware_clm_blob_image_data[7697] = {
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 0, 1, 2, 3, 8, 12, 13, 14, 15, 16,
17, 18, 19, 8, 4, 5, 6, 7, 8, 9, 10, 11, 21, 2, 2, 18, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 50, 48, 50, 48, 45,
48, 49, 45, 50, 55, 32, 50, 49, 58, 53, 52, 58, 51, 51, 0, 0, 3, 0,
48, 57, 45, 48, 57, 32, 48, 49, 58, 49, 57, 58, 48, 51, 0, 0, 3, 0,
0, 0, 196, 11, 0, 0, 1, 14, 1, 0, 3, 0, 0, 0, 120, 14, 0, 0, 42, 58,
16, 106, 138, 16, 155, 171, 16, 0, 0, 0, 3, 0, 0, 0, 28, 23, 0, 0, 21,
2, 2, 0, 9, 0, 19, 0, 22, 0, 24, 0, 32, 0, 35, 0, 42, 0, 53, 0, 59,
@ -423,5 +423,5 @@ const unsigned char wifi_firmware_clm_blob_image_data[7697] = {
1, 0, 0, 0, 116, 13, 0, 0, 3, 0, 0, 0, 148, 14, 0, 0, 2, 2, 2, 2, 2,
2, 2, 2, 2, 50, 50, 50, 114, 50, 163, 114, 163, 4, 168, 0, 0
};
const resource_hnd_t wifi_firmware_clm_blob = { RESOURCE_IN_MEMORY, 7697, {.mem = { (const char *) wifi_firmware_clm_blob_image_data }}};
const resource_hnd_t wifi_firmware_clm_blob = { RESOURCE_IN_MEMORY, 7697, {.mem = { (const char *) wifi_firmware_clm_blob_data }}};

View File

@ -20,12 +20,12 @@
#include "wiced_resource.h"
extern const resource_hnd_t wifi_firmware_image;
extern const unsigned char wifi_firmware_image_data[414712];
extern const unsigned char wifi_firmware_image_data[444199];
extern const resource_hnd_t wifi_firmware_clm_blob;
extern const unsigned char wifi_firmware_clm_blob_image_data[7697];
extern const unsigned char wifi_firmware_clm_blob_data[7697];
extern const resource_hnd_t wifi_mfg_firmware_image;
extern const unsigned char wifi_mfg_firmware_image_data[495320];
extern const unsigned char wifi_mfg_firmware_image_data[487520];
extern const resource_hnd_t wifi_mfg_firmware_clm_blob;
extern const unsigned char wifi_mfg_firmware_clm_blob_image_data[7697];
extern const unsigned char wifi_mfg_firmware_clm_blob_data[7697];
#endif /* ifndef INCLUDED_RESOURCES_H_ */

View File

@ -0,0 +1,259 @@
/*
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
* SPDX-License-Identifier: LicenseRef-PBL
*
* This file and the related binary are licensed under the
* Permissive Binary License, Version 1.0 (the "License");
* you may not use these files except in compliance with the License.
*
* You may obtain a copy of the License here:
* LICENSE-permissive-binary-license-1.0.txt and at
* https://www.mbed.com/licenses/PBL-1.0
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "wiced_resource.h"
#if defined(CY_STORAGE_WIFI_DATA)
CY_SECTION_WHD(CY_STORAGE_WIFI_DATA) __attribute__((used))
#endif
const unsigned char wifi_mfg_firmware_clm_blob_data[4684] = {
66, 76, 79, 66, 60, 0, 0, 0, 161, 72, 221, 222, 1, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 60, 0, 0, 0, 12, 18, 0, 0, 233, 132, 74, 248, 0, 0, 0,
0, 0, 0, 0, 0, 72, 18, 0, 0, 4, 0, 0, 0, 247, 227, 18, 42, 0, 0, 0,
0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 1, 0, 67, 121, 112,
114, 101, 115, 115, 46, 67, 89, 87, 52, 51, 55, 51, 0, 0, 0, 0, 0, 49,
46, 51, 53, 46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 152, 11, 0, 0, 67, 108,
109, 73, 109, 112, 111, 114, 116, 58, 32, 49, 46, 51, 54, 46, 51, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 49, 32, 50, 48, 48, 52, 49,
53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 92, 11, 0, 0, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 35, 110, 0, 13, 0, 13, 0, 0, 65, 68, 0, 9, 10,
9, 10, 41, 65, 69, 0, 15, 14, 15, 14, 9, 65, 70, 0, 0, 1, 0, 1, 9, 65,
71, 0, 15, 14, 15, 14, 10, 65, 73, 0, 30, 29, 30, 29, 10, 65, 76, 0,
9, 10, 9, 10, 41, 65, 77, 0, 1, 2, 1, 2, 9, 65, 79, 0, 9, 10, 9, 10,
41, 65, 82, 0, 23, 22, 23, 22, 10, 65, 83, 0, 30, 29, 30, 29, 10, 65,
84, 0, 9, 10, 9, 10, 41, 65, 85, 0, 2, 3, 2, 3, 9, 65, 87, 0, 3, 4,
3, 4, 10, 65, 90, 0, 9, 10, 9, 10, 41, 66, 65, 0, 9, 10, 9, 10, 41,
66, 66, 0, 7, 8, 7, 8, 10, 66, 68, 0, 4, 5, 4, 5, 9, 66, 69, 0, 9, 10,
9, 10, 41, 66, 70, 0, 9, 10, 9, 10, 9, 66, 71, 0, 9, 10, 9, 10, 41,
66, 72, 0, 7, 8, 7, 8, 9, 66, 73, 0, 0, 1, 0, 1, 9, 66, 74, 0, 9, 10,
9, 10, 41, 66, 76, 0, 9, 10, 9, 10, 41, 66, 77, 0, 30, 29, 30, 29, 10,
66, 78, 0, 7, 8, 7, 8, 9, 66, 79, 0, 5, 6, 5, 6, 9, 66, 81, 0, 15, 14,
15, 14, 9, 66, 82, 0, 15, 14, 15, 14, 9, 66, 83, 0, 30, 29, 30, 29,
10, 66, 84, 0, 9, 10, 9, 10, 9, 66, 87, 0, 0, 1, 0, 1, 9, 66, 89, 0,
0, 1, 0, 1, 9, 66, 90, 0, 15, 14, 15, 14, 9, 67, 65, 0, 6, 7, 6, 7,
10, 67, 67, 0, 2, 3, 2, 3, 9, 67, 68, 0, 0, 1, 0, 1, 9, 67, 70, 0, 0,
1, 0, 1, 9, 67, 71, 0, 0, 1, 0, 1, 9, 67, 72, 0, 9, 10, 9, 10, 41, 67,
73, 0, 1, 2, 1, 2, 9, 67, 75, 0, 2, 3, 2, 3, 9, 67, 76, 0, 15, 14, 15,
14, 9, 67, 77, 0, 9, 10, 9, 10, 41, 67, 78, 0, 7, 8, 7, 8, 9, 67, 79,
0, 8, 9, 8, 9, 10, 67, 82, 0, 30, 29, 30, 29, 10, 67, 86, 0, 9, 10,
9, 10, 41, 67, 87, 0, 27, 26, 27, 26, 9, 67, 88, 0, 2, 3, 2, 3, 9, 67,
89, 0, 9, 10, 9, 10, 41, 67, 90, 0, 9, 10, 9, 10, 41, 68, 69, 0, 9,
10, 9, 10, 41, 68, 74, 0, 10, 0, 10, 0, 8, 68, 75, 0, 9, 10, 9, 10,
41, 68, 77, 0, 22, 21, 22, 21, 10, 68, 79, 0, 15, 14, 15, 14, 10, 68,
90, 0, 11, 11, 11, 11, 9, 69, 67, 0, 15, 14, 15, 14, 9, 69, 69, 0, 9,
10, 9, 10, 41, 69, 71, 0, 12, 12, 12, 12, 9, 69, 72, 0, 12, 12, 12,
12, 9, 69, 82, 0, 10, 0, 10, 0, 8, 69, 83, 0, 9, 10, 9, 10, 41, 69,
84, 0, 0, 1, 0, 1, 9, 70, 73, 0, 9, 10, 9, 10, 41, 70, 74, 0, 2, 3,
2, 3, 9, 70, 75, 0, 0, 1, 0, 1, 9, 70, 79, 0, 9, 10, 9, 10, 41, 70,
82, 0, 9, 10, 9, 10, 41, 71, 65, 0, 9, 10, 9, 10, 41, 71, 66, 0, 15,
14, 15, 14, 9, 71, 68, 0, 14, 13, 14, 13, 10, 71, 69, 0, 9, 10, 9, 10,
41, 71, 70, 0, 9, 10, 9, 10, 41, 71, 71, 0, 15, 14, 15, 14, 9, 71, 72,
0, 0, 1, 0, 1, 9, 71, 73, 0, 9, 10, 9, 10, 41, 71, 76, 0, 9, 10, 9,
10, 41, 71, 77, 0, 0, 1, 0, 1, 9, 71, 78, 0, 0, 1, 0, 1, 9, 71, 80,
0, 9, 10, 9, 10, 41, 71, 81, 0, 0, 1, 0, 1, 9, 71, 82, 0, 9, 10, 9,
10, 41, 71, 84, 0, 0, 1, 0, 1, 9, 71, 85, 0, 30, 29, 30, 29, 10, 71,
87, 0, 0, 1, 0, 1, 9, 71, 89, 0, 4, 5, 4, 5, 9, 72, 75, 0, 15, 14, 15,
14, 9, 72, 77, 0, 2, 3, 2, 3, 9, 72, 78, 0, 15, 14, 15, 14, 10, 72,
82, 0, 9, 10, 9, 10, 41, 72, 84, 0, 15, 14, 15, 14, 10, 72, 85, 0, 9,
10, 9, 10, 41, 73, 68, 0, 16, 15, 16, 15, 9, 73, 69, 0, 9, 10, 9, 10,
41, 73, 76, 0, 12, 12, 12, 12, 9, 73, 77, 0, 15, 14, 15, 14, 9, 73,
78, 0, 17, 16, 17, 16, 9, 73, 79, 0, 0, 1, 0, 1, 9, 73, 81, 0, 9, 10,
9, 10, 41, 73, 83, 0, 9, 10, 9, 10, 41, 73, 84, 0, 9, 10, 9, 10, 41,
74, 69, 0, 15, 14, 15, 14, 9, 74, 77, 0, 4, 5, 4, 5, 9, 74, 79, 0, 18,
17, 18, 17, 9, 74, 80, 0, 19, 18, 19, 18, 10, 75, 69, 0, 9, 10, 9, 10,
41, 75, 71, 0, 0, 1, 0, 1, 9, 75, 72, 0, 15, 14, 15, 14, 9, 75, 73,
0, 2, 3, 2, 3, 9, 75, 77, 0, 0, 1, 0, 1, 9, 75, 78, 0, 15, 14, 15, 14,
10, 75, 82, 0, 20, 19, 20, 19, 9, 75, 87, 0, 12, 12, 12, 12, 9, 75,
89, 0, 30, 29, 30, 29, 10, 75, 90, 0, 21, 20, 21, 20, 9, 76, 65, 0,
15, 14, 15, 14, 9, 76, 66, 0, 15, 14, 15, 14, 9, 76, 67, 0, 22, 21,
22, 21, 10, 76, 73, 0, 9, 10, 9, 10, 41, 76, 75, 0, 15, 14, 15, 14,
9, 76, 82, 0, 15, 14, 15, 14, 9, 76, 83, 0, 9, 10, 9, 10, 9, 76, 84,
0, 9, 10, 9, 10, 41, 76, 85, 0, 9, 10, 9, 10, 41, 76, 86, 0, 9, 10,
9, 10, 41, 76, 89, 0, 9, 10, 9, 10, 41, 77, 65, 0, 12, 12, 12, 12, 9,
77, 67, 0, 9, 10, 9, 10, 41, 77, 68, 0, 9, 10, 9, 10, 41, 77, 69, 0,
9, 10, 9, 10, 41, 77, 70, 0, 9, 10, 9, 10, 41, 77, 71, 0, 0, 1, 0, 1,
9, 77, 75, 0, 9, 10, 9, 10, 41, 77, 76, 0, 9, 10, 9, 10, 41, 77, 77,
0, 4, 5, 4, 5, 9, 77, 78, 0, 22, 21, 22, 21, 9, 77, 79, 0, 15, 14, 15,
14, 9, 77, 80, 0, 30, 29, 30, 29, 10, 77, 81, 0, 9, 10, 9, 10, 41, 77,
82, 0, 0, 1, 0, 1, 9, 77, 83, 0, 0, 1, 0, 1, 9, 77, 84, 0, 9, 10, 9,
10, 41, 77, 85, 0, 0, 1, 0, 1, 9, 77, 86, 0, 7, 8, 7, 8, 9, 77, 87,
0, 15, 14, 15, 14, 9, 77, 88, 0, 23, 22, 23, 22, 9, 77, 89, 0, 24, 23,
24, 23, 9, 77, 90, 0, 9, 10, 9, 10, 41, 78, 65, 0, 15, 14, 15, 14, 9,
78, 67, 0, 0, 1, 0, 1, 9, 78, 69, 0, 0, 1, 0, 1, 9, 78, 70, 0, 2, 3,
2, 3, 9, 78, 71, 0, 25, 24, 25, 24, 9, 78, 73, 0, 8, 9, 8, 9, 9, 78,
76, 0, 9, 10, 9, 10, 41, 78, 79, 0, 9, 10, 9, 10, 41, 78, 80, 0, 3,
4, 3, 4, 9, 78, 82, 0, 0, 1, 0, 1, 9, 78, 85, 0, 15, 14, 15, 14, 9,
78, 90, 0, 15, 14, 15, 14, 9, 79, 77, 0, 9, 10, 9, 10, 9, 80, 65, 0,
15, 14, 15, 14, 10, 80, 69, 0, 15, 14, 15, 14, 9, 80, 70, 0, 9, 10,
9, 10, 41, 80, 71, 0, 2, 3, 2, 3, 9, 80, 72, 0, 15, 14, 15, 14, 9, 80,
75, 0, 4, 5, 4, 5, 9, 80, 76, 0, 9, 10, 9, 10, 41, 80, 77, 0, 9, 10,
9, 10, 41, 80, 78, 0, 0, 1, 0, 1, 9, 80, 82, 0, 30, 29, 30, 29, 10,
80, 83, 0, 10, 0, 10, 0, 8, 80, 84, 0, 9, 10, 9, 10, 41, 80, 87, 0,
8, 9, 8, 9, 9, 80, 89, 0, 15, 14, 15, 14, 9, 81, 65, 0, 15, 14, 15,
14, 9, 82, 69, 0, 9, 10, 9, 10, 41, 82, 79, 0, 9, 10, 9, 10, 41, 82,
83, 0, 9, 10, 9, 10, 41, 82, 85, 0, 26, 25, 26, 25, 9, 82, 87, 0, 0,
1, 0, 1, 9, 83, 65, 0, 27, 26, 27, 26, 9, 83, 66, 0, 10, 0, 10, 0, 8,
83, 67, 0, 15, 14, 15, 14, 9, 83, 69, 0, 9, 10, 9, 10, 41, 83, 71, 0,
15, 14, 15, 14, 9, 83, 73, 0, 9, 10, 9, 10, 41, 83, 75, 0, 9, 10, 9,
10, 41, 83, 76, 0, 0, 1, 0, 1, 9, 83, 77, 0, 9, 10, 9, 10, 41, 83, 78,
0, 0, 1, 0, 1, 9, 83, 79, 0, 10, 0, 10, 0, 8, 83, 82, 0, 9, 10, 9, 10,
41, 83, 84, 0, 0, 1, 0, 1, 9, 83, 86, 0, 8, 9, 8, 9, 9, 83, 88, 0, 8,
9, 8, 9, 9, 83, 90, 0, 9, 10, 9, 10, 41, 84, 67, 0, 15, 14, 15, 14,
10, 84, 68, 0, 0, 1, 0, 1, 9, 84, 70, 0, 9, 10, 9, 10, 41, 84, 71, 0,
9, 10, 9, 10, 41, 84, 72, 0, 15, 14, 15, 14, 9, 84, 74, 0, 0, 1, 0,
1, 9, 84, 75, 0, 15, 14, 15, 14, 9, 84, 77, 0, 0, 1, 0, 1, 9, 84, 78,
0, 28, 27, 28, 27, 9, 84, 79, 0, 2, 3, 2, 3, 9, 84, 82, 0, 9, 10, 9,
10, 41, 84, 84, 0, 15, 14, 15, 14, 9, 84, 86, 0, 10, 0, 10, 0, 8, 84,
87, 0, 30, 29, 30, 29, 10, 84, 90, 0, 9, 10, 9, 10, 41, 85, 65, 0, 29,
28, 29, 28, 9, 85, 71, 0, 9, 10, 9, 10, 41, 85, 77, 0, 30, 29, 30, 29,
10, 85, 83, 0, 30, 29, 30, 29, 10, 85, 89, 0, 7, 8, 7, 8, 9, 85, 90,
0, 12, 12, 12, 12, 9, 86, 65, 0, 9, 10, 9, 10, 41, 86, 67, 0, 15, 14,
15, 14, 10, 86, 69, 0, 7, 8, 7, 8, 9, 86, 71, 0, 15, 14, 15, 14, 10,
86, 73, 0, 30, 29, 30, 29, 10, 86, 78, 0, 15, 14, 15, 14, 9, 86, 85,
0, 15, 14, 15, 14, 9, 87, 70, 0, 9, 10, 9, 10, 41, 87, 83, 0, 31, 30,
31, 30, 9, 88, 75, 0, 9, 10, 9, 10, 41, 88, 84, 0, 32, 0, 32, 0, 32,
88, 88, 0, 33, 31, 33, 31, 42, 88, 90, 0, 34, 32, 34, 32, 42, 89, 69,
0, 15, 14, 15, 14, 9, 89, 84, 0, 9, 10, 9, 10, 41, 90, 65, 0, 15, 14,
15, 14, 9, 90, 77, 0, 15, 14, 15, 14, 9, 90, 87, 0, 0, 1, 0, 1, 9, 90,
88, 0, 35, 33, 35, 33, 9, 90, 90, 0, 36, 34, 36, 34, 41, 38, 62, 8,
102, 142, 8, 151, 175, 8, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 108,
1, 0, 0, 1, 108, 1, 0, 0, 1, 80, 1, 0, 0, 1, 108, 1, 0, 0, 1, 108, 0,
0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0,
1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 0, 0, 1, 108, 1, 0, 0, 1, 68, 1, 0,
0, 1, 96, 1, 0, 0, 1, 108, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0,
1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 108, 1, 0, 0, 1,
96, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 2, 1, 40,
1, 0, 0, 1, 68, 1, 0, 0, 1, 108, 0, 0, 0, 1, 68, 1, 0, 2, 1, 40, 0,
0, 2, 1, 40, 0, 0, 2, 1, 40, 1, 0, 0, 1, 108, 1, 0, 0, 1, 68, 1, 0,
1, 2, 2, 6, 12, 2, 6, 8, 2, 3, 16, 2, 6, 10, 3, 6, 10, 13, 1, 6, 4,
6, 7, 12, 13, 2, 6, 9, 3, 11, 1, 1, 11, 1, 13, 12, 13, 36, 48, 36, 64,
36, 144, 52, 64, 100, 116, 100, 128, 100, 132, 100, 140, 100, 144, 132,
140, 144, 144, 149, 157, 149, 161, 149, 165, 165, 165, 50, 48, 50, 48,
45, 48, 56, 45, 48, 54, 32, 49, 53, 58, 48, 48, 58, 49, 57, 0, 42, 42,
42, 138, 42, 171, 58, 58, 106, 106, 122, 171, 155, 155, 0, 1, 0, 0,
0, 35, 11, 0, 0, 1, 0, 0, 0, 38, 11, 0, 0, 2, 0, 255, 1, 20, 1, 0, 1,
68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 36, 1,
0, 1, 108, 1, 1, 2, 0, 255, 1, 30, 1, 0, 1, 108, 1, 1, 2, 0, 255, 1,
23, 1, 0, 1, 80, 1, 1, 2, 0, 255, 1, 27, 1, 0, 1, 108, 1, 1, 1, 0, 255,
1, 30, 0, 0, 1, 108, 0, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0,
255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1,
2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68,
1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 0, 0, 255, 0, 0, 0, 2, 0,
255, 1, 30, 1, 0, 1, 108, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1,
2, 0, 255, 1, 27, 1, 0, 1, 96, 1, 1, 2, 0, 255, 1, 30, 1, 0, 1, 108,
1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1,
68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1,
0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 30,
1, 0, 1, 108, 1, 1, 2, 0, 255, 1, 27, 1, 0, 1, 96, 1, 1, 2, 0, 255,
1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0,
255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 10, 1, 2, 1, 40, 1, 1,
2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 1, 0, 255, 1, 30, 0, 0, 1, 108,
0, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 1, 0, 255, 1, 10, 0, 2, 1,
40, 0, 1, 1, 0, 255, 1, 10, 0, 2, 1, 40, 0, 1, 2, 0, 0, 1, 10, 1, 2,
1, 40, 1, 1, 2, 0, 255, 1, 30, 1, 0, 1, 108, 1, 1, 2, 0, 255, 1, 20,
1, 0, 1, 68, 1, 1, 0, 0, 1, 0, 0, 0, 252, 17, 0, 0, 1, 0, 0, 0, 255,
17, 0, 0, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 8, 4, 5, 6, 7,
8, 9, 10, 11, 2, 2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 1, 1, 1, 3, 2, 4, 1,
1, 1, 2, 4, 4, 2, 2, 1, 1, 1, 5, 2, 2, 1, 1, 1, 1, 4, 2, 2, 4, 2, 2,
18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 12, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 3, 0, 0, 0, 19, 8, 0, 0, 1, 13, 1, 0, 2, 0, 0, 0, 56,
9, 0, 0, 42, 58, 16, 106, 138, 16, 155, 171, 16, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 2, 0, 0, 0, 220, 10, 0, 0, 241, 0, 0, 0, 139, 0, 0, 0, 36,
64, 4, 100, 144, 4, 149, 165, 4, 0, 0, 0, 112, 0, 0, 0, 188, 14, 0,
0, 241, 8, 0, 0, 210, 8, 0, 0, 124, 14, 0, 0, 236, 10, 0, 0, 72, 9,
0, 0, 88, 12, 0, 0, 28, 8, 0, 0, 212, 14, 0, 0, 132, 11, 0, 0, 116,
11, 0, 0, 220, 17, 0, 0, 255, 80, 129, 5, 212, 17, 0, 0, 0, 0, 0, 0,
228, 17, 0, 0, 41, 9, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 41, 11, 0, 0,
0, 0, 0, 0, 60, 11, 0, 0, 0, 0, 0, 0, 21, 9, 0, 0, 244, 17, 0, 0, 84,
11, 0, 0, 204, 14, 0, 0, 180, 14, 0, 0, 116, 14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 100, 14, 0, 0, 196, 14, 0, 0, 108, 14, 0, 0,
172, 14, 0, 0, 4, 18, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 124, 11, 0, 0,
96, 11, 0, 0, 0, 0, 255, 0, 0, 0, 3, 1, 4, 1, 23, 3, 0, 1, 80, 3, 1,
3, 0, 255, 1, 20, 3, 0, 1, 68, 3, 1, 7, 1, 7, 2, 23, 3, 30, 16, 0, 2,
80, 3, 1, 108, 16, 1, 5, 2, 6, 2, 23, 3, 30, 15, 0, 2, 80, 3, 1, 108,
15, 1, 10, 0, 255, 1, 28, 16, 0, 1, 100, 16, 1, 10, 1, 6, 1, 30, 16,
0, 1, 108, 16, 1, 7, 2, 7, 2, 23, 3, 30, 16, 0, 2, 80, 3, 1, 108, 16,
1, 7, 1, 6, 2, 23, 3, 20, 16, 0, 2, 80, 3, 1, 68, 16, 1, 7, 1, 5, 2,
17, 3, 20, 16, 0, 2, 56, 3, 1, 68, 16, 1, 7, 1, 4, 2, 23, 3, 14, 16,
4, 1, 80, 3, 1, 2, 1, 56, 16, 1, 3, 1, 8, 1, 23, 3, 0, 1, 80, 3, 1,
3, 1, 6, 1, 20, 3, 0, 1, 68, 3, 1, 3, 2, 4, 1, 17, 3, 0, 1, 56, 3, 1,
7, 1, 5, 2, 23, 3, 20, 16, 0, 2, 80, 3, 1, 68, 16, 1, 5, 1, 6, 2, 23,
3, 23, 15, 0, 2, 80, 3, 1, 80, 15, 1, 7, 1, 4, 2, 24, 3, 30, 16, 0,
2, 84, 3, 1, 108, 16, 1, 7, 0, 255, 2, 23, 3, 23, 16, 0, 2, 80, 3, 1,
80, 16, 1, 3, 2, 4, 1, 20, 3, 0, 1, 68, 3, 1, 7, 1, 4, 2, 14, 3, 20,
16, 0, 2, 44, 3, 1, 68, 16, 1, 3, 1, 1, 1, 20, 3, 0, 1, 68, 3, 1, 5,
1, 5, 2, 23, 3, 30, 15, 0, 2, 80, 3, 1, 108, 15, 1, 7, 1, 7, 2, 17,
3, 30, 16, 0, 2, 56, 3, 1, 108, 16, 1, 7, 1, 2, 2, 30, 3, 30, 16, 0,
2, 108, 3, 1, 108, 16, 1, 7, 1, 6, 2, 20, 3, 14, 16, 4, 1, 68, 3, 1,
2, 1, 56, 16, 1, 7, 1, 1, 2, 23, 3, 23, 16, 0, 2, 80, 3, 1, 80, 16,
1, 6, 1, 5, 3, 23, 3, 30, 15, 14, 17, 4, 2, 80, 3, 1, 108, 15, 1, 2,
1, 56, 17, 1, 3, 1, 6, 1, 23, 3, 0, 1, 80, 3, 1, 7, 1, 4, 2, 20, 3,
20, 16, 0, 2, 68, 3, 1, 68, 16, 1, 7, 2, 5, 2, 24, 3, 30, 16, 0, 2,
84, 3, 1, 108, 16, 1, 4, 1, 5, 2, 20, 3, 20, 14, 0, 2, 68, 3, 1, 68,
14, 1, 7, 0, 3, 2, 11, 3, 14, 16, 4, 1, 44, 3, 1, 2, 1, 56, 16, 1, 7,
0, 3, 2, 11, 3, 14, 16, 4, 1, 44, 3, 1, 2, 1, 56, 16, 1, 9, 2, 255,
2, 24, 5, 30, 16, 0, 2, 84, 5, 1, 108, 16, 1, 8, 1, 255, 3, 23, 4, 30,
11, 14, 16, 4, 2, 80, 4, 1, 108, 11, 1, 2, 1, 56, 16, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 1, 1, 3, 2, 3, 14, 2, 3, 15, 3, 3, 15, 17, 2, 3, 16, 3, 4,
11, 16, 2, 5, 16, 1, 16, 0, 0, 0, 1, 0, 0, 0, 0, 11, 0, 0, 4, 0, 0,
0, 7, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
0, 0, 140, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 104, 11, 0,
0, 0, 0, 4, 1, 68, 3, 0, 5, 1, 80, 1, 0, 8, 1, 80, 0, 0, 4, 1, 68, 3,
0, 5, 1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 2, 80, 3, 0, 108, 16, 0, 5, 2,
80, 1, 0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 2, 80, 3, 0, 108,
15, 0, 5, 2, 80, 1, 0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 1, 100,
16, 0, 5, 1, 100, 7, 0, 8, 1, 100, 6, 0, 4, 1, 108, 16, 0, 5, 1, 108,
7, 0, 8, 1, 108, 6, 0, 4, 2, 80, 3, 0, 108, 16, 0, 5, 2, 80, 1, 0, 108,
7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 2, 80, 3, 0, 68, 16, 0, 5, 2, 80,
1, 0, 68, 7, 0, 8, 2, 80, 0, 0, 68, 6, 0, 4, 2, 56, 3, 0, 68, 16, 0,
5, 2, 56, 1, 0, 68, 7, 0, 8, 2, 56, 0, 0, 68, 6, 0, 4, 1, 80, 3, 0,
6, 1, 56, 16, 0, 5, 1, 80, 1, 0, 7, 1, 56, 7, 0, 12, 1, 80, 0, 0, 10,
1, 56, 6, 0, 4, 1, 80, 3, 0, 5, 1, 80, 1, 0, 8, 1, 80, 0, 0, 4, 1, 68,
3, 0, 5, 1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 1, 56, 3, 0, 5, 1, 56, 1, 0,
8, 1, 56, 0, 0, 4, 2, 80, 3, 0, 68, 16, 0, 5, 2, 80, 1, 0, 68, 7, 0,
8, 2, 80, 0, 0, 68, 6, 0, 4, 2, 80, 3, 0, 80, 15, 0, 5, 2, 80, 1, 0,
80, 7, 0, 8, 2, 80, 0, 0, 80, 6, 0, 4, 2, 84, 3, 0, 108, 16, 0, 5, 2,
84, 1, 0, 108, 7, 0, 8, 2, 84, 0, 0, 108, 6, 0, 4, 2, 80, 3, 0, 80,
16, 0, 5, 2, 80, 1, 0, 80, 7, 0, 8, 2, 80, 0, 0, 80, 6, 0, 4, 1, 68,
3, 0, 5, 1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 2, 44, 3, 0, 68, 16, 0, 5,
2, 44, 1, 0, 68, 7, 0, 8, 2, 44, 0, 0, 68, 6, 0, 4, 1, 68, 3, 0, 5,
1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 2, 80, 3, 0, 108, 15, 0, 5, 2, 80, 1,
0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 2, 56, 3, 0, 108, 16, 0,
5, 2, 56, 1, 0, 108, 7, 0, 8, 2, 56, 0, 0, 108, 6, 0, 4, 2, 108, 3,
0, 108, 16, 0, 5, 2, 108, 1, 0, 108, 7, 0, 8, 2, 108, 0, 0, 108, 6,
0, 4, 1, 68, 3, 0, 6, 1, 56, 16, 0, 5, 1, 68, 1, 0, 7, 1, 56, 7, 0,
12, 1, 68, 0, 0, 10, 1, 56, 6, 0, 4, 2, 80, 3, 0, 80, 16, 0, 5, 2, 80,
1, 0, 80, 7, 0, 8, 2, 80, 0, 0, 80, 6, 0, 4, 2, 80, 3, 0, 108, 15, 0,
6, 1, 56, 17, 0, 5, 2, 80, 1, 0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6,
0, 4, 1, 80, 3, 0, 5, 1, 80, 1, 0, 8, 1, 80, 0, 0, 4, 2, 68, 3, 0, 68,
16, 0, 5, 2, 68, 1, 0, 68, 7, 0, 8, 2, 68, 0, 0, 68, 6, 0, 4, 2, 84,
3, 0, 108, 16, 0, 5, 2, 84, 1, 0, 108, 7, 0, 8, 2, 84, 0, 0, 108, 6,
0, 4, 2, 68, 3, 0, 68, 14, 0, 5, 2, 68, 1, 0, 68, 6, 0, 8, 1, 68, 0,
0, 4, 1, 44, 3, 0, 6, 1, 56, 16, 0, 5, 1, 44, 1, 0, 7, 1, 56, 7, 0,
12, 1, 44, 0, 0, 10, 1, 56, 6, 0, 4, 1, 44, 3, 0, 6, 1, 56, 16, 0, 5,
1, 44, 1, 0, 7, 1, 56, 7, 0, 12, 1, 44, 0, 0, 10, 1, 56, 6, 0, 4, 2,
84, 5, 0, 108, 16, 0, 5, 2, 84, 3, 0, 108, 7, 0, 8, 2, 84, 1, 0, 108,
6, 0, 4, 2, 80, 4, 0, 108, 11, 0, 6, 1, 56, 16, 0, 5, 2, 80, 2, 0, 108,
5, 0, 7, 1, 56, 7, 0, 12, 1, 80, 1, 0, 10, 1, 56, 6, 0, 0, 0, 2, 0,
0, 0, 156, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 38, 46, 38, 62,
38, 142, 38, 175, 102, 142, 151, 151, 151, 159, 1, 0, 0, 0, 238, 8,
0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 67, 0, 0
};
const resource_hnd_t wifi_mfg_firmware_clm_blob = { RESOURCE_IN_MEMORY, 4684, {.mem = { (const char *) wifi_mfg_firmware_clm_blob_data }}};

View File

@ -0,0 +1,259 @@
/*
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
* SPDX-License-Identifier: LicenseRef-PBL
*
* This file and the related binary are licensed under the
* Permissive Binary License, Version 1.0 (the "License");
* you may not use these files except in compliance with the License.
*
* You may obtain a copy of the License here:
* LICENSE-permissive-binary-license-1.0.txt and at
* https://www.mbed.com/licenses/PBL-1.0
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "wiced_resource.h"
#if defined(CY_STORAGE_WIFI_DATA)
CY_SECTION_WHD(CY_STORAGE_WIFI_DATA) __attribute__((used))
#endif
const unsigned char wifi_firmware_clm_blob_data[4684] = {
66, 76, 79, 66, 60, 0, 0, 0, 154, 219, 133, 155, 1, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 60, 0, 0, 0, 12, 18, 0, 0, 38, 6, 158, 153, 0, 0, 0,
0, 0, 0, 0, 0, 72, 18, 0, 0, 4, 0, 0, 0, 247, 227, 18, 42, 0, 0, 0,
0, 67, 76, 77, 32, 68, 65, 84, 65, 0, 0, 18, 0, 1, 0, 67, 121, 112,
114, 101, 115, 115, 46, 67, 89, 87, 52, 51, 55, 51, 0, 0, 0, 0, 0, 49,
46, 51, 53, 46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 152, 11, 0, 0, 67, 108,
109, 73, 109, 112, 111, 114, 116, 58, 32, 49, 46, 51, 54, 46, 51, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 49, 32, 50, 48, 48, 52, 49,
53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 92, 11, 0, 0, 18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 35, 110, 0, 13, 0, 13, 0, 0, 65, 68, 0, 9, 10,
9, 10, 41, 65, 69, 0, 15, 14, 15, 14, 9, 65, 70, 0, 0, 1, 0, 1, 9, 65,
71, 0, 15, 14, 15, 14, 10, 65, 73, 0, 30, 29, 30, 29, 10, 65, 76, 0,
9, 10, 9, 10, 41, 65, 77, 0, 1, 2, 1, 2, 9, 65, 79, 0, 9, 10, 9, 10,
41, 65, 82, 0, 23, 22, 23, 22, 10, 65, 83, 0, 30, 29, 30, 29, 10, 65,
84, 0, 9, 10, 9, 10, 41, 65, 85, 0, 2, 3, 2, 3, 9, 65, 87, 0, 3, 4,
3, 4, 10, 65, 90, 0, 9, 10, 9, 10, 41, 66, 65, 0, 9, 10, 9, 10, 41,
66, 66, 0, 7, 8, 7, 8, 10, 66, 68, 0, 4, 5, 4, 5, 9, 66, 69, 0, 9, 10,
9, 10, 41, 66, 70, 0, 9, 10, 9, 10, 9, 66, 71, 0, 9, 10, 9, 10, 41,
66, 72, 0, 7, 8, 7, 8, 9, 66, 73, 0, 0, 1, 0, 1, 9, 66, 74, 0, 9, 10,
9, 10, 41, 66, 76, 0, 9, 10, 9, 10, 41, 66, 77, 0, 30, 29, 30, 29, 10,
66, 78, 0, 7, 8, 7, 8, 9, 66, 79, 0, 5, 6, 5, 6, 9, 66, 81, 0, 15, 14,
15, 14, 9, 66, 82, 0, 15, 14, 15, 14, 9, 66, 83, 0, 30, 29, 30, 29,
10, 66, 84, 0, 9, 10, 9, 10, 9, 66, 87, 0, 0, 1, 0, 1, 9, 66, 89, 0,
0, 1, 0, 1, 9, 66, 90, 0, 15, 14, 15, 14, 9, 67, 65, 0, 6, 7, 6, 7,
10, 67, 67, 0, 2, 3, 2, 3, 9, 67, 68, 0, 0, 1, 0, 1, 9, 67, 70, 0, 0,
1, 0, 1, 9, 67, 71, 0, 0, 1, 0, 1, 9, 67, 72, 0, 9, 10, 9, 10, 41, 67,
73, 0, 1, 2, 1, 2, 9, 67, 75, 0, 2, 3, 2, 3, 9, 67, 76, 0, 15, 14, 15,
14, 9, 67, 77, 0, 9, 10, 9, 10, 41, 67, 78, 0, 7, 8, 7, 8, 9, 67, 79,
0, 8, 9, 8, 9, 10, 67, 82, 0, 30, 29, 30, 29, 10, 67, 86, 0, 9, 10,
9, 10, 41, 67, 87, 0, 27, 26, 27, 26, 9, 67, 88, 0, 2, 3, 2, 3, 9, 67,
89, 0, 9, 10, 9, 10, 41, 67, 90, 0, 9, 10, 9, 10, 41, 68, 69, 0, 9,
10, 9, 10, 41, 68, 74, 0, 10, 0, 10, 0, 8, 68, 75, 0, 9, 10, 9, 10,
41, 68, 77, 0, 22, 21, 22, 21, 10, 68, 79, 0, 15, 14, 15, 14, 10, 68,
90, 0, 11, 11, 11, 11, 9, 69, 67, 0, 15, 14, 15, 14, 9, 69, 69, 0, 9,
10, 9, 10, 41, 69, 71, 0, 12, 12, 12, 12, 9, 69, 72, 0, 12, 12, 12,
12, 9, 69, 82, 0, 10, 0, 10, 0, 8, 69, 83, 0, 9, 10, 9, 10, 41, 69,
84, 0, 0, 1, 0, 1, 9, 70, 73, 0, 9, 10, 9, 10, 41, 70, 74, 0, 2, 3,
2, 3, 9, 70, 75, 0, 0, 1, 0, 1, 9, 70, 79, 0, 9, 10, 9, 10, 41, 70,
82, 0, 9, 10, 9, 10, 41, 71, 65, 0, 9, 10, 9, 10, 41, 71, 66, 0, 15,
14, 15, 14, 9, 71, 68, 0, 14, 13, 14, 13, 10, 71, 69, 0, 9, 10, 9, 10,
41, 71, 70, 0, 9, 10, 9, 10, 41, 71, 71, 0, 15, 14, 15, 14, 9, 71, 72,
0, 0, 1, 0, 1, 9, 71, 73, 0, 9, 10, 9, 10, 41, 71, 76, 0, 9, 10, 9,
10, 41, 71, 77, 0, 0, 1, 0, 1, 9, 71, 78, 0, 0, 1, 0, 1, 9, 71, 80,
0, 9, 10, 9, 10, 41, 71, 81, 0, 0, 1, 0, 1, 9, 71, 82, 0, 9, 10, 9,
10, 41, 71, 84, 0, 0, 1, 0, 1, 9, 71, 85, 0, 30, 29, 30, 29, 10, 71,
87, 0, 0, 1, 0, 1, 9, 71, 89, 0, 4, 5, 4, 5, 9, 72, 75, 0, 15, 14, 15,
14, 9, 72, 77, 0, 2, 3, 2, 3, 9, 72, 78, 0, 15, 14, 15, 14, 10, 72,
82, 0, 9, 10, 9, 10, 41, 72, 84, 0, 15, 14, 15, 14, 10, 72, 85, 0, 9,
10, 9, 10, 41, 73, 68, 0, 16, 15, 16, 15, 9, 73, 69, 0, 9, 10, 9, 10,
41, 73, 76, 0, 12, 12, 12, 12, 9, 73, 77, 0, 15, 14, 15, 14, 9, 73,
78, 0, 17, 16, 17, 16, 9, 73, 79, 0, 0, 1, 0, 1, 9, 73, 81, 0, 9, 10,
9, 10, 41, 73, 83, 0, 9, 10, 9, 10, 41, 73, 84, 0, 9, 10, 9, 10, 41,
74, 69, 0, 15, 14, 15, 14, 9, 74, 77, 0, 4, 5, 4, 5, 9, 74, 79, 0, 18,
17, 18, 17, 9, 74, 80, 0, 19, 18, 19, 18, 10, 75, 69, 0, 9, 10, 9, 10,
41, 75, 71, 0, 0, 1, 0, 1, 9, 75, 72, 0, 15, 14, 15, 14, 9, 75, 73,
0, 2, 3, 2, 3, 9, 75, 77, 0, 0, 1, 0, 1, 9, 75, 78, 0, 15, 14, 15, 14,
10, 75, 82, 0, 20, 19, 20, 19, 9, 75, 87, 0, 12, 12, 12, 12, 9, 75,
89, 0, 30, 29, 30, 29, 10, 75, 90, 0, 21, 20, 21, 20, 9, 76, 65, 0,
15, 14, 15, 14, 9, 76, 66, 0, 15, 14, 15, 14, 9, 76, 67, 0, 22, 21,
22, 21, 10, 76, 73, 0, 9, 10, 9, 10, 41, 76, 75, 0, 15, 14, 15, 14,
9, 76, 82, 0, 15, 14, 15, 14, 9, 76, 83, 0, 9, 10, 9, 10, 9, 76, 84,
0, 9, 10, 9, 10, 41, 76, 85, 0, 9, 10, 9, 10, 41, 76, 86, 0, 9, 10,
9, 10, 41, 76, 89, 0, 9, 10, 9, 10, 41, 77, 65, 0, 12, 12, 12, 12, 9,
77, 67, 0, 9, 10, 9, 10, 41, 77, 68, 0, 9, 10, 9, 10, 41, 77, 69, 0,
9, 10, 9, 10, 41, 77, 70, 0, 9, 10, 9, 10, 41, 77, 71, 0, 0, 1, 0, 1,
9, 77, 75, 0, 9, 10, 9, 10, 41, 77, 76, 0, 9, 10, 9, 10, 41, 77, 77,
0, 4, 5, 4, 5, 9, 77, 78, 0, 22, 21, 22, 21, 9, 77, 79, 0, 15, 14, 15,
14, 9, 77, 80, 0, 30, 29, 30, 29, 10, 77, 81, 0, 9, 10, 9, 10, 41, 77,
82, 0, 0, 1, 0, 1, 9, 77, 83, 0, 0, 1, 0, 1, 9, 77, 84, 0, 9, 10, 9,
10, 41, 77, 85, 0, 0, 1, 0, 1, 9, 77, 86, 0, 7, 8, 7, 8, 9, 77, 87,
0, 15, 14, 15, 14, 9, 77, 88, 0, 23, 22, 23, 22, 9, 77, 89, 0, 24, 23,
24, 23, 9, 77, 90, 0, 9, 10, 9, 10, 41, 78, 65, 0, 15, 14, 15, 14, 9,
78, 67, 0, 0, 1, 0, 1, 9, 78, 69, 0, 0, 1, 0, 1, 9, 78, 70, 0, 2, 3,
2, 3, 9, 78, 71, 0, 25, 24, 25, 24, 9, 78, 73, 0, 8, 9, 8, 9, 9, 78,
76, 0, 9, 10, 9, 10, 41, 78, 79, 0, 9, 10, 9, 10, 41, 78, 80, 0, 3,
4, 3, 4, 9, 78, 82, 0, 0, 1, 0, 1, 9, 78, 85, 0, 15, 14, 15, 14, 9,
78, 90, 0, 15, 14, 15, 14, 9, 79, 77, 0, 9, 10, 9, 10, 9, 80, 65, 0,
15, 14, 15, 14, 10, 80, 69, 0, 15, 14, 15, 14, 9, 80, 70, 0, 9, 10,
9, 10, 41, 80, 71, 0, 2, 3, 2, 3, 9, 80, 72, 0, 15, 14, 15, 14, 9, 80,
75, 0, 4, 5, 4, 5, 9, 80, 76, 0, 9, 10, 9, 10, 41, 80, 77, 0, 9, 10,
9, 10, 41, 80, 78, 0, 0, 1, 0, 1, 9, 80, 82, 0, 30, 29, 30, 29, 10,
80, 83, 0, 10, 0, 10, 0, 8, 80, 84, 0, 9, 10, 9, 10, 41, 80, 87, 0,
8, 9, 8, 9, 9, 80, 89, 0, 15, 14, 15, 14, 9, 81, 65, 0, 15, 14, 15,
14, 9, 82, 69, 0, 9, 10, 9, 10, 41, 82, 79, 0, 9, 10, 9, 10, 41, 82,
83, 0, 9, 10, 9, 10, 41, 82, 85, 0, 26, 25, 26, 25, 9, 82, 87, 0, 0,
1, 0, 1, 9, 83, 65, 0, 27, 26, 27, 26, 9, 83, 66, 0, 10, 0, 10, 0, 8,
83, 67, 0, 15, 14, 15, 14, 9, 83, 69, 0, 9, 10, 9, 10, 41, 83, 71, 0,
15, 14, 15, 14, 9, 83, 73, 0, 9, 10, 9, 10, 41, 83, 75, 0, 9, 10, 9,
10, 41, 83, 76, 0, 0, 1, 0, 1, 9, 83, 77, 0, 9, 10, 9, 10, 41, 83, 78,
0, 0, 1, 0, 1, 9, 83, 79, 0, 10, 0, 10, 0, 8, 83, 82, 0, 9, 10, 9, 10,
41, 83, 84, 0, 0, 1, 0, 1, 9, 83, 86, 0, 8, 9, 8, 9, 9, 83, 88, 0, 8,
9, 8, 9, 9, 83, 90, 0, 9, 10, 9, 10, 41, 84, 67, 0, 15, 14, 15, 14,
10, 84, 68, 0, 0, 1, 0, 1, 9, 84, 70, 0, 9, 10, 9, 10, 41, 84, 71, 0,
9, 10, 9, 10, 41, 84, 72, 0, 15, 14, 15, 14, 9, 84, 74, 0, 0, 1, 0,
1, 9, 84, 75, 0, 15, 14, 15, 14, 9, 84, 77, 0, 0, 1, 0, 1, 9, 84, 78,
0, 28, 27, 28, 27, 9, 84, 79, 0, 2, 3, 2, 3, 9, 84, 82, 0, 9, 10, 9,
10, 41, 84, 84, 0, 15, 14, 15, 14, 9, 84, 86, 0, 10, 0, 10, 0, 8, 84,
87, 0, 30, 29, 30, 29, 10, 84, 90, 0, 9, 10, 9, 10, 41, 85, 65, 0, 29,
28, 29, 28, 9, 85, 71, 0, 9, 10, 9, 10, 41, 85, 77, 0, 30, 29, 30, 29,
10, 85, 83, 0, 30, 29, 30, 29, 10, 85, 89, 0, 7, 8, 7, 8, 9, 85, 90,
0, 12, 12, 12, 12, 9, 86, 65, 0, 9, 10, 9, 10, 41, 86, 67, 0, 15, 14,
15, 14, 10, 86, 69, 0, 7, 8, 7, 8, 9, 86, 71, 0, 15, 14, 15, 14, 10,
86, 73, 0, 30, 29, 30, 29, 10, 86, 78, 0, 15, 14, 15, 14, 9, 86, 85,
0, 15, 14, 15, 14, 9, 87, 70, 0, 9, 10, 9, 10, 41, 87, 83, 0, 31, 30,
31, 30, 9, 88, 75, 0, 9, 10, 9, 10, 41, 88, 84, 0, 32, 0, 32, 0, 32,
88, 88, 0, 33, 31, 33, 31, 42, 88, 90, 0, 34, 32, 34, 32, 42, 89, 69,
0, 15, 14, 15, 14, 9, 89, 84, 0, 9, 10, 9, 10, 41, 90, 65, 0, 15, 14,
15, 14, 9, 90, 77, 0, 15, 14, 15, 14, 9, 90, 87, 0, 0, 1, 0, 1, 9, 90,
88, 0, 35, 33, 35, 33, 9, 90, 90, 0, 36, 34, 36, 34, 41, 38, 62, 8,
102, 142, 8, 151, 175, 8, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 108,
1, 0, 0, 1, 108, 1, 0, 0, 1, 80, 1, 0, 0, 1, 108, 1, 0, 0, 1, 108, 0,
0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0,
1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 0, 0, 1, 108, 1, 0, 0, 1, 68, 1, 0,
0, 1, 96, 1, 0, 0, 1, 108, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0,
1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 108, 1, 0, 0, 1,
96, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 0, 1, 68, 1, 0, 2, 1, 40,
1, 0, 0, 1, 68, 1, 0, 0, 1, 108, 0, 0, 0, 1, 68, 1, 0, 2, 1, 40, 0,
0, 2, 1, 40, 0, 0, 2, 1, 40, 1, 0, 0, 1, 108, 1, 0, 0, 1, 68, 1, 0,
1, 2, 2, 6, 12, 2, 6, 8, 2, 3, 16, 2, 6, 10, 3, 6, 10, 13, 1, 6, 4,
6, 7, 12, 13, 2, 6, 9, 3, 11, 1, 1, 11, 1, 13, 12, 13, 36, 48, 36, 64,
36, 144, 52, 64, 100, 116, 100, 128, 100, 132, 100, 140, 100, 144, 132,
140, 144, 144, 149, 157, 149, 161, 149, 165, 165, 165, 50, 48, 50, 48,
45, 48, 56, 45, 48, 54, 32, 49, 53, 58, 48, 56, 58, 49, 55, 0, 42, 42,
42, 138, 42, 171, 58, 58, 106, 106, 122, 171, 155, 155, 0, 1, 0, 0,
0, 35, 11, 0, 0, 1, 0, 0, 0, 38, 11, 0, 0, 2, 0, 255, 1, 20, 1, 0, 1,
68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 36, 1,
0, 1, 108, 1, 1, 2, 0, 255, 1, 30, 1, 0, 1, 108, 1, 1, 2, 0, 255, 1,
23, 1, 0, 1, 80, 1, 1, 2, 0, 255, 1, 27, 1, 0, 1, 108, 1, 1, 1, 0, 255,
1, 30, 0, 0, 1, 108, 0, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0,
255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1,
2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68,
1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 0, 0, 255, 0, 0, 0, 2, 0,
255, 1, 30, 1, 0, 1, 108, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1,
2, 0, 255, 1, 27, 1, 0, 1, 96, 1, 1, 2, 0, 255, 1, 30, 1, 0, 1, 108,
1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1,
68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1,
0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 30,
1, 0, 1, 108, 1, 1, 2, 0, 255, 1, 27, 1, 0, 1, 96, 1, 1, 2, 0, 255,
1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0,
255, 1, 20, 1, 0, 1, 68, 1, 1, 2, 0, 255, 1, 10, 1, 2, 1, 40, 1, 1,
2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 1, 0, 255, 1, 30, 0, 0, 1, 108,
0, 1, 2, 0, 255, 1, 20, 1, 0, 1, 68, 1, 1, 1, 0, 255, 1, 10, 0, 2, 1,
40, 0, 1, 1, 0, 255, 1, 10, 0, 2, 1, 40, 0, 1, 2, 0, 0, 1, 10, 1, 2,
1, 40, 1, 1, 2, 0, 255, 1, 30, 1, 0, 1, 108, 1, 1, 2, 0, 255, 1, 20,
1, 0, 1, 68, 1, 1, 0, 0, 1, 0, 0, 0, 252, 17, 0, 0, 1, 0, 0, 0, 255,
17, 0, 0, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 8, 4, 5, 6, 7,
8, 9, 10, 11, 2, 2, 2, 1, 1, 1, 1, 0, 6, 2, 5, 1, 1, 1, 3, 2, 4, 1,
1, 1, 2, 4, 4, 2, 2, 1, 1, 1, 5, 2, 2, 1, 1, 1, 1, 4, 2, 2, 4, 2, 2,
18, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 12, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 3, 0, 0, 0, 19, 8, 0, 0, 1, 13, 1, 0, 2, 0, 0, 0, 56,
9, 0, 0, 42, 58, 16, 106, 138, 16, 155, 171, 16, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 2, 0, 0, 0, 220, 10, 0, 0, 241, 0, 0, 0, 139, 0, 0, 0, 36,
64, 4, 100, 144, 4, 149, 165, 4, 0, 0, 0, 112, 0, 0, 0, 188, 14, 0,
0, 241, 8, 0, 0, 210, 8, 0, 0, 124, 14, 0, 0, 236, 10, 0, 0, 72, 9,
0, 0, 88, 12, 0, 0, 28, 8, 0, 0, 212, 14, 0, 0, 132, 11, 0, 0, 116,
11, 0, 0, 220, 17, 0, 0, 255, 80, 129, 5, 212, 17, 0, 0, 0, 0, 0, 0,
228, 17, 0, 0, 41, 9, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 41, 11, 0, 0,
0, 0, 0, 0, 60, 11, 0, 0, 0, 0, 0, 0, 21, 9, 0, 0, 244, 17, 0, 0, 84,
11, 0, 0, 204, 14, 0, 0, 180, 14, 0, 0, 116, 14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 100, 14, 0, 0, 196, 14, 0, 0, 108, 14, 0, 0,
172, 14, 0, 0, 4, 18, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 124, 11, 0, 0,
96, 11, 0, 0, 0, 0, 255, 0, 0, 0, 3, 1, 4, 1, 23, 3, 0, 1, 80, 3, 1,
3, 0, 255, 1, 20, 3, 0, 1, 68, 3, 1, 7, 1, 7, 2, 23, 3, 30, 16, 0, 2,
80, 3, 1, 108, 16, 1, 5, 2, 6, 2, 23, 3, 30, 15, 0, 2, 80, 3, 1, 108,
15, 1, 10, 0, 255, 1, 28, 16, 0, 1, 100, 16, 1, 10, 1, 6, 1, 30, 16,
0, 1, 108, 16, 1, 7, 2, 7, 2, 23, 3, 30, 16, 0, 2, 80, 3, 1, 108, 16,
1, 7, 1, 6, 2, 23, 3, 20, 16, 0, 2, 80, 3, 1, 68, 16, 1, 7, 1, 5, 2,
17, 3, 20, 16, 0, 2, 56, 3, 1, 68, 16, 1, 7, 1, 4, 2, 23, 3, 14, 16,
4, 1, 80, 3, 1, 2, 1, 56, 16, 1, 3, 1, 8, 1, 23, 3, 0, 1, 80, 3, 1,
3, 1, 6, 1, 20, 3, 0, 1, 68, 3, 1, 3, 2, 4, 1, 17, 3, 0, 1, 56, 3, 1,
7, 1, 5, 2, 23, 3, 20, 16, 0, 2, 80, 3, 1, 68, 16, 1, 5, 1, 6, 2, 23,
3, 23, 15, 0, 2, 80, 3, 1, 80, 15, 1, 7, 1, 4, 2, 24, 3, 30, 16, 0,
2, 84, 3, 1, 108, 16, 1, 7, 0, 255, 2, 23, 3, 23, 16, 0, 2, 80, 3, 1,
80, 16, 1, 3, 2, 4, 1, 20, 3, 0, 1, 68, 3, 1, 7, 1, 4, 2, 14, 3, 20,
16, 0, 2, 44, 3, 1, 68, 16, 1, 3, 1, 1, 1, 20, 3, 0, 1, 68, 3, 1, 5,
1, 5, 2, 23, 3, 30, 15, 0, 2, 80, 3, 1, 108, 15, 1, 7, 1, 7, 2, 17,
3, 30, 16, 0, 2, 56, 3, 1, 108, 16, 1, 7, 1, 2, 2, 30, 3, 30, 16, 0,
2, 108, 3, 1, 108, 16, 1, 7, 1, 6, 2, 20, 3, 14, 16, 4, 1, 68, 3, 1,
2, 1, 56, 16, 1, 7, 1, 1, 2, 23, 3, 23, 16, 0, 2, 80, 3, 1, 80, 16,
1, 6, 1, 5, 3, 23, 3, 30, 15, 14, 17, 4, 2, 80, 3, 1, 108, 15, 1, 2,
1, 56, 17, 1, 3, 1, 6, 1, 23, 3, 0, 1, 80, 3, 1, 7, 1, 4, 2, 20, 3,
20, 16, 0, 2, 68, 3, 1, 68, 16, 1, 7, 2, 5, 2, 24, 3, 30, 16, 0, 2,
84, 3, 1, 108, 16, 1, 4, 1, 5, 2, 20, 3, 20, 14, 0, 2, 68, 3, 1, 68,
14, 1, 7, 0, 3, 2, 11, 3, 14, 16, 4, 1, 44, 3, 1, 2, 1, 56, 16, 1, 7,
0, 3, 2, 11, 3, 14, 16, 4, 1, 44, 3, 1, 2, 1, 56, 16, 1, 9, 2, 255,
2, 24, 5, 30, 16, 0, 2, 84, 5, 1, 108, 16, 1, 8, 1, 255, 3, 23, 4, 30,
11, 14, 16, 4, 2, 80, 4, 1, 108, 11, 1, 2, 1, 56, 16, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 1, 1, 3, 2, 3, 14, 2, 3, 15, 3, 3, 15, 17, 2, 3, 16, 3, 4,
11, 16, 2, 5, 16, 1, 16, 0, 0, 0, 1, 0, 0, 0, 0, 11, 0, 0, 4, 0, 0,
0, 7, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
0, 0, 140, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 104, 11, 0,
0, 0, 0, 4, 1, 68, 3, 0, 5, 1, 80, 1, 0, 8, 1, 80, 0, 0, 4, 1, 68, 3,
0, 5, 1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 2, 80, 3, 0, 108, 16, 0, 5, 2,
80, 1, 0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 2, 80, 3, 0, 108,
15, 0, 5, 2, 80, 1, 0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 1, 100,
16, 0, 5, 1, 100, 7, 0, 8, 1, 100, 6, 0, 4, 1, 108, 16, 0, 5, 1, 108,
7, 0, 8, 1, 108, 6, 0, 4, 2, 80, 3, 0, 108, 16, 0, 5, 2, 80, 1, 0, 108,
7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 2, 80, 3, 0, 68, 16, 0, 5, 2, 80,
1, 0, 68, 7, 0, 8, 2, 80, 0, 0, 68, 6, 0, 4, 2, 56, 3, 0, 68, 16, 0,
5, 2, 56, 1, 0, 68, 7, 0, 8, 2, 56, 0, 0, 68, 6, 0, 4, 1, 80, 3, 0,
6, 1, 56, 16, 0, 5, 1, 80, 1, 0, 7, 1, 56, 7, 0, 12, 1, 80, 0, 0, 10,
1, 56, 6, 0, 4, 1, 80, 3, 0, 5, 1, 80, 1, 0, 8, 1, 80, 0, 0, 4, 1, 68,
3, 0, 5, 1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 1, 56, 3, 0, 5, 1, 56, 1, 0,
8, 1, 56, 0, 0, 4, 2, 80, 3, 0, 68, 16, 0, 5, 2, 80, 1, 0, 68, 7, 0,
8, 2, 80, 0, 0, 68, 6, 0, 4, 2, 80, 3, 0, 80, 15, 0, 5, 2, 80, 1, 0,
80, 7, 0, 8, 2, 80, 0, 0, 80, 6, 0, 4, 2, 84, 3, 0, 108, 16, 0, 5, 2,
84, 1, 0, 108, 7, 0, 8, 2, 84, 0, 0, 108, 6, 0, 4, 2, 80, 3, 0, 80,
16, 0, 5, 2, 80, 1, 0, 80, 7, 0, 8, 2, 80, 0, 0, 80, 6, 0, 4, 1, 68,
3, 0, 5, 1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 2, 44, 3, 0, 68, 16, 0, 5,
2, 44, 1, 0, 68, 7, 0, 8, 2, 44, 0, 0, 68, 6, 0, 4, 1, 68, 3, 0, 5,
1, 68, 1, 0, 8, 1, 68, 0, 0, 4, 2, 80, 3, 0, 108, 15, 0, 5, 2, 80, 1,
0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6, 0, 4, 2, 56, 3, 0, 108, 16, 0,
5, 2, 56, 1, 0, 108, 7, 0, 8, 2, 56, 0, 0, 108, 6, 0, 4, 2, 108, 3,
0, 108, 16, 0, 5, 2, 108, 1, 0, 108, 7, 0, 8, 2, 108, 0, 0, 108, 6,
0, 4, 1, 68, 3, 0, 6, 1, 56, 16, 0, 5, 1, 68, 1, 0, 7, 1, 56, 7, 0,
12, 1, 68, 0, 0, 10, 1, 56, 6, 0, 4, 2, 80, 3, 0, 80, 16, 0, 5, 2, 80,
1, 0, 80, 7, 0, 8, 2, 80, 0, 0, 80, 6, 0, 4, 2, 80, 3, 0, 108, 15, 0,
6, 1, 56, 17, 0, 5, 2, 80, 1, 0, 108, 7, 0, 8, 2, 80, 0, 0, 108, 6,
0, 4, 1, 80, 3, 0, 5, 1, 80, 1, 0, 8, 1, 80, 0, 0, 4, 2, 68, 3, 0, 68,
16, 0, 5, 2, 68, 1, 0, 68, 7, 0, 8, 2, 68, 0, 0, 68, 6, 0, 4, 2, 84,
3, 0, 108, 16, 0, 5, 2, 84, 1, 0, 108, 7, 0, 8, 2, 84, 0, 0, 108, 6,
0, 4, 2, 68, 3, 0, 68, 14, 0, 5, 2, 68, 1, 0, 68, 6, 0, 8, 1, 68, 0,
0, 4, 1, 44, 3, 0, 6, 1, 56, 16, 0, 5, 1, 44, 1, 0, 7, 1, 56, 7, 0,
12, 1, 44, 0, 0, 10, 1, 56, 6, 0, 4, 1, 44, 3, 0, 6, 1, 56, 16, 0, 5,
1, 44, 1, 0, 7, 1, 56, 7, 0, 12, 1, 44, 0, 0, 10, 1, 56, 6, 0, 4, 2,
84, 5, 0, 108, 16, 0, 5, 2, 84, 3, 0, 108, 7, 0, 8, 2, 84, 1, 0, 108,
6, 0, 4, 2, 80, 4, 0, 108, 11, 0, 6, 1, 56, 16, 0, 5, 2, 80, 2, 0, 108,
5, 0, 7, 1, 56, 7, 0, 12, 1, 80, 1, 0, 10, 1, 56, 6, 0, 0, 0, 2, 0,
0, 0, 156, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 38, 46, 38, 62,
38, 142, 38, 175, 102, 142, 151, 151, 151, 159, 1, 0, 0, 0, 238, 8,
0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 67, 0, 0
};
const resource_hnd_t wifi_firmware_clm_blob = { RESOURCE_IN_MEMORY, 4684, {.mem = { (const char *) wifi_firmware_clm_blob_data }}};

View File

@ -0,0 +1,31 @@
/*
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
* SPDX-License-Identifier: LicenseRef-PBL
*
* This file and the related binary are licensed under the
* Permissive Binary License, Version 1.0 (the "License");
* you may not use these files except in compliance with the License.
*
* You may obtain a copy of the License here:
* LICENSE-permissive-binary-license-1.0.txt and at
* https://www.mbed.com/licenses/PBL-1.0
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* Automatically generated file - this comment ensures resources.h file creation */
/* Auto-generated header file. Do not edit */
#ifndef INCLUDED_RESOURCES_H_
#define INCLUDED_RESOURCES_H_
#include "wiced_resource.h"
extern const resource_hnd_t wifi_firmware_image;
extern const unsigned char wifi_firmware_image_data[556559];
extern const resource_hnd_t wifi_firmware_clm_blob;
extern const unsigned char wifi_firmware_clm_blob_data[4684];
extern const resource_hnd_t wifi_mfg_firmware_image;
extern const unsigned char wifi_mfg_firmware_image_data[561035];
extern const resource_hnd_t wifi_mfg_firmware_clm_blob;
extern const unsigned char wifi_mfg_firmware_clm_blob_data[4684];
#endif /* ifndef INCLUDED_RESOURCES_H_ */

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: LicenseRef-PBL
*
* This file and the related binary are licensed under the
* Permissive Binary License, Version 1.0 (the "License");
* Permissive Binary License, Version 1.0 (the "License")
* you may not use these files except in compliance with the License.
*
* You may obtain a copy of the License here:
@ -27,11 +27,11 @@ extern "C" {
/**
* Character array of NVRAM image
* Generated from cyw9cy8cmod-064b0s2-4343w_P100_724315.txt
* Generated from cyw9cy8cmod-064b0s2-4343w_P100.txt
*/
static const char wifi_nvram_image[] =
"NVRAMRev=$Rev: 724315 $" "\x00"
"NVRAMRev=$Rev$" "\x00"
"manfid=0x2d0" "\x00"
"prodid=0x087d" "\x00"
"vendid=0x14e4" "\x00"
@ -55,7 +55,7 @@ static const char wifi_nvram_image[] =
"pa0itssit=0x20" "\x00"
"extpagain2g=0" "\x00"
"" "\x00"
"pa2ga0=-168,6393,-757" "\x00"
"pa2ga0=-168,6777,-788" "\x00"
"AvVmid_c0=0x0,0xc8" "\x00"
"AvVmidIQcal=0x2,0xa8" "\x00"
"cckpwroffset0=5" "\x00"

View File

@ -0,0 +1,96 @@
/*
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
* SPDX-License-Identifier: LicenseRef-PBL
*
* This file and the related binary are licensed under the
* Permissive Binary License, Version 1.0 (the "License")
* you may not use these files except in compliance with the License.
*
* You may obtain a copy of the License here:
* LICENSE-permissive-binary-license-1.0.txt and at
* https://www.mbed.com/licenses/PBL-1.0
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef INCLUDED_NVRAM_IMAGE_H_
#define INCLUDED_NVRAM_IMAGE_H_
#include <string.h>
#include <stdint.h>
#include "generated_mac_address.txt"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Character array of NVRAM image
* Generated from cyw9cy8cmod-064s0s2-4343w_P100.txt
*/
static const char wifi_nvram_image[] =
"NVRAMRev=$Rev$" "\x00"
"manfid=0x2d0" "\x00"
"prodid=0x088d" "\x00"
"vendid=0x14e4" "\x00"
"devid=0x43e2" "\x00"
"boardtype=0x088d" "\x00"
"boardrev=0x1100" "\x00"
"boardnum=22" "\x00"
NVRAM_GENERATED_MAC_ADDRESS "\x00"
"sromrev=11" "\x00"
"boardflags=0x00404201" "\x00"
"boardflags3=0x08000000" "\x00"
"xtalfreq=37400" "\x00"
"nocrc=1" "\x00"
"ag0=255" "\x00"
"aa2g=1" "\x00"
"ccode=ALL" "\x00"
"" "\x00"
"swdiv_en=1" "\x00"
"swdiv_gpio=2" "\x00"
"" "\x00"
"pa0itssit=0x20" "\x00"
"extpagain2g=0" "\x00"
"" "\x00"
"pa2ga0=-168,6777,-788" "\x00"
"AvVmid_c0=0x0,0xc8" "\x00"
"AvVmidIQcal=0x2,0xa8" "\x00"
"cckpwroffset0=5" "\x00"
"" "\x00"
"maxp2ga0=84" "\x00"
"txpwrbckof=6" "\x00"
"cckbw202gpo=0" "\x00"
"legofdmbw202gpo=0x66111111" "\x00"
"mcsbw202gpo=0x77711111" "\x00"
"propbw202gpo=0xdd" "\x00"
"" "\x00"
"ofdmdigfilttype=18" "\x00"
"ofdmdigfilttypebe=18" "\x00"
"papdmode=1" "\x00"
"papdvalidtest=1" "\x00"
"pacalidx2g=32" "\x00"
"papdepsoffset=-36" "\x00"
"papdendidx=61" "\x00"
"" "\x00"
"" "\x00"
"wl0id=0x431b" "\x00"
"" "\x00"
"deadman_to=0xffffffff" "\x00"
"muxenab=0x11" "\x00"
"" "\x00"
"spurconfig=0x3 " "\x00"
"" "\x00"
"rssicorrnorm=1" "\x00"
"\x00\x00";
#ifdef __cplusplus
} /*extern "C" */
#endif
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
#error Wi-Fi NVRAM image included twice
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */

View File

@ -0,0 +1,138 @@
/*
* Copyright (c) 2019, Cypress Semiconductor Corporation, All Rights Reserved
* SPDX-License-Identifier: LicenseRef-PBL
*
* This file and the related binary are licensed under the
* Permissive Binary License, Version 1.0 (the "License")
* you may not use these files except in compliance with the License.
*
* You may obtain a copy of the License here:
* LICENSE-permissive-binary-license-1.0.txt and at
* https://www.mbed.com/licenses/PBL-1.0
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef INCLUDED_NVRAM_IMAGE_H_
#define INCLUDED_NVRAM_IMAGE_H_
#include <string.h>
#include <stdint.h>
#include "generated_mac_address.txt"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Character array of NVRAM image
* Generated from brcmfmac4373-sdio.txt
*/
static const char wifi_nvram_image[] =
"NVRAMRev=$Rev: 722807 $" "\x00"
"sromrev=11" "\x00"
"vendid=0x14e4" "\x00"
"devid=0x4418" "\x00"
"manfid=0x2d0" "\x00"
"prodid=0x070f" "\x00"
NVRAM_GENERATED_MAC_ADDRESS "\x00"
"nocrc=1" "\x00"
"boardtype=0x83d" "\x00"
"boardrev=0x1353" "\x00"
"xtalfreq=37400" "\x00"
"boardflags=0x00000001" "\x00"
"boardflags2=0x00000000" "\x00"
"boardflags3=0x48202100" "\x00"
"ext_lpo_margin_frac=0" "\x00"
"tx_duty_cycle_thermal=40" "\x00"
"temp_threshold=105" "\x00"
"temp_delta=30" "\x00"
"phycal_tempdelta=15" "\x00"
"rxgains2gelnagaina0=0" "\x00"
"rxgains2gtrisoa0=0" "\x00"
"rxgains2gtrelnabypa0=0" "\x00"
"rxgains5gelnagaina0=0" "\x00"
"rxgains5gtrisoa0=0" "\x00"
"rxgains5gtrelnabypa0=0" "\x00"
"pdgain5g=3" "\x00"
"pdgain2g=3" "\x00"
"antswitch=0x6" "\x00"
"rxchain=1" "\x00"
"txchain=1" "\x00"
"aa2g=3" "\x00"
"aa5g=3" "\x00"
"tssipos5g=1" "\x00"
"tssipos2g=1" "\x00"
"femctrl=0" "\x00"
"pa2ga0=-176,5552,-658" "\x00"
"pa5ga0=-153,5528,-664,-153,5528,-664,-155,5563,-666,-167,5492,-668" "\x00"
"pdoffsetcckma0=0xf" "\x00"
"pdoffset2g40ma0=0xc" "\x00"
"pdoffset40ma0=0xffff" "\x00"
"pdoffset80ma0=0xeeee" "\x00"
"extpagain5g=2" "\x00"
"extpagain2g=2" "\x00"
"AvVmid_c0=1,130,0,160,0,160,0,160,0,160" "\x00"
"maxp2ga0=76" "\x00"
"maxp5ga0=70,70,70,70" "\x00"
"cckbw202gpo=0x0000" "\x00"
"dot11agofdmhrbw202gpo=0x2222" "\x00"
"ofdmlrbw202gpo=0x3222" "\x00"
"mcsbw202gpo=0x88764422" "\x00"
"mcsbw402gpo=0x88764422" "\x00"
"mcsbw205glpo=0x87664422" "\x00"
"mcsbw205gmpo=0x87664422" "\x00"
"mcsbw205ghpo=0x87664422" "\x00"
"mcsbw405glpo=0x98664422" "\x00"
"mcsbw405gmpo=0x98664422" "\x00"
"mcsbw405ghpo=0x98664422" "\x00"
"mcsbw805glpo=0xEA886622" "\x00"
"mcsbw805gmpo=0xEA886622" "\x00"
"mcsbw805ghpo=0xEA886622" "\x00"
"swctrlmap_2g=0x00001131,0x00001131,0x00001131,0x313131,0x1ff" "\x00"
"swctrlmap_5g=0x00201131,0x40405171,0x40405171,0x313131,0x1ff" "\x00"
"swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x000" "\x00"
"swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x000" "\x00"
"fem_table_init_val=0x1131,0x1131" "\x00"
"nb_papdcalidx=0x280f" "\x00"
"nb_txattn=0x0303" "\x00"
"nb_rxattn=0x0303" "\x00"
"nb_bbmult=0x3948" "\x00"
"nb_eps_offset=0x01e601ea" "\x00"
"rssi_delta_2g_c0=-2,-2,-2,-2" "\x00"
"rssi_delta_5gl_c0=-2,-2,-3,-3,-1,-1" "\x00"
"rssi_delta_5gml_c0=-2,-2,-3,-3,-1,-1" "\x00"
"rssi_delta_5gmu_c0=0,0,-1,-1,0,0" "\x00"
"rssi_delta_5gh_c0=-1,-1,-2,-2,0,0" "\x00"
"ATErcalmode=0" "\x00"
"swdiv_en=1" "\x00"
"swdiv_gpio=0" "\x00"
"swdiv_swctrl_en=2" "\x00"
"swdiv_swctrl_ant0=0" "\x00"
"swdiv_swctrl_ant1=1" "\x00"
"swdiv_antmap2g_main=1" "\x00"
"swdiv_antmap5g_main=1" "\x00"
"swdiv_snrlim=290" "\x00"
"swdiv_thresh=2000" "\x00"
"swdiv_snrthresh=24" "\x00"
"swdiv_timeon=10" "\x00"
"swdiv_timeoff=1" "\x00"
"swdiv_snr2g20=232" "\x00"
"swdiv_snr2g40=257" "\x00"
"swdiv_snr5g20=296" "\x00"
"swdiv_snr5g40=312" "\x00"
"swdiv_snr5g80=296" "\x00"
"swdiv_ap_dead_check=1" "\x00"
"swdiv_ap_div=1" "\x00"
"\x00\x00";
#ifdef __cplusplus
} /*extern "C" */
#endif
#else /* ifndef INCLUDED_NVRAM_IMAGE_H_ */
#error Wi-Fi NVRAM image included twice
#endif /* ifndef INCLUDED_NVRAM_IMAGE_H_ */

View File

@ -208,7 +208,7 @@ void whd_bus_sdio_detach(whd_driver_t whd_driver)
whd_result_t whd_bus_sdio_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus)
{
return whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, intstatus);
return whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS(whd_driver), (uint8_t)4, intstatus);
}
whd_result_t whd_bus_sdio_wait_for_wlan_event(whd_driver_t whd_driver, cy_semaphore_t *transceive_semaphore)
@ -507,7 +507,7 @@ whd_bool_t whd_bus_sdio_wake_interrupt_present(whd_driver_t whd_driver)
if (WHD_SUCCESS != whd_ensure_wlan_bus_is_up(whd_driver) )
return WHD_FALSE;
if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4,
if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS(whd_driver), (uint8_t)4,
(uint8_t *)&int_status) != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) );
@ -516,13 +516,13 @@ whd_bool_t whd_bus_sdio_wake_interrupt_present(whd_driver_t whd_driver)
if ( (I_HMB_HOST_INT & int_status) != 0 )
{
/* Clear any interrupts */
if (whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4,
if (whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS(whd_driver), (uint8_t)4,
I_HMB_HOST_INT) != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("%s: Error clearing interrupts\n", __FUNCTION__) );
goto exit;
}
if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4,
if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS(whd_driver), (uint8_t)4,
(uint8_t *)&int_status) != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) );
@ -544,7 +544,7 @@ uint32_t whd_bus_sdio_packet_available_to_read(whd_driver_t whd_driver)
CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) );
/* Read the IntStatus */
if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4,
if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS(whd_driver), (uint8_t)4,
(uint8_t *)&int_status) != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) );
@ -555,7 +555,7 @@ uint32_t whd_bus_sdio_packet_available_to_read(whd_driver_t whd_driver)
if ( (HOSTINTMASK & int_status) != 0 )
{
/* Clear any interrupts */
if (whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4,
if (whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS(whd_driver), (uint8_t)4,
int_status & HOSTINTMASK) != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("%s: Error clearing interrupts\n", __FUNCTION__) );
@ -903,7 +903,6 @@ static whd_result_t whd_bus_sdio_download_firmware(whd_driver_t whd_driver)
uint32_t ram_start_address;
ram_start_address = GET_C_VAR(whd_driver, ATCM_RAM_BASE_ADDRESS);
if (ram_start_address != 0)
{
CHECK_RETURN(whd_reset_core(whd_driver, WLAN_ARM_CORE, SICF_CPUHALT, SICF_CPUHALT) );
@ -988,10 +987,10 @@ static whd_result_t whd_bus_sdio_download_firmware(whd_driver_t whd_driver)
}
/* Set up the interrupt mask and enable interrupts */
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SDIO_INT_HOST_MASK, (uint8_t)4, HOSTINTMASK) );
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SDIO_INT_HOST_MASK(whd_driver), (uint8_t)4, HOSTINTMASK) );
/* Enable F2 interrupts. This wasn't required for 4319 but is for the 43362 */
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SDIO_FUNCTION_INT_MASK, (uint8_t)1,
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SDIO_FUNCTION_INT_MASK(whd_driver), (uint8_t)1,
SDIO_FUNC_MASK_F1 | SDIO_FUNC_MASK_F2) );
/* Lower F2 Watermark to avoid DMA Hang in F2 when SD Clock is stopped. */
@ -1036,7 +1035,8 @@ static whd_result_t whd_bus_sdio_abort_read(whd_driver_t whd_driver, whd_bool_t
/* If we want to retry message, send NAK */
if (retry == WHD_TRUE)
{
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_TO_SB_MAIL_BOX, (uint8_t)1, SMB_NAK) );
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_TO_SB_MAIL_BOX(whd_driver), (uint8_t)1,
SMB_NAK) );
}
return WHD_SUCCESS;
@ -1052,7 +1052,7 @@ whd_result_t whd_bus_sdio_read_register_value(whd_driver_t whd_driver, whd_bus_f
whd_result_t whd_bus_sdio_poke_wlan(whd_driver_t whd_driver)
{
/*TODO: change 1<<3 to a register hash define */
return whd_bus_write_backplane_value(whd_driver, SDIO_TO_SB_MAILBOX, (uint8_t)4, (uint32_t)(1 << 3) );
return whd_bus_write_backplane_value(whd_driver, SDIO_TO_SB_MAILBOX(whd_driver), (uint8_t)4, (uint32_t)(1 << 3) );
}
whd_result_t whd_bus_sdio_wakeup(whd_driver_t whd_driver)

View File

@ -932,7 +932,8 @@ static whd_result_t whd_spi_download_firmware(whd_driver_t whd_driver)
}
/* Set up the interrupt mask and enable interrupts */
CHECK_RETURN(whd_bus_spi_write_backplane_value(whd_driver, SDIO_INT_HOST_MASK, (uint8_t)4, I_HMB_SW_MASK) );
CHECK_RETURN(whd_bus_spi_write_backplane_value(whd_driver, SDIO_INT_HOST_MASK(
whd_driver), (uint8_t)4, I_HMB_SW_MASK) );
/* Lower F2 Watermark to avoid DMA Hang in F2 when SD Clock is stopped. */
return whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_FUNCTION2_WATERMARK, (uint8_t)1,

View File

@ -72,12 +72,7 @@ enum ds1_ctrl_status
#define USB20H0_BASE_ADDRESS 0x18006000 /* USB20H0 core register region */
#define USB20D_BASE_ADDRESS 0x18007000 /* USB20D core register region */
#define SDIOH_BASE_ADDRESS 0x18008000 /* SDIOH Device core register region */
#define WLAN_ARMCM3_BASE_ADDRESS 0x18003000 /* ARMCM3 core register region */
#define PMU_BASE_ADDRESS 0x18012000 /* PMU core register region */
#define DOT11MAC_BASE_ADDRESS 0x18001000
#define SDIO_BASE_ADDRESS 0x18002000
#define SOCSRAM_BASE_ADDRESS 0x18004000
#define WLAN_ARMCR4_BASE_ADDRESS 0x18003000 /* ARMCR4 core register region */
#define BACKPLANE_ADDRESS_MASK 0x7FFF
#define BACKPLANE_WINDOW_SIZE (BACKPLANE_ADDRESS_MASK + 1)
@ -98,11 +93,11 @@ enum ds1_ctrl_status
#define CHIPCOMMON_SR_CONTROL1 ( (uint32_t)(CHIPCOMMON_BASE_ADDRESS + 0x508) )
/* SOCSRAM core registers */
#define SOCSRAM_BANKX_INDEX ( (uint32_t)(SOCSRAM_BASE_ADDRESS + 0x10) )
#define SOCSRAM_BANKX_PDA ( (uint32_t)(SOCSRAM_BASE_ADDRESS + 0x44) )
#define SOCSRAM_BANKX_INDEX(wd) ( (uint32_t)(GET_C_VAR(wd, SOCSRAM_BASE_ADDRESS) + 0x10) )
#define SOCSRAM_BANKX_PDA(wd) ( (uint32_t)(GET_C_VAR(wd, SOCSRAM_BASE_ADDRESS) + 0x44) )
/* PMU core registers */
#define RETENTION_CTL ( (uint32_t)(PMU_BASE_ADDRESS + 0x670) )
#define RETENTION_CTL(wd) ( (uint32_t)(GET_C_VAR(wd, PMU_BASE_ADDRESS) + 0x670) )
#define RCTL_MACPHY_DISABLE ( (uint32_t)(1 << 26) )
#define RCTL_LOGIC_DISABLE ( (uint32_t)(1 << 27) )

View File

@ -28,14 +28,14 @@ extern "C" {
/* CurrentSdiodProgGuide r23 */
/* Base registers */
#define SDIO_CORE ( (uint32_t)(SDIO_BASE_ADDRESS + 0x00) )
#define SDIO_INT_STATUS ( (uint32_t)(SDIO_BASE_ADDRESS + 0x20) )
#define SDIO_TO_SB_MAILBOX ( (uint32_t)(SDIO_BASE_ADDRESS + 0x40) )
#define SDIO_TO_SB_MAILBOX_DATA ( (uint32_t)(SDIO_BASE_ADDRESS + 0x48) )
#define SDIO_TO_HOST_MAILBOX_DATA ( (uint32_t)(SDIO_BASE_ADDRESS + 0x4C) )
#define SDIO_TO_SB_MAIL_BOX ( (uint32_t)(SDIO_BASE_ADDRESS + 0x40) )
#define SDIO_INT_HOST_MASK ( (uint32_t)(SDIO_BASE_ADDRESS + 0x24) )
#define SDIO_FUNCTION_INT_MASK ( (uint32_t)(SDIO_BASE_ADDRESS + 0x34) )
#define SDIO_CORE(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x00) )
#define SDIO_INT_STATUS(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x20) )
#define SDIO_TO_SB_MAILBOX(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x40) )
#define SDIO_TO_SB_MAILBOX_DATA(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x48) )
#define SDIO_TO_HOST_MAILBOX_DATA(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x4C) )
#define SDIO_TO_SB_MAIL_BOX(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x40) )
#define SDIO_INT_HOST_MASK(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x24) )
#define SDIO_FUNCTION_INT_MASK(wd) ( (uint32_t)(GET_C_VAR(wd, SDIOD_CORE_BASE_ADDRESS) + 0x34) )
/* SDIO Function 0 (SDIO Bus) register addresses */

View File

@ -24,9 +24,15 @@
extern "C" {
#endif
#define WRAPPER_REGISTER_OFFSET (0x100000)
typedef enum chip_var
{
BUS_CREDIT_DIFF = 1,
ARM_CORE_BASE_ADDRESS = 1,
SOCSRAM_BASE_ADDRESS,
SOCSRAM_WRAPPER_BASE_ADDRESS,
SDIOD_CORE_BASE_ADDRESS,
PMU_BASE_ADDRESS,
BUS_CREDIT_DIFF,
CHIP_RAM_SIZE,
ATCM_RAM_BASE_ADDRESS,
SOCRAM_SRMEM_SIZE,
@ -53,6 +59,10 @@ typedef enum chip_var
uint32_t get_whd_var(whd_driver_t whd_driver, chip_var_t var);
whd_result_t get_arm_core_base_address(uint16_t, uint32_t *);
whd_result_t get_socsram_base_address(uint16_t, uint32_t *, whd_bool_t);
whd_result_t get_sdiod_core_base_address(uint16_t, uint32_t *);
whd_result_t get_pmu_base_address(uint16_t, uint32_t *);
whd_result_t get_chip_max_bus_data_credit_diff(uint16_t, uint32_t *);
whd_result_t get_chip_ram_size(uint16_t, uint32_t *);
whd_result_t get_atcm_ram_base_address(uint16_t, uint32_t *);

View File

@ -66,7 +66,7 @@ extern "C"
+ * this interrupts communication between WL TOOL and MFG Test APP
+ * via STDIO UART causing Wrong Message Exchange and failure.
+ */
#ifdef WLAN_MFG_FIRMWARE
#if defined(WLAN_MFG_FIRMWARE) || defined(WHD_PRINT_DISABLE)
#define WPRINT_MACRO(args)
#else
#if defined(WHD_LOGGING_BUFFER_ENABLE)

View File

@ -143,7 +143,7 @@ whd_result_t whd_wifi_set_ampdu_parameters(whd_interface_t ifp)
/* Get the chip number */
uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver);
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 0x4373) )
{
return whd_wifi_set_ampdu_parameters_common(ifp, AMPDU_STA_DEFAULT_BA_WSIZE, AMPDU_MPDU_AUTO,
AMPDU_RX_FACTOR_64K);
@ -628,7 +628,8 @@ uint32_t whd_wifi_start_ap(whd_interface_t ifp)
data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, IOVAR_STR_BSS);
CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag);
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) ||
(wlan_chip_id == 43430) || (wlan_chip_id == 0x4373) )
{
data[0] = htod32(ifp->bsscfgidx);
}
@ -677,7 +678,8 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
/* Get Chip Number */
uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver);
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) ||
(wlan_chip_id == 43430) || (wlan_chip_id == 0x4373) )
{
/* Query bss state (does it exist? if so is it UP?) */
data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_BSS);
@ -714,7 +716,8 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
ap->is_waiting_event = WHD_TRUE;
/* set BSS down */
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) ||
(wlan_chip_id == 43430) || (wlan_chip_id == 0x4373) )
{
data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, IOVAR_STR_BSS);
CHECK_IOCTL_BUFFER(data);
@ -730,13 +733,13 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
data[1] = htod32( (uint32_t)BSS_DOWN );
CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) );
}
if ( (wlan_chip_id != 43430) && (wlan_chip_id != 43455) )
if (wlan_chip_id != 43430)
{
result = cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE);
if (result != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("Error getting a semaphore, %s failed at %d \n", __func__, __LINE__) );
return result;
goto sema_fail;
}
}
/* Disable AP mode only if AP is on primary interface */
@ -746,9 +749,16 @@ uint32_t whd_wifi_stop_ap(whd_interface_t ifp)
CHECK_IOCTL_BUFFER(data);
*data = 0;
CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_AP, buffer, 0) );
/* Wait until AP is brought down */
result = cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE);
if (result != WHD_SUCCESS)
{
WPRINT_WHD_ERROR( ("Error getting a semaphore, %s failed at %d \n", __func__, __LINE__) );
goto sema_fail;
}
}
/* Wait until AP is brought down */
result = cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE);
sema_fail:
ap->is_waiting_event = WHD_FALSE;
result2 = cy_rtos_deinit_semaphore(&ap->whd_wifi_sleep_flag);
if (result != WHD_SUCCESS)

View File

@ -74,13 +74,6 @@
* Variables
******************************************************/
static const uint32_t cm3_core_base_address[] =
{ ( uint32_t )(WLAN_ARMCM3_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET),
( uint32_t )(SOCSRAM_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET), ( uint32_t )(SDIO_BASE_ADDRESS) };
static const uint32_t cr4_core_base_address[] =
{ ( uint32_t )(WLAN_ARMCR4_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET),
( uint32_t )(SOCSRAM_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET), ( uint32_t )(SDIO_BASE_ADDRESS) };
/******************************************************
* Static Function Declarations
@ -116,12 +109,25 @@ void whd_internal_info_init(whd_driver_t whd_driver)
*/
uint32_t whd_get_core_address(whd_driver_t whd_driver, device_core_t core_id)
{
uint16_t chip_id = whd_chip_get_chip_id(whd_driver);
if (chip_id == 43455)
return cr4_core_base_address[(int)core_id];
if (core_id == WLAN_ARM_CORE)
{
return GET_C_VAR(whd_driver, ARM_CORE_BASE_ADDRESS);
}
else if (core_id == SOCRAM_CORE)
{
return GET_C_VAR(whd_driver, SOCSRAM_WRAPPER_BASE_ADDRESS);
}
else if (core_id == SDIOD_CORE)
{
return GET_C_VAR(whd_driver, SDIOD_CORE_BASE_ADDRESS);
}
else
return cm3_core_base_address[(int)core_id];
{
WPRINT_WHD_ERROR( ("%s:%d Invalid core ID(%d)\n", __FUNCTION__, __LINE__, core_id) );
}
return WHD_BADARG;
}
/*
@ -173,7 +179,6 @@ whd_result_t whd_reset_core(whd_driver_t whd_driver, device_core_t core_id, uint
whd_result_t result;
uint8_t regdata;
uint32_t loop_counter = 10;
/* ensure there are no pending backplane operations */
SPINWAIT( ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETSTATUS_OFFSET, (uint8_t)1,
&regdata) ) == WHD_SUCCESS ) && regdata != 0 ), 300 );
@ -722,8 +727,8 @@ whd_result_t whd_chip_specific_socsram_init(whd_driver_t whd_driver)
uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver);
if (wlan_chip_id == 43430)
{
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SOCSRAM_BANKX_INDEX, 4, 0x3) );
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SOCSRAM_BANKX_PDA, 4, 0) );
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SOCSRAM_BANKX_INDEX(whd_driver), 4, 0x3) );
CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SOCSRAM_BANKX_PDA(whd_driver), 4, 0) );
return WHD_SUCCESS;
}
else
@ -999,8 +1004,10 @@ static whd_bool_t whd_is_fw_sr_capable(whd_driver_t whd_driver)
else
{
/* check if fw initialized sr engine */
result = whd_bus_read_backplane_value(whd_driver, (uint32_t)RETENTION_CTL, (uint8_t)sizeof(retention_ctl),
(uint8_t *)&retention_ctl);
result =
whd_bus_read_backplane_value(whd_driver, (uint32_t)RETENTION_CTL(
whd_driver), (uint8_t)sizeof(retention_ctl),
(uint8_t *)&retention_ctl);
if (result != WHD_SUCCESS)
{
return WHD_FALSE;
@ -1021,7 +1028,7 @@ static whd_result_t whd_enable_save_restore(whd_driver_t whd_driver)
if (whd_is_fw_sr_capable(whd_driver) == WHD_TRUE)
{
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 0x4373) )
{
/* Configure WakeupCtrl register to set AlpAvail request bit in chipClockCSR register
* after the sdiod core is powered on.
@ -1050,7 +1057,7 @@ static whd_result_t whd_enable_save_restore(whd_driver_t whd_driver)
*/
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, (uint32_t)SDIOD_CCCR_BRCM_CARDCAP,
(uint8_t)1, SDIOD_CCCR_BRCM_CARDCAP_CMD_NODEC) );
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 0x4373) )
{
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR,
(uint8_t)1, SBSDIO_HT_AVAIL_REQ) );
@ -1062,7 +1069,7 @@ static whd_result_t whd_enable_save_restore(whd_driver_t whd_driver)
}
/* Enable KeepSdioOn (KSO) bit for normal operation */
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 0x4373) )
{
CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR,
(uint8_t)sizeof(data), &data) );
@ -1075,7 +1082,7 @@ static whd_result_t whd_enable_save_restore(whd_driver_t whd_driver)
if ( (data & SBSDIO_SLPCSR_KEEP_SDIO_ON) == 0 )
{
data |= SBSDIO_SLPCSR_KEEP_SDIO_ON;
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) )
if ( (wlan_chip_id == 43012) || (wlan_chip_id == 0x4373) )
{
CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR,
(uint8_t)sizeof(data), data) );

View File

@ -19,7 +19,7 @@
#include "whd_wlioctl.h"
#include "whd_int.h"
#include "whd_types_int.h"
#include "bus_protocols/whd_chip_reg.h"
/******************************************************
* Function Definitions
@ -44,6 +44,21 @@ uint32_t get_whd_var(whd_driver_t whd_driver, chip_var_t var)
uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver);
switch (var)
{
case ARM_CORE_BASE_ADDRESS:
CHECK_RETURN(get_arm_core_base_address(wlan_chip_id, &val) );
break;
case SOCSRAM_BASE_ADDRESS:
CHECK_RETURN(get_socsram_base_address(wlan_chip_id, &val, false) );
break;
case SOCSRAM_WRAPPER_BASE_ADDRESS:
CHECK_RETURN(get_socsram_base_address(wlan_chip_id, &val, true) );
break;
case SDIOD_CORE_BASE_ADDRESS:
CHECK_RETURN(get_sdiod_core_base_address(wlan_chip_id, &val) );
break;
case PMU_BASE_ADDRESS:
CHECK_RETURN(get_pmu_base_address(wlan_chip_id, &val) );
break;
case BUS_CREDIT_DIFF:
CHECK_RETURN(get_chip_max_bus_data_credit_diff(wlan_chip_id, &val) );
break;
@ -98,10 +113,79 @@ uint32_t get_whd_var(whd_driver_t whd_driver, chip_var_t var)
default:
break;
}
return val;
}
whd_result_t get_arm_core_base_address(uint16_t wlan_chip_id, uint32_t *addr)
{
switch (wlan_chip_id)
{
case 0x4373:
*addr = 0x18002000 + WRAPPER_REGISTER_OFFSET;
break;
case 43012:
case 43430:
*addr = 0x18003000 + WRAPPER_REGISTER_OFFSET;
break;
default:
return WHD_BADARG;
}
return WHD_SUCCESS;
}
whd_result_t get_socsram_base_address(uint16_t wlan_chip_id, uint32_t *addr, whd_bool_t wrapper)
{
uint32_t offset = 0;
if (wrapper)
{
offset = WRAPPER_REGISTER_OFFSET;
}
switch (wlan_chip_id)
{
case 43012:
case 43430:
*addr = 0x18004000 + offset;
break;
default:
return WHD_BADARG;
}
return WHD_SUCCESS;
}
whd_result_t get_sdiod_core_base_address(uint16_t wlan_chip_id, uint32_t *addr)
{
switch (wlan_chip_id)
{
case 0x4373:
*addr = 0x18005000;
break;
case 43012:
case 43430:
*addr = 0x18002000;
break;
default:
return WHD_BADARG;
}
return WHD_SUCCESS;
}
whd_result_t get_pmu_base_address(uint16_t wlan_chip_id, uint32_t *addr)
{
switch (wlan_chip_id)
{
case 0x4373:
case 43430:
*addr = CHIPCOMMON_BASE_ADDRESS;
break;
case 43012:
*addr = 0x18012000;
break;
default:
return WHD_BADARG;
}
return WHD_SUCCESS;
}
whd_result_t get_chip_max_bus_data_credit_diff(uint16_t wlan_chip_id, uint32_t *credit_diff)
{
*credit_diff = 0;
@ -109,7 +193,7 @@ whd_result_t get_chip_max_bus_data_credit_diff(uint16_t wlan_chip_id, uint32_t *
{
*credit_diff = 7;
}
else if (wlan_chip_id == 43455)
else if (wlan_chip_id == 0x4373)
{
*credit_diff = 50;
}
@ -139,6 +223,10 @@ whd_result_t get_chip_ram_size(uint16_t wlan_chip_id, uint32_t *size)
{
*size = 0xA0000;
}
else if (wlan_chip_id == 0x4373)
{
*size = 0xE0000;
}
else
{
*size = 0x80000;
@ -149,9 +237,9 @@ whd_result_t get_chip_ram_size(uint16_t wlan_chip_id, uint32_t *size)
whd_result_t get_atcm_ram_base_address(uint16_t wlan_chip_id, uint32_t *size)
{
*size = 0;
if (wlan_chip_id == 43455)
if (wlan_chip_id == 0x4373)
{
*size = 0x198000;
*size = 0x160000;
}
else
{

View File

@ -43,6 +43,7 @@
#include "whd_poll.h"
#include "whd_sdpcm.h"
#include "whd_buffer_api.h"
#include "whd_chip_constants.h"
/******************************************************
* Static Function Prototypes
@ -304,6 +305,9 @@ static void whd_thread_func(whd_thread_arg_t thread_input)
/* Check if the interrupt indicated there is a packet to read */
if (whd_bus_packet_available_to_read(whd_driver) != 0)
{
/* workaround solution for CMD53 error on PSOC6 1M + 4343w */
if (whd_chip_get_chip_id(whd_driver) == 43430)
(void )cy_rtos_delay_milliseconds( (uint32_t)1 );
/* Receive all available packets */
do
{

View File

@ -79,6 +79,8 @@
#define RSPEC_TO_KBPS(rate) (RSPEC_500KBPS( (rate) ) * (unsigned int)500)
#define UNSIGNED_CHAR_TO_CHAR(uch) ( (uch) & 0x7f )
#define KEY_MAX_LEN (64) /* Maximum key length */
#define KEY_MIN_LEN (8) /* Minimum key length */
/******************************************************
* Local Structures
******************************************************/
@ -543,7 +545,7 @@ uint32_t whd_wifi_set_passphrase(whd_interface_t ifp, const uint8_t *security_ke
whd_driver_t whd_driver;
wsec_pmk_t *psk;
if (!ifp || !security_key)
if (!ifp || !security_key || (key_length < KEY_MIN_LEN) || (key_length > KEY_MAX_LEN) )
{
WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n",
__func__, __LINE__) );
@ -575,7 +577,7 @@ uint32_t whd_wifi_sae_password(whd_interface_t ifp, const uint8_t *security_key,
whd_driver_t whd_driver;
wsec_sae_password_t *sae_password;
if (!ifp || !security_key)
if (!ifp || !security_key || (key_length < KEY_MIN_LEN) || (key_length > KEY_MAX_LEN) )
{
WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n",
__func__, __LINE__) );
@ -1547,7 +1549,7 @@ uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap
result = whd_wifi_join_wait_for_complete(ifp, &join_semaphore);
if (chip_id == 43455)
if (chip_id == 0x4373)
{
/* For 11 AC MAX throughput set the frame burst and MPDU per AMPDU */
CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_MPDU_PER_AMPDU, 64) );

View File

@ -1,27 +1,27 @@
/***************************************************************************//**
* \file cy_network_buffer.c
*
* \brief
* Basic set of APIs for dealing with network packet buffers. This is used by WHD
* for relaying data between the network stack and the connectivity chip.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file cy_network_buffer.c
*
* \brief
* Basic set of APIs for dealing with network packet buffers. This is used by WHD
* for relaying data between the network stack and the connectivity chip.
*
***************************************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
#include <stdlib.h>
#include "cy_network_buffer.h"
@ -31,25 +31,29 @@
#define SDIO_BLOCK_SIZE (64U)
whd_result_t cy_host_buffer_get(whd_buffer_t *buffer, whd_buffer_dir_t direction, unsigned short size, unsigned long timeout_ms)
//--------------------------------------------------------------------------------------------------
// cy_host_buffer_get
//--------------------------------------------------------------------------------------------------
whd_result_t cy_host_buffer_get(whd_buffer_t* buffer, whd_buffer_dir_t direction,
unsigned short size, unsigned long timeout_ms)
{
CY_UNUSED_PARAMETER( direction );
CY_UNUSED_PARAMETER( timeout_ms );
struct pbuf *p = NULL;
if ( ( direction == WHD_NETWORK_TX) && ( size <= PBUF_POOL_BUFSIZE ) )
CY_UNUSED_PARAMETER(direction);
CY_UNUSED_PARAMETER(timeout_ms);
struct pbuf* p = NULL;
if ((direction == WHD_NETWORK_TX) && (size <= PBUF_POOL_BUFSIZE))
{
p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL);
}
else
{
p = pbuf_alloc(PBUF_RAW, size+SDIO_BLOCK_SIZE, PBUF_RAM);
if ( p != NULL )
if (p != NULL)
{
p->len = size;
p->len = size;
p->tot_len -= SDIO_BLOCK_SIZE;
}
}
if (p != NULL )
if (p != NULL)
{
*buffer = p;
return WHD_SUCCESS;
@ -60,48 +64,70 @@ whd_result_t cy_host_buffer_get(whd_buffer_t *buffer, whd_buffer_dir_t direction
}
}
//--------------------------------------------------------------------------------------------------
// cy_buffer_release
//--------------------------------------------------------------------------------------------------
void cy_buffer_release(whd_buffer_t buffer, whd_buffer_dir_t direction)
{
CY_UNUSED_PARAMETER( direction );
(void) pbuf_free( (struct pbuf *)buffer );
CY_UNUSED_PARAMETER(direction);
(void)pbuf_free((struct pbuf*)buffer);
}
uint8_t *cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer)
//--------------------------------------------------------------------------------------------------
// cy_buffer_get_current_piece_data_pointer
//--------------------------------------------------------------------------------------------------
uint8_t* cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer)
{
CY_ASSERT(buffer != NULL);
struct pbuf *pbuffer= (struct pbuf*) buffer;
return (uint8_t*) pbuffer->payload;
struct pbuf* pbuffer= (struct pbuf*)buffer;
return (uint8_t*)pbuffer->payload;
}
//--------------------------------------------------------------------------------------------------
// cy_buffer_get_current_piece_size
//--------------------------------------------------------------------------------------------------
uint16_t cy_buffer_get_current_piece_size(whd_buffer_t buffer)
{
CY_ASSERT(buffer != NULL);
struct pbuf *pbuffer = (struct pbuf*) buffer;
return (uint16_t) pbuffer->len;
struct pbuf* pbuffer = (struct pbuf*)buffer;
return (uint16_t)pbuffer->len;
}
//--------------------------------------------------------------------------------------------------
// cy_buffer_set_size
//--------------------------------------------------------------------------------------------------
whd_result_t cy_buffer_set_size(whd_buffer_t buffer, unsigned short size)
{
CY_ASSERT(buffer != NULL);
struct pbuf * pbuffer = (struct pbuf *) buffer;
struct pbuf* pbuffer = (struct pbuf*)buffer;
if ( size > (unsigned short) WHD_LINK_MTU + LWIP_MEM_ALIGN_SIZE(LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf))) + LWIP_MEM_ALIGN_SIZE(size) )
if (size > ((unsigned short)WHD_LINK_MTU +
LWIP_MEM_ALIGN_SIZE(LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf))) +
LWIP_MEM_ALIGN_SIZE(size)))
{
return WHD_PMK_WRONG_LENGTH;
}
pbuffer->tot_len = size;
pbuffer->len = size;
pbuffer->len = size;
return CY_RSLT_SUCCESS;
}
whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t *buffer, int32_t add_remove_amount)
//--------------------------------------------------------------------------------------------------
// cy_buffer_add_remove_at_front
//--------------------------------------------------------------------------------------------------
whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t* buffer, int32_t add_remove_amount)
{
CY_ASSERT(buffer != NULL);
struct pbuf **pbuffer = (struct pbuf**) buffer;
struct pbuf** pbuffer = (struct pbuf**)buffer;
if ( (u8_t) 0 != pbuf_header( *pbuffer, ( s16_t )( -add_remove_amount ) ) )
if ((u8_t)0 != pbuf_header(*pbuffer, (s16_t)(-add_remove_amount)))
{
return WHD_PMK_WRONG_LENGTH;
}

View File

@ -1,33 +1,33 @@
/***************************************************************************//**
* \file cy_network_buffer.h
*
* \brief
* Basic set of APIs for dealing with network packet buffers. This is used by WHD
* for relaying data between the network stack and the connectivity chip.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file cy_network_buffer.h
*
* \brief
* Basic set of APIs for dealing with network packet buffers. This is used by WHD
* for relaying data between the network stack and the connectivity chip.
*
***************************************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
/**
* \addtogroup group_bsp_network_buffer Buffer management
* \{
* Basic set of APIs for dealing with network packet buffers
*/
* \addtogroup group_bsp_network_buffer Buffer management
* \{
* Basic set of APIs for dealing with network packet buffers
*/
#pragma once
@ -59,7 +59,8 @@ extern "C" {
*
* @return : CY_RSLT_SUCCESS or WHD_BUFFER_ALLOC_FAIL if the buffer could not be allocated
*/
whd_result_t cy_host_buffer_get(whd_buffer_t *buffer, whd_buffer_dir_t direction, unsigned short size, unsigned long timeout_ms);
whd_result_t cy_host_buffer_get(whd_buffer_t* buffer, whd_buffer_dir_t direction,
unsigned short size, unsigned long timeout_ms);
/** Releases a packet buffer
*
@ -85,7 +86,7 @@ void cy_buffer_release(whd_buffer_t buffer, whd_buffer_dir_t direction);
*
* @return : The packet buffer's current pointer.
*/
uint8_t *cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer);
uint8_t* cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer);
/** Retrieves the size of a packet buffer
*
@ -121,16 +122,16 @@ whd_result_t cy_buffer_set_size(whd_buffer_t buffer, unsigned short size);
* @param buffer : A pointer to the handle of the current packet buffer for which the
* current pointer will be moved. On return this may contain a pointer
* to a newly allocated packet buffer which has been daisy chained to
* the front of the given one. This would be the case if the given packet
* buffer didn't have enough space at the front.
* the front of the given one. This would be the case if the given
* packet buffer didn't have enough space at the front.
* @param add_remove_amount : This is the number of bytes to move the current pointer of the packet
* buffer - a negative value increases the space for headers at the front
* of the packet, a positive value decreases the space.
* buffer - a negative value increases the space for headers at the
* front of the packet, a positive value decreases the space.
*
* @return : CY_RSLT_SUCCESS or WHD_PMK_WRONG_LENGTH if the added amount is outside
* the size of the buffer
* @return : CY_RSLT_SUCCESS or WHD_PMK_WRONG_LENGTH if the added amount is
* outside the size of the buffer
*/
whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t *buffer, int32_t add_remove_amount);
whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t* buffer, int32_t add_remove_amount);
/** Called by WHD to pass received data to the network stack
@ -164,6 +165,6 @@ void cy_network_process_ethernet_data(whd_interface_t interface, whd_buffer_t bu
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // __cplusplus
/** \} group_bsp_network_buffer */

View File

@ -0,0 +1,75 @@
/***********************************************************************************************//**
* \file cy_wifi_fw_section.h
*
* \brief
* Determines the start and end of the region the WiFi firmware is stored in.
*
***************************************************************************************************
* \copyright
* Copyright 2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
#pragma once
#if defined(CY_STORAGE_WIFI_DATA_OUTPUT)
#include "cy_utils.h"
#if defined(__ARMCC_VERSION)
#define CY_SECTION_BASE_SYMBOL_BASE(SECTION) Image$$ ## SECTION ## $$Base
#define CY_SECTION_BASE_SYMBOL(SECTION) CY_SECTION_BASE_SYMBOL_BASE(SECTION)
extern char CY_SECTION_BASE_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT);
#define CY_WIFI_FW_SECTION_START (&CY_SECTION_BASE_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT))
#define CY_SECTION_LIMIT_SYMBOL_BASE(SECTION) Image$$ ## SECTION ## $$Limit
#define CY_SECTION_LIMIT_SYMBOL(SECTION) CY_SECTION_LIMIT_SYMBOL_BASE(SECTION)
extern char CY_SECTION_LIMIT_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT);
#define CY_WIFI_FW_SECTION_END (&CY_SECTION_LIMIT_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT))
#elif defined(__GNUC__)
// Must define __<Output Section Name>_start and __<Output Section Name>_end in the linker script
#define CY_SECTION_START_SYMBOL_BASE(SECTION) __ ## SECTION ## _start
#define CY_SECTION_START_SYMBOL(SECTION) CY_SECTION_START_SYMBOL_BASE(SECTION)
extern char CY_SECTION_START_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT);
#define CY_WIFI_FW_SECTION_START (&CY_SECTION_START_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT))
#define CY_SECTION_END_SYMBOL_BASE(SECTION) __ ## SECTION ## _end
#define CY_SECTION_END_SYMBOL(SECTION) CY_SECTION_END_SYMBOL_BASE(SECTION)
extern char CY_SECTION_END_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT);
#define CY_WIFI_FW_SECTION_END (&CY_SECTION_END_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT))
#elif defined(__ICCARM__)
#define CY_DECLARE_SECTION_BASE(SECTION) CY_PRAGMA(section = #SECTION)
#define CY_DECLARE_SECTION(SECTION) CY_DECLARE_SECTION_BASE(SECTION)
CY_DECLARE_SECTION(CY_STORAGE_WIFI_DATA_OUTPUT)
#define CY_SECTION_BEGIN_SYMBOL_BASE(SECTION) __section_begin(#SECTION)
#define CY_SECTION_BEGIN_SYMBOL(SECTION) CY_SECTION_BEGIN_SYMBOL_BASE(SECTION)
#define CY_WIFI_FW_SECTION_START (CY_SECTION_BEGIN_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT))
#define CY_SECTION_END_SYMBOL_BASE(SECTION) __section_end(#SECTION)
#define CY_SECTION_END_SYMBOL(SECTION) CY_SECTION_END_SYMBOL_BASE(SECTION)
#define CY_WIFI_FW_SECTION_END (CY_SECTION_END_SYMBOL(CY_STORAGE_WIFI_DATA_OUTPUT))
#else // if defined(__ARMCC_VERSION)
#error "An unsupported toolchain"
#endif // defined(__ARMCC_VERSION)
#endif // defined(CY_STORAGE_WIFI_DATA_OUTPUT)

View File

@ -1,26 +1,26 @@
/***************************************************************************//**
* \file cybsp_wifi.c
*
* \brief
* Provides utility functions that are used by board support packages.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file cybsp_wifi.c
*
* \brief
* Provides utility functions that are used by board support packages.
*
***************************************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
#include "cybsp.h"
#include "cybsp_wifi.h"
@ -48,178 +48,218 @@ extern "C" {
#define CY_WIFI_OOB_INTR_PRIORITY 2
#endif
/* Determine whether to use the SDIO oob interrupt.
* Use CY_WIFI_HOST_WAKE_SW_FORCE to force the enable status.
*/
// Determine whether to use the SDIO oob interrupt.
// Use CY_WIFI_HOST_WAKE_SW_FORCE to force the enable status.
#if !defined(CY_WIFI_HOST_WAKE_SW_FORCE)
#define CY_SDIO_BUS_USE_OOB_INTR (1u)
#else
#define CY_SDIO_BUS_USE_OOB_INTR CY_WIFI_HOST_WAKE_SW_FORCE
#endif /* defined(CY_WIFI_HOST_WAKE_SW_FORCE) */
#endif // defined(CY_WIFI_HOST_WAKE_SW_FORCE)
// *SUSPEND-FORMATTING*
#if (CY_SDIO_BUS_USE_OOB_INTR != 0)
/* Setup configuration based on configurator or BSP, where configurator has precedence. */
// Setup configuration based on configurator or BSP, where configurator has precedence.
#if defined(CYCFG_WIFI_HOST_WAKE_ENABLED)
#define CY_WIFI_HOST_WAKE_GPIO CYCFG_WIFI_HOST_WAKE_GPIO
#define CY_WIFI_HOST_WAKE_IRQ_EVENT CYCFG_WIFI_HOST_WAKE_IRQ_EVENT
#else
/* Setup host-wake pin */
// Setup host-wake pin
#if defined(CYBSP_WIFI_HOST_WAKE)
#define CY_WIFI_HOST_WAKE_GPIO CYBSP_WIFI_HOST_WAKE
#else
#error "CYBSP_WIFI_HOST_WAKE must be defined"
#endif
/* Setup host-wake irq */
// Setup host-wake irq
#if defined(CYBSP_WIFI_HOST_WAKE_IRQ_EVENT)
#define CY_WIFI_HOST_WAKE_IRQ_EVENT CYBSP_WIFI_HOST_WAKE_IRQ_EVENT
#else
#error "CYBSP_WIFI_HOST_WAKE_IRQ_EVENT must be defined"
#endif
#endif
#else
#endif // if defined(CYCFG_WIFI_HOST_WAKE_ENABLED)
#else // if (CY_SDIO_BUS_USE_OOB_INTR != 0)
#define CY_WIFI_HOST_WAKE_GPIO CYHAL_NC_PIN_VALUE
#define CY_WIFI_HOST_WAKE_IRQ_EVENT 0
#endif /* (CY_SDIO_BUS_USE_OOB_INTR != 0) */
#endif // (CY_SDIO_BUS_USE_OOB_INTR != 0)
// *RESUME-FORMATTING*
static whd_driver_t whd_drv;
static whd_buffer_funcs_t buffer_ops =
extern whd_resource_source_t resource_ops;
static whd_buffer_funcs_t buffer_if_default =
{
.whd_host_buffer_get = cy_host_buffer_get,
.whd_buffer_release = cy_buffer_release,
.whd_host_buffer_get = cy_host_buffer_get,
.whd_buffer_release = cy_buffer_release,
.whd_buffer_get_current_piece_data_pointer = cy_buffer_get_current_piece_data_pointer,
.whd_buffer_get_current_piece_size = cy_buffer_get_current_piece_size,
.whd_buffer_set_size = cy_buffer_set_size,
.whd_buffer_add_remove_at_front = cy_buffer_add_remove_at_front,
.whd_buffer_get_current_piece_size = cy_buffer_get_current_piece_size,
.whd_buffer_set_size = cy_buffer_set_size,
.whd_buffer_add_remove_at_front = cy_buffer_add_remove_at_front,
};
static whd_netif_funcs_t netif_ops =
static whd_netif_funcs_t netif_if_default =
{
.whd_network_process_ethernet_data = cy_network_process_ethernet_data,
};
extern whd_resource_source_t resource_ops;
static cy_rslt_t sdio_try_send_cmd(const cyhal_sdio_t *sdio_object, cyhal_transfer_t direction, \
cyhal_sdio_command_t command, uint32_t argument, uint32_t* response)
//--------------------------------------------------------------------------------------------------
// sdio_try_send_cmd
//--------------------------------------------------------------------------------------------------
static cy_rslt_t sdio_try_send_cmd(const cyhal_sdio_t* sdio_object, cyhal_transfer_t direction, \
cyhal_sdio_command_t command, uint32_t argument,
uint32_t* response)
{
uint8_t loop_count = 0;
cy_rslt_t result = CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT;
uint8_t loop_count = 0;
cy_rslt_t result = CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT;
do
{
result = cyhal_sdio_send_cmd(sdio_object, direction, command, argument, response);
if(result != CY_RSLT_SUCCESS)
if (result != CY_RSLT_SUCCESS)
{
cyhal_system_delay_ms(SDIO_RETRY_DELAY_MS);
}
loop_count++;
}
while(result != CY_RSLT_SUCCESS && loop_count <= SDIO_BUS_LEVEL_MAX_RETRIES);
} while(result != CY_RSLT_SUCCESS && loop_count <= SDIO_BUS_LEVEL_MAX_RETRIES);
return result;
}
static cy_rslt_t cybsp_sdio_enumerate(const cyhal_sdio_t *sdio_object)
//--------------------------------------------------------------------------------------------------
// cybsp_sdio_enumerate
//--------------------------------------------------------------------------------------------------
static cy_rslt_t cybsp_sdio_enumerate(const cyhal_sdio_t* sdio_object)
{
cy_rslt_t result = CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT;
uint32_t loop_count = 0;
uint32_t rel_addr;
uint32_t response_ignored = 0;
uint32_t no_argument = 0;
cy_rslt_t result = CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT;
uint32_t loop_count = 0;
uint32_t rel_addr;
uint32_t response_ignored = 0;
uint32_t no_argument = 0;
do
{
/* Send CMD0 to set it to idle state */
sdio_try_send_cmd(sdio_object, CYHAL_WRITE, CYHAL_SDIO_CMD_GO_IDLE_STATE, no_argument, &response_ignored /*ignored*/);
// Send CMD0 to set it to idle state
sdio_try_send_cmd(sdio_object, CYHAL_WRITE, CYHAL_SDIO_CMD_GO_IDLE_STATE, no_argument,
&response_ignored /*ignored*/);
/* CMD5. */
sdio_try_send_cmd(sdio_object, CYHAL_READ, CYHAL_SDIO_CMD_IO_SEND_OP_COND, no_argument, &response_ignored /*ignored*/);
// CMD5.
sdio_try_send_cmd(sdio_object, CYHAL_READ, CYHAL_SDIO_CMD_IO_SEND_OP_COND, no_argument,
&response_ignored /*ignored*/);
/* Send CMD3 to get RCA. */
result = sdio_try_send_cmd(sdio_object, CYHAL_READ, CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR, no_argument, &rel_addr);
if(result != CY_RSLT_SUCCESS)
// Send CMD3 to get RCA.
result = sdio_try_send_cmd(sdio_object, CYHAL_READ, CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR,
no_argument, &rel_addr);
if (result != CY_RSLT_SUCCESS)
{
cyhal_system_delay_ms(SDIO_RETRY_DELAY_MS);
}
loop_count++;
} while (result != CY_RSLT_SUCCESS && loop_count <= SDIO_ENUMERATION_TRIES);
if(result == CY_RSLT_SUCCESS)
if (result == CY_RSLT_SUCCESS)
{
/* Send CMD7 with the returned RCA to select the card */
result = sdio_try_send_cmd(sdio_object, CYHAL_WRITE, CYHAL_SDIO_CMD_SELECT_CARD, rel_addr, &response_ignored);
// Send CMD7 with the returned RCA to select the card
result = sdio_try_send_cmd(sdio_object, CYHAL_WRITE, CYHAL_SDIO_CMD_SELECT_CARD, rel_addr,
&response_ignored);
}
return result;
}
//--------------------------------------------------------------------------------------------------
// reset_wifi_chip
//--------------------------------------------------------------------------------------------------
static cy_rslt_t reset_wifi_chip(void)
{
/* WiFi into reset */
cy_rslt_t result = cyhal_gpio_init(CYBSP_WIFI_WL_REG_ON, CYHAL_GPIO_DIR_OUTPUT, CYHAL_GPIO_DRIVE_PULLUP, 0);
if(result == CY_RSLT_SUCCESS)
// WiFi into reset
cy_rslt_t result = cyhal_gpio_init(CYBSP_WIFI_WL_REG_ON, CYHAL_GPIO_DIR_OUTPUT,
CYHAL_GPIO_DRIVE_PULLUP, 0);
if (result == CY_RSLT_SUCCESS)
{
/* WiFi out of reset */
// WiFi out of reset
cyhal_gpio_write(CYBSP_WIFI_WL_REG_ON, true);
cyhal_system_delay_ms(WLAN_POWER_UP_DELAY_MS);
}
return result;
}
//--------------------------------------------------------------------------------------------------
// init_sdio_bus
//--------------------------------------------------------------------------------------------------
static cy_rslt_t init_sdio_bus(void)
{
cy_rslt_t result = reset_wifi_chip();
if(result == CY_RSLT_SUCCESS)
if (result == CY_RSLT_SUCCESS)
{
cyhal_sdio_t* sdio_p = cybsp_get_wifi_sdio_obj();
cy_rslt_t result = cybsp_sdio_enumerate(sdio_p);
if(result == CY_RSLT_SUCCESS)
result = cybsp_sdio_enumerate(sdio_p);
if (result == CY_RSLT_SUCCESS)
{
whd_sdio_config_t whd_sdio_config;
whd_oob_config_t oob_config;
cyhal_sdio_cfg_t config;
whd_oob_config_t oob_config;
cyhal_sdio_cfg_t config;
/* If the configurator reserved the pin, we need to release it here since
WHD will try to reserve it again. WHD has no idea about configurators
and expects it can reserve the pin that it is going to manage.
*/
// If the configurator reserved the pin, we need to release it here since
// WHD will try to reserve it again. WHD has no idea about configurators
// and expects it can reserve the pin that it is going to manage.
#if defined(CYCFG_WIFI_HOST_WAKE_ENABLED)
cyhal_resource_inst_t pinRsc = cyhal_utils_get_gpio_resource(CY_WIFI_HOST_WAKE_GPIO);
cyhal_hwmgr_free(&pinRsc);
cyhal_resource_inst_t pinRsc = cyhal_utils_get_gpio_resource(CY_WIFI_HOST_WAKE_GPIO);
cyhal_hwmgr_free(&pinRsc);
#endif
oob_config.host_oob_pin = CY_WIFI_HOST_WAKE_GPIO;
oob_config.dev_gpio_sel = DEFAULT_OOB_PIN;
oob_config.host_oob_pin = CY_WIFI_HOST_WAKE_GPIO;
oob_config.dev_gpio_sel = DEFAULT_OOB_PIN;
oob_config.is_falling_edge = (CY_WIFI_HOST_WAKE_IRQ_EVENT == CYHAL_GPIO_IRQ_FALL)
? WHD_TRUE
: WHD_FALSE;
oob_config.intr_priority = CY_WIFI_OOB_INTR_PRIORITY;
whd_sdio_config.sdio_1bit_mode = WHD_FALSE;
whd_sdio_config.sdio_1bit_mode = WHD_FALSE;
whd_sdio_config.high_speed_sdio_clock = WHD_FALSE;
whd_sdio_config.oob_config = oob_config;
whd_sdio_config.oob_config = oob_config;
whd_bus_sdio_attach(whd_drv, &whd_sdio_config, sdio_p);
/* Increase frequency to 25 MHz for better performance */
// Increase frequency to 25 MHz for better performance
config.frequencyhal_hz = 25000000;
config.block_size = 0;
config.block_size = 0;
cyhal_sdio_configure(sdio_p, &config);
}
}
return result;
}
cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface)
//--------------------------------------------------------------------------------------------------
// cybsp_wifi_init_primary_extended
//--------------------------------------------------------------------------------------------------
cy_rslt_t cybsp_wifi_init_primary_extended(whd_interface_t* interface,
whd_resource_source_t* resource_if,
whd_buffer_funcs_t* buffer_if,
whd_netif_funcs_t* netif_if)
{
whd_init_config_t whd_init_config;
whd_init_config.thread_stack_size = (uint32_t)THREAD_STACK_SIZE;
whd_init_config.thread_stack_size = (uint32_t)THREAD_STACK_SIZE;
whd_init_config.thread_stack_start = NULL;
whd_init_config.thread_priority = (uint32_t)THREAD_PRIORITY;
whd_init_config.country = COUNTRY;
whd_init_config.thread_priority = (uint32_t)THREAD_PRIORITY;
whd_init_config.country = COUNTRY;
cy_rslt_t result = whd_init(&whd_drv, &whd_init_config, &resource_ops, &buffer_ops, &netif_ops);
if(result == CY_RSLT_SUCCESS)
if (resource_if == NULL)
{
resource_if = &resource_ops;
}
if (buffer_if == NULL)
{
buffer_if = &buffer_if_default;
}
if (netif_if == NULL)
{
netif_if = &netif_if_default;
}
cy_rslt_t result = whd_init(&whd_drv, &whd_init_config, resource_if, buffer_if, netif_if);
if (result == CY_RSLT_SUCCESS)
{
result = init_sdio_bus();
if(result == CY_RSLT_SUCCESS)
if (result == CY_RSLT_SUCCESS)
{
result = whd_wifi_on(whd_drv, interface);
}
@ -227,30 +267,44 @@ cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface)
return result;
}
//--------------------------------------------------------------------------------------------------
// cybsp_wifi_init_secondary
//--------------------------------------------------------------------------------------------------
cy_rslt_t cybsp_wifi_init_secondary(whd_interface_t* interface, whd_mac_t* mac_address)
{
return whd_add_secondary_interface(whd_drv, mac_address, interface);
}
//--------------------------------------------------------------------------------------------------
// cybsp_wifi_deinit
//--------------------------------------------------------------------------------------------------
cy_rslt_t cybsp_wifi_deinit(whd_interface_t interface)
{
cy_rslt_t result = whd_wifi_off(interface);
if(result == CY_RSLT_SUCCESS)
if (result == CY_RSLT_SUCCESS)
{
result = whd_deinit(interface);
if(result == CY_RSLT_SUCCESS)
if (result == CY_RSLT_SUCCESS)
{
whd_bus_sdio_detach(whd_drv);
cyhal_gpio_free(CYBSP_WIFI_WL_REG_ON);
}
}
return result;
}
//--------------------------------------------------------------------------------------------------
// cybsp_get_wifi_driver
//--------------------------------------------------------------------------------------------------
whd_driver_t cybsp_get_wifi_driver(void)
{
return whd_drv;
}
#if defined(__cplusplus)
}
#endif

View File

@ -1,35 +1,35 @@
/***************************************************************************//**
* \file cybsp_wifi.h
*
* \brief
* Basic abstraction layer for dealing with boards containing a Cypress MCU. This
* API provides convenience methods for initializing and manipulating different
* hardware found on the board.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file cybsp_wifi.h
*
* \brief
* Basic abstraction layer for dealing with boards containing a Cypress MCU. This
* API provides convenience methods for initializing and manipulating different
* hardware found on the board.
*
***************************************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
/**
* \addtogroup group_bsp_wifi WiFi Initialization
* \{
* Basic integration code for interfacing the WiFi Host Driver (WHD) with the Board
* Support Packages (BSPs).
*/
* \addtogroup group_bsp_wifi WiFi Initialization
* \{
* Basic integration code for interfacing the WiFi Host Driver (WHD) with the Board
* Support Packages (BSPs).
*/
#pragma once
#include "cy_result.h"
@ -40,10 +40,12 @@ extern "C" {
#endif
/** Initialization of the WiFi driver failed. */
#define CYBSP_RSLT_WIFI_INIT_FAILED (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION, 0))
#define CYBSP_RSLT_WIFI_INIT_FAILED \
(CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION, 0))
/** SDIO enumeration failed. */
#define CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION, 1))
#define CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT \
(CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION, 1))
/** Initializes the primary interface for the WiFi driver on the board. This sets up
* the WHD interface to use the \ref group_bsp_network_buffer APIs and to communicate
@ -55,10 +57,35 @@ extern "C" {
* reinitialized, \ref cybsp_wifi_deinit must be called before calling this function
* again.
*
* @param[out] interface Interface to be initialized
* @param[out] interface Interface to be initialized
* @param[in] resource_if Pointer to resource interface to provide resources to the driver
* initialization process. Passing NULL will use the default.
* @param[in] buffer_if Pointer to a buffer interface to provide buffer related services to the
* driver instance. Passing NULL will use the default.
* @param[in] netif_if Pointer to a whd_netif_funcs_t to provide network stack services to the
* driver instance. Passing NULL will use the default.
*
* @return CY_RSLT_SUCCESS for successful initialization or error if initialization failed.
*/
cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface);
cy_rslt_t cybsp_wifi_init_primary_extended(whd_interface_t* interface,
whd_resource_source_t* resource_if,
whd_buffer_funcs_t* buffer_if,
whd_netif_funcs_t* netif_if);
/**
* Initializes the primary interface for the WiFi driver on the board using the default resource,
* buffer, and network interfaces.
* See cybsp_wifi_init_primary_extended() for more details.
*
* @param[out] interface Interface to be initialized
*
* @return CY_RSLT_SUCCESS for successful initialization or error if initialization failed.
*/
static inline cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface)
{
return cybsp_wifi_init_primary_extended(interface, NULL, NULL, NULL);
}
/** This function initializes and adds a secondary interface to the WiFi driver.
* @note This function does not initialize the WiFi driver or turn on the WiFi chip.
@ -66,6 +93,7 @@ cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface);
*
* @param[out] interface Interface to be initialized
* @param[in] mac_address Mac address for secondary interface
*
* @return CY_RSLT_SUCCESS for successful initialization or error if initialization failed.
*/
cy_rslt_t cybsp_wifi_init_secondary(whd_interface_t* interface, whd_mac_t* mac_address);
@ -76,6 +104,7 @@ cy_rslt_t cybsp_wifi_init_secondary(whd_interface_t* interface, whd_mac_t* mac_a
* 2) Turns off the WiFi chip.
*
* @param[in] interface Interface to be de-initialized.
*
* @return CY_RSLT_SUCCESS for successful de-initialization or error if de-initialization failed.
*/
cy_rslt_t cybsp_wifi_deinit(whd_interface_t interface);
@ -91,6 +120,6 @@ whd_driver_t cybsp_get_wifi_driver(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // __cplusplus
/** \} group_bsp_wifi */

View File

@ -0,0 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

View File

@ -10,7 +10,7 @@
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");

View File

@ -8,7 +8,7 @@
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -160,6 +160,12 @@ size_t cy_serial_flash_qspi_get_erase_size(uint32_t addr)
return (size_t)qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->eraseSize;
}
size_t cy_serial_flash_qspi_get_prog_size(uint32_t addr)
{
CY_UNUSED_PARAMETER(addr);
return (size_t)qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->programSize;
}
cy_rslt_t cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t *buf)
{
/* Cy_SMIF_MemRead() returns error if (addr + length) > total flash size. */
@ -215,6 +221,11 @@ cy_rslt_t cy_serial_flash_qspi_enable_xip(bool enable)
return CY_RSLT_SUCCESS;
}
void cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority)
{
NVIC_SetPriority(smif_interrupt_IRQn, priority);
}
#if defined(__cplusplus)
}
#endif

View File

@ -8,7 +8,7 @@
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -48,11 +48,11 @@ extern "C" {
/**
* \brief Initializes the serial flash memory. This function accepts up to 8
* I/Os. Number of I/Os depend on the type of memory interface. Pass NC when an
* I/O is unused.
* I/O is unused.
* Single SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7)
* Dual SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7)
* Quad SPI - (io0, io1, io2, io3) or (io4, io5, io6, io7)
* Octal SPI - All 8 I/Os are used.
* Dual SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7)
* Quad SPI - (io0, io1, io2, io3) or (io4, io5, io6, io7)
* Octal SPI - All 8 I/Os are used.
* \param mem_config Memory configuration to be used for initializing
* \param io0 Data/IO pin 0 connected to the memory, Pass NC when unused.
* \param io1 Data/IO pin 1 connected to the memory, Pass NC when unused.
@ -64,24 +64,22 @@ extern "C" {
* \param io7 Data/IO pin 7 connected to the memory, Pass NC when unused.
* \param sclk Clock pin connected to the memory
* \param ssel Slave select pin connected to the memory
* \param hz Clock frequency to be used with the memory. This parameter is
* ignored currently. Change the CLK_HF frequency using either the
Device Configurator tool or the clock driver.
* \param hz Clock frequency to be used with the memory.
* \returns CY_RSLT_SUCCESS if the initialization was successful, an error code
* otherwise.
*/
cy_rslt_t cy_serial_flash_qspi_init(
cy_rslt_t cy_serial_flash_qspi_init(
const cy_stc_smif_mem_config_t* mem_config,
cyhal_gpio_t io0,
cyhal_gpio_t io1,
cyhal_gpio_t io2,
cyhal_gpio_t io0,
cyhal_gpio_t io1,
cyhal_gpio_t io2,
cyhal_gpio_t io3,
cyhal_gpio_t io4,
cyhal_gpio_t io5,
cyhal_gpio_t io6,
cyhal_gpio_t io7,
cyhal_gpio_t io4,
cyhal_gpio_t io5,
cyhal_gpio_t io6,
cyhal_gpio_t io7,
cyhal_gpio_t sclk,
cyhal_gpio_t ssel,
cyhal_gpio_t ssel,
uint32_t hz);
/**
@ -103,6 +101,14 @@ size_t cy_serial_flash_qspi_get_size(void);
*/
size_t cy_serial_flash_qspi_get_erase_size(uint32_t addr);
/**
* \brief Returns the page size for programming of the sector to which the given
* address belongs. Address is used only for a memory with hybrid sector size.
* \param addr Address that belongs to the sector for which size is returned.
* \returns Page size in bytes.
*/
size_t cy_serial_flash_qspi_get_prog_size(uint32_t addr);
/**
* \brief Utility function to calculate the starting address of an erase sector
* to which the given address belongs.
@ -165,6 +171,12 @@ cy_rslt_t cy_serial_flash_qspi_erase(uint32_t addr, size_t length);
*/
cy_rslt_t cy_serial_flash_qspi_enable_xip(bool enable);
/**
* \brief Changes QSPI interrupt priority
* \param priority interrupt priority to be set
*/
void cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority);
#if defined(__cplusplus)
}
#endif

View File

@ -1,29 +1,28 @@
/***************************************************************************//**
* \file SDIO_HOST_cfg.h
*
* \brief
* This file provides the configuration of the UDB based SDIO driver.
*
********************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file COMPONENT_UDB_SDIO_P12/SDIO_HOST_cfg.h
*
* \brief
* This file provides the configuration of the UDB based SDIO driver.
*
***************************************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
#if !defined(CY_SDIO_CFG_H)
#define CY_SDIO_CFG_H
#pragma once
#include <string.h>
@ -95,10 +94,10 @@ extern "C" {
#define CYREG_UDB_UDBIF_INT_CLK_CTL 0x40347904u
/*************Defines for UDBs from Creator*****************************/
/***********These come for cyfitter.h**********************************/
// *************Defines for UDBs from Creator*****************************
// ***********These come for cyfitter.h**********************************
/* SDIO_HOST_bSDIO */
// SDIO_HOST_bSDIO
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_A0_REG 0x40341008u
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_A1_REG 0x40341108u
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_D0_REG 0x40341208u
@ -764,79 +763,80 @@ extern "C" {
#define SDIO_HOST_Write_DMA_DW__TR_IN TRIG1_OUT_CPUSS_DW1_TR_IN1
/***************************CMD DMA***************************************/
// **************************CMD DMA***************************************
#define SDIO_HOST_CMD_DMA_DW_BLOCK (0u)
#define SDIO_HOST_CMD_DMA_DW_CHANNEL (1u)
#define SDIO_HOST_CMD_DMA_HW (DW0)
#define SDIO_HOST_CMD_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_CMD_DMA_PRIORITY (1u)
#define SDIO_HOST_CMD_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_CMD_DMA_PREEMPTABLE (true)
#define SDIO_HOST_CMD_DMA_BUFFERABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc;
/***************************Read DMA***************************************/
// **************************Read DMA***************************************
#define SDIO_HOST_Read_DMA_DW_BLOCK (1u)
#define SDIO_HOST_Read_DMA_DW_CHANNEL (3u)
#define SDIO_HOST_Read_DMA_HW (DW1)
#define SDIO_HOST_Read_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Read_DMA_PRIORITY (0u)
#define SDIO_HOST_Read_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Read_DMA_PREEMPTABLE (false)
#define SDIO_HOST_Read_DMA_BUFFERABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Read_DMA_Read_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Read_DMA_Read_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Read_DMA_Read_DMA_Desc;
/***************************Resp DMA***************************************/
// **************************Resp DMA***************************************
#define SDIO_HOST_Resp_DMA_DW_BLOCK (0u)
#define SDIO_HOST_Resp_DMA_DW_CHANNEL (0u)
#define SDIO_HOST_Resp_DMA_HW (DW0)
#define SDIO_HOST_Resp_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Resp_DMA_PRIORITY (1u)
#define SDIO_HOST_Resp_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Resp_DMA_PREEMPTABLE (true)
#define SDIO_HOST_Resp_DMA_BUFFERABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc;
/***************************Write DMA***************************************/
// **************************Write DMA***************************************
#define SDIO_HOST_Write_DMA_DW_BLOCK (1u)
#define SDIO_HOST_Write_DMA_DW_CHANNEL (1u)
#define SDIO_HOST_Write_DMA_HW (DW1)
#define SDIO_HOST_Write_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Write_DMA_PRIORITY (0u)
#define SDIO_HOST_Write_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Write_DMA_PREEMPTABLE (false)
#define SDIO_HOST_Write_DMA_BUFFERABLE (true)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Write_DMA_Write_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Write_DMA_Write_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Write_DMA_Write_DMA_Desc;
/***************************SDIO Clock**************************************/
// **************************SDIO Clock**************************************
/** The peripheral clock divider number */
#define SDIO_HOST_Internal_Clock_DIV_NUM ((uint32_t)SDIO_HOST_Internal_Clock__DIV_NUM)
/** The peripheral clock divider type */
#define SDIO_HOST_Internal_Clock_DIV_TYPE ((cy_en_divider_types_t)SDIO_HOST_Internal_Clock__DIV_TYPE)
#define SDIO_HOST_Internal_Clock_DIV_TYPE \
((cy_en_divider_types_t)SDIO_HOST_Internal_Clock__DIV_TYPE)
/*Function for configuring TriggerMuxes*/
// Function for configuring TriggerMuxes
void SDIO_Host_Config_TriggerMuxes(void);
/*Function for configuring UDBs*/
// Function for configuring UDBs
void SDIO_Host_Config_UDBs(void);
/* SDIO_HOST_Read_Int */
// SDIO_HOST_Read_Int
#define SDIO_HOST_Read_Int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_Read_Int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Read_Int__INTC_NUMBER 69u
@ -844,7 +844,7 @@ void SDIO_Host_Config_UDBs(void);
#define SDIO_HOST_Read_Int_INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Read_Int_INTC_NUMBER 69u
/* SDIO_HOST_sdio_int */
// SDIO_HOST_sdio_int
#define SDIO_HOST_sdio_int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_sdio_int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_sdio_int__INTC_NUMBER 122u
@ -852,7 +852,7 @@ void SDIO_Host_Config_UDBs(void);
#define SDIO_HOST_sdio_int_INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_sdio_int_INTC_NUMBER 122u
/* SDIO_HOST_Write_Int */
// SDIO_HOST_Write_Int
#define SDIO_HOST_Write_Int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_Write_Int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Write_Int__INTC_NUMBER 67u
@ -863,7 +863,3 @@ void SDIO_Host_Config_UDBs(void);
#if defined(__cplusplus)
}
#endif
#endif /* !defined(CY_SDIO_CFG_H) */
/* [] END OF FILE */

View File

@ -1,29 +1,28 @@
/***************************************************************************//**
* \file SDIO_HOST_cfg.h
*
* \brief
* This file provides the configuration of the UDB based SDIO driver.
*
********************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file COMPONENT_UDB_SDIO_P2/SDIO_HOST_cfg.h
*
* \brief
* This file provides the configuration of the UDB based SDIO driver.
*
***************************************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
#if !defined(CY_SDIO_CFG_H)
#define CY_SDIO_CFG_H
#pragma once
#include <string.h>
@ -95,10 +94,10 @@ extern "C" {
#define CYREG_UDB_UDBIF_INT_CLK_CTL 0x40347904u
/*************Defines for UDBs from Creator*****************************/
/***********These come for cyfitter.h**********************************/
// *************Defines for UDBs from Creator*****************************
// ***********These come for cyfitter.h**********************************
/* TFT_DMA */
// TFT_DMA
#define TFT_DMA_DW__BLOCK_HW DW0
#define TFT_DMA_DW__BLOCK_NUMBER 0u
#define TFT_DMA_DW__CHANNEL_HW DW0_CH_STRUCT2
@ -106,7 +105,7 @@ extern "C" {
#define TFT_DMA_DW__TR_IN TRIG0_OUT_CPUSS_DW0_TR_IN2
#define TFT_DMA_DW__TR_OUT TRIG10_IN_CPUSS_DW0_TR_OUT2
/* TFT_CTRL */
// TFT_CTRL
#define TFT_CTRL_Sync_ctrl_reg__0__MASK 0x01u
#define TFT_CTRL_Sync_ctrl_reg__0__POS 0
#define TFT_CTRL_Sync_ctrl_reg__1__MASK 0x02u
@ -137,7 +136,7 @@ extern "C" {
#define TFT_CTRL_Sync_ctrl_reg__SC_CFG0 0x40342AD4u
#define TFT_CTRL_Sync_ctrl_reg__SC_CFG1 0x40342AD8u
/* SDIO_HOST */
// SDIO_HOST
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_A0_REG 0x4034101Cu
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_A1_REG 0x4034111Cu
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_D0_REG 0x4034121Cu
@ -830,75 +829,75 @@ extern "C" {
#define SDIO_HOST_Write_DMA_DW__TR_IN TRIG1_OUT_CPUSS_DW1_TR_IN1
/***************************CMD DMA***************************************/
// ***************************CMD DMA***************************************
#define SDIO_HOST_CMD_DMA_DW_BLOCK (0u)
#define SDIO_HOST_CMD_DMA_DW_CHANNEL (1u)
#define SDIO_HOST_CMD_DMA_HW (DW0)
#define SDIO_HOST_CMD_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_CMD_DMA_PRIORITY (1u)
#define SDIO_HOST_CMD_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_CMD_DMA_PREEMPTABLE (true)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc;
/***************************Read DMA***************************************/
// ***************************Read DMA***************************************
#define SDIO_HOST_Read_DMA_DW_BLOCK (1u)
#define SDIO_HOST_Read_DMA_DW_CHANNEL (3u)
#define SDIO_HOST_Read_DMA_HW (DW1)
#define SDIO_HOST_Read_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Read_DMA_PRIORITY (0u)
#define SDIO_HOST_Read_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Read_DMA_PREEMPTABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Read_DMA_Read_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Read_DMA_Read_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Read_DMA_Read_DMA_Desc;
/***************************Resp DMA***************************************/
// ***************************Resp DMA***************************************
#define SDIO_HOST_Resp_DMA_DW_BLOCK (0u)
#define SDIO_HOST_Resp_DMA_DW_CHANNEL (0u)
#define SDIO_HOST_Resp_DMA_HW (DW0)
#define SDIO_HOST_Resp_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Resp_DMA_PRIORITY (1u)
#define SDIO_HOST_Resp_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Resp_DMA_PREEMPTABLE (true)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc;
/***************************Write DMA***************************************/
// ***************************Write DMA***************************************
#define SDIO_HOST_Write_DMA_DW_BLOCK (1u)
#define SDIO_HOST_Write_DMA_DW_CHANNEL (1u)
#define SDIO_HOST_Write_DMA_HW (DW1)
#define SDIO_HOST_Write_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Write_DMA_PRIORITY (0u)
#define SDIO_HOST_Write_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Write_DMA_PREEMPTABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Write_DMA_Write_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Write_DMA_Write_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Write_DMA_Write_DMA_Desc;
/***************************SDIO Clock**************************************/
/* The peripheral clock divider number */
// ***************************SDIO Clock**************************************
// The peripheral clock divider number
#define SDIO_HOST_Internal_Clock_DIV_NUM ((uint32_t)0)
/* The peripheral clock divider type */
// The peripheral clock divider type
#define SDIO_HOST_Internal_Clock_DIV_TYPE ((cy_en_divider_types_t)CY_SYSCLK_DIV_8_BIT)
/*Function for configuring TriggerMuxes*/
// Function for configuring TriggerMuxes
void SDIO_Host_Config_TriggerMuxes(void);
/*Function for configuring UDBs*/
// Function for configuring UDBs
void SDIO_Host_Config_UDBs(void);
/* SDIO_HOST_Read_Int */
// SDIO_HOST_Read_Int
#define SDIO_HOST_Read_Int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_Read_Int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Read_Int__INTC_NUMBER 69u
@ -906,7 +905,7 @@ void SDIO_Host_Config_UDBs(void);
#define SDIO_HOST_Read_Int_INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Read_Int_INTC_NUMBER 69u
/* SDIO_HOST_sdio_int */
// SDIO_HOST_sdio_int
#define SDIO_HOST_sdio_int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_sdio_int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_sdio_int__INTC_NUMBER 122u
@ -914,7 +913,7 @@ void SDIO_Host_Config_UDBs(void);
#define SDIO_HOST_sdio_int_INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_sdio_int_INTC_NUMBER 122u
/* SDIO_HOST_Write_Int */
// SDIO_HOST_Write_Int
#define SDIO_HOST_Write_Int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_Write_Int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Write_Int__INTC_NUMBER 67u
@ -925,7 +924,3 @@ void SDIO_Host_Config_UDBs(void);
#if defined(__cplusplus)
}
#endif
#endif /* !defined(CY_SDIO_CFG_H) */
/* [] END OF FILE */

View File

@ -1,29 +1,28 @@
/***************************************************************************//**
* \file SDIO_HOST_cfg.h
*
* \brief
* This file provides the configuration of the UDB based SDIO driver.
*
********************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file COMPONENT_UDB_SDIO_P9/SDIO_HOST_cfg.h
*
* \brief
* This file provides the configuration of the UDB based SDIO driver.
*
***************************************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
#if !defined(CY_SDIO_CFG_H)
#define CY_SDIO_CFG_H
#pragma once
#include <string.h>
@ -95,10 +94,10 @@ extern "C" {
#define CYREG_UDB_UDBIF_INT_CLK_CTL 0x40347904u
/*************Defines for UDBs from Creator*****************************/
/***********These come for cyfitter.h**********************************/
// *************Defines for UDBs from Creator*****************************
// ***********These come for cyfitter.h**********************************
/* SDIO_HOST_bSDIO */
// SDIO_HOST_bSDIO
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_A0_REG 0x40341008u
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_A1_REG 0x40341108u
#define SDIO_HOST_bSDIO_blockCounter_u0__16BIT_D0_REG 0x40341208u
@ -764,75 +763,76 @@ extern "C" {
#define SDIO_HOST_Write_DMA_DW__TR_IN TRIG1_OUT_CPUSS_DW1_TR_IN1
/***************************CMD DMA***************************************/
// ***************************CMD DMA***************************************
#define SDIO_HOST_CMD_DMA_DW_BLOCK (0u)
#define SDIO_HOST_CMD_DMA_DW_CHANNEL (1u)
#define SDIO_HOST_CMD_DMA_HW (DW0)
#define SDIO_HOST_CMD_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_CMD_DMA_PRIORITY (1u)
#define SDIO_HOST_CMD_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_CMD_DMA_PREEMPTABLE (true)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_CMD_DMA_CMD_DMA_Desc;
/***************************Read DMA***************************************/
// ***************************Read DMA***************************************
#define SDIO_HOST_Read_DMA_DW_BLOCK (1u)
#define SDIO_HOST_Read_DMA_DW_CHANNEL (3u)
#define SDIO_HOST_Read_DMA_HW (DW1)
#define SDIO_HOST_Read_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Read_DMA_PRIORITY (0u)
#define SDIO_HOST_Read_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Read_DMA_PREEMPTABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Read_DMA_Read_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Read_DMA_Read_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Read_DMA_Read_DMA_Desc;
/***************************Resp DMA***************************************/
// ***************************Resp DMA***************************************
#define SDIO_HOST_Resp_DMA_DW_BLOCK (0u)
#define SDIO_HOST_Resp_DMA_DW_CHANNEL (0u)
#define SDIO_HOST_Resp_DMA_HW (DW0)
#define SDIO_HOST_Resp_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Resp_DMA_PRIORITY (1u)
#define SDIO_HOST_Resp_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Resp_DMA_PREEMPTABLE (true)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Resp_DMA_Resp_DMA_Desc;
/***************************Write DMA***************************************/
// ***************************Write DMA***************************************
#define SDIO_HOST_Write_DMA_DW_BLOCK (1u)
#define SDIO_HOST_Write_DMA_DW_CHANNEL (1u)
#define SDIO_HOST_Write_DMA_HW (DW1)
#define SDIO_HOST_Write_DMA_INTR_MASK (CY_DMA_INTR_MASK)
/* Channel settings */
// Channel settings
#define SDIO_HOST_Write_DMA_PRIORITY (0u)
#define SDIO_HOST_Write_DMA_DESCRIPTOR_NUM (1u)
#define SDIO_HOST_Write_DMA_PREEMPTABLE (false)
extern cy_stc_dma_descriptor_config_t SDIO_HOST_Write_DMA_Write_DMA_Desc_config;
extern cy_stc_dma_descriptor_t SDIO_HOST_Write_DMA_Write_DMA_Desc;
extern cy_stc_dma_descriptor_t SDIO_HOST_Write_DMA_Write_DMA_Desc;
/***************************SDIO Clock**************************************/
// ***************************SDIO Clock**************************************
/** The peripheral clock divider number */
#define SDIO_HOST_Internal_Clock_DIV_NUM ((uint32_t)SDIO_HOST_Internal_Clock__DIV_NUM)
/** The peripheral clock divider type */
#define SDIO_HOST_Internal_Clock_DIV_TYPE ((cy_en_divider_types_t)SDIO_HOST_Internal_Clock__DIV_TYPE)
#define SDIO_HOST_Internal_Clock_DIV_TYPE \
((cy_en_divider_types_t)SDIO_HOST_Internal_Clock__DIV_TYPE)
/*Function for configuring TriggerMuxes*/
// Function for configuring TriggerMuxes
void SDIO_Host_Config_TriggerMuxes(void);
/*Function for configuring UDBs*/
// Function for configuring UDBs
void SDIO_Host_Config_UDBs(void);
/* SDIO_HOST_Read_Int */
// SDIO_HOST_Read_Int
#define SDIO_HOST_Read_Int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_Read_Int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Read_Int__INTC_NUMBER 69u
@ -840,7 +840,7 @@ void SDIO_Host_Config_UDBs(void);
#define SDIO_HOST_Read_Int_INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Read_Int_INTC_NUMBER 69u
/* SDIO_HOST_sdio_int */
// SDIO_HOST_sdio_int
#define SDIO_HOST_sdio_int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_sdio_int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_sdio_int__INTC_NUMBER 122u
@ -848,7 +848,7 @@ void SDIO_Host_Config_UDBs(void);
#define SDIO_HOST_sdio_int_INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_sdio_int_INTC_NUMBER 122u
/* SDIO_HOST_Write_Int */
// SDIO_HOST_Write_Int
#define SDIO_HOST_Write_Int__INTC_CORTEXM4_ASSIGNED 1
#define SDIO_HOST_Write_Int__INTC_CORTEXM4_PRIORITY 7u
#define SDIO_HOST_Write_Int__INTC_NUMBER 67u
@ -859,7 +859,3 @@ void SDIO_Host_Config_UDBs(void);
#if defined(__cplusplus)
}
#endif
#endif /* !defined(CY_SDIO_CFG_H) */
/* [] END OF FILE */

View File

@ -0,0 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

View File

@ -1,59 +1,58 @@
/***************************************************************************//**
* \file SDIO_HOST.h
*
* \brief
* This file provides types definition, constants and function definition for
* the SDIO driver.
*
********************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/***********************************************************************************************//**
* \file SDIO_HOST.h
*
* \brief
* This file provides types definition, constants and function definition for
* the SDIO driver.
*
***************************************************************************************************
* \copyright
* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**************************************************************************************************/
/**
* \defgroup group_bsp_pin_state Pin States
* \defgroup group_bsp_pins Pin Mappings
* \defgroup group_bsp_macros Macros
* \defgroup group_bsp_functions Functions
*
* \defgroup group_udb_sdio UDB_SDIO
* \{
* SDIO - Secure Digital Input Output is a standard for communicating with various
* \defgroup group_bsp_pin_state Pin States
* \defgroup group_bsp_pins Pin Mappings
* \defgroup group_bsp_macros Macros
* \defgroup group_bsp_functions Functions
*
* \defgroup group_udb_sdio UDB_SDIO
* \{
* SDIO - Secure Digital Input Output is a standard for communicating with various
external devices such as Wifi and bluetooth devices.
* <p>
* The driver is currently designed to only support communication with certain
* Cypress Wifi and Bluetooth chipsets, it is not designed to work with a general
* SDIO card, or even and SD card. It is only intended to be used by the WiFi
* driver for communication.
* <p>
* This is not intended to be used as a general purpose API.
*
* \section group_udb_sdio_section_configuration_considerations Configuration Considerations
* Features:
* * Always Four Wire Mode
* * Supports Card Interrupt
* * Uses DMA for command and data transfer
*
* \defgroup group_udb_sdio_macros Macros
* \defgroup group_udb_sdio_functions Functions
* \defgroup group_udb_sdio_data_structures Data Structures
*/
* <p>
* The driver is currently designed to only support communication with certain
* Cypress Wifi and Bluetooth chipsets, it is not designed to work with a general
* SDIO card, or even and SD card. It is only intended to be used by the WiFi
* driver for communication.
* <p>
* This is not intended to be used as a general purpose API.
*
* \section group_udb_sdio_section_configuration_considerations Configuration Considerations
* Features:
* * Always Four Wire Mode
* * Supports Card Interrupt
* * Uses DMA for command and data transfer
*
* \defgroup group_udb_sdio_macros Macros
* \defgroup group_udb_sdio_functions Functions
* \defgroup group_udb_sdio_data_structures Data Structures
*/
#if !defined(CY_SDIO_H)
#define CY_SDIO_H
#pragma once
#if defined(CYHAL_UDB_SDIO)
#include "SDIO_HOST_cfg.h"
@ -63,23 +62,25 @@ extern "C" {
#endif
/***************************************
* API Constants
***************************************/
//==================================================================================================
// API Constants
//==================================================================================================
/**
* \addtogroup group_udb_sdio_macros
* \{
*/
* \addtogroup group_udb_sdio_macros
* \{
*/
#define SDIO_CMD_TIMEOUT (100000u) /**< Value used for firmware timeout*/
#define SDIO_DAT_TIMEOUT (500000u) /**< Value used for firmware timeout*/
#define SDIO_SRC_CLK_FREQ_HZ (10000000u) /**< Frequency of CLK_PERI*/
#define SDIO_ENABLE_CNT (0x20u) /**< Bit to set in Aux Ctrl reg to enable 7 bit counters.*/
#define SDIO_CMD_TIMEOUT (100000u) /**< Value used for firmware timeout*/
#define SDIO_DAT_TIMEOUT (500000u) /**< Value used for firmware timeout*/
#define SDIO_DAT_BUSY_TIMEOUT_MS (500u) /**< Value used for firmware timeout*/
#define SDIO_SRC_CLK_FREQ_HZ (10000000u) /**< Frequency of CLK_PERI*/
#define SDIO_ENABLE_CNT (0x20u) /**< Bit to set in Aux Ctrl reg to enable 7
bit counters*/
/*!
\defgroup group_sdio_cmd_constants Constants for the command channel
*/
\defgroup group_sdio_cmd_constants Constants for the command channel
*/
/* @{*/
#define SDIO_HOST_DIR (0x40u) /**< Direction bit set in command */
#define SDIO_CMD_END_BIT (0x01u) /**< End bit set in command*/
@ -88,35 +89,41 @@ extern "C" {
/*@} group_sdio_cmd_constants */
/*!
\defgroup group_sdio_ctrl_reg SDIO control register bits
*/
\defgroup group_sdio_ctrl_reg SDIO control register bits
*/
/* @{*/
#define SDIO_CTRL_INT_CLK (0x01u) /**< Enable the internal clock running the SDIO block*/
#define SDIO_CTRL_INT_CLK (0x01u) /**< Enable the internal clock running the SDIO
block*/
#define SDIO_CTRL_SD_CLK (0x02u) /**< Enable the the SD Clock*/
#define SDIO_CTRL_ENABLE_WRITE (0x04u) /**< Enable a write, should not be set if ENABLE_READ is set*/
#define SDIO_CTRL_ENABLE_READ (0x08u) /**< Enable a read, should not be set if ENABLE_WRITE is set*/
#define SDIO_CTRL_SKIP_RESPONSE (0x10u) /**< If set no response is required for the command*/
#define SDIO_CTRL_ENABLE_WRITE (0x04u) /**< Enable a write, should not be set if
ENABLE_READ is set*/
#define SDIO_CTRL_ENABLE_READ (0x08u) /**< Enable a read, should not be set if
ENABLE_WRITE is set*/
#define SDIO_CTRL_SKIP_RESPONSE (0x10u) /**< If set no response is required for the
command*/
#define SDIO_CTRL_RESET (0x20u) /**< If set the SDIO interface is reset*/
#define SDIO_CTRL_RESET_DP (0x40u) /**< If set the SDIO interface is reset*/
#define SDIO_CTRL_ENABLE_INT (0x80u) /**< Enables logic to detect card interrupt*/
/*@} group_sdio_ctrl_reg */
/*!
\defgroup group_sdio_status_reg SDIO status register bits
*/
\defgroup group_sdio_status_reg SDIO status register bits
*/
/* @{*/
#define SDIO_STS_CMD_DONE (0x01u) /**< The command is done*/
#define SDIO_STS_WRITE_DONE (0x02u) /**< All data for a write has been sent*/
#define SDIO_STS_READ_DONE (0x04u) /**< All data for a read has been read*/
#define SDIO_STS_CRC_ERR (0x08u) /**< A CRC error was detected during a read or write*/
#define SDIO_STS_CRC_ERR (0x08u) /**< A CRC error was detected during a read or
write*/
#define SDIO_STS_CMD_IDLE (0x10u) /**< The command channel is idle*/
#define SDIO_STS_DAT_IDLE (0x20u) /**< The data channel is idle*/
#define SDIO_STS_CARD_INT (0x40u) /**< The SDIO card indicated an interrupt by driving DAT[1] low*/
#define SDIO_STS_CARD_INT (0x40u) /**< The SDIO card indicated an interrupt by
driving DAT[1] low*/
/*@} group_sdio_status_reg */
/*!
\defgroup group_sdio_crc Constants for 7bit CRC for command
*/
\defgroup group_sdio_crc Constants for 7bit CRC for command
*/
/* @{*/
#define SDIO_CRC7_POLY (0x12u) /**< Value of CRC polynomial*/
#define SDIO_CRC_UPPER_BIT (0x80u) /**< Upper bit to test if it is high*/
@ -125,166 +132,168 @@ extern "C" {
/** \} group_udb_sdio_macros */
/***************************************
* Type Definitions
***************************************/
//==================================================================================================
// Type Definitions
//==================================================================================================
/**
* \addtogroup group_udb_sdio_data_structures
* \{
*/
* \addtogroup group_udb_sdio_data_structures
* \{
*/
/**
* Create a type for the card interrupt call back
*/
* Create a type for the card interrupt call back
*/
typedef void (* sdio_card_int_cb_t)(void);
/**
* \brief This enum is used when checking for specific events
*/
* \brief This enum is used when checking for specific events
*/
typedef enum en_sdio_event
{
SdCmdEventCmdDone = (1u), /**< Check to see if a command is done*/
SdCmdEventTransferDone = (2u) /**< Check to see if a transfer is done*/
}en_sdio_event_t;
SdCmdEventCmdDone = (1u), /**< Check to see if a command is done*/
SdCmdEventTransferDone = (2u) /**< Check to see if a transfer is done*/
} en_sdio_event_t;
/**
* \brief Used to indicate the result of a function
*/
* \brief Used to indicate the result of a function
*/
typedef enum en_sdio_result
{
Ok = 0x00, /**< No error*/
Error = 0x01, /**< Non-specific error code*/
CommandCrcError = 0x02, /**< There was a CRC error on the Command/Response*/
CommandIdxError = 0x04, /**< The index for the command didn't match*/
CommandEndError = 0x08, /**< There was an end bit error on the command*/
DataCrcError = 0x10, /**< There was a data CRC Error*/
CMDTimeout = 0x20, /**< The command didn't finish before the timeout period was over*/
DataTimeout = 0x40, /**< The data didn't finish before the timeout period was over*/
Ok = 0x00, /**< No error*/
Error = 0x01, /**< Non-specific error code*/
CommandCrcError = 0x02, /**< There was a CRC error on the Command/Response*/
CommandIdxError = 0x04, /**< The index for the command didn't match*/
CommandEndError = 0x08, /**< There was an end bit error on the command*/
DataCrcError = 0x10, /**< There was a data CRC Error*/
CMDTimeout = 0x20, /**< The command didn't finish before the timeout period
was over*/
DataTimeout = 0x40, /**< The data didn't finish before the timeout period
was over*/
ResponseFlagError = 0x80 /**< There was an error in the response flag for command 53*/
} en_sdio_result_t;
/**
* \brief Flags used to indicate an event occurred, set in the interrupt, cleared in the check events function
*/
* \brief Flags used to indicate an event occurred, set in the interrupt, cleared in the check
* events function
*/
typedef struct stc_sdcmd_event_flag
{
uint8_t u8CmdComplete; /**< If non-zero a command has completed*/
uint8_t u8TransComplete; /**< If non-zero a transfer has completed*/
uint8_t u8CRCError; /**< If non-zero a CRC error was detected in a data transfer*/
}stc_sdio_event_flag_t;
uint8_t u8CmdComplete; /**< If non-zero a command has completed*/
uint8_t u8TransComplete; /**< If non-zero a transfer has completed*/
uint8_t u8CRCError; /**< If non-zero a CRC error was detected in a data
transfer*/
} stc_sdio_event_flag_t;
/**
* \brief Holds pointers to callback functions
*/
* \brief Holds pointers to callback functions
*/
typedef struct stc_sdio_irq_cb
{
sdio_card_int_cb_t pfnCardIntCb; /**< Pointer to card interrupt callback function*/
}stc_sdio_irq_cb_t;
} stc_sdio_irq_cb_t;
/**
* \brief Global structure used to hold data from interrupt and other functions
*/
* \brief Global structure used to hold data from interrupt and other functions
*/
typedef struct stc_sdio_gInternalData
{
stc_sdio_irq_cb_t pstcCallBacks; /**< Holds pointers to all the call back functions*/
stc_sdio_event_flag_t stcEvents; /**< Holds all of the event count flags, set in interrupt used in check events*/
}stc_sdio_gInternalData_t;
stc_sdio_irq_cb_t pstcCallBacks; /**< Holds pointers to all the call back functions*/
stc_sdio_event_flag_t stcEvents; /**< Holds all of the event count flags, set in
interrupt used in check events*/
} stc_sdio_gInternalData_t;
/**
* \brief structure used for configuring command
*/
* \brief structure used for configuring command
*/
typedef struct stc_sdio_cmd_config
{
uint8_t u8CmdIndex; /**< Command index*/
uint32_t u32Argument; /**< The argument of command */
uint8_t bResponseRequired; /**< TRUE: A Response is required*/
uint8_t *pu8ResponseBuf; /**< Pointer to location to store response*/
}stc_sdio_cmd_config_t;
uint8_t u8CmdIndex; /**< Command index*/
uint32_t u32Argument; /**< The argument of command */
uint8_t bResponseRequired; /**< TRUE: A Response is required*/
uint8_t* pu8ResponseBuf; /**< Pointer to location to store response*/
} stc_sdio_cmd_config_t;
/**
* \brief structure used for the data channel
*/
* \brief structure used for the data channel
*/
typedef struct stc_sdio_data_config
{
uint8_t bRead; /**< TRUE: Read, FALSE: write*/
uint16_t u16BlockSize; /**< Block size*/
uint16_t u16BlockCount; /**< Holds the number of blocks to send*/
uint8_t *pu8Data; /**< Pointer data buffer*/
}stc_sdio_data_config_t;
uint8_t bRead; /**< TRUE: Read, FALSE: write*/
uint16_t u16BlockSize; /**< Block size*/
uint16_t u16BlockCount; /**< Holds the number of blocks to send*/
uint8_t* pu8Data; /**< Pointer data buffer*/
} stc_sdio_data_config_t;
/**
* \brief structure used for configuring command and data
*/
* \brief structure used for configuring command and data
*/
typedef struct stc_sdio_cmd
{
uint32_t u32CmdIdx; /**< Command index*/
uint32_t u32Arg; /**< The argument of command*/
uint32_t *pu32Response; /**< Pointer to location to store response*/
uint8_t *pu8Data; /**< Pointer data buffer*/
uint8_t bRead; /**< TRUE: Read, FALSE: write*/
uint16_t u16BlockCnt; /**< Number of blocks to send*/
uint16_t u16BlockSize; /**< Block size*/
}stc_sdio_cmd_t;
uint32_t u32CmdIdx; /**< Command index*/
uint32_t u32Arg; /**< The argument of command*/
uint32_t* pu32Response; /**< Pointer to location to store response*/
uint8_t* pu8Data; /**< Pointer data buffer*/
uint8_t bRead; /**< TRUE: Read, FALSE: write*/
uint16_t u16BlockCnt; /**< Number of blocks to send*/
uint16_t u16BlockSize; /**< Block size*/
} stc_sdio_cmd_t;
/** \} group_udb_sdio_data_structures */
/***************************************
* Function Prototypes
***************************************/
//==================================================================================================
// Function Prototypes
//==================================================================================================
/**
* \addtogroup group_udb_sdio_functions
* \{
*/
* \addtogroup group_udb_sdio_functions
* \{
*/
/* Main functions*/
void SDIO_Init(stc_sdio_irq_cb_t* pfuCb);
en_sdio_result_t SDIO_SendCommandAndWait(stc_sdio_cmd_t *pstcCmd);
void SDIO_EnableIntClock(void);
void SDIO_DisableIntClock(void);
void SDIO_EnableSdClk(void);
void SDIO_DisableSdClk(void);
void SDIO_SetSdClkFrequency(uint32_t u32SdClkFreqHz);
void SDIO_Reset(void);
void SDIO_EnableChipInt(void);
void SDIO_DisableChipInt(void);
void SDIO_Free(void);
// Main functions
void SDIO_Init(stc_sdio_irq_cb_t* pfuCb);
en_sdio_result_t SDIO_SendCommandAndWait(stc_sdio_cmd_t* pstcCmd);
void SDIO_EnableIntClock(void);
void SDIO_DisableIntClock(void);
void SDIO_EnableSdClk(void);
void SDIO_DisableSdClk(void);
void SDIO_SetSdClkFrequency(uint32_t u32SdClkFreqHz);
void SDIO_Reset(void);
void SDIO_EnableChipInt(void);
void SDIO_DisableChipInt(void);
void SDIO_Free(void);
/*Low Level Functions*/
void SDIO_SendCommand(stc_sdio_cmd_config_t *pstcCmdConfig);
en_sdio_result_t SDIO_GetResponse(uint8_t bCmdIndexCheck, uint8_t bCmdCrcCheck, uint8_t u8CmdIdx, uint32_t* pu32Response, uint8_t* pu8ResponseBuf);
void SDIO_InitDataTransfer(stc_sdio_data_config_t *pstcDataConfig);
en_sdio_result_t SDIO_CheckForEvent(en_sdio_event_t enEventType);
uint8_t SDIO_CalculateCrc7(uint8_t* pu8Data, uint8_t pu8Size);
void SDIO_SetBlockSize(uint8_t u8ByteCount);
void SDIO_SetNumBlocks(uint8_t u8BlockCount);
// Low Level Functions
void SDIO_SendCommand(stc_sdio_cmd_config_t* pstcCmdConfig);
en_sdio_result_t SDIO_GetResponse(uint8_t bCmdIndexCheck, uint8_t bCmdCrcCheck, uint8_t u8CmdIdx,
uint32_t* pu32Response, uint8_t* pu8ResponseBuf);
void SDIO_InitDataTransfer(stc_sdio_data_config_t* pstcDataConfig);
en_sdio_result_t SDIO_CheckForEvent(en_sdio_event_t enEventType);
uint8_t SDIO_CalculateCrc7(uint8_t* pu8Data, uint8_t pu8Size);
void SDIO_SetBlockSize(uint8_t u8ByteCount);
void SDIO_SetNumBlocks(uint8_t u8BlockCount);
/*DMA setup function*/
void SDIO_SetupDMA(void);
// DMA setup function
void SDIO_SetupDMA(void);
/*Interrupt Function*/
void SDIO_IRQ(void);
void SDIO_READ_DMA_IRQ(void);
void SDIO_WRITE_DMA_IRQ(void);
// Interrupt Function
void SDIO_IRQ(void);
void SDIO_READ_DMA_IRQ(void);
void SDIO_WRITE_DMA_IRQ(void);
void SDIO_Crc7Init(void);
void SDIO_Crc7Init(void);
cy_en_syspm_status_t SDIO_DeepSleepCallback(cy_stc_syspm_callback_params_t *params, cy_en_syspm_callback_mode_t mode);
cy_en_syspm_status_t SDIO_DeepSleepCallback(cy_stc_syspm_callback_params_t* params,
cy_en_syspm_callback_mode_t mode);
/** \endcond */
/** \} group_udb_sdio_functions */
/***************************************
* Hardware Registers
***************************************/
//==================================================================================================
// Hardware Registers
//==================================================================================================
/** \cond INTERNAL */
@ -390,10 +399,6 @@ SDIO_HOST_bSDIO_byteCounter__PERIOD_REG)
}
#endif
#endif /* defined(CYHAL_UDB_SDIO) */
#endif /* (CY_SDIO_H) */
#endif // defined(CYHAL_UDB_SDIO)
/** \} group_udb_sdio */
/* [] END OF FILE */

View File

@ -0,0 +1 @@
<version>.19666</version>

View File

@ -0,0 +1 @@
<version>.19214</version>

View File

@ -34,8 +34,8 @@ static bool cy_us_ticker_initialized = false;
static cy_en_syspm_status_t cy_us_ticker_pm_callback(cy_stc_syspm_callback_params_t *params, cy_en_syspm_callback_mode_t mode)
{
if (mode == CY_SYSPM_AFTER_TRANSITION) {
Cy_TCPWM_Counter_Enable(cy_us_timer.base, cy_us_timer.resource.channel_num);
Cy_TCPWM_TriggerStart(cy_us_timer.base, 1u << cy_us_timer.resource.channel_num);
Cy_TCPWM_Counter_Enable(cy_us_timer.tcpwm.base, cy_us_timer.tcpwm.resource.channel_num);
Cy_TCPWM_TriggerStart(cy_us_timer.tcpwm.base, 1u << cy_us_timer.tcpwm.resource.channel_num);
}
return CY_SYSPM_SUCCESS;
}
@ -89,8 +89,8 @@ void us_ticker_init(void)
MBED_ASSERT(cy_PeriClkFreqHz >= 1000000);
uint32_t div_value = cy_PeriClkFreqHz / 1000000;
cy_us_ticker_info.frequency = cy_PeriClkFreqHz / div_value;
cy_us_ticker_info.bits = CYHAL_TCPWM_DATA[cy_us_timer.resource.block_num].max_count;
Cy_SysClk_PeriphSetDivider(cy_us_timer.clock.div_type, cy_us_timer.clock.div_num, div_value - 1u);
cy_us_ticker_info.bits = CYHAL_TCPWM_DATA[cy_us_timer.tcpwm.resource.block_num].max_count;
Cy_SysClk_PeriphSetDivider(cy_us_timer.tcpwm.clock.div_type, cy_us_timer.tcpwm.clock.div_num, div_value - 1u);
const cyhal_timer_cfg_t cfg = {
.is_continuous = true,
.direction = CYHAL_TIMER_DIR_UP,
@ -102,7 +102,7 @@ void us_ticker_init(void)
if (CY_RSLT_SUCCESS != cyhal_timer_configure(&cy_us_timer, &cfg)) {
MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_DRIVER, MBED_ERROR_CODE_FAILED_OPERATION), "cyhal_timer_set_cfg");
}
Cy_TCPWM_ClearInterrupt(cy_us_timer.base, cy_us_timer.resource.channel_num, CY_TCPWM_INT_ON_CC_OR_TC);
Cy_TCPWM_ClearInterrupt(cy_us_timer.tcpwm.base, cy_us_timer.tcpwm.resource.channel_num, CY_TCPWM_INT_ON_CC_OR_TC);
cyhal_timer_register_callback(&cy_us_timer, &cy_us_ticker_irq_handler, NULL);
if (CY_RSLT_SUCCESS != cyhal_timer_start(&cy_us_timer)) {
MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_DRIVER, MBED_ERROR_CODE_FAILED_OPERATION), "cyhal_timer_start");
@ -131,15 +131,15 @@ void us_ticker_free(void)
uint32_t us_ticker_read(void)
{
MBED_ASSERT(cy_us_ticker_initialized);
return Cy_TCPWM_Counter_GetCounter(cy_us_timer.base, cy_us_timer.resource.channel_num);
return Cy_TCPWM_Counter_GetCounter(cy_us_timer.tcpwm.base, cy_us_timer.tcpwm.resource.channel_num);
}
void us_ticker_set_interrupt(timestamp_t timestamp)
{
MBED_ASSERT(cy_us_ticker_initialized);
Cy_TCPWM_Counter_SetCompare0(cy_us_timer.base, cy_us_timer.resource.channel_num, timestamp);
if (CY_TCPWM_INT_NONE == Cy_TCPWM_GetInterruptMask(cy_us_timer.base, cy_us_timer.resource.channel_num)) {
Cy_TCPWM_ClearInterrupt(cy_us_timer.base, cy_us_timer.resource.channel_num, CY_TCPWM_INT_ON_CC_OR_TC);
Cy_TCPWM_Counter_SetCompare0(cy_us_timer.tcpwm.base, cy_us_timer.tcpwm.resource.channel_num, timestamp);
if (CY_TCPWM_INT_NONE == Cy_TCPWM_GetInterruptMask(cy_us_timer.tcpwm.base, cy_us_timer.tcpwm.resource.channel_num)) {
Cy_TCPWM_ClearInterrupt(cy_us_timer.tcpwm.base, cy_us_timer.tcpwm.resource.channel_num, CY_TCPWM_INT_ON_CC_OR_TC);
cyhal_timer_enable_event(&cy_us_timer, CYHAL_TIMER_IRQ_CAPTURE_COMPARE, CY_US_TICKER_IRQ_PRIORITY, true);
}
}
@ -159,9 +159,9 @@ void us_ticker_fire_interrupt(void)
{
MBED_ASSERT(cy_us_ticker_initialized);
// TODO: no HAL function for this. Needs to work even when masked
IRQn_Type irq = cy_us_timer.resource.block_num == 0
IRQn_Type irq = cy_us_timer.tcpwm.resource.block_num == 0
? tcpwm_0_interrupts_0_IRQn : tcpwm_1_interrupts_0_IRQn;
irq = (IRQn_Type)(irq + cy_us_timer.resource.channel_num);
irq = (IRQn_Type)(irq + cy_us_timer.tcpwm.resource.channel_num);
NVIC_SetPendingIRQ(irq);
}

View File

@ -0,0 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

View File

@ -6,7 +6,7 @@
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");

View File

@ -6,7 +6,7 @@
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -89,6 +89,7 @@ cy_rslt_t cy_resource_read(const cy_resource_handle_t *handle, uint32_t blockno,
switch (handle->location)
{
case CY_RESOURCE_IN_MEMORY:
CY_UNUSED_PARAMETER(blockno); /* CY_ASSERT only processes in DEBUG, ignores for others */
CY_ASSERT(0 == blockno);
memcpy(*buffer, handle->val.mem_data, *size);
return CY_RSLT_SUCCESS;

View File

@ -0,0 +1 @@
<version>1.0.0.17634</version>

View File

@ -0,0 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

View File

@ -66,7 +66,7 @@ typedef osSemaphoreId_t cy_semaphore_t; /** CMSIS definition of a
typedef osEventFlagsId_t cy_event_t; /** CMSIS definition of an event */
typedef osMessageQueueId_t cy_queue_t; /** CMSIS definition of a message queue */
typedef osTimerId_t cy_timer_t; /** CMSIS definition of a timer */
typedef uint32_t cy_timer_callback_arg_t; /** Argument passed to the timer callback function */
typedef void * cy_timer_callback_arg_t; /** Argument passed to the timer callback function */
typedef uint32_t cy_time_t; /** Time in milliseconds */
typedef osStatus_t cy_rtos_error_t; /** CMSIS definition of a error status */

View File

@ -176,8 +176,8 @@ cy_rtos_error_t cy_rtos_last_error();
*
* This function is called to startup a new thread. If the thread can exit, it must call
* \ref cy_rtos_exit_thread() just before doing so. All created threads that can terminate, either
* by themselves or forcefully by another thread MUST be joined in order to cleanup any resources
* that might have been allocated for them.
* by themselves or forcefully by another thread MUST have \ref cy_rtos_join_thread() called on them
* by another thread in order to cleanup any resources that might have been allocated for them.
*
* @param[out] thread Pointer to a variable which will receive the new thread handle
* @param[in] entry_function Function pointer which points to the main function for the new thread

View File

@ -1 +1 @@
<version>1.2.1.13635</version>
<version>1.3.0.17634</version>

View File

@ -0,0 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

View File

@ -188,13 +188,31 @@ typedef uint32_t cy_rslt_t;
/** Module identifier for the WiFi Host Driver + Board Support Integration Library */
#define CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION (0x01A3U)
/** Base module identifier for Shield Board Libraries (0x01C0 - 0x01FF) */
#define CY_RSLT_MODULE_BOARD_SHIELD_BASE (0x01C0U)
/** Base module identifier for Shield Board Libraries (0x01B8 - 0x01BF) */
#define CY_RSLT_MODULE_BOARD_SHIELD_BASE (0x01B8U)
/** Module identifier for Shield Board CY8CKIT-028-EPD */
#define CY_RSLT_MODULE_BOARD_SHIELD_028_EPD (0x01C0U)
#define CY_RSLT_MODULE_BOARD_SHIELD_028_EPD (0x01B8U)
/** Module identifier for Shield Board CY8CKIT-028-TFT */
#define CY_RSLT_MODULE_BOARD_SHIELD_028_TFT (0x01C1U)
#define CY_RSLT_MODULE_BOARD_SHIELD_028_TFT (0x01B9U)
/** Module identifier for Shield Board CY8CKIT-032 */
#define CY_RSLT_MODULE_BOARD_SHIELD_032 (0x01BAU)
/** Base module identifier for Board Hardware Libraries (0x01C0 - 0x01FF) */
#define CY_RSLT_MODULE_BOARD_HARDWARE_BASE (0x01C0U)
/** Module identifier for the BMI160 Motion Sensor Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_BMI160 (0x01C0U)
/** Module identifier for the E2271CS021 E-Ink Controller Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_E2271CS021 (0x01C1U)
/** Module identifier for the NTC GPIO Thermistor Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_THERMISTOR (0x01C2U)
/** Module identifier for the SSD1306 OLED Controller Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_SSD1306 (0x01C3U)
/** Module identifier for the ST7789V TFT Controller Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_ST7789V (0x01C4U)
/** Module identifier for the Light Sensor Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_LIGHT_SENSOR (0x01C5U)
/** Module identifier for the AK4954A Audio Codec Library */
#define CY_RSLT_MODULE_BOARD_HARDWARE_AK4954A (0x01C6U)
/** Base module identifier for Middleware Libraries (0x0200 - 0x02FF) */
#define CY_RSLT_MODULE_MIDDLEWARE_BASE (0x0200U)

View File

@ -32,6 +32,9 @@
#if !defined(CY_UTILS_H)
#define CY_UTILS_H
#include <stdbool.h>
#include <stdint.h>
#if defined(__cplusplus)
extern "C" {
#endif
@ -53,14 +56,14 @@ static inline void CY_HALT(void)
/** Utility macro when neither NDEBUG or CY_NO_ASSERT is not declared to check a condition and, if false, trigger a breakpoint */
#if defined(NDEBUG) || defined(CY_NO_ASSERT)
#define CY_ASSERT(x) do { \
} while(0)
} while(false)
#else
#define CY_ASSERT(x) do { \
if(!(x)) \
{ \
CY_HALT(); \
} \
} while(0)
} while(false)
#endif /* defined(NDEBUG) */
@ -385,6 +388,41 @@ static inline void CY_HALT(void)
*******************************************************************************/
#define CY_SYSLIB_DIV_ROUNDUP(a, b) ((((a) - 1U) / (b)) + 1U)
/*******************************************************************************
* Provides the macros for MISRA violation documentation in Coverity tool.
*******************************************************************************/
/** \cond INTERNAL */
#ifdef CY_COVERITY_2012_CHECK /* Check MISRA-C:2012 with Coverity tool */
#define CY_COVERITY_PRAGMA_STR(a) #a
#define CY_MISRA_DEVIATE_LINE(MISRA,MESSAGE) \
_Pragma(CY_COVERITY_PRAGMA_STR(coverity compliance deviate MISRA MESSAGE))
#define CY_MISRA_FP_LINE(MISRA,MESSAGE) \
_Pragma(CY_COVERITY_PRAGMA_STR(coverity compliance fp MISRA MESSAGE))
#define CY_MISRA_DEVIATE_BLOCK_START(MISRA,COUNT,MESSAGE) \
_Pragma(CY_COVERITY_PRAGMA_STR(coverity compliance block (deviate:COUNT MISRA MESSAGE)))
#define CY_MISRA_FP_BLOCK_START(MISRA,COUNT,MESSAGE) \
_Pragma(CY_COVERITY_PRAGMA_STR(coverity compliance block (fp:COUNT MISRA MESSAGE)))
#define CY_MISRA_BLOCK_END(MISRA) \
_Pragma(CY_COVERITY_PRAGMA_STR(coverity compliance end_block MISRA))
#else /* General usage */
#define CY_MISRA_DEVIATE_LINE(MISRA,MESSAGE) do{}while(false)
#define CY_MISRA_FP_LINE(MISRA,MESSAGE) do{}while(false)
#define CY_MISRA_DEVIATE_BLOCK_START(MISRA,COUNT,MESSAGE)
#define CY_MISRA_FP_BLOCK_START(MISRA,COUNT,MESSAGE)
#define CY_MISRA_BLOCK_END(MISRA)
#endif /* CY_COVERITY_2012_CHECK */
/** \endcond */
#ifdef __cplusplus
}

View File

@ -1 +0,0 @@
<version>1.1.2.12585</version>

View File

@ -1 +1 @@
<version>1.1.1.11109</version>
<version>1.1.4.17634</version>

View File

@ -0,0 +1,165 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

View File

@ -2,11 +2,12 @@
* File Name: cyhal.h
*
* Description:
* Top-level HAL header file that includes all available HAL header files. This
* will pull in all of the specific HAL files needed. Not all of these may be
* supported in the target device. The target device must provide a
* cyhal_hw_types.h file that is in the include path for the hal headers to
* depend on. The cyhal_hw_types.h file must provide the following:
* Top-level HAL header file that can be referenced to pull in all relevant
* drivers for the current device architecture. Not all of these may be
* supported in the current target device. The implementation must provide a
* cyhal_hw_types.h and a cyhal_drivers.h file in the include path for this
* to depend on.
* The cyhal_hw_types.h file must provide the following:
* 1) definitions for each of the resource types consumed by the HAL driver
* functions.
* 2) A CYHAL_ISR_PRIORITY_DEFAULT define for the default interrupt priority
@ -15,6 +16,8 @@
* a #define in cyhal_hw_types.h with a name of CYHAL_<DRIVER>_IMPL_HEADER
* and the value being the name of the header file. eg:
* #define CYHAL_GPIO_IMPL_HEADER "cyhal_gpio_impl.h"
* The cyhal_drivers.h file must simply be a list of include directives to pull
* in the relevant driver header files.
*
********************************************************************************
* \copyright
@ -51,35 +54,12 @@
* rely only on functionality documented in this section.
*/
/**
* \addtogroup group_hal_impl
*/
#pragma once
#include "cyhal_general_types.h"
#include "cyhal_hw_types.h"
#include "cyhal_adc.h"
#include "cyhal_clock.h"
#include "cyhal_crc.h"
#include "cyhal_dac.h"
#include "cyhal_dma.h"
#include "cyhal_ezi2c.h"
#include "cyhal_flash.h"
#include "cyhal_gpio.h"
#include "cyhal_hwmgr.h"
#include "cyhal_i2c.h"
#include "cyhal_i2s.h"
#include "cyhal_interconnect.h"
#include "cyhal_lptimer.h"
#include "cyhal_pdmpcm.h"
#include "cyhal_pwm.h"
#include "cyhal_qspi.h"
#include "cyhal_rtc.h"
#include "cyhal_sdhc.h"
#include "cyhal_sdio.h"
#include "cyhal_spi.h"
#include "cyhal_syspm.h"
#include "cyhal_system.h"
#include "cyhal_timer.h"
#include "cyhal_trng.h"
#include "cyhal_uart.h"
#include "cyhal_usb_dev.h"
#include "cyhal_wdt.h"
#include "cyhal_drivers.h"

View File

@ -31,12 +31,14 @@
* \{
* High level interface for interacting with the analog to digital converter (ADC).
*
* \section cyhal_adc_features Features
* Each ADC instance supports one or more selectable channels, each
* of which can perform conversions on a different pin.
* See the device datasheet for details about which pins support ADC conversion.
*
* All channels are single-ended. The values returned by the read API are relative
* to the ADC's voltage range, which is device specific.
* Both single-ended and differential channels are supported. The values returned
* by the read API are relative to the ADC's voltage range, which is device specific.
* See the BSP documentation for details.
*
* \section cyhal_adc_quickstart Quickstart
* Call \ref cyhal_adc_init to initialize an ADC instance by providing the ADC
@ -44,9 +46,9 @@
* pin argument is just to signify which ADC instance to initialize. It does not
* actually reserve the pin or create an ADC channel for it. The clock parameter can
* be left NULL to use an available clock resource with a default frequency.<br>
* Use \ref cyhal_adc_channel_init to initialize one or more channels associated
* Use \ref cyhal_adc_channel_init_diff to initialize one or more channels associated
* with that instance.<br>
* Use \ref cyhal_adc_read_u16 for reading the results.<br>
* Use \ref cyhal_adc_read for reading the results.<br>
* See \ref subsection_adc_snippet_1.
*
* \note \ref cyhal_adc_read_u16 always returns a 16 bit value in the range
@ -54,12 +56,24 @@
* value is scaled linearly to cover the full 16 bits.
*
* \section subsection_adc_snippets Code snippets
* \subsection subsection_adc_snippet_1 Snippet 1: Simple ADC initialization and
* reading conversion result
* \note Error checking is omitted for clarity
* \subsection subsection_adc_snippet_1 Snippet 1: Simple ADC initialization and reading conversion result
* The following snippet initializes an ADC and one channel.
* One ADC conversion result is returned corresponding to the input at the specified
* pin.
* \snippet adc.c snippet_cyhal_adc_simple_init
*
* \subsection subsection_adc_snippet_2 Snippet 2: Multi-channel ADC initialization and reading conversion result
* The following snippet initializes an ADC with one single-ended channel and one differential channel
* \snippet adc.c snippet_cyhal_adc_multi_init
*
* \subsection subsection_adc_snippet_3 Snippet 3: Asynchronously read multiple channels
* The following snippet illustrates how to asynchronously read multiple scans of multiple channels.
* \snippet adc.c snippet_cyhal_adc_async_read
*
* \subsection subsection_adc_snippet_4 Snippet 4: Continuous scanning
* This snippet shows how to run the ADC in continuous mode and process results as each scan completes.
* \snippet adc.c snippet_cyhal_adc_continuous_read
*/
#pragma once
@ -68,14 +82,16 @@
#include <stdbool.h>
#include "cy_result.h"
#include "cyhal_hw_types.h"
#include "cyhal_gpio.h"
#if defined(__cplusplus)
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_adc ADC HAL Results
* ADC specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name ADC Results
*/
/** Bad argument */
@ -92,13 +108,132 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_ADC, 3))
/**
* \} \}
* \}
*/
/** Number of bits populated with meaningful data by each ADC sample */
#define CYHAL_ADC_BITS 16
/** Maximum value that the ADC can return */
#define CYHAL_ADC_MAX_VALUE 0xFFFF
#define CYHAL_ADC_MAX_VALUE ((1 << CYHAL_ADC_BITS) - 1)
/** Possible selections for ADC reference */
typedef enum
{
CYHAL_ADC_REF_INTERNAL, //!< Internal reference. See the BSP documentation for the value of this reference. (Default)
CYHAL_ADC_REF_EXTERNAL, //!< Reference from external pin.
CYHAL_ADC_REF_VDDA, //!< Reference from VDDA (analog supply)
CYHAL_ADC_REF_VDDA_DIV_2, //!< Reference from VDDA (analog supply) divided by 2
} cyhal_adc_vref_t;
/** Vminus selection for single-ended channels */
typedef enum
{
CYHAL_ADC_VNEG_VSSA, //!< Connect vminus to ground.
CYHAL_ADC_VNEG_VREF, //!< Connect vminus to the selected vref (see @ref cyhal_adc_vref_t)
} cyhal_adc_vneg_t;
/** ADC events */
typedef enum
{
CYHAL_ADC_EOS = 1u, //!< End of scan: a scan of all channels has completed. Only applicable when continuously scanning
CYHAL_ADC_ASYNC_READ_COMPLETE = 2u, //!< An asynchronous read operation has completed.
} cyhal_adc_event_t;
/** Perform standard averaging. Divide the accumulated value by the number of samples.
* @note This is not supported in combination with @ref CYHAL_ADC_AVG_MODE_ACCUMULATE */
#define CYHAL_ADC_AVG_MODE_AVERAGE (1u << 0)
/** Accumulate samples as in @ref CYHAL_ADC_AVG_MODE_AVERAGE, but do not divide by the number of samples */
#define CYHAL_ADC_AVG_MODE_ACCUMULATE (1u << 1)
/** Average mode flag position indices shifted by greater than this are implementation specific. The value
* of this macro is subject to change between HAL versions. */
#define CYHAL_ADC_AVG_MODE_MAX_SHIFT (1u)
/** Selects the default connection for the inverting input to achieve a single-ended channel. This connection
* is controlled by the `vneg` member of @ref cyhal_adc_config_t.
*/
#define CYHAL_ADC_VNEG CYHAL_NC_PIN_VALUE
/** ADC Configuration */
typedef struct
{
/** Whether the ADC samples continuously (true) or only on demand (false).
*
* When configured to true, the ADC will immediately begin scanning all configured channels.
* When configured to false, the ADC will stop continuous scanning at the completion of the current scan
*/
bool continuous_scanning;
/** ADC resolution. See the implementation specific documentation for supported values */
uint8_t resolution;
/** The number of samples that should be averaged together to obtain a result. A value of 1 disables averaging. */
uint16_t average_count;
/** Flags to control the behavior of the averaging functionality when @ref average_count is greater than 1.
* This field contains zero or more flags that are OR'd together. All implementations define
* @ref CYHAL_ADC_AVG_MODE_AVERAGE and @ref CYHAL_ADC_AVG_MODE_ACCUMULATE (though some may not support both modes).
* Some implementations may define other flags to control additional aspects of the averaging functionality; see
* the implementation-specific documentation for details.
*/
uint32_t average_mode_flags;
/** The external voltage reference value, in millivolts.
* If vref is set to @ref CYHAL_ADC_REF_EXTERNAL, this must be nonzero.
* If vref is set to anything other than @ref CYHAL_ADC_REF_EXTERNAL, this must be zero.
*/
uint32_t ext_vref_mv;
/** Vminus selection for single-ended channels */
cyhal_adc_vneg_t vneg;
/** ADC voltage reference */
cyhal_adc_vref_t vref;
/** The GPIO that should be used for the external reference. If @ref CYHAL_ADC_REF_EXTERNAL
* is selected and the current target uses a GPIO for ADC ext_vref (see the BSP documentation),
* this must not be @ref NC. If the current target uses a dedicated pin (not a GPIO) for ADC ext_vref,
* or if any other reference is selected, this must be @ref NC.
*/
cyhal_gpio_t ext_vref;
/** Whether an external bypass capacitor should be used. Depending on the platform this may be required
* to reduce noise at sufficiently high sample rates. See the implementation specific documentation
* for details.
*/
bool is_bypassed;
/** The GPIO pin that should be used for the bypass capacitor. If `is_bypassed` is true and the current target
* uses a GPIO for the bypass capacitor connection, this must not be @ref NC. Otherwise, this must be @ref NC.
* Depending on the device, this may be the same GPIO as `ext_vref`. See the BSP documentation for details.
*/
cyhal_gpio_t bypass_pin;
} cyhal_adc_config_t;
/** ADC Channel Configuration */
typedef struct
{
/** Whether this channel should be sampled when the ADC performs a scan */
bool enabled;
/** Enable or disable averaging for this channel.
* All other aspects of the averging functionality are configured in @ref cyhal_adc_config_t
*/
bool enable_averaging;
/** Minimum time that this channel should be sampled, in nanoseconds. The actual time may be greater
* than this depending on hardware limitations, the sample rate, and the configuration of other channels.
* @note While this value is specified in ns, the underlying hardware generally does not support
* acquisition time with a granularity of 1 ns. See the implementation specific documentation for details.
*/
uint32_t min_acquisition_ns;
} cyhal_adc_channel_config_t;
/** Handler for ADC event callbacks */
typedef void (*cyhal_adc_event_callback_t)(void *callback_arg, cyhal_adc_event_t event);
/** Initialize ADC peripheral
*
* The ADC will be initialized with the following default configuration:
* - Sample rate: See implementation-specific documentation
* - Average count: 1 (averaging disabled).
* - Continuous scanning: false
* - Single ended vneg: @ref CYHAL_ADC_VNEG_VREF
* - Vref: @ref CYHAL_ADC_REF_INTERNAL
* - External vref: @ref NC
* - Bypassed: false
* - Bypass pin: @ref NC
* - Power level: @ref CYHAL_POWER_LEVEL_DEFAULT
*
* To change the configuration, see @ref cyhal_adc_configure
*
* @param[out] obj Pointer to an ADC object. The caller must allocate the memory
* for this object but the init function will initialize its contents.
@ -106,7 +241,7 @@ extern "C" {
* Note: This pin is not reserved, it is just used to identify which ADC block to allocate.
* If multiple channels will be allocated for a single ADC instance, only one pin should be
* passed here; it does not matter which one. After calling this function once, call
* cyhal_adc_channel_init once for each pin whose value should be measured.
* @ref cyhal_adc_channel_init_diff once for each pin whose value should be measured.
* @param[in] clk The clock to use can be shared, if not provided a new clock will be allocated
* @return The status of the init request. \ref CY_RSLT_SUCCESS is returned on success.
* On failure, a problem specific error code will be returned.
@ -121,19 +256,89 @@ cy_rslt_t cyhal_adc_init(cyhal_adc_t *obj, cyhal_gpio_t pin, const cyhal_clock_t
*/
void cyhal_adc_free(cyhal_adc_t *obj);
/** Initialize a single-ended ADC channel.
/** Update the ADC configuration.
*
* @note If a scan is in progress, this may cause it to be interrupted.
*
* @param[in] obj The ADC object
* @param[in] config The configuration to apply
* @return The status of the configuration request
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_configure(cyhal_adc_t *obj, const cyhal_adc_config_t *config);
/** Changes the current operating power level of the ADC.
*
* Configures the pin used by ADC.
* @param[out] obj The adc channel object to initialize
* @param[in] adc The adc for which the channel should be initialized
* @param[in] pin The adc pin name
* @return The status of the init request. The status of the init request.
* \ref CY_RSLT_SUCCESS is returned on success.<br>
* If the power level is set to @ref CYHAL_POWER_LEVEL_OFF, the ADC will be powered-off
* but it will retain its configuration, so it is not necessary to reconfigure it when changing
* the power level from @ref CYHAL_POWER_LEVEL_OFF to any other value.
*
* @param[in] obj ADC object
* @param[in] power The power level to set
* @return The status of the set power request
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_channel_init(cyhal_adc_channel_t *obj, cyhal_adc_t* adc, cyhal_gpio_t pin);
cy_rslt_t cyhal_adc_set_power(cyhal_adc_t *obj, cyhal_power_level_t power);
/** Configure the number of samples per second.
*
* This is the number of times each enabled channel is sampled per second. The total number of samples performed
* by the ADC hardware per second is equal to `sample_rate_hz / num_channels_enabled`.
* Depending on the system clock configuration or limitations of the underlying hardware, it may not be possible
* to achieve precisely the desired sample rate. The `achived_sample_rate_hz` parameter will be updated to indicate
* the sample rate that was achived.
* @note The `achieved_sample_rate_hz` value is only valid while the configuration of the ADC and its channels remains
* umodified. If @ref cyhal_adc_configure, @ref cyhal_adc_channel_init_diff, @ref cyhal_adc_channel_configure,
* or @ref cyhal_adc_channel_free is called, it is necessary to call this function again in order to update the sample rate.
* Therefore, it is recommended to call this function after the ADC and all channels have been configured.
*
* @param[in] obj The ADC object to configure
* @param[in] desired_sample_rate_hz The desired sample rate, in hertz
* @param[out] achieved_sample_rate_hz The achieved sample rate, in hertz
*
* @return The status of the sample rate request. Note that inability to exactly match the requested sample
* rate is not considered an error. It is the application's responsibility to determine whether the achived rate
* is within the tolerance that it requires.
* \ref CY_RSLT_SUCCESS is returned on success.<br>
* On failure, a problem specific error code will be returned. This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_set_sample_rate(cyhal_adc_t* obj, uint32_t desired_sample_rate_hz, uint32_t* achieved_sample_rate_hz);
/** Initialize a differential ADC channel.
* @note: Some platforms may restrict which pins can be used as part of a differential pair. See the
* implementation-specific documentation for details.
*
* Configures the pin used by ADC.
* @param[out] obj The ADC channel object to initialize
* @param[in] adc The ADC for which the channel should be initialized
* @param[in] vplus Non-inverting input
* @param[in] vminus Inverting input. For a single ended channel, use @ref CYHAL_ADC_VNEG.
* @param[in] cfg The ADC channel configuration
* @return The status of the init request.
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_channel_init_diff(cyhal_adc_channel_t *obj, cyhal_adc_t* adc, cyhal_gpio_t vplus, cyhal_gpio_t vminus, const cyhal_adc_channel_config_t* cfg);
/** Update the ADC channel configuration.
*
* @note If a scan is in progress, this may cause it to be interrupted. It is not valid to change the enabled state
* of a channel while an asynchronous read operation is in progress.
*
* @param[in] obj The ADC channel object
* @param[in] config The configuration to apply
* @return The status of the configuration request
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_channel_configure(cyhal_adc_channel_t *obj, const cyhal_adc_channel_config_t *config);
/** Uninitialize the ADC channel and cyhal_adc_channel_t object
*
@ -141,16 +346,153 @@ cy_rslt_t cyhal_adc_channel_init(cyhal_adc_channel_t *obj, cyhal_adc_t* adc, cyh
*/
void cyhal_adc_channel_free(cyhal_adc_channel_t *obj);
/** Read the value from ADC pin, represented as an unsigned 16bit value
/** Read the value from the ADC pin, represented as an unsigned 16bit value
* where 0x0000 represents the minimum value in the ADC's range, and 0xFFFF
* represents the maximum value in the ADC's range.
* Depending on the ADC speed this function may block for some time.
* If continous scanning is disabled, this will block while a conversion is
* performed on the selected channel, then return the result. Depending on the
* ADC speed this function may block for some time.
* If continuous scanning is enabled, this will return the value from the most
* recent conversion of the specified channel (if called shortly after enabling
* continuous scanning it may block until at least one conversion has been performed
* on this channel).
*
* @param[in] obj The ADC object
* @return An unsigned 16bit value representing the current input voltage
*/
uint16_t cyhal_adc_read_u16(const cyhal_adc_channel_t *obj);
/** Read the value from ADC pin, represented as a 32-bit signed, right-aligned value.
*
* This is a 'resolution'-bit value, sign-extended to 32 bits. If the vplus signal is
* below the vminus signal, the result will be negative. If the vplus signal is above
* the vminus signal, the result will be positive.
* If continous scanning is disabled, this will block while a conversion is
* performed on the selected channel, then return the result. Depending on the
* ADC speed this function may block for some time.
* If continuous scanning is enabled, this will return the value from the most
* recent conversion of the specified channel (if called shortly after enabling
* continuous scanning it may block until at least one conversion has been performed
* on this channel).
*
* @param[in] obj The ADC object
* @return A signed 32 bit value representing the current input voltage
*/
int32_t cyhal_adc_read(const cyhal_adc_channel_t *obj);
/** Read the value from ADC pin, in microvolts.
*
* If continous scanning is disabled, this will block while a conversion is
* performed on the selected channel, then return the result. Depending on the
* ADC speed this function may block for some time.
* If continuous scanning is enabled, this will return the value from the most
* recent conversion of the specified channel (if called shortly after enabling
* continuous scanning it may block until at least one conversion has been performed
* on this channel).
*
* @param[in] obj The ADC object
* @return An unsigned 32 bit value representing the current input in microvolts
*/
int32_t cyhal_adc_read_uv(const cyhal_adc_channel_t *obj);
/** Scan the specified ADC channels in the background and copy the results
* into the array pointed to by `result_list`.
*
* Results are represented as 32-bit signed, right-aligned values. That is, they are
* 'resolution'-bit values, sign-extended to 32 bits. If the vplus signal is
* below the vminus signal, the result will be negative. If the vplus signal is above
* the vminus signal, the result will be positive.
*
* If continuous scanning is disabled, this will trigger num_scan new scans and copy the results
* into `result_list` once the scan is completed.
*
* If continuous scanning is enabled, this will copy the results of num_scan scans into the result_list as
* they complete, beginning with the most recently completed scan (if one exists).
*
* Scan results are placed sequentially into result_list. That is, result_list will contain all of the results from the
* first scan, followed by all of the results from the second scan, etc. If channels exist that are initialized but not
* enabled, they will consume locations in result_list, but these values are undefined.
*
* When the requested number of scans have been completed, the @ref CYHAL_ADC_ASYNC_READ_COMPLETE event will be raised.
*
* @ref cyhal_adc_set_async_mode can be used to control whether this uses DMA or a SW (CPU-driven) transfer.
*
* @param[in] obj ADC to read from
* @param[in] num_scan The number of scans of each channel that should be read
* @param[in] result_list The array where results should be. This must be of length num_scan * initialized_channels,
* where initialized_channels is the number of channels that have been initialized for this ADC
* (and not later freed) via @ref cyhal_adc_channel_init_diff
* @return The status of the read async request
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_read_async(cyhal_adc_t* obj, size_t num_scan, int32_t* result_list);
/** Scan the specified ADC channels in the background and copy the conversion results in microvolts
* into the array pointed to by `result_list`.
*
* If continuous scanning is disabled, this will trigger num_scan new scans and copy the results
* into `result_list` once the scan is completed.
*
* If continuous scanning is enabled, this will copy the results of num_scan scans into the result_list as
* they complete, beginning with the most recently completed scan (if one exists).
*
* Scan results are placed sequentially into result_list. That is, result_list will contain all of the results from the
* first scan, followed by all of the results from the second scan, etc. If channels exist that are initialized but not
* enabled, they will consume locations in result_list, but these values are undefined.
*
* When the requested number of scans have been completed, the @ref CYHAL_ADC_ASYNC_READ_COMPLETE event will be raised.
*
* @ref cyhal_adc_set_async_mode can be used to control whether this uses DMA or a SW (CPU-driven) transfer.
*
* @param[in] obj ADC to read from
* @param[in] num_scan The number of scans of each channel that should be read
* @param[in] result_list The array where results should be. This must be of length num_scan * initialized_channels,
* where initialized_channels is the number of channels that have been initialized for this ADC
* (and not later freed) via @ref cyhal_adc_channel_init_diff
* @return The status of the read async request
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_read_async_uv(cyhal_adc_t* obj, size_t num_scan, int32_t* result_list);
/** Set the mechanism that is used to perform ADC asynchronous transfers. The default is SW.
* @warning The effect of calling this function while an async transfer is pending is undefined.
*
* @param[in] obj The ADC object
* @param[in] mode The transfer mode
* @param[in] dma_priority The priority, if DMA is used. Valid values are the same as for @ref cyhal_dma_init.
* If DMA is not selected, the only valid value is CYHAL_DMA_PRIORITY_DEFAULT, and no
guarantees are made about prioritization.
* @return The status of the set mode request
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_set_async_mode(cyhal_adc_t *obj, cyhal_async_mode_t mode, uint8_t dma_priority);
/** Register an ADC callback handler
*
* This function will be called when one of the events enabled by \ref cyhal_adc_enable_event occurs.
*
* @param[in] obj The ADC object
* @param[in] callback The callback handler which will be invoked when the interrupt fires
* @param[in] callback_arg Generic argument that will be provided to the callback when called
*/
void cyhal_adc_register_callback(cyhal_adc_t *obj, cyhal_adc_event_callback_t callback, void *callback_arg);
/** Configure ADC events.
*
* When an enabled event occurs, the function specified by \ref cyhal_adc_register_callback will be called.
*
* @param[in] obj The ADC object
* @param[in] event The ADC event type
* @param[in] intr_priority The priority for NVIC interrupt events
* @param[in] enable True to turn on specified events, False to turn off
*/
void cyhal_adc_enable_event(cyhal_adc_t *obj, cyhal_adc_event_t event, uint8_t intr_priority, bool enable);
#if defined(__cplusplus)
}

View File

@ -0,0 +1,59 @@
/*******************************************************************************
* File Name: cyhal_clock_impl.h
*
* Description:
* PSoC 6 specific implementation for clocks API.
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
#pragma once
#include "cyhal_hw_resources.h"
#if defined(__cplusplus)
extern "C"
{
#endif
/**
* \ingroup group_hal_impl_impl_adc
* \{
*/
/** Convert all samples to be averaged back to back, before proceeding to the next channel.
* This is the default behavior. */
#define CYHAL_ADC_AVG_MODE_SEQUENTIAL (1u << (CYHAL_ADC_AVG_MODE_MAX_SHIFT + 1u))
/** Convert one sample to be averaged per scan, interleaved with the rest of the channels.
* This maintains a consistent spacing of samples regardless of whether samples are averaged
* or not. However, it also means that a new value will only be provided once every n scans,
* where n is the configured averaging count. At the conclusion of any other scan, the read
* operation will return the same value as the previous scan. The application is responsible
* for keeping tracks of the scans on which the value will be updated.
* \note This mode is incompatible with \ref CYHAL_ADC_AVG_MODE_ACCUMULATE
* \note In this mode, the averaging count should be set to less than 16 to avoid overflowing
* the working register that is used to accumulate intermediate results.
*/
#define CYHAL_ADC_AVG_MODE_INTERLEAVED (1u << (CYHAL_ADC_AVG_MODE_MAX_SHIFT + 2u))
/** \} group_hal_impl_adc */
#if defined(__cplusplus)
}
#endif

View File

@ -25,6 +25,15 @@
#pragma once
#include <stdint.h>
#include "cyhal_hw_types.h"
#include "cyhal_general_types.h"
#include "cyhal_gpio.h"
#if defined(CY_IP_MXS40PASS_CTB_INSTANCES) && (CY_IP_MXS40PASS_CTB_INSTANCES > 0)
#include "cy_ctb.h"
#endif
#if defined(__cplusplus)
extern "C" {
#endif
@ -33,14 +42,116 @@ extern "C" {
* Initialize the programmable analog. This utilizes reference counting to avoid
* repeatedly initializing the analog subsystem when multiple analog blocks are in use
* */
void cyhal_analog_init(void);
void _cyhal_analog_init(void);
/**
* Uninitialize the programmable analog. This utilizes reference counting to avoid
* disabling the analog subsystem until all blocks which require it have been freed.
*/
void cyhal_analog_free(void);
void _cyhal_analog_free(void);
#if defined(CY_IP_MXS40PASS_CTB_INSTANCES) && (CY_IP_MXS40PASS_CTB_INSTANCES > 0)
#define _CYHAL_OPAMP_PER_CTB (2u)
/**
* Initialize the programmable analog for CTB. This utilizes reference counting to avoid
* repeatedly initializing the analog subsystem when multiple analog blocks are in use
*
* @param[in] base CTB(m) base address
* */
void cyhal_analog_ctb_init(CTBM_Type *base);
/**
* Uninitialize the programmable analog. This utilizes reference counting to avoid
* disabling the analog subsystem until all blocks which require it have been freed.
*
* @param[in] base CTB(m) base address
*/
void cyhal_analog_ctb_free(CTBM_Type *base);
/** Base address for each CTB */
extern CTBM_Type *const _cyhal_ctb_base[];
/**
* Computes the switch mask to use for a set of opamp pins
*
* @param[in] opamp_num Opamp number (index within CTB(m))
* @param[in] vin_p Non-inverting input pin. Must be specified.
* @param[in] vin_m Inverting input pin. May be NC.
* @param[in] vout Opamp output pin (analog). May be NC.
* @return the switch mask to use
*/
uint32_t _cyhal_opamp_pin_to_mask(uint8_t opamp_num, cyhal_gpio_t vin_p, cyhal_gpio_t vin_m, cyhal_gpio_t vout);
/**
* Performs basic initialization of an opamp and its associated set of pins that is common to
* both opamp and comparator mode.
* This reserves resources and configures switches to connect the pins. It does not configure the
* opamp hardware.
* If this returns success, the opamp and all pins will be reserved. If an error is returned, all resources
* that were successfully reserved will have been freed.
*
* @param[out] rsc The opamp resource to use.
* @param[in] bad_arg_error The driver-specific error that should be returned if an invalid pin is specified
* @param[in] vin_p Non-inverting input pin. Must be specified.
* @param[in] vin_m Inverting input pin. May be NC.
* @param[in] vout Opamp output pin (analog). May be NC. Generally not specified in combination with comp_out
* @param[in] comp_out Comparator output pin (digital). May be NC. Generally not specified in combination with vout
* @return Whether the init operation succeeded.
*/
cy_rslt_t _cyhal_opamp_init_common(cyhal_resource_inst_t* rsc, cy_rslt_t bad_arg_error, cyhal_gpio_t vin_p, cyhal_gpio_t vin_m, cyhal_gpio_t vout, cyhal_gpio_t comp_out);
/**
* Converts a HAL power level enum to a PDL-level opamp power enum value
*
* @param[in] hal_power power level as a HAL enum value
* @return the equivalent pdl-level enum value
*/
uint32_t _cyhal_opamp_convert_power(cyhal_power_level_t hal_power);
/**
* Converts an opamp number into a PDL-level `cy_en_ctb_opamp_sel` value.
*
* @param[in] oa_num the opamp number within its CTB(m)
* @return the PDL-level `cy_en_ctb_switch_register_sel_t` value.
*/
__STATIC_INLINE cy_en_ctb_switch_register_sel_t _cyhal_opamp_convert_switch(uint8_t oa_num)
{
CY_ASSERT(oa_num < 2);
return (oa_num == 0) ? CY_CTB_SWITCH_OA0_SW : CY_CTB_SWITCH_OA1_SW;
}
/**
* Converts an opamp number into a PDL-level `cy_en_ctb_opamp_sel` value.
*
* @param[in] oa_num the opamp number within its CTB(m)
* @return the PDL-level `cy_en_ctb_opamp_sel` value.
*/
__STATIC_INLINE cy_en_ctb_opamp_sel_t _cyhal_opamp_convert_sel(uint8_t oa_num)
{
CY_ASSERT(oa_num < 2);
return (oa_num == 0) ? CY_CTB_OPAMP_0 : CY_CTB_OPAMP_1;
}
/**
* Opens or closes the isolation switch if an opamp requires it
*
* @param[in] oa_num The opamp number within its CTB(m)
* @param[in] state Whether to open or close the switch
*/
__STATIC_INLINE void _cyhal_opamp_set_isolation_switch(uint8_t oa_num, CTBM_Type *base, cy_en_ctb_switch_state_t state)
{
if(0u == oa_num)
{
// OA0 has an additional isolation switch (CIS) on its vplus line
Cy_CTB_SetAnalogSwitch(base, CY_CTB_SWITCH_CTD_SW, CY_CTB_SW_CTD_CHOLD_OA0_POS_ISOLATE_MASK, state);
}
}
#endif
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -111,9 +111,7 @@
* \snippet clock.c snippet_cyhal_clock_change_source
*
* \subsection subsection_clock_snippet_5 Snippet 5: System initialization
* The following snippet shows the clock driver can be used to initialize all clocks in the system.
* \note This example is device specific.
* \snippet clock.c snippet_cyhal_clock_system_init
* \note This example is device specific. See \ref subsection_clock_snippet_5_impl for specific implementation.
*
*/
@ -129,9 +127,10 @@ extern "C"
{
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_clock Clock HAL Results
* Clock specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name Clock Results
*/
@ -147,6 +146,25 @@ extern "C"
/** The specified resource is not valid. */
#define CYHAL_CLOCK_RSLT_ERR_RESOURCE \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_CLOCK, 3))
/** The clock did not lock after being enabled. */
#define CYHAL_CLOCK_RSLT_ERR_LOCK \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_CLOCK, 4))
/**
* \}
*/
/** \addtogroup group_hal_tolerance
* \{ *//**
* \{ @name Clock Tolerance
*/
/** Clock tolerance 0 percent */
extern const cyhal_clock_tolerance_t CYHAL_CLOCK_TOLERANCE_0_P;
/** Clock tolerance 1 percent */
extern const cyhal_clock_tolerance_t CYHAL_CLOCK_TOLERANCE_1_P;
/** Clock tolerance 5 percent */
extern const cyhal_clock_tolerance_t CYHAL_CLOCK_TOLERANCE_5_P;
/**
* \} \}

View File

@ -32,8 +32,8 @@ extern "C"
#endif
/**
* \addtogroup group_hal_psoc6_clock Clocks
* \ingroup group_hal_psoc6
* \addtogroup group_hal_impl_clock Clocks
* \ingroup group_hal_impl
* \{
* Implementation specific interface for using the Clock driver. These items, while usable
* within the HAL, are <b>not</b> necessarily portable between devices. The diagram below
@ -41,7 +41,15 @@ extern "C"
* the device specific Data Sheet for the exact set of clocks that are available on a
* specific device.
*
* \image html psoc6_clock_tree.png
* \image html mxs40_clock_tree.png
*
* \section section_clock_snippets_impl Code snippets
* \note Error handling code has been intentionally left out of snippets to highlight API usage.
*
* \subsection subsection_clock_snippet_5_impl Snippet: System initialization
* The following snippet shows the clock driver can be used to initialize all clocks in the system.
* \note This example is device specific.
* \snippet clock.c snippet_cyhal_clock_system_init_p6
*/
/** \cond INTERNAL */
@ -113,7 +121,7 @@ extern const cyhal_resource_inst_t CYHAL_CLOCK_PLL[SRSS_NUM_PLL];
/** High Frequency Clock: A high-frequency clock output driving specific peripherals. */
extern const cyhal_resource_inst_t CYHAL_CLOCK_HF[SRSS_NUM_HFROOT];
/** \} group_hal_psoc6_clock */
/** \} group_hal_impl_clock */
#if defined(__cplusplus)
}

View File

@ -0,0 +1,212 @@
/***************************************************************************//**
* \file cyhal_comp.h
*
* Provides a high level interface for interacting with the Cypress Analog Comparator.
* This interface abstracts out the chip specific details.
* If any chip specific functionality is required the low level functions can
* be used directly.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/**
* \addtogroup group_hal_comp COMP (Analog Comparator)
* \ingroup group_hal
* \{
* High level interface for interacting with an analog Comparator.
*
* \section cyhal_comp_features Features
* The analog comparator measures one input voltage from the non-inverting pin against
* a second voltage provided on the inverting pin. The result of this comparison can
* be used in three ways:
* - Output to pin
* - Read state via firmware (see @ref cyhal_comp_read)
* - Event triggered on rising or falling edge (see @ref cyhal_comp_event_t)
*
* These three abilities can be used in any combination.
*
* \section cyhal_comp_quickstart Quickstart
* Call \ref cyhal_comp_init to initialize a comparator instance by providing the comparator
* object (**obj**), non-inverting input pin (**vin_p**), inverting input pin (**vin_m**), optional
* output pin (**output**), and configuration (**cfg**).
*
* Use \ref cyhal_comp_read to read the comparator state from firmware.
*
* Use \ref cyhal_comp_register_callback and \ref cyhal_comp_enable_event to configure a
* callback that will be invoked on a rising and/or falling edge of the comparator output.
*
* \section subsection_comp_snippets Code Snippets:
* \note Error checking is omitted for clarity
* \section subsection_comp_snippet_1 Snippet 1: Comparator initialization
* The following snippet initializes the comparator and powers it on
* \snippet comp.c snippet_cyhal_comp_init
*
* \section subsection_comp_snippet_2 Snippet 2: Comparator read value
* The following snippet reads the current comparator value into a variable
* \snippet comp.c snippet_cyhal_comp_read
*
* \section subsection_comp_snippet_3 Snippet 3: Comparator event registration
* The following snippet registers a callback that will be called on either a rising or falling
* edge of the comparator output.
* \snippet comp.c snippet_cyhal_comp_event
*
* \section subsection_comp_snippet_4 Snippet 4: Comparator powering-off and on
* The following snippet demonstrates temporarily powering-off the comparator without freeing it.
* \snippet comp.c snippet_cyhal_comp_start_stop
*
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "cyhal_gpio.h"
#include "cy_result.h"
#include "cyhal_hw_types.h"
#if defined(__cplusplus)
extern "C" {
#endif
/** \addtogroup group_hal_results_comp Comparator HAL Results
* Comparator specific return codes
* \ingroup group_hal_results
* \{ *//**
*/
/** The requested pins are invalid */
#define CYHAL_COMP_RSLT_ERR_INVALID_PIN \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_COMP, 1))
/** Bad argument */
#define CYHAL_COMP_RSLT_ERR_BAD_ARGUMENT \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_COMP, 2))
/**
* \}
*/
/** Comparator event types */
typedef enum
{
CYHAL_COMP_RISING_EDGE = 0x01, //!< Rising edge on comparator output
CYHAL_COMP_FALLING_EDGE = 0x02, //!< Falling edge on comparator output
} cyhal_comp_event_t;
/** Configuration options for the Comparator */
typedef struct
{
/** Power mode the comparator should operate in. Lower modes save power but operate at lower speed. */
cyhal_power_level_t power;
/** Whether hysteresis should be used. See the implementation-specific documentation for the hysteresis value */
bool hysteresis;
} cyhal_comp_config_t;
/**
* Handler for Comparator events
*
* \note Not all hardware is capable of differentiating which type of edge triggered an
* event when both rising and falling edges are enabled. If the edge cannot be determined,
* the `event` argument will be `CYHAL_COMP_RISING_EDGE | CYHAL_COMP_FALLING_EDGE`
*/
typedef void (*cyhal_comp_event_callback_t)(void *callback_arg, cyhal_comp_event_t event);
/** Initialize the Comparator peripheral.
*
* @param[out] obj Pointer to a Comparator object. The caller must allocate the memory
* for this object but the init function will initialize its contents.
* @param[in] vin_p Non-inverting input pin
* @param[in] vin_m Inverting input pin
* @param[in] output Comparator output pin. May be @ref NC.
* @param[in] cfg Configuration structure
* @return The status of the init request
*/
cy_rslt_t cyhal_comp_init(cyhal_comp_t *obj, cyhal_gpio_t vin_p, cyhal_gpio_t vin_m, cyhal_gpio_t output, cyhal_comp_config_t *cfg);
/** Deinitialize the Comparator peripheral.
*
* @param[in] obj Comparator object
*/
void cyhal_comp_free(cyhal_comp_t *obj);
/** Changes the current operating power level of the comparator.
*
* If the power level is set to @ref CYHAL_POWER_LEVEL_OFF, the comparator will be powered-off
* but it will retain its configuration, so it is not necessary to reconfigure it when changing
* the power level from @ref CYHAL_POWER_LEVEL_OFF to any other value.
*
* @param[in] obj Comparator object
* @param[in] power The power level to set
* @return The status of the set power request
*/
cy_rslt_t cyhal_comp_set_power(cyhal_comp_t *obj, cyhal_power_level_t power);
/** Reconfigure the Comparator.
*
* This retains the powered state of the comparator.
* Depending on the implementation, it may be necessary to temporarily deconfigure and/or
* power off the comparator in order to apply the new configuration. However, if the
* comparator is powered-off when this function is called, it will remain powered-off after
* it returns. Likewise, if the comparator is powered-on when this function is called,
* it will remain powered-on after it returns.
*
* @param[in] obj Comparator object
* @param[in] cfg New configuration to apply
* @return The status of the configure request
*/
cy_rslt_t cyhal_comp_configure(cyhal_comp_t *obj, cyhal_comp_config_t *cfg);
/** Reads the Comparator state.
*
* @param[in] obj Comparator object
* @return The Comparator state. True if the non-inverting pin voltage is greater than the
* inverting pin voltage, false otherwise.
*/
bool cyhal_comp_read(cyhal_comp_t *obj);
/** Register/clear a callback handler for Comparator events
*
* This function will be called when one of the events enabled by \ref cyhal_comp_enable_event occurs.
*
* @param[in] obj Comparator object
* @param[in] callback Function to call when the specified event happens
* @param[in] callback_arg Generic argument that will be provided to the handler when called
*/
void cyhal_comp_register_callback(cyhal_comp_t *obj, cyhal_comp_event_callback_t callback, void *callback_arg);
/** Enable or Disable a Comparator event
*
* When an enabled event occurs, the function specified by \ref cyhal_comp_register_callback will be called.
*
* @param[in] obj Comparator object
* @param[in] event Comparator event
* @param[in] intr_priority Priority for NVIC interrupt events
* @param[in] enable True to turn on event, False to turn off
*/
void cyhal_comp_enable_event(cyhal_comp_t *obj, cyhal_comp_event_t event, uint8_t intr_priority, bool enable);
#if defined(__cplusplus)
}
#endif
#ifdef CYHAL_COMP_IMPL_HEADER
#include CYHAL_COMP_IMPL_HEADER
#endif /* CYHAL_COMP_IMPL_HEADER */
/** \} group_hal_comp */

View File

@ -0,0 +1,109 @@
/***************************************************************************//**
* \file cyhal_comp_ctb.h
*
* Provides an implementation of the comp HAL on top of the CTB opamps.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/**
* \addtogroup group_hal_comp_ctb COMP (CTB Opamps)
* \ingroup group_hal_impl
* \{
* Implementation of the analog comparator (COMP) driver on top of the CTB opamps.
*
*/
#pragma once
#include "cyhal_comp.h"
#if defined(__cplusplus)
extern "C" {
#endif
/** Initialize the Comparator peripheral for a CTB-based comparator.
*
* @param[out] obj Pointer to a Comparator object. The caller must allocate the memory
* for this object but the init function will initialize its contents.
* @param[in] vin_p Non-inverting input pin
* @param[in] vin_m Inverting input pin
* @param[in] output Comparator output pin. May be @ref NC.
* @param[in] cfg Configuration structure
* @return The status of the init request
*/
cy_rslt_t _cyhal_comp_ctb_init(cyhal_comp_t *obj, cyhal_gpio_t vin_p, cyhal_gpio_t vin_m, cyhal_gpio_t output, cyhal_comp_config_t *cfg);
/** Deinitialize the Comparator peripheral for a CTB-based comparator.
*
* @param[in] obj Comparator object
*/
void _cyhal_comp_ctb_free(cyhal_comp_t *obj);
/** Changes the current operating power level of the comparator for a CTB-based comparator.
*
* If the power level is set to @ref CYHAL_POWER_LEVEL_OFF, the comparator will be powered-off
* but it will retain its configuration, so it is not necessary to reconfigure it when changing
* the power level from @ref CYHAL_POWER_LEVEL_OFF to any other value.
*
* @param[in] obj Comparator object
* @param[in] power The power level to set
* @return The status of the set power request
*/
cy_rslt_t _cyhal_comp_ctb_set_power(cyhal_comp_t *obj, cyhal_power_level_t power);
/** Reconfigure the Comparator for a CTB-based comparator.
*
* This retains the powered state of the comparator.
* Depending on the implementation, it may be necessary to temporarily deconfigure and/or
* power off the comparator in order to apply the new configuration. However, if the
* comparator is powered-off when this function is called, it will remain powered-off after
* it returns. Likewise, if the comparator is powered-on when this function is called,
* it will remain powered-on after it returns.
*
* @param[in] obj Comparator object
* @param[in] cfg New configuration to apply
* @return The status of the configure request
*/
cy_rslt_t _cyhal_comp_ctb_configure(cyhal_comp_t *obj, cyhal_comp_config_t *cfg);
/** Reads the Comparator state for a CTB-based comparator.
*
* @param[in] obj Comparator object
* @return The Comparator state. True if the non-inverting pin voltage is greater than the
* inverting pin voltage, false otherwise.
*/
bool _cyhal_comp_ctb_read(cyhal_comp_t *obj);
/** Enable or Disable a Comparator event for a CTB-based comparator
*
* When an enabled event occurs, the function specified by \ref cyhal_comp_register_callback will be called.
*
* @param[in] obj Comparator object
* @param[in] event Comparator event
* @param[in] intr_priority Priority for NVIC interrupt events
* @param[in] enable True to turn on event, False to turn off
*/
void _cyhal_comp_ctb_enable_event(cyhal_comp_t *obj, cyhal_comp_event_t event, uint8_t intr_priority, bool enable);
#if defined(__cplusplus)
}
#endif
/** \} group_hal_comp */

View File

@ -0,0 +1,109 @@
/***************************************************************************//**
* \file cyhal_comp_lp.h
*
* Provides an implementation of the comp HAL on top of the LP (low power) block
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
/**
* \addtogroup group_hal_comp_lp COMP (LP Comparator block)
* \ingroup group_hal_impl
* \{
* Implementation of the analog comparator (COMP) driver on top of the LP (low power) comparator.
*
*/
#pragma once
#include "cyhal_comp.h"
#if defined(__cplusplus)
extern "C" {
#endif
/** Initialize the Comparator peripheral for a LP-based comparator.
*
* @param[out] obj Pointer to a Comparator object. The caller must allocate the memory
* for this object but the init function will initialize its contents.
* @param[in] vin_p Non-inverting input pin
* @param[in] vin_m Inverting input pin
* @param[in] output Comparator output pin. May be @ref NC.
* @param[in] cfg Configuration structure
* @return The status of the init request
*/
cy_rslt_t _cyhal_comp_lp_init(cyhal_comp_t *obj, cyhal_gpio_t vin_p, cyhal_gpio_t vin_m, cyhal_gpio_t output, cyhal_comp_config_t *cfg);
/** Deinitialize the Comparator peripheral for a LP-based comparator.
*
* @param[in] obj Comparator object
*/
void _cyhal_comp_lp_free(cyhal_comp_t *obj);
/** Changes the current operating power level of the comparator for a LP-based comparator.
*
* If the power level is set to @ref CYHAL_POWER_LEVEL_OFF, the comparator will be powered-off
* but it will retain its configuration, so it is not necessary to reconfigure it when changing
* the power level from @ref CYHAL_POWER_LEVEL_OFF to any other value.
*
* @param[in] obj Comparator object
* @param[in] power The power level to set
* @return The status of the set power request
*/
cy_rslt_t _cyhal_comp_lp_set_power(cyhal_comp_t *obj, cyhal_power_level_t power);
/** Reconfigure the Comparator for a LP-based comparator.
*
* This retains the powered state of the comparator.
* Depending on the implementation, it may be necessary to temporarily deconfigure and/or
* power off the comparator in order to apply the new configuration. However, if the
* comparator is powered-off when this function is called, it will remain powered-off after
* it returns. Likewise, if the comparator is powered-on when this function is called,
* it will remain powered-on after it returns.
*
* @param[in] obj Comparator object
* @param[in] cfg New configuration to apply
* @return The status of the configure request
*/
cy_rslt_t _cyhal_comp_lp_configure(cyhal_comp_t *obj, cyhal_comp_config_t *cfg);
/** Reads the Comparator state for a LP-based comparator.
*
* @param[in] obj Comparator object
* @return The Comparator state. True if the non-inverting pin voltage is greater than the
* inverting pin voltage, false otherwise.
*/
bool _cyhal_comp_lp_read(cyhal_comp_t *obj);
/** Enable or Disable a Comparator event for a LP-based comparator
*
* When an enabled event occurs, the function specified by \ref cyhal_comp_register_callback will be called.
*
* @param[in] obj Comparator object
* @param[in] event Comparator event
* @param[in] intr_priority Priority for NVIC interrupt events
* @param[in] enable True to turn on event, False to turn off
*/
void _cyhal_comp_lp_enable_event(cyhal_comp_t *obj, cyhal_comp_event_t event, uint8_t intr_priority, bool enable);
#if defined(__cplusplus)
}
#endif
/** \} group_hal_comp */

View File

@ -62,9 +62,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_crc CRC HAL Results
* CRC specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name CRC Results
*/
/** Invalid argument */
@ -72,7 +73,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_CRC, 0))
/**
* \} \}
* \}
*/
/** @brief CRC algorithm parameters */

View File

@ -1,8 +1,8 @@
/***************************************************************************//**
/***************************************************************************//**
* \file cyhal_crc_impl.h
*
* Description:
* Provides a high level interface for interacting with the Cypress CRC accelerator.
* Provides a high level interface for interacting with the Cypress CRC accelerator.
* This is a wrapper around the lower level PDL API.
*
********************************************************************************
@ -36,7 +36,7 @@ extern "C" {
#endif /* __cplusplus */
// This helper function mirrors the definition of cyhal_crc_start
__STATIC_INLINE cy_rslt_t cyhal_crc_start_internal(cyhal_crc_t *obj, const crc_algorithm_t *algorithm)
__STATIC_INLINE cy_rslt_t _cyhal_crc_start(cyhal_crc_t *obj, const crc_algorithm_t *algorithm)
{
CY_ASSERT(NULL != obj);
if(NULL == algorithm)
@ -53,10 +53,10 @@ __STATIC_INLINE cy_rslt_t cyhal_crc_start_internal(cyhal_crc_t *obj, const crc_a
algorithm->lfsrInitState);
}
#define cyhal_crc_start(obj, algorithm) cyhal_crc_start_internal(obj, algorithm)
#define cyhal_crc_start(obj, algorithm) _cyhal_crc_start(obj, algorithm)
// This helper function mirrors the definition of cyhal_crc_compute
__STATIC_INLINE cy_rslt_t cyhal_crc_compute_internal(const cyhal_crc_t *obj, const uint8_t *data, size_t length)
__STATIC_INLINE cy_rslt_t _cyhal_crc_compute(const cyhal_crc_t *obj, const uint8_t *data, size_t length)
{
CY_ASSERT(NULL != obj);
if(NULL == data || 0 == length)
@ -65,10 +65,10 @@ __STATIC_INLINE cy_rslt_t cyhal_crc_compute_internal(const cyhal_crc_t *obj, con
return Cy_Crypto_Core_Crc_CalcPartial(obj->base, data, length);
}
#define cyhal_crc_compute(obj, data, length) cyhal_crc_compute_internal(obj, data, length)
#define cyhal_crc_compute(obj, data, length) _cyhal_crc_compute(obj, data, length)
// This helper function mirrors the definition of cyhal_crc_finish
__STATIC_INLINE cy_rslt_t cyhal_crc_finish_internal(const cyhal_crc_t *obj, uint32_t *crc)
__STATIC_INLINE cy_rslt_t _cyhal_crc_finish(const cyhal_crc_t *obj, uint32_t *crc)
{
CY_ASSERT(NULL != obj);
if(NULL == crc)
@ -77,7 +77,7 @@ __STATIC_INLINE cy_rslt_t cyhal_crc_finish_internal(const cyhal_crc_t *obj, uint
return Cy_Crypto_Core_Crc_CalcFinish(obj->base, obj->crc_width, crc);
}
#define cyhal_crc_finish(obj, crc) cyhal_crc_finish_internal(obj, crc)
#define cyhal_crc_finish(obj, crc) _cyhal_crc_finish(obj, crc)
#if defined(__cplusplus)
}

View File

@ -2,7 +2,7 @@
* \file cyhal_crypto_common.h
*
* Description:
* This file provides common defines, addresses, and functions required by drivers
* This file provides common defines, addresses, and functions required by drivers
* using the Crypto block.
*
********************************************************************************
@ -51,6 +51,7 @@ typedef enum
CYHAL_CRYPTO_COMMON,
} cyhal_crypto_feature_t;
/** Reserve the Crypto block and enable it.
*
* @param[out] base Base address to the Crypto block.

View File

@ -70,9 +70,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_dac DAC HAL Results
* DAC specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name DAC Results
*/
/** Bad argument */
@ -81,14 +82,27 @@ extern "C" {
/** Failed to initialize DAC */
#define CYHAL_DAC_RSLT_FAILED_INIT \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_DAC, 1))
/** Reference voltage is not set */
#define CYHAL_DAC_RSLT_BAD_REF_VOLTAGE \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_DAC, 2))
/** Bad OPAMP instance is selected */
#define CYHAL_DAC_RSLT_BAD_OPAMP_INSTANCE \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_DAC, 1))
/**
* \} \}
* \}
*/
/** Reference choices for the DAC */
typedef enum
{
CYHAL_DAC_REF_VDDA, //!< Analog supply (default)
CYHAL_DAC_REF_VREF //!< Internal reference. See the BSP documentation for the reference value.
} cyhal_dac_ref_t;
/** Initialize the DAC peripheral
*
* Configures the pin used by dac.
* By default, the reference will be set to @ref CYHAL_DAC_REF_VDDA.
*
* @param[out] obj Pointer to a DAC object. The caller must allocate the memory
* for this object but the init function will initialize its contents.
@ -106,15 +120,40 @@ cy_rslt_t cyhal_dac_init(cyhal_dac_t *obj, cyhal_gpio_t pin);
*/
void cyhal_dac_free(cyhal_dac_t *obj);
/** Set the DAC voltage reference. This determines the highest value that the DAC can output.
*
* @param obj The DAC object
* @param ref The selected voltage reference.
* @return The status of the reference selection request
*/
cy_rslt_t cyhal_dac_set_reference(cyhal_dac_t *obj, cyhal_dac_ref_t ref);
/** Set the output voltage, as a normalized unsigned 16-bit value
* (where 0 is the lowest value the DAC can output and 0xFFFF
* is the highest)
*
* @note While the input value is 16 bits, the actual resolution that can be achieved
* is dependent on what the underlying hardware supports. See the device datasheet for details.
*
* @param[in] obj The dac object
* @param[in] value The 16-bit output value to set
*/
void cyhal_dac_write(const cyhal_dac_t *obj, uint16_t value);
/** Set the output voltage, as an unsigned number of millivolts.
*
* @note Depending on the resolution of the underlying hardware, it may not
* be possible to achieve the precise voltage requested. See the device datasheet
* for more details about the DAC resolution.
*
* It is an error to specify a value that is outside of the DAC's operating range.
*
* @param[in] obj The dac object
* @param[in] value The number of millivolts to output set.
* @return The status of the write request.
*/
cy_rslt_t cyhal_dac_write_mv(const cyhal_dac_t *obj, uint16_t value);
/** Read the current DAC output voltage setting, as a normalized unsigned
* 16-bit value (where 0 is the lowest value the DAC can output and 0xFFFF
* is the highest).
@ -126,6 +165,18 @@ void cyhal_dac_write(const cyhal_dac_t *obj, uint16_t value);
*/
uint16_t cyhal_dac_read(cyhal_dac_t *obj);
/** Changes the current operating power level of the DAC.
*
* If the power level is set to @ref CYHAL_POWER_LEVEL_OFF, the DAC will be powered-off
* but it will retain its configuration, so it is not necessary to reconfigure it when changing
* the power level from @ref CYHAL_POWER_LEVEL_OFF to any other value.
*
* @param[in] obj dac object
* @param[in] power The power level to set
* @return The status of the set power request
*/
cy_rslt_t cyhal_dac_set_power(cyhal_dac_t *obj, cyhal_power_level_t power);
#if defined(__cplusplus)
}
#endif

View File

@ -37,14 +37,16 @@ extern "C" {
#endif
/**
* \addtogroup group_hal_psoc6_deprecated Deprecated
* \ingroup group_hal_psoc6
* \addtogroup group_hal_impl_deprecated Deprecated
* \ingroup group_hal_impl
* \{
* The following PSoC 6 specific items have been deprecated and replaced by more generic item. Each item
* The following PSoC 6 specific items have been deprecated and replaced by more generic items. Each item
* will continue to work for now, but will be removed in a future release. All deprecated items reference
* the item that replaces it.
*/
/** An error occurred in System module */
#define CYHAL_SYSTEM_RSLT_ERROR (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SYSTEM , 0))
/** An error occurred in System module */
#define CYHAL_SYSTEM_RSLT_INVALID_CLK_DIVIDER (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SYSTEM , 1))
/** An error occurred in System module */
@ -54,6 +56,17 @@ extern "C" {
/** An error occurred in System module */
#define CYHAL_SYSTEM_RSLT_NO_VALID_DIVIDER (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SYSTEM , 4))
/**
* Attempts to put the device to sleep until an interrupt wakes it up.
* \warning This function is deprecated. Use \ref cyhal_syspm_sleep instead.
*/
#define cyhal_system_sleep() Cy_SysPm_CpuEnterSleep(CY_SYSPM_WAIT_FOR_INTERRUPT)
/**
* Attempts to put the device into deep sleep until an interrupt wakes it up.
* \warning This function is deprecated. Use \ref cyhal_syspm_deepsleep instead.
*/
#define cyhal_system_deepsleep() Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT)
/** Enum for clock type to configure. HFCLKs are configured using different APIs and does not using this enum.
* \warning This type is deprecated. Use \ref cyhal_clock_block_t instead.
*/
@ -129,7 +142,41 @@ cy_rslt_t cyhal_system_clock_set_frequency(uint8_t clock, uint32_t frequency_hz)
*/
cy_rslt_t cyhal_system_clock_set_divider(cyhal_system_clock_t clock, cyhal_system_divider_t divider) /* __attribute__ ((deprecated)) */;
/** \} group_hal_psoc6_deprecated */
/** Register the specified handler with the power manager to be notified of power
* state changes.
* \warning This function is deprecated. Use \ref cyhal_syspm_register_callback() instead.
*
* @param[in] callback The callback configuration data
* @return The status of the register_callback request
*/
cy_rslt_t cyhal_system_register_callback(cyhal_system_callback_t *callback);
/** Removes the registered handler from the power manager so no future notifications are made.
*
* \warning This function is deprecated. Use \ref cyhal_syspm_unregister_callback() instead.
*
* @param[in] callback The callback configuration data
* @return The status of the unregister_callback request
*/
cy_rslt_t cyhal_system_unregister_callback(cyhal_system_callback_t const *callback);
/** Initialize a single-ended ADC channel.
*
* \warning This function is deprecated. Use \ref cyhal_adc_channel_init_diff() instead with
* @ref CYHAL_ADC_VNEG specified for the `vminus` argument.
*
* Configures the pin used by ADC.
* @param[out] obj The adc channel object to initialize
* @param[in] adc The adc for which the channel should be initialized
* @param[in] pin The adc pin name
* @return The status of the init request. The status of the init request.
* On failure, a problem specific error code will be returned.
* This error could be from the HAL or lower level driver.<br>
* For all other return codes, please refer to device driver documentation available in the BSP landing page
*/
cy_rslt_t cyhal_adc_channel_init(cyhal_adc_channel_t *obj, cyhal_adc_t* adc, cyhal_gpio_t pin);
/** \} group_hal_impl_deprecated */
#if defined(__cplusplus)
}

View File

@ -88,9 +88,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_dma DMA HAL Results
* DMA specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name DMA Results
*/
/** Invalid transfer width parameter error */
@ -119,7 +120,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_FATAL, CYHAL_RSLT_MODULE_DMA, 7))
/**
* \} \}
* \}
*/
/** Direction for DMA transfers. */

View File

@ -25,8 +25,8 @@
#include "cyhal_dma.h"
/**
* \addtogroup group_hal_psoc6_dma_dmac DMAC (Direct Memory Access Controller)
* \ingroup group_hal_psoc6_dma
* \addtogroup group_hal_impl_dma_dmac DMAC (Direct Memory Access Controller)
* \ingroup group_hal_impl_dma
* \{
* Implementation specific interface for using the DMAC DMA peripheral
*/
@ -45,29 +45,29 @@ extern "C" {
* @param[in] priority The priority of this DMA operation relative to others. Values must be between 0-3 with 0 being the highest priority.
* @return The status of the init request
*/
cy_rslt_t cyhal_dma_init_dmac(cyhal_dma_t *obj, uint8_t priority);
cy_rslt_t _cyhal_dma_dmac_init(cyhal_dma_t *obj, uint8_t priority);
/** Frees the DMAC specific object
/** Frees the DMAC specific object
*
* @param[in,out] obj The DMA object
*/
void cyhal_dma_free_dmac(cyhal_dma_t *obj);
void _cyhal_dma_dmac_free(cyhal_dma_t *obj);
/** Setup a DMAC descriptor for the dma resource
/** Setup a DMAC descriptor for the dma resource
*
* @param[in] obj The DMA object
* @param[in] cfg Configuration parameters for the transfer
* @return The status of the configure request
*/
cy_rslt_t cyhal_dma_configure_dmac(cyhal_dma_t *obj, const cyhal_dma_cfg_t *cfg);
cy_rslt_t _cyhal_dma_dmac_configure(cyhal_dma_t *obj, const cyhal_dma_cfg_t *cfg);
/** Start a DMAC transfer
/** Start a DMAC transfer
*
* Initiates DMA channel transfer for specified DMA object
* @param[in] obj The DMA object
* @return The status of the start_transfer request
*/
cy_rslt_t cyhal_dma_start_transfer_dmac(cyhal_dma_t *obj);
cy_rslt_t _cyhal_dma_dmac_start_transfer(cyhal_dma_t *obj);
/** Configure DMAC event enablement.
*
@ -76,14 +76,14 @@ cy_rslt_t cyhal_dma_start_transfer_dmac(cyhal_dma_t *obj);
* @param[in] intr_priority The priority for NVIC interrupt events. The priority from the most recent call will take precedence, i.e all events will have the same priority.
* @param[in] enable True to turn on interrupts, False to turn off
*/
void cyhal_dma_enable_event_dmac(cyhal_dma_t *obj, cyhal_dma_event_t event, uint8_t intr_priority, bool enable);
void _cyhal_dma_dmac_enable_event(cyhal_dma_t *obj, cyhal_dma_event_t event, uint8_t intr_priority, bool enable);
/** Checks whether a transfer is pending or running on the DMA channel
*
* @param[in] obj The DMA object
* @return True if DMA channel is busy
*/
bool cyhal_dma_is_busy_dmac(cyhal_dma_t *obj);
bool _cyhal_dma_dmac_is_busy(cyhal_dma_t *obj);
#if defined(__cplusplus)
}
@ -91,4 +91,4 @@ bool cyhal_dma_is_busy_dmac(cyhal_dma_t *obj);
#endif /* CY_IP_M4CPUSS_DMAC */
/** \} group_hal_psoc6_dma_dmac */
/** \} group_hal_impl_dma_dmac */

View File

@ -25,8 +25,8 @@
#include "cyhal_dma.h"
/**
* \addtogroup group_hal_psoc6_dma_dw DW (Datawire)
* \ingroup group_hal_psoc6_dma
* \addtogroup group_hal_impl_dma_dw DW (Datawire)
* \ingroup group_hal_impl_dma
* \{
* Implementation specific interface for using the Datawire DMA peripheral
*/
@ -39,19 +39,19 @@
extern "C" {
#endif /* __cplusplus */
/** Initialize the Datawire peripheral.
/** Initialize the Datawire peripheral.
*
* @param[out] obj The DMA object to initialize
* @param[in] priority The priority of this DMA operation relative to others. Values must be between 0-3 with 0 being the highest priority.
* @return The status of the init request
*/
cy_rslt_t cyhal_dma_init_dw(cyhal_dma_t *obj, uint8_t priority);
cy_rslt_t _cyhal_dma_dw_init(cyhal_dma_t *obj, uint8_t priority);
/** Frees the Datawire specific DMA object
/** Frees the Datawire specific DMA object
*
* @param[in,out] obj The DMA object
*/
void cyhal_dma_free_dw(cyhal_dma_t *obj);
void _cyhal_dma_dw_free(cyhal_dma_t *obj);
/** Setup a Datawire descriptor for the dma resource
*
@ -59,15 +59,15 @@ void cyhal_dma_free_dw(cyhal_dma_t *obj);
* @param[in] cfg Configuration prameters for the transfer
* @return The status of the configure request
*/
cy_rslt_t cyhal_dma_configure_dw(cyhal_dma_t *obj, const cyhal_dma_cfg_t *cfg);
cy_rslt_t _cyhal_dma_dw_configure(cyhal_dma_t *obj, const cyhal_dma_cfg_t *cfg);
/** Start a Datawire transfer
/** Start a Datawire transfer
*
* Initiates DMA channel transfer for specified DMA object
* @param[in] obj The DMA object
* @return The status of the start_transfer request
*/
cy_rslt_t cyhal_dma_start_transfer_dw(cyhal_dma_t *obj);
cy_rslt_t _cyhal_dma_dw_start_transfer(cyhal_dma_t *obj);
/** Configure Datawire event enablement.
*
@ -76,14 +76,14 @@ cy_rslt_t cyhal_dma_start_transfer_dw(cyhal_dma_t *obj);
* @param[in] intr_priority The priority for NVIC interrupt events. The priority from the most recent call will take precedence, i.e all events will have the same priority.
* @param[in] enable True to turn on interrupts, False to turn off
*/
void cyhal_dma_enable_event_dw(cyhal_dma_t *obj, cyhal_dma_event_t event, uint8_t intr_priority, bool enable);
void _cyhal_dma_dw_enable_event(cyhal_dma_t *obj, cyhal_dma_event_t event, uint8_t intr_priority, bool enable);
/** Checks whether a transfer is pending or running on the DMA channel
*
* @param[in] obj The DMA object
* @return True if DMA channel is busy
*/
bool cyhal_dma_is_busy_dw(cyhal_dma_t *obj);
bool _cyhal_dma_dw_is_busy(cyhal_dma_t *obj);
#if defined(__cplusplus)
}
@ -91,4 +91,4 @@ bool cyhal_dma_is_busy_dw(cyhal_dma_t *obj);
#endif /* CY_IP_M4CPUSS_DMA */
/** \} group_hal_psoc6_dma_dw */
/** \} group_hal_impl_dma_dw */

View File

@ -30,8 +30,8 @@
extern "C" {
#endif
/** \addtogroup group_hal_psoc6_dma DMA (Direct Memory Access)
* \ingroup group_hal_psoc6
/** \addtogroup group_hal_impl_dma DMA (Direct Memory Access)
* \ingroup group_hal_impl
* \{
* DW (DataWire) is one of two DMA hardware implementations for PSOC6. DW is
* designed for low latency memory to peripheral or peripheral to memory
@ -60,11 +60,11 @@ extern "C" {
/** \cond INTERNAL */
/** Hal-Triggers uses bit 8 to denote a one to one trigger, whereas, the PDL
* SwTrigger function uses bit 5 to denote a one to one trigger. */
#define HAL_TRIGGERS_1TO1_MASK (0x80)
#define PDL_TRIGGERS_1TO1_MASK (0x10)
#define _CYHAL_DMA_TRIGGERS_1TO1_MASK (0x80)
#define _CYHAL_DMA_PDL_TRIGGERS_1TO1_MASK (0x10)
/** \endcond */
/** \} group_hal_psoc6_dma */
/** \} group_hal_impl_dma */
#if defined(__cplusplus)
}

View File

@ -0,0 +1,55 @@
/*******************************************************************************
* File Name: cyhal_drivers.h
*
* Description:
* Implementation specific HAL header file that pulls in all driver files that are
* applicable for this implementation.
*
********************************************************************************
* \copyright
* Copyright 2018-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
#pragma once
#include "cyhal_adc.h"
#include "cyhal_clock.h"
#include "cyhal_crc.h"
#include "cyhal_dac.h"
#include "cyhal_dma.h"
#include "cyhal_ezi2c.h"
#include "cyhal_flash.h"
#include "cyhal_gpio.h"
#include "cyhal_hwmgr.h"
#include "cyhal_i2c.h"
#include "cyhal_i2s.h"
#include "cyhal_interconnect.h"
#include "cyhal_lptimer.h"
#include "cyhal_opamp.h"
#include "cyhal_pdmpcm.h"
#include "cyhal_pwm.h"
#include "cyhal_qspi.h"
#include "cyhal_rtc.h"
#include "cyhal_sdhc.h"
#include "cyhal_sdio.h"
#include "cyhal_spi.h"
#include "cyhal_syspm.h"
#include "cyhal_system.h"
#include "cyhal_timer.h"
#include "cyhal_trng.h"
#include "cyhal_uart.h"
#include "cyhal_usb_dev.h"
#include "cyhal_wdt.h"

View File

@ -78,9 +78,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_ezi2c EZI2C HAL Results
* EZI2C specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name EZI2C Results
*/
/** The requested resource type is invalid */
@ -97,7 +98,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_EZI2C, 3))
/**
* \} \}
* \}
*/
/** CYHAL_EZI2C_EVENT_NONE event is deprecated and that CYHAL_EZI2C_STATUS_OK should be used instead */
@ -110,7 +111,7 @@ typedef enum
CYHAL_EZI2C_SUB_ADDR16_BITS /**< Sub-address is 16 bits */
} cyhal_ezi2c_sub_addr_size_t;
/** Size of Sub-Address */
/** Data rate of the slave */
typedef enum
{
CYHAL_EZI2C_DATA_RATE_100KHZ = 100000,

View File

@ -96,9 +96,10 @@ extern "C" {
* Defines
*******************************************************************************/
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_flash Flash HAL Results
* Flash specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name Flash Results
*/
/** Invalid argument */
@ -106,7 +107,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_FLASH, 0))
/** Unable to support due to power state */
/**
* \} \}
* \}
*/
/** @brief Information about a single block of flash memory */

View File

@ -77,19 +77,42 @@ enum cyhal_rslt_module_chip
CYHAL_RSLT_MODULE_PDMPCM = (0x0F << 8), //!< An error occurred in PDM/PCM module
CYHAL_RSLT_MODULE_PWM = (0x10 << 8), //!< An error occurred in PWM module
CYHAL_RSLT_MODULE_QSPI = (0x11 << 8), //!< An error occurred in QSPI module
CYHAL_RSLT_MODULE_RTC = (0x12 << 8), //!< An error occurred in RTC module
CYHAL_RSLT_MODULE_SDHC = (0x13 << 8), //!< An error occurred in SDHC module
CYHAL_RSLT_MODULE_SDIO = (0x14 << 8), //!< An error occurred in SDIO module
CYHAL_RSLT_MODULE_SPI = (0x15 << 8), //!< An error occurred in SPI module
CYHAL_RSLT_MODULE_SYSPM = (0x16 << 8), //!< An error occurred in SysPM module
CYHAL_RSLT_MODULE_SYSTEM = (0x17 << 8), //!< An error occurred in System module
CYHAL_RSLT_MODULE_TIMER = (0x18 << 8), //!< An error occurred in Timer module
CYHAL_RSLT_MODULE_TRNG = (0x19 << 8), //!< An error occurred in RNG module
CYHAL_RSLT_MODULE_UART = (0x1A << 8), //!< An error occurred in UART module
CYHAL_RSLT_MODULE_USB = (0x1B << 8), //!< An error occurred in USB module
CYHAL_RSLT_MODULE_WDT = (0x1C << 8), //!< An error occurred in WDT module
CYHAL_RSLT_MODULE_QUADDEC = (0x12 << 8), //!< An error occurred in Quadrature Decoder module
CYHAL_RSLT_MODULE_RTC = (0x13 << 8), //!< An error occurred in RTC module
CYHAL_RSLT_MODULE_SDHC = (0x14 << 8), //!< An error occurred in SDHC module
CYHAL_RSLT_MODULE_SDIO = (0x15 << 8), //!< An error occurred in SDIO module
CYHAL_RSLT_MODULE_SPI = (0x16 << 8), //!< An error occurred in SPI module
CYHAL_RSLT_MODULE_SYSPM = (0x17 << 8), //!< An error occurred in SysPM module
CYHAL_RSLT_MODULE_SYSTEM = (0x18 << 8), //!< An error occurred in System module
CYHAL_RSLT_MODULE_TIMER = (0x19 << 8), //!< An error occurred in Timer module
CYHAL_RSLT_MODULE_TRNG = (0x1A << 8), //!< An error occurred in RNG module
CYHAL_RSLT_MODULE_UART = (0x1B << 8), //!< An error occurred in UART module
CYHAL_RSLT_MODULE_USB = (0x1C << 8), //!< An error occurred in USB module
CYHAL_RSLT_MODULE_WDT = (0x1D << 8), //!< An error occurred in WDT module
};
/**
* Enum to specify all of the digital output signals supported by different hardware peripherals. These can be used
* as inputs to other peripherals if the selected device has internal routing resources.
*/
typedef enum
{
CYHAL_SIGNAL_DMA_COMPLETE, //!< DMA complete signal
CYHAL_SIGNAL_PWM_OUT, //!< PWM output signal
CYHAL_SIGNAL_PWM_OUT_INV, //!< PWM output signal inverted
CYHAL_SIGNAL_PWM_OVERFLOW, //!< PWM overflow signal
CYHAL_SIGNAL_PWM_UNDERFLOW, //!< PWM underflow signal
CYHAL_SIGNAL_PWM_COMPARE, //!< PWM period match signal
CYHAL_SIGNAL_TIMER_OVERFLOW, //!< Timer overflow signal
CYHAL_SIGNAL_TIMER_UNDERFLOW, //!< Timer underflow signal
CYHAL_SIGNAL_TIMER_CAPTURE, //!< Timer capture match signal
CYHAL_SIGNAL_QUADDEC_TC, //!< Quadrature Decoder terminal count signal. High on index event,
//!< or when counter reaches min/max value.
} cyhal_signal_digital_out_t;
/**
* \} group_hal_results
*/
@ -102,6 +125,35 @@ typedef enum {
CYHAL_ASYNC_SW,
} cyhal_async_mode_t;
/** @brief Selectable power levels.
*
* Power levels are defined relative to others. Higher power levels
* offer better performance but consume more power.
*
* Not all hardware supports four discrete power levels. If fewer
* power levels are supported, the values will be mapped as follows:
* | 4 Levels | 3 Levels | 2 Levels |
* | ---------------| -------------- | ----------------------------- |
* | Off | Off | Off |
* | Low | Low = Medium | Low = Medium = High = Default |
* | Medium | High = Default | |
* | High = Default | | |
* See the implementation specific documentation for details.
*/
typedef enum
{
/** Power-off the comparator, while retaining configuration */
CYHAL_POWER_LEVEL_OFF,
/** Low comparator power and speed */
CYHAL_POWER_LEVEL_LOW,
/** Medium comparator power and speed */
CYHAL_POWER_LEVEL_MEDIUM,
/** High comparator power and speed */
CYHAL_POWER_LEVEL_HIGH,
/** Default comparator power and speed */
CYHAL_POWER_LEVEL_DEFAULT
} cyhal_power_level_t;
/**
* \addtogroup group_hal_syspm System Power Management
* \ingroup group_hal
@ -182,7 +234,7 @@ typedef struct cyhal_syspm_callback_data
} cyhal_syspm_callback_data_t;
/**
* \} group_hal_syspm_apis
* \} group_hal_syspm
*/
/**

View File

@ -30,7 +30,7 @@
#include "cyhal_utils.h"
#include "cy_utils.h"
#ifdef CY_IP_MXS40IOSS
#if defined(CY_IP_MXS40IOSS) || defined(CY_IP_M0S8IOSS)
#if defined(__cplusplus)
extern "C" {
@ -70,4 +70,4 @@ __STATIC_INLINE void cyhal_gpio_toggle_internal(cyhal_gpio_t pin)
}
#endif /* __cplusplus */
#endif /* CY_IP_MXS40IOSS */
#endif /* defined(CY_IP_MXS40IOSS) || defined(CY_IP_M0S8IOSS) */

View File

@ -23,8 +23,8 @@
*******************************************************************************/
/**
* \addtogroup group_hal_psoc6_hw_types
* \ingroup group_hal_psoc6
* \addtogroup group_hal_impl_hw_types
* \ingroup group_hal_impl
* \{
*/
@ -140,4 +140,4 @@ typedef struct
}
#endif /* __cplusplus */
/** \} group_hal_psoc6_hw_types */
/** \} group_hal_impl_hw_types */

View File

@ -23,57 +23,59 @@
*******************************************************************************/
/**
* \addtogroup group_hal_psoc6 PSoC 6 Implementation Specific
* \addtogroup group_hal_impl PSoC 6 Implementation Specific
* \{
* This section provides details about the PSoC 6 implementation of the Cypress HAL.
* All information within this section is platform specific and is provided for reference.
* Portable application code should depend only on the APIs and types which are documented
* in the @ref group_hal section.
*
* \section group_hal_psoc6_mapping HAL Resource Hardware Mapping
* \section group_hal_impl_mapping HAL Resource Hardware Mapping
* The following table shows a mapping of each HAL driver to the lower level firmware driver
* and the corresponding hardware resource. This is intended to help understand how the HAL
* is implemented for PSoC 6 and what features the underlying hardware supports.
*
* | HAL Resource | PDL Driver(s) | PSoC 6 Hardware |
* | ---------------- | ------------------- | -------------------------------- |
* | ADC | cy_adc | SAR ADC |
* | Clock | cy_sysclk | All clocks (system & peripheral) |
* | CRC | cy_crypto_core_crc | Crypto |
* | DAC | cy_ctdac | DAC |
* | DMA | cy_dma, cy_dmac | DMA Controller |
* | EZI2C | cy_scb_ezi2c | SCB |
* | Flash | cy_flash | Flash |
* | GPIO | cy_gpio | GPIO |
* | Hardware Manager | NA | NA |
* | I2C | cy_scb_i2c | SCB |
* | I2S | cy_i2s | I2S |
* | LPTimer | cy_mcwdt | MCWDT |
* | PDM/PCM | cy_pdm_pcm | PDM-PCM |
* | PWM | cy_pwm | TCPWM |
* | QSPI | cy_smif | QSPI (SMIF) |
* | RTC | cy_rtc | RTC |
* | SDHC | cy_sd_host | SD Host |
* | SDIO | cy_sd_host, or NA | SD Host, or UDB |
* | SPI | cy_scb_spi | SCB |
* | SysPM | cy_syspm | System Power Resources |
* | System | cy_syslib | System Resources |
* | Timer | cy_tcpwm_counter | TCPWM |
* | TRNG | cy_crypto_core_trng | Crypto |
* | UART | cy_scb_uart | SCB |
* | USB Device | cy_usbfs_dev_drv | USB-FS |
* | WDT | cy_wdt | WDT |
* | HAL Resource | PDL Driver(s) | PSoC 6 Hardware |
* | ------------------ | ------------------- | -------------------------------- |
* | ADC | cy_adc | SAR ADC |
* | Clock | cy_sysclk | All clocks (system & peripheral) |
* | Comparator | cy_ctb or cy_lpcomp | CTBm or LPComp |
* | CRC | cy_crypto_core_crc | Crypto |
* | DAC | cy_ctdac | DAC |
* | DMA | cy_dma, cy_dmac | DMA Controller |
* | EZ-I2C | cy_scb_ezi2c | SCB |
* | Flash | cy_flash | Flash |
* | GPIO | cy_gpio | GPIO |
* | Hardware Manager | NA | NA |
* | I2C | cy_scb_i2c | SCB |
* | I2S | cy_i2s | I2S |
* | LPTimer | cy_mcwdt | MCWDT |
* | Opamp | cy_ctb | CTBm |
* | PDM/PCM | cy_pdm_pcm | PDM-PCM |
* | PWM | cy_pwm | TCPWM |
* | QSPI | cy_smif | QSPI (SMIF) |
* | RTC | cy_rtc | RTC |
* | SDHC | cy_sd_host | SD Host |
* | SDIO | cy_sd_host, or NA | SD Host, or UDB |
* | SPI | cy_scb_spi | SCB |
* | SysPM | cy_syspm | System Power Resources |
* | System | cy_syslib | System Resources |
* | Timer | cy_tcpwm_counter | TCPWM |
* | TRNG | cy_crypto_core_trng | Crypto |
* | UART | cy_scb_uart | SCB |
* | USB Device | cy_usbfs_dev_drv | USB-FS |
* | WDT | cy_wdt | WDT |
*
* \section group_hal_psoc6_errors Device Specific Errors
* \section group_hal_impl_errors Device Specific Errors
* Error codes generated by the low level level PDL driver all use module IDs starting
* with \ref CY_RSLT_MODULE_DRIVERS_PDL_BASE. The exact errors are documented for each
* driver in the
* <a href="https://cypresssemiconductorco.github.io/psoc6pdl/pdl_api_reference_manual/html/index.html">
* psoc6pdl documentation</a>.
* <a href="https://cypresssemiconductorco.github.io/mtb-pdl-cat1/pdl_api_reference_manual/html/index.html">
* mtb-pdl-cat1 documentation</a>.
*/
/**
* \addtogroup group_hal_psoc6_hw_types PSoC 6 Specific Hardware Types
* \addtogroup group_hal_impl_hw_types PSoC 6 Specific Hardware Types
* \{
* Aliases for types which are part of the public HAL interface but whose representations
* need to vary per HAL implementation
@ -108,10 +110,12 @@ extern "C" {
* \cond INTERNAL
*/
#define CYHAL_ADC_IMPL_HEADER "cyhal_adc_impl.h" //!< Implementation specific header for ADC
#define CYHAL_CRC_IMPL_HEADER "cyhal_crc_impl.h" //!< Implementation specific header for CRC
#define CYHAL_DMA_IMPL_HEADER "cyhal_dma_impl.h" //!< Implementation specific header for DMA
#define CYHAL_CLOCK_IMPL_HEADER "cyhal_clock_impl.h" //!< Implementation specific header for Clocks
#define CYHAL_GPIO_IMPL_HEADER "cyhal_gpio_impl.h" //!< Implementation specific header for GPIO
#define CYHAL_PDMPCM_IMPL_HEADER "cyhal_pdmpcm_impl.h" //!< Implementation specific header for PDMPCM
#define CYHAL_PWM_IMPL_HEADER "cyhal_pwm_impl.h" //!< Implementation specific header for PWM
#define CYHAL_SYSTEM_IMPL_HEADER "cyhal_system_impl.h" //!< Implementation specific header for System
#define CYHAL_SYSPM_IMPL_HEADER "cyhal_syspm_impl.h" //!< Implementation specific header for System Power Management
@ -140,92 +144,20 @@ typedef struct {
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct cyhal_tcpwm_common {
typedef struct {
#ifdef CY_IP_MXTCPWM
TCPWM_Type* base;
cyhal_resource_inst_t resource;
cyhal_gpio_t pin;
cyhal_clock_t clock;
bool dedicated_clock;
uint32_t clock_hz;
cyhal_event_callback_data_t callback_data;
cyhal_gpio_t pin_compl; /* PWM Only */
uint32_t default_value; /* Timer only */
#else
void *empty
#endif
} cyhal_tcpwm_common_t;
/**
* @brief ADC object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#ifdef CY_IP_MXS40PASS_SAR
SAR_Type* base;
cyhal_resource_inst_t resource;
cyhal_clock_t clock;
bool dedicated_clock;
// channel_used is a bit field. The maximum channel count
// supported by the SAR IP is 16
uint16_t channel_used;
#else
void *empty;
#endif
} cyhal_adc_t;
/**
* @brief ADC channel object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#ifdef CY_IP_MXS40PASS_SAR
cyhal_adc_t* adc;
cyhal_gpio_t pin;
uint8_t channel_idx;
#else
void *empty;
#endif
} cyhal_adc_channel_t;
/**
* @brief CRC object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#if defined(CY_IP_MXCRYPTO_INSTANCES) || defined(CPUSS_CRYPTO_PRESENT)
CRYPTO_Type* base;
cyhal_resource_inst_t resource;
uint32_t crc_width;
#endif
} cyhal_crc_t;
/**
* @brief DAC object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#ifdef CY_IP_MXS40PASS_CTDAC
CTDAC_Type* base;
cyhal_resource_inst_t resource;
cyhal_gpio_t pin;
#else
void *empty;
#endif
} cyhal_dac_t;
} cyhal_tcpwm_t;
/* This is presented out of order because many other structs depend on it */
/**
* @brief DMA object
*
@ -270,6 +202,133 @@ typedef struct {
#endif
} cyhal_dma_t;
struct _cyhal_adc_channel_s;
/**
* @brief ADC object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#ifdef CY_IP_MXS40PASS_SAR
SAR_Type* base;
cyhal_resource_inst_t resource;
cyhal_clock_t clock;
bool dedicated_clock;
bool continuous_scanning;
/* Has at least one conversion completed since the last configuration change */
volatile bool conversion_complete;
struct _cyhal_adc_channel_s* channel_config[CY_SAR_MAX_NUM_CHANNELS];
uint8_t user_enabled_events;
cyhal_event_callback_data_t callback_data;
cyhal_async_mode_t async_mode;
cyhal_dma_t dma;
/* Always updated to contain the location where the next result should be stored */
int32_t *async_buff_orig;
int32_t *async_buff_next;
bool async_transfer_in_uv; /* Default is counts */
/* Only decremented after all elements from a scan have been copied into async_buff */
size_t async_scans_remaining;
#else
void *empty;
#endif
} cyhal_adc_t;
/**
* @brief ADC channel object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct _cyhal_adc_channel_s { /* Struct given an explicit name to make the forward declaration above work */
#ifdef CY_IP_MXS40PASS_SAR
cyhal_adc_t* adc;
cyhal_gpio_t vplus;
cyhal_gpio_t vminus;
uint8_t channel_idx;
uint32_t minimum_acquisition_ns;
#else
void *empty;
#endif
} cyhal_adc_channel_t;
/** @brief Comparator object */
typedef struct {
#if defined(CY_IP_MXLPCOMP_INSTANCES) || defined(CY_IP_MXS40PASS_CTB_INSTANCES)
cyhal_resource_inst_t resource;
union
{
#if defined(CY_IP_MXS40PASS_CTB_INSTANCES)
CTBM_Type *base_ctb;
#endif
#if defined(CY_IP_MXLPCOMP_INSTANCES)
LPCOMP_Type *base_lpcomp;
#endif
};
cyhal_gpio_t pin_vin_p;
cyhal_gpio_t pin_vin_m;
cyhal_gpio_t pin_out;
cyhal_event_callback_data_t callback_data;
uint32_t irq_cause;
#else
void *empty;
#endif
} cyhal_comp_t;
/**
* @brief CRC object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#if defined(CY_IP_MXCRYPTO_INSTANCES) || defined(CPUSS_CRYPTO_PRESENT)
CRYPTO_Type* base;
cyhal_resource_inst_t resource;
uint32_t crc_width;
#endif
} cyhal_crc_t;
/**
* @brief DAC object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
#ifdef CY_IP_MXS40PASS_CTDAC
CTDAC_Type* base_dac;
CTBM_Type* base_opamp;
cyhal_resource_inst_t resource_dac;
cyhal_resource_inst_t resource_opamp;
cyhal_resource_inst_t resource_aref_opamp;
cyhal_gpio_t pin;
#else
void *empty;
#endif
} cyhal_dac_t;
/**
* @brief OPAMP object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef struct {
CTBM_Type* base;
cyhal_resource_inst_t resource;
cyhal_gpio_t pin_vin_p;
cyhal_gpio_t pin_vin_m;
cyhal_gpio_t pin_vout;
bool is_init_success;
} cyhal_opamp_t;
/**
* @brief Flash object
*
@ -367,10 +426,10 @@ typedef struct {
cyhal_dma_t rx_dma;
// Note: When the async DMA mode is in use, these variables will always reflect the state
// that the transfer will be in after the in-progress DMA transfer, if any, is complete
const void *async_tx_buff;
size_t async_tx_length;
void *async_rx_buff;
size_t async_rx_length;
volatile const void *async_tx_buff;
volatile size_t async_tx_length;
volatile void *async_rx_buff;
volatile size_t async_rx_length;
volatile bool pm_transition_ready;
cyhal_syspm_callback_data_t pm_callback;
#else
@ -390,6 +449,7 @@ typedef struct {
MCWDT_STRUCT_Type *base;
cyhal_resource_inst_t resource;
cyhal_event_callback_data_t callback_data;
bool clear_int_mask;
#else
void *empty;
#endif
@ -430,10 +490,18 @@ typedef struct {
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef cyhal_tcpwm_common_t cyhal_pwm_t;
typedef struct {
#ifdef CY_IP_MXTCPWM
cyhal_tcpwm_t tcpwm;
cyhal_gpio_t pin;
cyhal_gpio_t pin_compl;
#else
void *empty;
#endif
} cyhal_pwm_t;
/**
* @brief SMIF object
* @brief QSPI object
*
* Application code should not rely on the specific contents of this struct.
* They are considered an implementation detail which is subject to change
@ -445,11 +513,13 @@ typedef struct {
cyhal_resource_inst_t resource;
cyhal_gpio_t pin_ios[8];
cyhal_gpio_t pin_sclk;
cyhal_gpio_t pin_ssel;
uint32_t frequency;
cyhal_gpio_t pin_ssel[SMIF_CHIP_TOP_SPI_SEL_NR];
/* Active slave select */
cy_en_smif_slave_select_t slave_select;
cyhal_clock_t clock;
bool is_clock_owned;
uint8_t mode;
cy_stc_smif_context_t context;
cy_en_smif_slave_select_t slave_select;
cy_en_smif_data_select_t data_select;
uint32_t irq_cause;
cyhal_event_callback_data_t callback_data;
@ -502,6 +572,7 @@ typedef struct {
#ifdef CY_IP_MXSDHC
SDHC_Type* base;
cyhal_resource_inst_t resource;
cyhal_clock_t clock;
bool emmc;
cy_en_sd_host_dma_type_t dmaType;
bool enableLedControl;
@ -538,7 +609,6 @@ typedef struct {
cy_en_sd_host_dma_type_t dmaType;
cy_stc_sd_host_context_t context;
#elif defined(CYHAL_UDB_SDIO)
cyhal_clock_t clock;
cyhal_dma_t dma0Ch0;
cyhal_dma_t dma0Ch1;
cyhal_dma_t dma1Ch1;
@ -547,6 +617,7 @@ typedef struct {
#endif /* defined(CY_IP_MXSDHC) */
#if defined(CYHAL_UDB_SDIO) || defined(CY_IP_MXSDHC)
cyhal_clock_t clock;
cyhal_resource_inst_t resource;
cyhal_gpio_t pin_clk;
cyhal_gpio_t pin_cmd;
@ -583,7 +654,9 @@ typedef struct {
cyhal_gpio_t pin_miso;
cyhal_gpio_t pin_mosi;
cyhal_gpio_t pin_sclk;
cyhal_gpio_t pin_ssel;
cyhal_gpio_t pin_ssel[4];
cy_en_scb_spi_polarity_t ssel_pol[4];
uint8_t active_ssel;
cyhal_clock_t clock;
cy_en_scb_spi_sclk_mode_t clk_mode;
uint8_t mode;
@ -614,7 +687,14 @@ typedef struct {
* They are considered an implementation detail which is subject to change
* between platforms and/or HAL releases.
*/
typedef cyhal_tcpwm_common_t cyhal_timer_t;
typedef struct {
#ifdef CY_IP_MXTCPWM
cyhal_tcpwm_t tcpwm;
uint32_t default_value;
#else
void *empty;
#endif
} cyhal_timer_t;
/**
* @brief UART object
@ -687,5 +767,5 @@ typedef struct {
}
#endif /* __cplusplus */
/** \} group_hal_psoc6_hw_types */
/** \} group_hal_psoc6 */
/** \} group_hal_impl_hw_types */
/** \} group_hal_impl */

View File

@ -64,9 +64,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_hwmgr HWMGR HAL Results
* HWMGR specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name Hardware Manager Results
*/
/** The requested resource type is invalid */
@ -83,7 +84,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_WARNING, CYHAL_RSLT_MODULE_HWMGR, 50))
/**
* \} \}
* \}
*/

View File

@ -99,9 +99,10 @@ PSoC 6 MCU: I2C Slave Using Callbacks</b></a>
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_i2c I2C HAL Results
* I2C specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name I2C Results
*/
/** The requested resource type is invalid */
@ -123,9 +124,13 @@ extern "C" {
#define CYHAL_I2C_RSLT_ERR_PM_CALLBACK \
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_I2C, 5))
/**
* \} \}
* \}
*/
/** Named define for Slave mode for use when initializing the \ref cyhal_i2c_cfg_t structure. */
#define CYHAL_I2C_MODE_SLAVE (true)
/** Named define for Master mode for use when initializing the \ref cyhal_i2c_cfg_t structure. */
#define CYHAL_I2C_MODE_MASTER (false)
/** Enum to enable/disable/report interrupt cause flags. */
typedef enum

View File

@ -105,9 +105,10 @@ PSoC 6 MCU: PDM to I2S</b></a>
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_i2s I2S HAL Results
* I2S specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name I2S Results
*/
/** An invalid pin location was specified */
@ -124,7 +125,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_I2S, 3))
/**
* \} \}
* \}
*/
/** I2S events */
@ -233,6 +234,13 @@ cy_rslt_t cyhal_i2s_start_tx(cyhal_i2s_t *obj);
*/
cy_rslt_t cyhal_i2s_stop_tx(cyhal_i2s_t *obj);
/** Clears the tx hardware buffer
*
* @param[in] obj The i2s peripheral
* @return The status of the clear request
*/
cy_rslt_t cyhal_i2s_clear_tx(cyhal_i2s_t *obj);
/** Starts receiving data.
*
* @param[in] obj The I2S object
@ -247,6 +255,13 @@ cy_rslt_t cyhal_i2s_start_rx(cyhal_i2s_t *obj);
*/
cy_rslt_t cyhal_i2s_stop_rx(cyhal_i2s_t *obj);
/** Clears the rx hardware buffer
*
* @param[in] obj The i2s peripheral
* @return The status of the clear request
*/
cy_rslt_t cyhal_i2s_clear_rx(cyhal_i2s_t *obj);
/** Read data synchronously
*
* This will read either `length` words or the number of words that are currently available in the
@ -282,6 +297,17 @@ cy_rslt_t cyhal_i2s_read(cyhal_i2s_t *obj, void *data, size_t* length);
*/
cy_rslt_t cyhal_i2s_write(cyhal_i2s_t *obj, const void *data, size_t *length);
/** Checks if the transmit functionality is enabled for the specified I2S peripheral (regardless of whether data
* is currently queued for transmission).
*
* The transmit functionality can be enabled by calling @ref cyhal_i2s_start_tx and disabled by calling
* @ref cyhal_i2s_stop_tx
*
* @param[in] obj The I2S peripheral to check
* @return Whether the I2S transmit function is enabled.
*/
bool cyhal_i2s_is_tx_enabled(cyhal_i2s_t *obj);
/** Checks if the specified I2S peripheral is transmitting data, including if a pending async transfer is waiting
* to write more data to the transmit buffer.
*
@ -290,6 +316,17 @@ cy_rslt_t cyhal_i2s_write(cyhal_i2s_t *obj, const void *data, size_t *length);
*/
bool cyhal_i2s_is_tx_busy(cyhal_i2s_t *obj);
/** Checks if the receive functionality is enabled for the specified I2S peripheral (regardless of whether any
* unread data has been received).
*
* The receive functionality can be enabled by calling @ref cyhal_i2s_start_rx and disabled by calling
* @ref cyhal_i2s_stop_rx
*
* @param[in] obj The I2S peripheral to check
* @return Whether the I2S receive function is enabled.
*/
bool cyhal_i2s_is_rx_enabled(cyhal_i2s_t *obj);
/** Checks if the specified I2S peripheral has received data that has not yet been read out of the hardware buffer.
* This includes if an async read transfer is pending.
*

View File

@ -63,9 +63,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_interconnect Interconnect HAL Results
* Interconnect specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name Interconnect Results
*/
/** No connection is available */
@ -79,7 +80,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_INTERCONNECT, 2))
/**
* \} \}
* \}
*/
/** Indicates that a mux output does not continue to another mux */

View File

@ -34,6 +34,7 @@
* LPTimer can operate in all possible low power modes. It can be used either to measure timing between events, or to perform
* some action after a specified interval of time.
* \section subsection_lptimer_features Features
* * Wake the device up from deepsleep
* * Configurable to create a free-running timer or generate periodic interrupts.
* * Configurable to update the match value of an already configured LPTimer set up to generate an interrupt on match.
* * Used for measuring time between events in free-running mode.
@ -50,9 +51,10 @@
* The following snippet initializes a LPTimer in free running mode.
* \snippet lptimer.c snippet_cyhal_lptimer_simple_init_def
*
* \subsection subsection_lptimer_snippet_2 Snippet 2: Simple LPTimer initialization with set Match value
* The following snippet initializes a LPTimer and assigns the Match value to the LPTimer.
* \snippet lptimer.c snippet_cyhal_lptimer_simple_init
* \subsection subsection_lptimer_snippet_2 Snippet 2: LPTimer interrupts
* The following snippet initializes a LPTimer and uses \ref cyhal_lptimer_set_match() to trigger an interrupt
* on match. Subsequent interrupts can be triggered at required times using \ref cyhal_lptimer_set_delay() called from the ISR.
* \snippet lptimer.c snippet_cyhal_lptimer_interrupt
*/
#pragma once
@ -66,9 +68,10 @@
extern "C" {
#endif
/** \addtogroup group_hal_results
/** \addtogroup group_hal_results_lptimer LPTimer HAL Results
* LPTimer specific return codes
* \ingroup group_hal_results
* \{ *//**
* \{ @name LPTimer Results
*/
/** Failed to configure power management callback */
@ -76,7 +79,7 @@ extern "C" {
(CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_WDT, 0))
/**
* \} \}
* \}
*/
/** LPTimer Information */
@ -135,6 +138,7 @@ cy_rslt_t cyhal_lptimer_reload(cyhal_lptimer_t *obj);
* to generate an interrupt on match. Note that this function does not
* reinitialize the counter or the associated peripheral initialization
* sequence.
* \note This does not reset the counter.
*
* @param[in] obj The LPTimer object
* @param[in] value The tick value to match
@ -150,6 +154,7 @@ cy_rslt_t cyhal_lptimer_set_match(cyhal_lptimer_t *obj, uint32_t value);
* Note that this function does not reinitialize the counter or the
* associated peripheral initialization
* sequence.
* \note This does not reset the counter.
*
* @param[in] obj The LPTimer object
* @param[in] delay The ticks to wait. The minimum permitted delay value can be
@ -214,4 +219,4 @@ void cyhal_lptimer_get_info(cyhal_lptimer_t *obj, cyhal_lptimer_info_t *info);
#include CYHAL_LPTIMER_IMPL_HEADER
#endif /* CYHAL_LPTIMER_IMPL_HEADER */
/** \} group_hal_lptimer */
/** \} group_hal_lptimer */

Some files were not shown because too many files have changed in this diff Show More