├── app ├── .gitignore ├── signature │ └── espdebug ├── src │ └── main │ │ ├── res │ │ ├── mipmap-hdpi │ │ │ └── app_icon.png │ │ ├── mipmap-mdpi │ │ │ └── app_icon.png │ │ ├── mipmap-xhdpi │ │ │ └── app_icon.png │ │ ├── mipmap-xxhdpi │ │ │ └── app_icon.png │ │ ├── mipmap-xxxhdpi │ │ │ └── app_icon.png │ │ ├── drawable-hdpi │ │ │ ├── baseline_info_black_24.png │ │ │ ├── ic_info_outline_black_24dp.png │ │ │ └── ic_info_outline_white_24dp.png │ │ ├── drawable-mdpi │ │ │ ├── baseline_info_black_24.png │ │ │ ├── ic_info_outline_black_24dp.png │ │ │ └── ic_info_outline_white_24dp.png │ │ ├── drawable-xhdpi │ │ │ ├── baseline_info_black_24.png │ │ │ ├── ic_info_outline_black_24dp.png │ │ │ └── ic_info_outline_white_24dp.png │ │ ├── drawable-xxhdpi │ │ │ ├── baseline_info_black_24.png │ │ │ ├── ic_info_outline_black_24dp.png │ │ │ └── ic_info_outline_white_24dp.png │ │ ├── xml │ │ │ └── backup_descriptor.xml │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── arrays.xml │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ ├── values-sw600dp │ │ │ └── dimens.xml │ │ ├── values-sw720dp-land │ │ │ └── dimens.xml │ │ ├── layout │ │ │ ├── activity_main_item.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_provision.xml │ │ │ ├── activity_esptouch.xml │ │ │ └── activity_esptouch2.xml │ │ └── values-zh-rCN │ │ │ └── strings.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── espressif │ │ └── esptouch │ │ └── android │ │ ├── EspTouchApp.java │ │ ├── main │ │ └── EspMainActivity.java │ │ ├── EspTouchActivityAbs.java │ │ ├── v2 │ │ ├── EspProvisioningActivity.java │ │ └── EspTouch2Activity.java │ │ └── v1 │ │ └── EspTouchActivity.java └── build.gradle ├── esptouch-v2 ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── espressif │ │ │ └── iot │ │ │ └── esptouch2 │ │ │ └── provision │ │ │ ├── EspSyncListener.java │ │ │ ├── TouchPermissionException.java │ │ │ ├── EspProvisioningListener.java │ │ │ ├── EspProvisioningResult.java │ │ │ ├── TouchPacketUtils.java │ │ │ ├── IEspProvisioner.java │ │ │ ├── EspProvisioner.java │ │ │ ├── TouchCRC.java │ │ │ ├── TouchAES.java │ │ │ ├── TouchNetUtil.java │ │ │ └── EspProvisioningRequest.java │ │ └── AndroidManifest.xml ├── ChangeLogs │ ├── log_zh.md │ └── log_en.md ├── proguard-rules.pro ├── build.gradle └── README.md ├── esptouch ├── .gitignore ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── espressif │ │ │ └── iot │ │ │ └── esptouch │ │ │ ├── security │ │ │ ├── ITouchEncryptor.java │ │ │ └── TouchAES.java │ │ │ ├── IEsptouchListener.java │ │ │ ├── task │ │ │ ├── IEsptouchGenerator.java │ │ │ ├── ICodeData.java │ │ │ ├── __IEsptouchTask.java │ │ │ ├── IEsptouchTaskParameter.java │ │ │ └── EsptouchTaskParameter.java │ │ │ ├── protocol │ │ │ ├── TouchData.java │ │ │ ├── GuideCode.java │ │ │ ├── EsptouchGenerator.java │ │ │ ├── DataCode.java │ │ │ └── DatumCode.java │ │ │ ├── IEsptouchResult.java │ │ │ ├── EsptouchResult.java │ │ │ ├── util │ │ │ ├── CRC8.java │ │ │ ├── TouchNetUtil.java │ │ │ └── ByteUtil.java │ │ │ ├── IEsptouchTask.java │ │ │ ├── EsptouchTask.java │ │ │ └── udp │ │ │ ├── UDPSocketClient.java │ │ │ └── UDPSocketServer.java │ │ └── AndroidManifest.xml ├── ChangeLogs │ ├── log_zh.md │ └── log_en.md ├── build.gradle ├── proguard-rules.pro └── README.md ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── docs ├── images │ ├── esptouch-app-flow-cn.png │ └── esptouch-app-flow-en.png ├── esptouch-user-guide-cn.md └── esptouch-user-guide-en.md ├── .gitignore ├── gradle.properties ├── log ├── log-zh-rCN.md └── log-en.md ├── README.md ├── LICENSE ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | release/ 2 | -------------------------------------------------------------------------------- /esptouch-v2/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /esptouch-v2/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /esptouch/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | include ':esptouch' 3 | include ':esptouch-v2' 4 | -------------------------------------------------------------------------------- /app/signature/espdebug: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/signature/espdebug -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /docs/images/esptouch-app-flow-cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/docs/images/esptouch-app-flow-cn.png -------------------------------------------------------------------------------- /docs/images/esptouch-app-flow-en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/docs/images/esptouch-app-flow-en.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/mipmap-hdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/mipmap-mdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/mipmap-xhdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/mipmap-xxhdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/mipmap-xxxhdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_info_black_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-hdpi/baseline_info_black_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_info_black_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-mdpi/baseline_info_black_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_info_black_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-xhdpi/baseline_info_black_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_info_black_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-xxhdpi/baseline_info_black_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_info_outline_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-hdpi/ic_info_outline_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_info_outline_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-hdpi/ic_info_outline_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_info_outline_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-mdpi/ic_info_outline_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_info_outline_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-xhdpi/ic_info_outline_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_info_outline_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-xhdpi/ic_info_outline_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_info_outline_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_info_outline_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_info_outline_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EspressifApp/EsptouchForAndroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_info_outline_white_24dp.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.ipr 3 | *.iws 4 | .DS_Store 5 | .idea 6 | .gradle 7 | /local.properties 8 | /.idea/workspace.xml 9 | /.idea/libraries 10 | /app/build 11 | /build 12 | /captures 13 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | android.defaults.buildfeatures.buildconfig=true 2 | android.enableJetifier=true 3 | android.nonFinalResIds=false 4 | android.nonTransitiveRClass=false 5 | android.useAndroidX=true -------------------------------------------------------------------------------- /esptouch/src/main/java/com/espressif/iot/esptouch/security/ITouchEncryptor.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch.security; 2 | 3 | public interface ITouchEncryptor { 4 | byte[] encrypt(byte[] src); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_descriptor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #f53242 4 | #ce2e32 5 | #ff5983 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16dp 5 | 16dp 6 | 7 | 8 | -------------------------------------------------------------------------------- /esptouch-v2/src/main/java/com/espressif/iot/esptouch2/provision/EspSyncListener.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch2.provision; 2 | 3 | public interface EspSyncListener { 4 | void onStart(); 5 | 6 | void onStop(); 7 | 8 | void onError(Exception e); 9 | } 10 | -------------------------------------------------------------------------------- /esptouch/ChangeLogs/log_zh.md: -------------------------------------------------------------------------------- 1 | # 更新记录 2 | [English](log_en.md) 3 | 4 | ## 1.1.1 5 | - 库 `DEBUG` 参数使用 `BuildConfig.DEBUG` 6 | 7 | ## 1.1.0 8 | - 升级 gradle 9 | - 升级 `targetSdkVersion` 为 `32` 10 | - 修改 `sourceCompatibility` 和 `targetCompatibility` 为 `JavaVersion.VERSION_1_8` 11 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Nov 24 14:28:24 CST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip 7 | -------------------------------------------------------------------------------- /esptouch/ChangeLogs/log_en.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | [中文](log_zh.md) 3 | 4 | ## 1.1.1 5 | - Set lib `DEBUG` as `BluidConfig.DEBUG` 6 | 7 | ## 1.1.0 8 | - Update gradle 9 | - Update `targetSdkVersion` to `32` 10 | - Change `sourceCompatibility` and `targetCompatibility` to `JavaVersion.VERSION_1_8` 11 | -------------------------------------------------------------------------------- /esptouch-v2/src/main/java/com/espressif/iot/esptouch2/provision/TouchPermissionException.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch2.provision; 2 | 3 | public class TouchPermissionException extends RuntimeException { 4 | public TouchPermissionException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0 5 | 1 6 | 2 7 | 3 8 | 4 9 | 5 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 128dp 8 | 9 | 10 | -------------------------------------------------------------------------------- /esptouch-v2/ChangeLogs/log_zh.md: -------------------------------------------------------------------------------- 1 | # 更新记录 2 | [English](log_en.md) 3 | 4 | ## 2.2.1 5 | - 库 `DEBUG` 参数使用 `BuildConfig.DEBUG` 6 | 7 | ## 2.2.0 8 | - 升级 gradle 9 | - 升级 `targetSdkVersion` 为 `32` 10 | - 修改 `sourceCompatibility` 和 `targetCompatibility` 为 `JavaVersion.VERSION_1_8` 11 | 12 | ## 2.1.0 13 | - Reserved data 最大长度限制为 64 字节 14 | - 收到配网成功设备的消息之后回复 Ack -------------------------------------------------------------------------------- /esptouch-v2/src/main/java/com/espressif/iot/esptouch2/provision/EspProvisioningListener.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch2.provision; 2 | 3 | public interface EspProvisioningListener { 4 | void onStart(); 5 | 6 | void onResponse(EspProvisioningResult result); 7 | 8 | void onStop(); 9 | 10 | void onError(Exception e); 11 | } 12 | -------------------------------------------------------------------------------- /esptouch-v2/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /esptouch/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /esptouch-v2/ChangeLogs/log_en.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | [中文](log_zh.md) 3 | 4 | ## 2.2.1 5 | - Set lib `DEBUG` as `BluidConfig.DEBUG` 6 | 7 | ## 2.2.0 8 | - Update gradle 9 | - Update `targetSdkVersion` to `32` 10 | - Change `sourceCompatibility` and `targetCompatibility` to `JavaVersion.VERSION_1_8` 11 | 12 | ## 2.1.0 13 | - Change reserved data max length to 64 bytes 14 | - Send ack after receiving device response -------------------------------------------------------------------------------- /esptouch/src/main/java/com/espressif/iot/esptouch/IEsptouchListener.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch; 2 | 3 | public interface IEsptouchListener { 4 | /** 5 | * when new esptouch result is added, the listener will call 6 | * onEsptouchResultAdded callback 7 | * 8 | * @param result the Esptouch result 9 | */ 10 | void onEsptouchResultAdded(IEsptouchResult result); 11 | } 12 | -------------------------------------------------------------------------------- /esptouch-v2/src/main/java/com/espressif/iot/esptouch2/provision/EspProvisioningResult.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch2.provision; 2 | 3 | import java.net.InetAddress; 4 | 5 | public class EspProvisioningResult { 6 | public final InetAddress address; 7 | public final String bssid; 8 | 9 | EspProvisioningResult(InetAddress address, String bssid) { 10 | this.address = address; 11 | this.bssid = bssid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /esptouch/src/main/java/com/espressif/iot/esptouch/task/IEsptouchGenerator.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch.task; 2 | 3 | public interface IEsptouchGenerator { 4 | /** 5 | * Get guide code by the format of byte[][] 6 | * 7 | * @return guide code by the format of byte[][] 8 | */ 9 | byte[][] getGCBytes2(); 10 | 11 | /** 12 | * Get data code by the format of byte[][] 13 | * 14 | * @return data code by the format of byte[][] 15 | */ 16 | byte[][] getDCBytes2(); 17 | } 18 | -------------------------------------------------------------------------------- /esptouch/src/main/java/com/espressif/iot/esptouch/task/ICodeData.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch.task; 2 | 3 | /** 4 | * the class used to represent some code to be transformed by UDP socket should implement the interface 5 | * 6 | * @author afunx 7 | */ 8 | public interface ICodeData { 9 | /** 10 | * Get the byte[] to be transformed. 11 | * 12 | * @return the byte[] to be transfromed 13 | */ 14 | byte[] getBytes(); 15 | 16 | /** 17 | * Get the char[](u8[]) to be transfromed. 18 | * 19 | * @return the char[](u8) to be transformed 20 | */ 21 | char[] getU8s(); 22 | } 23 | -------------------------------------------------------------------------------- /esptouch/src/main/java/com/espressif/iot/esptouch/protocol/TouchData.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch.protocol; 2 | 3 | import com.espressif.iot.esptouch.util.ByteUtil; 4 | 5 | public class TouchData { 6 | private final byte[] mData; 7 | 8 | public TouchData(String string) { 9 | mData = ByteUtil.getBytesByString(string); 10 | } 11 | 12 | public TouchData(byte[] data) { 13 | if (data == null) { 14 | throw new NullPointerException("data can't be null"); 15 | } 16 | mData = data; 17 | } 18 | 19 | public byte[] getData() { 20 | return mData; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /esptouch-v2/src/main/java/com/espressif/iot/esptouch2/provision/TouchPacketUtils.java: -------------------------------------------------------------------------------- 1 | package com.espressif.iot.esptouch2.provision; 2 | 3 | public final class TouchPacketUtils { 4 | public static byte[] getSyncPacket() { 5 | return new byte[1048]; 6 | } 7 | 8 | public static byte[] getSequenceSizePacket(int size) { 9 | return new byte[1072 + size - 1]; 10 | } 11 | 12 | public static byte[] getSequencePacket(int sequence) { 13 | return new byte[128 + sequence]; 14 | } 15 | 16 | public static byte[] getDataPacket(int data, int index) { 17 | return new byte[(index << 7) | (1 << 6) | data]; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /esptouch/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.library' 3 | } 4 | 5 | def libVersion = "1.1.2" 6 | 7 | android { 8 | compileSdk 32 9 | 10 | namespace "com.espressif.iot.esptouch" 11 | defaultConfig { 12 | minSdk 14 13 | targetSdk 32 14 | 15 | buildConfigField "String", "VERSION_NAME", "\"$libVersion\"" 16 | } 17 | 18 | buildTypes { 19 | debug { 20 | 21 | } 22 | release { 23 | minifyEnabled false 24 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 25 | } 26 | } 27 | 28 | compileOptions { 29 | sourceCompatibility JavaVersion.VERSION_1_8 30 | targetCompatibility JavaVersion.VERSION_1_8 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |