@@ -120,44 +120,55 @@ static void wifi_init_sta()
120
120
ESP_ERROR_CHECK (esp_wifi_start ());
121
121
}
122
122
123
- static void get_device_service_name (char * service_name , size_t max )
124
- {
125
- uint8_t eth_mac [6 ];
126
- const char * ssid_prefix = "PROV_" ;
127
- esp_wifi_get_mac (WIFI_IF_STA , eth_mac );
128
- snprintf (service_name , max , "%s%02X%02X%02X" ,
129
- ssid_prefix , eth_mac [3 ], eth_mac [4 ], eth_mac [5 ]);
130
- }
131
-
132
123
/* free the return value after use. */
133
- static char * read_random_bytes_from_nvs ()
124
+ static esp_err_t read_random_bytes_from_nvs (uint8_t * * random_bytes , size_t * len )
134
125
{
135
126
nvs_handle handle ;
136
127
esp_err_t err ;
137
- size_t required_size = 0 ;
138
- void * value ;
128
+ * len = 0 ;
139
129
140
130
if ((err = nvs_open_from_partition (CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME , CREDENTIALS_NAMESPACE ,
141
131
NVS_READONLY , & handle )) != ESP_OK ) {
142
132
ESP_LOGD (TAG , "NVS open for %s %s %s failed with error %d" , CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME , CREDENTIALS_NAMESPACE , RANDOM_NVS_KEY , err );
143
- return NULL ;
133
+ return ESP_FAIL ;
144
134
}
145
135
146
- if ((err = nvs_get_blob (handle , RANDOM_NVS_KEY , NULL , & required_size )) != ESP_OK ) {
147
- ESP_LOGD (TAG , "Failed to read key %s with error %d size %d " , RANDOM_NVS_KEY , err , required_size );
136
+ if ((err = nvs_get_blob (handle , RANDOM_NVS_KEY , NULL , len )) != ESP_OK ) {
137
+ ESP_LOGD (TAG , "Error %d. Failed to read key %s. " , err , RANDOM_NVS_KEY );
148
138
nvs_close (handle );
149
- return NULL ;
139
+ return ESP_ERR_NOT_FOUND ;
150
140
}
151
141
152
- value = calloc (required_size + 1 , 1 ); /* + 1 for NULL termination */
153
- if (value ) {
154
- nvs_get_blob (handle , RANDOM_NVS_KEY , value , & required_size );
142
+ * random_bytes = calloc (* len , 1 );
143
+ if (* random_bytes ) {
144
+ nvs_get_blob (handle , RANDOM_NVS_KEY , * random_bytes , len );
145
+ nvs_close (handle );
146
+ return ESP_OK ;
155
147
}
156
-
157
148
nvs_close (handle );
158
- return value ;
149
+ return ESP_ERR_NO_MEM ;
150
+ }
151
+
152
+ static esp_err_t get_device_service_name (char * service_name , size_t max )
153
+ {
154
+ uint8_t * nvs_random ;
155
+ const char * ssid_prefix = "PROV_" ;
156
+ size_t nvs_random_size = 0 ;
157
+ if ((read_random_bytes_from_nvs (& nvs_random , & nvs_random_size ) != ESP_OK ) || nvs_random_size < 3 ) {
158
+ uint8_t eth_mac [6 ];
159
+ esp_wifi_get_mac (WIFI_IF_STA , eth_mac );
160
+ snprintf (service_name , max , "%s%02x%02x%02x" , ssid_prefix , eth_mac [3 ], eth_mac [4 ], eth_mac [5 ]);
161
+ } else {
162
+ snprintf (service_name , max , "%s%02x%02x%02x" , ssid_prefix , nvs_random [nvs_random_size - 3 ],
163
+ nvs_random [nvs_random_size - 2 ], nvs_random [nvs_random_size - 1 ]);
164
+ }
165
+ if (nvs_random ) {
166
+ free (nvs_random );
167
+ }
168
+ return ESP_OK ;
159
169
}
160
170
171
+
161
172
static esp_err_t get_device_pop (char * pop , size_t max , app_wifi_pop_type_t pop_type )
162
173
{
163
174
if (!pop || !max ) {
@@ -174,14 +185,13 @@ static esp_err_t get_device_pop(char *pop, size_t max, app_wifi_pop_type_t pop_t
174
185
return err ;
175
186
}
176
187
} else if (pop_type == POP_TYPE_RANDOM ) {
177
- char * nvs_pop = read_random_bytes_from_nvs ();
178
- if (!nvs_pop ) {
188
+ uint8_t * nvs_random ;
189
+ size_t nvs_random_size = 0 ;
190
+ if ((read_random_bytes_from_nvs (& nvs_random , & nvs_random_size ) != ESP_OK ) || nvs_random_size < 4 ) {
179
191
return ESP_ERR_NOT_FOUND ;
180
192
} else {
181
- strncpy (pop , nvs_pop , max - 1 );
182
- pop [max - 1 ] = 0 ;
183
- free (nvs_pop );
184
- nvs_pop = NULL ;
193
+ snprintf (pop , max , "%02x%02x%02x%02x" , nvs_random [0 ], nvs_random [1 ], nvs_random [2 ], nvs_random [3 ]);
194
+ free (nvs_random );
185
195
return ESP_OK ;
186
196
}
187
197
} else {
0 commit comments