Просмотр исходного кода

NfcMaker: Add comments for wifi gen

Willy-JL 1 год назад
Родитель
Сommit
c01290b264
1 измененных файлов с 32 добавлено и 12 удалено
  1. 32 12
      nfc_maker/scenes/nfc_maker_scene_save_generate.c

+ 32 - 12
nfc_maker/scenes/nfc_maker_scene_save_generate.c

@@ -127,60 +127,80 @@ size_t nfc_maker_scene_save_generate_populate_ndef_buffer(NfcMaker* app) {
         tnf = 0x02; // Media-type [RFC 2046]
         type = "application/vnd.wfa.wsc";
 
+        // https://android.googlesource.com/platform/packages/apps/Nfc/+/refs/heads/main/src/com/android/nfc/NfcWifiProtectedSetup.java
+        // https://github.com/bparmentier/WiFiKeyShare/blob/master/app/src/main/java/be/brunoparmentier/wifikeyshare/utils/NfcUtils.java
         uint8_t ssid_len = strnlen(app->small_buf1, SMALL_INPUT_LEN);
         uint8_t pass_len = strnlen(app->small_buf2, SMALL_INPUT_LEN);
         uint8_t data_len = ssid_len + pass_len;
         payload_len = data_len + 39;
         payload = payload_it = malloc(payload_len);
 
+        // CREDENTIAL_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x0E;
+        // CREDENTIAL_FIELD_LEN
         *payload_it++ = 0x00;
-
         *payload_it++ = data_len + 43;
+        // CREDENTIAL_FIELD (contains all subsequent fields)
+
+        // NETWORK_INDEX_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x26;
+        // NETWORK_INDEX_FIELD_LEN
         *payload_it++ = 0x00;
-
         *payload_it++ = 0x01;
+        // NETWORK_INDEX_FIELD
         *payload_it++ = 0x01;
+
+        // SSID_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x45;
-
-        *payload_it++ = 0x00;
-        *payload_it++ = ssid_len;
+        // SSID_FIELD_LEN
+        *payload_it++ = ssid_len >> 8 & 0xFF;
+        *payload_it++ = ssid_len & 0xFF;
+        // SSID_FIELD
         memcpy(payload_it, app->small_buf1, ssid_len);
         payload_it += ssid_len;
+
+        // AUTH_TYPE_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x03;
-
+        // AUTH_TYPE_FIELD_LEN
         *payload_it++ = 0x00;
         *payload_it++ = 0x02;
+        // AUTH_TYPE_FIELD
         *payload_it++ = 0x00;
         *payload_it++ = scene_manager_get_scene_state(app->scene_manager, NfcMakerSceneWifiAuth);
 
+        // ENC_TYPE_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x0F;
+        // ENC_TYPE_FIELD_LEN
         *payload_it++ = 0x00;
         *payload_it++ = 0x02;
-
+        // ENC_TYPE_FIELD
         *payload_it++ = 0x00;
         *payload_it++ = scene_manager_get_scene_state(app->scene_manager, NfcMakerSceneWifiEncr);
+
+        // NETWORK_KEY_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x27;
-
-        *payload_it++ = 0x00;
-        *payload_it++ = pass_len;
+        // NETWORK_KEY_FIELD_LEN
+        *payload_it++ = pass_len >> 8 & 0xFF;
+        *payload_it++ = pass_len & 0xFF;
+        // NETWORK_KEY_FIELD
         memcpy(payload_it, app->small_buf2, pass_len);
         payload_it += pass_len;
+
+        // MAC_ADDRESS_FIELD_ID
         *payload_it++ = 0x10;
         *payload_it++ = 0x20;
-
+        // MAC_ADDRESS_FIELD_LEN
         *payload_it++ = 0x00;
         *payload_it++ = 0x06;
+        // MAC_ADDRESS_FIELD
         *payload_it++ = 0xFF;
         *payload_it++ = 0xFF;
-
         *payload_it++ = 0xFF;
         *payload_it++ = 0xFF;
         *payload_it++ = 0xFF;