├── AndroidApp ├── settings.gradle ├── .idea │ ├── .gitignore │ ├── compiler.xml │ ├── vcs.xml │ ├── misc.xml │ ├── gradle.xml │ └── jarRepositories.xml ├── app │ ├── lint.xml │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── drawable-hdpi │ │ │ │ └── nrfuart_hdpi_icon.png │ │ │ ├── layout │ │ │ │ ├── message_detail.xml │ │ │ │ ├── title_bar.xml │ │ │ │ ├── device_element.xml │ │ │ │ ├── device_list.xml │ │ │ │ ├── dis_values.xml │ │ │ │ └── main.xml │ │ │ └── values │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── nordicsemi │ │ │ └── nrfUARTv2 │ │ │ ├── EpdDownloader.java │ │ │ ├── DeviceListActivity.java │ │ │ └── UartService.java │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── .gitignore ├── build.gradle ├── import-summary.txt ├── gradlew.bat └── gradlew ├── doc ├── result.jpg ├── protocol.txt ├── pins.txt └── usage.txt ├── 5.14_advance_peripheral_uarttrans ├── src │ ├── app │ │ ├── hw_uart.c │ │ ├── task_epd.c │ │ ├── hw_uart.h │ │ ├── epd2in13.h │ │ ├── task_epd.h │ │ ├── peripheral_uarttrans.h │ │ ├── epd2in13.c │ │ └── main.c │ ├── profile │ │ ├── uarttrans_service.h │ │ └── uarttrans_service.c │ └── stack │ │ └── osal_icall_ble.c ├── tirtos │ └── iar │ │ ├── 5.14_advance_peripheral_uarttrans.eww │ │ ├── config │ │ ├── lib_linker.cmd │ │ └── ccfg_app_ble.c │ │ ├── 5.14_advance_peripheral_uarttrans.custom_argvars │ │ └── stack │ │ └── build_config.opt └── .gitignore ├── README.md └── target ├── board.h ├── board.c ├── cc2640r2iot ├── cc2640r2iot_board.h └── cc2640r2iot_board.c ├── iotboard_key.h ├── iotboard_key.c ├── LAUNCHIOT_CC2640R2MOD_RGZ ├── Board.h └── LAUNCHIOT_CC2640R2MOD_RGZ.h ├── urfc.h └── urfc.c /AndroidApp/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /AndroidApp/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /AndroidApp/app/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /doc/result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muyuchl/cc2640BleEpd/HEAD/doc/result.jpg -------------------------------------------------------------------------------- /AndroidApp/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muyuchl/cc2640BleEpd/HEAD/AndroidApp/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/src/app/hw_uart.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muyuchl/cc2640BleEpd/HEAD/5.14_advance_peripheral_uarttrans/src/app/hw_uart.c -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cc2640BleEpd 2 | firmware and Android tool to update the epaper display on a cc2640 controlled shelf tag device 3 | ![](doc/result.jpg?raw=true) -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/src/app/task_epd.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muyuchl/cc2640BleEpd/HEAD/5.14_advance_peripheral_uarttrans/src/app/task_epd.c -------------------------------------------------------------------------------- /AndroidApp/app/src/main/res/drawable-hdpi/nrfuart_hdpi_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muyuchl/cc2640BleEpd/HEAD/AndroidApp/app/src/main/res/drawable-hdpi/nrfuart_hdpi_icon.png -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/src/app/hw_uart.h: -------------------------------------------------------------------------------- 1 | #ifndef HW_UART_H 2 | #define HW_UART_H 3 | 4 | 5 | void HWUART_Init(); 6 | void HWUART_Printf(const char* format, ...); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /AndroidApp/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /AndroidApp/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /doc/protocol.txt: -------------------------------------------------------------------------------- 1 | a simple protocol is used to send image data to the device via BLE. 2 | 3 | * Android app send each frame contains one command with zero or frameLength bytes data 4 | * CC2640R2 will reply with the same command back, but no data payload (may add later) 5 | 6 | -------------------------------------------------------------------------------- /AndroidApp/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Feb 07 20:04:50 CST 2021 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-6.5-bin.zip 7 | -------------------------------------------------------------------------------- /AndroidApp/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | app/build -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/tirtos/iar/5.14_advance_peripheral_uarttrans.eww: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $WS_DIR$\app\cc2640r2lp_app.ewp 5 | 6 | 7 | $WS_DIR$\stack\cc2640r2lp_stack.ewp 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /AndroidApp/app/src/main/res/layout/message_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/.gitignore: -------------------------------------------------------------------------------- 1 | tirtos/iar/app/FlashROM_StackLibrary/ 2 | tirtos/iar/app/settings/ 3 | tirtos/iar/app/cc2640r2lp_app.dep 4 | tirtos/iar/config/ble_r2.symbols 5 | tirtos/iar/settings/ 6 | tirtos/iar/stack/FlashROM_Library/ 7 | tirtos/iar/stack/cc2640r2lp_stack.dep 8 | tirtos/iar/stack/settings/ 9 | tirtos/iar/config/configPkg/ 10 | tirtos/iar/config/src/ 11 | -------------------------------------------------------------------------------- /AndroidApp/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /AndroidApp/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:4.0.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /AndroidApp/app/src/main/res/layout/title_bar.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /doc/pins.txt: -------------------------------------------------------------------------------- 1 | note: some models don't have led 2 | RED LED IOID_6 // low active 3 | GREEN LED IOID_7 4 | BLUE LED IOID_0 5 | 6 | epd_sda (MOSI) IOID_19 7 | epd CLK IOID_18 8 | 9 | EPD_POWER_PIN IOID_20 // low active 10 | 11 | EPD_RST_PIN IOID_10 12 | EPD_DC_PIN IOID_11 13 | EPD_BUSY_PIN IOID_9 14 | EPD_CS_PIN IOID_12 15 | 16 | REED_PIN IOID_13 // will read 0 if there is a magnet near 17 | TEST_PIN IOID_15 // on backe of pcb with name 'test' -------------------------------------------------------------------------------- /AndroidApp/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 30 5 | buildToolsVersion "30.0.3" 6 | 7 | defaultConfig { 8 | applicationId "com.nordicsemi.nrfUARTv2" 9 | minSdkVersion 18 10 | targetSdkVersion 18 11 | } 12 | 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | compile 'com.android.support:support-v4:18.+' 23 | } 24 | -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/src/app/epd2in13.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef EPD_2IN13_H 3 | #define EPD_2IN13_H 4 | 5 | #include 6 | 7 | // Display resolution 8 | #define EPD_2IN13_WIDTH 104 9 | #define EPD_2IN13_HEIGHT 212 10 | 11 | // #define EPD_2IN13_FULL 0 12 | // #define EPD_2IN13_PART 1 13 | 14 | void epd_hw_init(); 15 | 16 | void EPD_2IN13_Init(); 17 | void EPD_2IN13_Clear(void); 18 | void EPD_2IN13_Display(const uint8_t *Image); 19 | 20 | void EPD_2IN13_PrepareBlkRAM(void); 21 | void EPD_2IN13_PrepareRedRAM(void); 22 | void EPD_2IN13_WriteRAM(const uint8_t *buf, const int len); 23 | 24 | void EPD_2IN13_UpdateDisplay(void); 25 | 26 | // void EPD_2IN13_DisplayPart(UBYTE *Image); 27 | // void EPD_2IN13_DisplayPartBaseImage(UBYTE *Image); 28 | 29 | void EPD_2IN13_Sleep(void); 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/src/app/task_epd.h: -------------------------------------------------------------------------------- 1 | #ifndef TASK_EPD_H 2 | #define TASK_EPD_H 3 | 4 | 5 | 6 | 7 | 8 | // ----------------------------------------------------------------------------- 9 | //! \brief API for application task to parse received epd request 10 | //! 11 | //! \param[in] pMsg Pointer to "unframed" message buffer. 12 | //! \param[in] length Length of buffer 13 | //! 14 | //! \return void 15 | // ----------------------------------------------------------------------------- 16 | extern void EPDTask_parseCommand(uint8_t *pMsg, uint8_t length); 17 | 18 | 19 | // used to call when epd processed request, and response is ready 20 | typedef void (*EpdResponseCallback)(uint8_t event, uint8_t *buf, uint8_t len); 21 | void EPDTask_RegisterResponseCallback(EpdResponseCallback callback); 22 | 23 | void TaskEPD_createTask(void); 24 | 25 | // called by other task to notify this task with command frame 26 | //void epd_on_rx_cmd(const uint8_t *buf, int len); 27 | 28 | #endif -------------------------------------------------------------------------------- /AndroidApp/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | -------------------------------------------------------------------------------- /AndroidApp/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/tirtos/iar/config/lib_linker.cmd: -------------------------------------------------------------------------------- 1 | /* 2 | * DO NOT MODIFY. This file is automatically generated during the pre-build 3 | * step by the lib_search utility 4 | */ 5 | 6 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\ctrl\cc2640_hci_pxxx.a" 7 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\ctrl\cc2640_ll_pxxx.a" 8 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\hci_tl\cc26xx_hci_tl_none.a" 9 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_att_pxxx.a" 10 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_gap_pxxx.a" 11 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_gatt_pxxx.a" 12 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_l2cap_pxxx.a" 13 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_profiles_pxxx.a" 14 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_smp_pxxx.a" 15 | "C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\source\ti\ble5stack\blelib\host\cc26xx_sm_pxxx.a" 16 | -------------------------------------------------------------------------------- /doc/usage.txt: -------------------------------------------------------------------------------- 1 | ## Usage 2 | * build cc2640r2 project and flash to the device 3 | * build Android app, and open it on phone 4 | * connect the the device with name like 'simple peripheral uarttrans' 5 | * use any tool you like to convert image to lcd data, (https://www.waveshare.net/w/upload/3/36/Image2Lcd.7z) 6 | * load black image bin file (2756 bytes, 104x212) 7 | * load red image bin file 8 | * click download, and wait the device to receive and update 9 | 10 | ## Android App Dev 11 | This is the environment I developed: 12 | Android Studio 4.1.2 13 | Android SDK 11.0 (API 30) 14 | 15 | test device: 16 | Redmi Note3 17 | 18 | 19 | ## cc2640r2 project Dev 20 | Iar 8.11 (it is recommended that no blank space in stall path) 21 | TI ble5 sdk: simplelink_cc2640r2_sdk_1_40_00_45 22 | 23 | * sdk is installed into default location: c/ti/simplelink_cc2640r2_sdk_1_40_00_45/ 24 | * create a folder named 'CC2640R2_LAUNCHIOT' in sdk's example/rtos/ 25 | * move whole folder to /c/ti/simplelink_cc2640r2_sdk_1_40_00_45/examples/rtos/CC2640R2_LAUNCHIOT/ble5stack/5.14_advance_peripheral_uarttrans 26 | * move 'target' folder to /c/ti/simplelink_cc2640r2_sdk_1_40_00_45/examples/rtos/CC2640R2_LAUNCHIOT/ble5stack 27 | 28 | You don't need to follow the above steps. If that happens, you need to adapt your project to your real case. 29 | The target folder contains pin configs for the device. 30 | 31 | 32 | 33 | ## to improve 34 | * currently CC2640R2's low power consumption is not considered, so use with care on battery -------------------------------------------------------------------------------- /5.14_advance_peripheral_uarttrans/tirtos/iar/5.14_advance_peripheral_uarttrans.custom_argvars: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SIMPLELINK_CORE_SDK_INSTALL_DIR 6 | C:\ti\simplelink_cc2640r2_sdk_1_40_00_45 7 | 8 | 9 | XDCROOT 10 | $SIMPLELINK_CORE_SDK_INSTALL_DIR$\..\xdctools_3_50_02_20_core 11 | 12 | 13 | EXAMPLE_BLE_ROOT 14 | $PROJ_DIR$\..\..\.. 15 | 16 | 17 | XDCPATH 18 | $SIMPLELINK_CORE_SDK_INSTALL_DIR$\kernel\tirtos\packages;$SIMPLELINK_CORE_SDK_INSTALL_DIR$\source;$SRC_BLE_DIR$ 19 | 20 | 21 | SRC_BLE_DIR 22 | $SIMPLELINK_CORE_SDK_INSTALL_DIR$\source\ti\ble5stack 23 | 24 | 25 | SRC_COMMON_DIR 26 | $SIMPLELINK_CORE_SDK_INSTALL_DIR$/source/ti/ble5stack 27 | 28 | 29 | TOOLS_BLE_DIR 30 | $SIMPLELINK_CORE_SDK_INSTALL_DIR$\tools\ble5stack 31 | 32 | 33 | ROM_DIR 34 | $SIMPLELINK_CORE_SDK_INSTALL_DIR$\source\ti\ble5stack\rom 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /AndroidApp/import-summary.txt: -------------------------------------------------------------------------------- 1 | ECLIPSE ANDROID PROJECT IMPORT SUMMARY 2 | ====================================== 3 | 4 | Ignored Files: 5 | -------------- 6 | The following files were *not* copied into the new Gradle project; you 7 | should evaluate whether these are still needed in your project and if 8 | so manually move them: 9 | 10 | * Android.mk 11 | 12 | Replaced Jars with Dependencies: 13 | -------------------------------- 14 | The importer recognized the following .jar files as third party 15 | libraries and replaced them with Gradle dependencies instead. This has 16 | the advantage that more explicit version information is known, and the 17 | libraries can be updated automatically. However, it is possible that 18 | the .jar file in your project was of an older version than the 19 | dependency we picked, which could render the project not compileable. 20 | You can disable the jar replacement in the import wizard and try again: 21 | 22 | android-support-v4.jar => com.android.support:support-v4:18.+ 23 | 24 | Moved Files: 25 | ------------ 26 | Android Gradle projects use a different directory structure than ADT 27 | Eclipse projects. Here's how the projects were restructured: 28 | 29 | * AndroidManifest.xml => app\src\main\AndroidManifest.xml 30 | * assets\ => app\src\main\assets 31 | * lint.xml => app\lint.xml 32 | * res\ => app\src\main\res\ 33 | * src\ => app\src\main\java\ 34 | 35 | Next Steps: 36 | ----------- 37 | You can now build the project. The Gradle project needs network 38 | connectivity to download dependencies. 39 | 40 | Bugs: 41 | ----- 42 | If for some reason your project does not build, and you determine that 43 | it is due to a bug or limitation of the Eclipse to Gradle importer, 44 | please file a bug at http://b.android.com with category 45 | Component-Tools. 46 | 47 | (This import summary is for your information only, and can be deleted 48 | after import once you are satisfied with the results.) 49 | -------------------------------------------------------------------------------- /AndroidApp/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 23 | 30 | 31 | 32 | 35 | #FF000000 36 | #FFF2F2F2 37 | 38 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /AndroidApp/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 30 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /AndroidApp/app/src/main/res/layout/device_element.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 24 | 25 | 33 | 34 | 42 | 43 | 49 | 50 | 56 | 57 | -------------------------------------------------------------------------------- /AndroidApp/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /AndroidApp/app/src/main/res/layout/device_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 22 | 23 | 27 | 28 | 38 | 39 | 46 | 47 | 50 | 56 | 57 | 62 | 63 |