-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathhoja_settings.c
More file actions
192 lines (157 loc) · 5.35 KB
/
Copy pathhoja_settings.c
File metadata and controls
192 lines (157 loc) · 5.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include "hoja_settings.h"
hoja_settings_s loaded_settings = {};
hoja_err_t hoja_settings_init(void)
{
nvs_handle_t my_handle;
const char* TAG = "hoja_settings_init";
esp_err_t err;
// Check if we have the magic byte
// Open storage
err = nvs_open(SETTINGS_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "During HOJA load settings, NVS Open failed.");
return HOJA_FAIL;
}
size_t required_size = 0;
err = nvs_get_blob(my_handle, "hoja_settings", NULL, &required_size);
if (err != ESP_OK && err != ESP_ERR_NVS_NOT_FOUND) return HOJA_FAIL;
ESP_LOGI(TAG, "Required size: %d", required_size);
if (required_size > 0)
{
err = nvs_get_blob(my_handle, "hoja_settings", &loaded_settings, &required_size);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "Could not load settings. 0x%08X", (unsigned int) loaded_settings.magic_bytes);
return HOJA_FAIL;
}
if (loaded_settings.magic_bytes != SETTINGS_MAGIC)
{
ESP_LOGI(TAG, "Settings magic bytes don't match. Setting to default...");
nvs_close(my_handle);
if (hoja_settings_default()) return HOJA_OK;
}
else
{
ESP_LOGI(TAG, "Settings loaded with magic byte 0x%08X", (unsigned int) loaded_settings.magic_bytes);
hoja_remaps.val = loaded_settings.button_remaps;
nvs_close(my_handle);
}
}
else
{
ESP_LOGI(TAG, "Settings unset. Set defaults...");
// We need to set/save all the appropriate settings.
nvs_close(my_handle);
if (hoja_settings_default()) return HOJA_OK;
}
ESP_LOGI(TAG, "HOJA Settings initialized OK.");
return HOJA_OK;
}
// Save all settings
hoja_err_t hoja_settings_saveall(void)
{
const char* TAG = "hoja_settings_saveall";
nvs_handle_t my_handle;
esp_err_t err;
// Open
err = nvs_open(SETTINGS_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "During HOJA settings save, NVS storage failed to open.");
return HOJA_FAIL;
}
nvs_set_blob(my_handle, "hoja_settings", &loaded_settings, sizeof(loaded_settings));
nvs_commit(my_handle);
nvs_close(my_handle);
return HOJA_OK;
}
// Sets all settings to default.
hoja_err_t hoja_settings_default(void)
{
const char* TAG = "hoja_settings_default";
nvs_handle_t my_handle;
esp_err_t err;
ESP_LOGI(TAG, "Setting defaults...");
// Open
err = nvs_open(SETTINGS_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK)
{
ESP_LOGE(TAG, "Error when opening NVS storage for HOJA Settings.");
return HOJA_FAIL;
}
loaded_settings.magic_bytes = SETTINGS_MAGIC;
loaded_settings.controller_mode = HOJA_CONTROLLER_MODE_RETRO;
// Nintendo Switch Core stuff
memset(loaded_settings.ns_host_bt_address, 0, 6);
hoja_settings_generate_btmac(loaded_settings.ns_client_bt_address);
loaded_settings.ns_controller_paired = false;
loaded_settings.ns_controller_type = NS_TYPE_PROCON;
// Generate bt mac address for DInput
hoja_settings_generate_btmac(loaded_settings.dinput_client_bt_address);
// Generate bt mac address for XInput
hoja_settings_generate_btmac(loaded_settings.xinput_client_bt_address);
// Default color greenish
loaded_settings.color_r = 0xFF;
loaded_settings.color_g = 0xFF;
loaded_settings.color_b = 0xFF;
loaded_settings.sx_min = 0xFA;
loaded_settings.sx_center = 0x740;
loaded_settings.sx_max = 0xF47;
loaded_settings.sy_min = 0xFA;
loaded_settings.sy_center = 0x740;
loaded_settings.sy_max = 0xF47;
loaded_settings.cx_min = 0xFA;
loaded_settings.cx_center = 0x740;
loaded_settings.cx_max = 0xF47;
loaded_settings.cy_min = 0xFA;
loaded_settings.cy_center = 0x740;
loaded_settings.cy_max = 0xF47;
button_remap_s default_hoja_remaps = {
.dpad_up = MAPCODE_DUP,
.dpad_down = MAPCODE_DDOWN,
.dpad_left = MAPCODE_DLEFT,
.dpad_right = MAPCODE_DRIGHT,
.button_up = MAPCODE_B_UP,
.button_down = MAPCODE_B_DOWN,
.button_left = MAPCODE_B_LEFT,
.button_right = MAPCODE_B_RIGHT,
.trigger_l = MAPCODE_T_L,
.trigger_zl = MAPCODE_T_ZL,
.trigger_r = MAPCODE_T_R,
.trigger_zr = MAPCODE_T_ZR,
.button_start = MAPCODE_B_START,
.button_select = MAPCODE_B_SELECT,
.button_stick_left = MAPCODE_B_STICKL,
.button_stick_right = MAPCODE_B_STICKR,
};
loaded_settings.button_remaps = default_hoja_remaps.val;
hoja_remaps.val = default_hoja_remaps.val;
// Set blob
nvs_set_blob(my_handle, "hoja_settings", &loaded_settings, sizeof(hoja_settings_s));
nvs_commit(my_handle);
nvs_close(my_handle);
return HOJA_OK;
}
void hoja_settings_generate_btmac(uint8_t * out)
{
// Generate random MAC address
for(int i = 0; i < 8; i++)
{
switch(i)
{
case 0:
out[i] = 0x98;
break;
case 1:
out[i] = 0x41;
break;
case 2:
out[i] = 0x5C;
break;
default:
out[i] = esp_random()%255;
break;
}
}
}