From 187e49c9ad9b73f35e57e3118f6494515aff5e25 Mon Sep 17 00:00:00 2001 From: YuraStr Date: Sun, 16 Jul 2017 20:50:53 +0300 Subject: [PATCH] Mobile application update --- .../TrackPlatformAPI/.gitignore | 18 +- .../TrackPlatformAPI/app/.gitignore | 2 +- .../TrackPlatformAPI/app/build.gradle | 60 ++-- .../TrackPlatformAPI/app/proguard-rules.pro | 34 +-- .../ExampleInstrumentedTest.java | 52 ++-- .../app/src/main/AndroidManifest.xml | 89 ++++-- .../trackplatformapi/ConnectedThread.java | 145 ++++++---- .../yuras/trackplatformapi/Constants.java | 10 + .../DistanceSensorsActivity.java | 42 +++ .../trackplatformapi/LineSensorsActivity.java | 97 +++++++ .../trackplatformapi/LineSensorsCommands.java | 22 ++ .../yuras/trackplatformapi/MainActivity.java | 268 ++++++------------ .../trackplatformapi/MovingActivity.java | 121 ++++++++ .../trackplatformapi/MovingCommands.java | 19 ++ .../trackplatformapi/SensorsActivity.java | 36 +++ .../yuras/trackplatformapi/ServoActivity.java | 173 +++++++++++ .../yuras/trackplatformapi/ServoCommands.java | 17 ++ .../yuras/trackplatformapi/TrackPlatform.java | 96 +++++++ .../res/layout/activity_distance_sensors.xml | 25 ++ .../main/res/layout/activity_line_sensors.xml | 25 ++ .../app/src/main/res/layout/activity_main.xml | 70 ++--- .../src/main/res/layout/activity_moving.xml | 26 ++ .../src/main/res/layout/activity_sensors.xml | 39 +++ .../src/main/res/layout/activity_servo.xml | 25 ++ .../res/layout/content_distance_sensors.xml | 11 + .../main/res/layout/content_line_sensors.xml | 115 ++++++++ .../src/main/res/layout/content_moving.xml | 79 ++++++ .../app/src/main/res/layout/content_servo.xml | 63 ++++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values-w820dp/dimens.xml | 12 +- .../app/src/main/res/values/colors.xml | 12 +- .../app/src/main/res/values/dimens.xml | 11 +- .../app/src/main/res/values/strings.xml | 19 +- .../app/src/main/res/values/styles.xml | 31 +- .../trackplatformapi/ExampleUnitTest.java | 32 +-- .../TrackPlatformAPI/build.gradle | 46 +-- .../TrackPlatformAPI/gradle.properties | 34 +-- .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 12 +- .../TestApplication/TrackPlatformAPI/gradlew | 0 .../TrackPlatformAPI/gradlew.bat | 180 ++++++------ .../TrackPlatformAPI/settings.gradle | 2 +- 46 files changed, 1606 insertions(+), 564 deletions(-) mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/.gitignore mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/.gitignore mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/build.gradle mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/proguard-rules.pro mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/androidTest/java/com/example/yuras/trackplatformapi/ExampleInstrumentedTest.java mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/AndroidManifest.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ConnectedThread.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/Constants.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/DistanceSensorsActivity.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsActivity.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsCommands.java mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MainActivity.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingActivity.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingCommands.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/SensorsActivity.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoActivity.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoCommands.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/TrackPlatform.java create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_distance_sensors.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_line_sensors.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_main.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_moving.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_sensors.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_servo.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/content_distance_sensors.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/content_line_sensors.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/content_moving.xml create mode 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/content_servo.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/mipmap-hdpi/ic_launcher.png mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/mipmap-mdpi/ic_launcher.png mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/mipmap-xhdpi/ic_launcher.png mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/mipmap-xxhdpi/ic_launcher.png mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/values-w820dp/dimens.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/values/colors.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/values/dimens.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/values/strings.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/values/styles.xml mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/test/java/com/example/yuras/trackplatformapi/ExampleUnitTest.java mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/build.gradle mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/gradle.properties mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/gradle/wrapper/gradle-wrapper.jar mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/gradlew mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/gradlew.bat mode change 100644 => 100755 code/Java/Mobile/TestApplication/TrackPlatformAPI/settings.gradle diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/.gitignore b/code/Java/Mobile/TestApplication/TrackPlatformAPI/.gitignore old mode 100644 new mode 100755 index 39fb081..a4c7838 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/.gitignore +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/.gitignore @@ -1,9 +1,9 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.externalNativeBuild +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/.gitignore b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/.gitignore old mode 100644 new mode 100755 index 796b96d..3543521 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/.gitignore +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/.gitignore @@ -1 +1 @@ -/build +/build diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/build.gradle b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/build.gradle old mode 100644 new mode 100755 index b75f40c..ea934a0 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/build.gradle +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/build.gradle @@ -1,29 +1,31 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" - defaultConfig { - applicationId "com.example.yuras.trackplatformapi" - minSdkVersion 17 - targetSdkVersion 25 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - compile 'com.android.support:appcompat-v7:25.1.0' - testCompile 'junit:junit:4.12' -} +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + defaultConfig { + applicationId "com.example.yuras.trackplatformapi" + minSdkVersion 17 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:25.1.0' + compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.android.support:design:25.3.1' + testCompile 'junit:junit:4.12' +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/proguard-rules.pro b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/proguard-rules.pro old mode 100644 new mode 100755 index d26e00c..2504588 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/proguard-rules.pro +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/proguard-rules.pro @@ -1,17 +1,17 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:\Users\yuras\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\yuras\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/androidTest/java/com/example/yuras/trackplatformapi/ExampleInstrumentedTest.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/androidTest/java/com/example/yuras/trackplatformapi/ExampleInstrumentedTest.java old mode 100644 new mode 100755 index d12fd20..92e5a3f --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/androidTest/java/com/example/yuras/trackplatformapi/ExampleInstrumentedTest.java +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/androidTest/java/com/example/yuras/trackplatformapi/ExampleInstrumentedTest.java @@ -1,26 +1,26 @@ -package com.example.yuras.trackplatformapi; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumentation test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() throws Exception { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("com.example.yuras.trackplatformapi", appContext.getPackageName()); - } -} +package com.example.yuras.trackplatformapi; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.yuras.trackplatformapi", appContext.getPackageName()); + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/AndroidManifest.xml b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 index f405502..560c3ae --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/AndroidManifest.xml +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/AndroidManifest.xml @@ -1,23 +1,68 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ConnectedThread.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ConnectedThread.java old mode 100644 new mode 100755 index 5e46716..7005264 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ConnectedThread.java +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ConnectedThread.java @@ -1,57 +1,88 @@ -package com.example.yuras.trackplatformapi; - -import android.bluetooth.BluetoothSocket; -import android.os.Handler; -import android.util.Log; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class ConnectedThread extends Thread { - private static final int RECEIVE_MESSAGE = 1; - - private final InputStream mmInStream; - private final OutputStream mmOutStream; - private final Handler handler; - - public ConnectedThread(BluetoothSocket socket, Handler handler) { - InputStream tmpIn = null; - OutputStream tmpOut = null; - this.handler = handler; - - try { - tmpIn = socket.getInputStream(); - tmpOut = socket.getOutputStream(); - } catch (IOException e ) { - e.printStackTrace(); - } - - mmInStream = tmpIn; - mmOutStream = tmpOut; - } - - public void run() { - byte[] buffer = new byte[1024]; - int bytes; - - while (true) { - try { - bytes = mmInStream.read(buffer); - handler.obtainMessage(RECEIVE_MESSAGE, bytes, -1, buffer).sendToTarget(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - public void write(String message) { - Log.d("BLUETOOTH", "Data to send: " + message); - byte[] msgBuffer = message.getBytes(); - try { - mmOutStream.write(msgBuffer); - } catch (IOException e) { - Log.d("BLUETOOTH", "Error data send"); - } - } -} +package com.example.yuras.trackplatformapi; + +import android.bluetooth.BluetoothSocket; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class ConnectedThread extends Thread implements Constants { + private final InputStream mmInStream; + private final OutputStream mmOutStream; + private final Handler handler; + private BluetoothSocket socket; + + public ConnectedThread(BluetoothSocket socket, Handler handler) { + InputStream tmpIn = null; + OutputStream tmpOut = null; + this.handler = handler; + this.socket = socket; + + try { + tmpIn = socket.getInputStream(); + } catch (IOException e) { + Log.e(TAG, "Error occurred when creating input stream", e); + } + try { + tmpOut = socket.getOutputStream(); + } catch (IOException e) { + Log.e(TAG, "Error occurred when creating output stream", e); + } + + mmInStream = tmpIn; + mmOutStream = tmpOut; + } + + public void run() { + byte[] buffer = new byte[1024]; + int numBytes; + + while (true) { + try { + numBytes = mmInStream.read(buffer); + Message readMsg = handler.obtainMessage(Constants.MESSAGE_READ, numBytes, -1, buffer); + readMsg.sendToTarget(); + } catch (IOException e) { + Log.d(TAG, "Input stream was disconnected", e); + break; + + } + } + } + + public void write(String message) { + Log.d("BLUETOOTH", "Data to send: " + message); + byte[] msgBuffer = message.getBytes(); + try { + mmOutStream.write(msgBuffer); + Message writtenMsg = handler.obtainMessage( + Constants.MESSAGE_WRITE, -1, -1, msgBuffer); + writtenMsg.sendToTarget(); + + } catch (IOException e) { + Log.e(TAG, "Error occurred when sending data", e); + +// Message writeErrorMsg = +// handler.obtainMessage(Constants.MESSAGE_TOAST); +// Bundle bundle = new Bundle(); +// bundle.putString("toast", +// "Couldn't send data to the other device"); +// writeErrorMsg.setData(bundle); +// handler.sendMessage(writeErrorMsg); + + } + } + + public void cancel() { + try { + socket.close(); + } catch (IOException e) { + Log.e(TAG, "Could not close the connect socket", e); + } + } + +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/Constants.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/Constants.java new file mode 100755 index 0000000..2e7d657 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/Constants.java @@ -0,0 +1,10 @@ +package com.example.yuras.trackplatformapi; + +public interface Constants { + String TAG = "BLUETOOTH"; + String BLUETOOTH_MAC = "20:16:04:11:37:56"; + + int MESSAGE_READ = 0; + int MESSAGE_WRITE = 1; + int MESSAGE_TOAST = 2; +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/DistanceSensorsActivity.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/DistanceSensorsActivity.java new file mode 100755 index 0000000..570ebef --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/DistanceSensorsActivity.java @@ -0,0 +1,42 @@ +package com.example.yuras.trackplatformapi; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.View; + +public class DistanceSensorsActivity extends AppCompatActivity { + Handler handler; + + StringBuilder stringBuilder; + String receivedMessage; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_distance_sensors); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + handler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == Constants.MESSAGE_READ) { + byte[] readBuf = (byte[]) msg.obj; + String strIncom = new String(readBuf, 0, msg.arg1); + stringBuilder.append(strIncom); + int endOfLineIndex = stringBuilder.indexOf("\r\n"); + if (endOfLineIndex > 0) { + receivedMessage = stringBuilder.substring(0, endOfLineIndex); + stringBuilder.delete(0, stringBuilder.length()); + } + } + } + }; + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsActivity.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsActivity.java new file mode 100755 index 0000000..92ce379 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsActivity.java @@ -0,0 +1,97 @@ +package com.example.yuras.trackplatformapi; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +public class LineSensorsActivity extends AppCompatActivity { + Handler handler; + TrackPlatform trackPlatform; + + StringBuilder stringBuilder; + String receivedMessage; + String arr[]; + + TextView[] textViews; + + TextView textView1; + TextView textView2; + TextView textView3; + TextView textView4; + TextView textView5; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_distance_sensors); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + arr = new String[5]; + textViews = new TextView[5]; + + textView1 = (TextView) findViewById(R.id.first_line_sensor_tv); + textView2 = (TextView) findViewById(R.id.second_line_sensor_tv); + textView3 = (TextView) findViewById(R.id.third_line_sensor_tv); + textView4 = (TextView) findViewById(R.id.fourth_line_sensor_tv); + textView5 = (TextView) findViewById(R.id.fifth_line_sensor_tv); + + //textViews[0] = (TextView) findViewById(R.id.first_line_sensor_tv); + //textViews[1] = (TextView) findViewById(R.id.second_line_sensor_tv); + //textViews[2] = (TextView) findViewById(R.id.third_line_sensor_tv); + //textViews[3] = (TextView) findViewById(R.id.fourth_line_sensor_tv); + //textViews[4] = (TextView) findViewById(R.id.fifth_line_sensor_tv); + + stringBuilder = new StringBuilder(); + + handler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == Constants.MESSAGE_READ) { + byte[] readBuf = (byte[]) msg.obj; + String strIncom = new String(readBuf, 0, msg.arg1); + stringBuilder.append(strIncom); + int endOfLineIndex = stringBuilder.indexOf("\r\n"); + if (endOfLineIndex > 0) { + receivedMessage = stringBuilder.substring(0, endOfLineIndex); + stringBuilder.delete(0, stringBuilder.length()); + arr = receivedMessage.split(";"); + for(int i = 0; i < 5; i++) { + Log.d(Constants.TAG, arr[i]); + //textViews[i].setText(arr[i]); + } + textView1.setText(String.valueOf(arr[0])); + textView2.setText(arr[1]); + textView3.setText(arr[2]); + textView4.setText(arr[3]); + textView5.setText(arr[4]); + } + trackPlatform.send(LineSensorsCommands.LINE_SENSORS_ALL.getValue()); + } + } + }; + + trackPlatform = new TrackPlatform(this, handler); + } + + @Override + protected void onResume() { + super.onResume(); + trackPlatform.connect(); + trackPlatform.send(LineSensorsCommands.LINE_SENSORS_ALL.getValue()); + } + + @Override + public void onPause() { + super.onPause(); + trackPlatform.disconnect(); + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsCommands.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsCommands.java new file mode 100755 index 0000000..409e6ac --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/LineSensorsCommands.java @@ -0,0 +1,22 @@ +package com.example.yuras.trackplatformapi; + +/** + * Created by yuras on 17.05.2017. + */ + +public enum LineSensorsCommands { + DISTANCE_SENSOR("\002\001"), + DISTANCE_SENSORS_ALL("\002\002"), + LINE_SENSOR("\002\003"), + LINE_SENSORS_ALL("\002\004"); + + private final String value; + + LineSensorsCommands(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MainActivity.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MainActivity.java old mode 100644 new mode 100755 index 7739f06..e3f02a1 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MainActivity.java +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MainActivity.java @@ -1,185 +1,83 @@ -package com.example.yuras.trackplatformapi; - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothSocket; -import android.content.Intent; -import android.os.Handler; -import android.os.Message; -import android.support.v7.app.AppCompatActivity; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import java.io.IOException; -import java.lang.reflect.Method; - -public class MainActivity extends AppCompatActivity { - private final static int RECEIVE_MESSAGE = 1; - private final static String ADDRESS = "20:16:04:11:37:56"; - - private TextView textView; - private EditText editText; - Handler h; - - private BluetoothAdapter btAdapter = null; - private BluetoothSocket btSocket = null; - private StringBuilder sb = new StringBuilder(); - - private ConnectedThread mConnectedThread; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - textView = (TextView) findViewById(R.id.text_from_bt); - editText = (EditText) findViewById(R.id.edit_text); - - h = new Handler() { - public void handleMessage(Message msg) { - System.out.println("In handler reader"); - switch (msg.what) { - case RECEIVE_MESSAGE: - System.out.println("Receive message"); - byte[] readBuf = (byte[]) msg.obj; - String strIncom = new String(readBuf, 0, msg.arg1); - sb.append(strIncom); - int endOfLineIndex = sb.indexOf("\r\n"); - if (endOfLineIndex > 0) { - String sbprint = sb.substring(0, endOfLineIndex); - sb.delete(0, sb.length()); - textView.setText(sbprint); - } - break; - } - } - }; - - btAdapter = BluetoothAdapter.getDefaultAdapter(); - checkBtState(); - - /*if (bluetooth == null) { - Toast.makeText(this, "Device does not support Bluetooth", Toast.LENGTH_LONG).show(); - } - - if (!bluetooth.isEnabled()) { - Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); - }*/ - - /*try { - device = bluetooth.getRemoteDevice("20:16:04:11:37:56"); - - Method m = device.getClass().getMethod( - "createRfcommSocket", new Class[]{int.class}); - - clientSocket = (BluetoothSocket) m.invoke(device, 1); - clientSocket.connect(); - - } catch (IOException e) { - Log.d("BLUETOOTH", e.getMessage()); - } catch (SecurityException e) { - Log.d("BLUETOOTH", e.getMessage()); - } catch (NoSuchMethodException e) { - Log.d("BLUETOOTH", e.getMessage()); - } catch (IllegalArgumentException e) { - Log.d("BLUETOOTH", e.getMessage()); - } catch (IllegalAccessException e) { - Log.d("BLUETOOTH", e.getMessage()); - } catch (InvocationTargetException e) { - Log.d("BLUETOOTH", "InvocationTargetException"); - }*/ - } - - private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { - BluetoothSocket socket = null; - try { - Method m = device.getClass().getMethod( - "createRfcommSocket", new Class[]{int.class}); - - socket = (BluetoothSocket) m.invoke(device, 1); - } catch (Exception e) { - e.printStackTrace(); - } - return socket; - } - - @Override - protected void onResume() { - super.onResume(); - - BluetoothDevice device = btAdapter.getRemoteDevice(ADDRESS); - try { - btSocket = createBluetoothSocket(device); - } catch (IOException e) { - errorExit("FatalError", "in onResume"); - } - - btAdapter.cancelDiscovery(); - - Log.d("BLUETOOTH", "Connecting"); - try { - btSocket.connect(); - Log.d("BLUETOOTH", "Connecting ok"); - } catch (IOException e) { - try { - btSocket.close(); - } catch (IOException e2) { - errorExit("Fatal Error", "In onResume(): to close socket during connection failure" + e2.getMessage() + "."); - } - } - - Log.d("BLUETOOTH", "Create Socket"); - - mConnectedThread = new ConnectedThread(btSocket, h); - mConnectedThread.start(); - } - - @Override - public void onPause() { - super.onPause(); - - Log.d("BLUETOOTH", "...In onPause()..."); - - try { - btSocket.close(); - } catch (IOException e2) { - errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); - } - } - - private void checkBtState() { - if(btAdapter == null) { - errorExit("Fatal Error", "Bluetooth not support"); - } else { - if (btAdapter.isEnabled()) { - Log.d("BLUETOOTH", "...Bluetooth ON..."); - } else { - Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - startActivityForResult(enableBtIntent, 1); - } - } - } - - private void errorExit(String title, String message){ - Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); - finish(); - } - - public void sendText(View v) { - mConnectedThread.write(editText.getText().toString()); - } - - /*public void sendText(View view) { - try { - OutputStream outStream = clientSocket.getOutputStream(); - outStream.write("TrackPlatformApi\n".getBytes()); - } catch (IOException e) { - Log.d("BLUETOOTH", e.getMessage()); - } - }*/ -} +package com.example.yuras.trackplatformapi; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +public class MainActivity extends AppCompatActivity { + private TrackPlatform trackPlatform; + private Handler handler; + + private TextView textView; + private EditText editText; + private Button button; + + private StringBuilder stringBuilder; + private String receivedMessage; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + /*textView = (TextView) findViewById(R.id.text_from_bt); + editText = (EditText) findViewById(R.id.edit_text); + button = (Button) findViewById(R.id.send_button); + + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + trackPlatform.send(String.valueOf(MovingCommands.FORWARD.getValue())); + } + }); + + stringBuilder = new StringBuilder(); + + handler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == Constants.MESSAGE_READ) { + byte[] readBuf = (byte[]) msg.obj; + String strIncom = new String(readBuf, 0, msg.arg1); + stringBuilder.append(strIncom); + int endOfLineIndex = stringBuilder.indexOf("\r\n"); + if (endOfLineIndex > 0) { + receivedMessage = stringBuilder.substring(0, endOfLineIndex); + stringBuilder.delete(0, stringBuilder.length()); + } + } + } + };*/ + + //trackPlatform = new TrackPlatform(this, handler); + } + + @Override + protected void onResume() { + super.onResume(); + //trackPlatform.connect(); + } + + @Override + public void onPause() { + super.onPause(); + //trackPlatform.disconnect(); + } + + public void movingActivity(View v) { + startActivity(new Intent(this, MovingActivity.class)); + } + + public void sensorsActivity(View v) { + startActivity(new Intent(this, SensorsActivity.class)); + } + + public void servoActivity(View v) { + startActivity(new Intent(this, ServoActivity.class)); + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingActivity.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingActivity.java new file mode 100755 index 0000000..5e567e1 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingActivity.java @@ -0,0 +1,121 @@ +package com.example.yuras.trackplatformapi; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; + +public class MovingActivity extends AppCompatActivity { + TrackPlatform trackPlatform; + Handler handler; + + Button forward, back, right, left, stop; + + StringBuilder stringBuilder; + String receivedMessage; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_moving); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + forward = (Button)findViewById(R.id.forward_button); + left = (Button)findViewById(R.id.left_button); + right = (Button)findViewById(R.id.right_button); + back = (Button)findViewById(R.id.back_button); + stop = (Button)findViewById(R.id.stop_button); + + handler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == Constants.MESSAGE_READ) { + byte[] readBuf = (byte[]) msg.obj; + String strIncom = new String(readBuf, 0, msg.arg1); + stringBuilder.append(strIncom); + int endOfLineIndex = stringBuilder.indexOf("\r\n"); + if (endOfLineIndex > 0) { + receivedMessage = stringBuilder.substring(0, endOfLineIndex); + stringBuilder.delete(0, stringBuilder.length()); + } + } + } + }; + + trackPlatform = new TrackPlatform(this, handler); + + forward.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(MovingCommands.FORWARD.getValue()); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { + trackPlatform.send(MovingCommands.STOP.getValue()); + } + return false; + } + }); + + left.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(MovingCommands.LEFT.getValue()); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ + trackPlatform.send(MovingCommands.STOP.getValue()); + } + return false; + } + }); + + right.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(MovingCommands.RIGHT.getValue()); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ + trackPlatform.send(MovingCommands.STOP.getValue()); + } + return false; + } + }); + + back.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(MovingCommands.BACK.getValue()); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ + trackPlatform.send(MovingCommands.STOP.getValue()); + } + return false; + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + trackPlatform.connect(); + } + + @Override + public void onPause() { + super.onPause(); + trackPlatform.disconnect(); + } + + public void onStopClick(View v) { + trackPlatform.send(MovingCommands.STOP.getValue()); + } + +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingCommands.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingCommands.java new file mode 100755 index 0000000..a0dbda1 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/MovingCommands.java @@ -0,0 +1,19 @@ +package com.example.yuras.trackplatformapi; + +enum MovingCommands { + FORWARD("\001\001"), + LEFT("\001\002"), + RIGHT("\001\003"), + BACK("\001\004"), + STOP("\001\005"); + + private final String value; + + MovingCommands(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/SensorsActivity.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/SensorsActivity.java new file mode 100755 index 0000000..8aa0307 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/SensorsActivity.java @@ -0,0 +1,36 @@ +package com.example.yuras.trackplatformapi; + +import android.content.Intent; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.View; +import android.widget.Button; + +public class SensorsActivity extends AppCompatActivity { + Button lineSensorsButton; + Button distanceSensorsButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sensors); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + lineSensorsButton = (Button) findViewById(R.id.line_activity_button); + distanceSensorsButton = (Button) findViewById(R.id.distance_activity_button); + } + + public void setLineSensorsButton(View v) { + startActivity(new Intent(this, LineSensorsActivity.class)); + } + + public void setDistanceSensorsButton(View v) { + startActivity(new Intent(this, DistanceSensorsActivity.class)); + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoActivity.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoActivity.java new file mode 100755 index 0000000..3f43ccf --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoActivity.java @@ -0,0 +1,173 @@ +package com.example.yuras.trackplatformapi; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; + +public class ServoActivity extends AppCompatActivity { + private int angleX; + private int angleY; + + public TrackPlatform trackPlatform; + + private Handler handler; + private StringBuilder stringBuilder; + private String receivedMessage; + + Button up, down, left, right; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_servo); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + up = (Button)findViewById(R.id.up_button); + left = (Button)findViewById(R.id.left_button); + right = (Button)findViewById(R.id.right_button); + down = (Button)findViewById(R.id.down_button); + + stringBuilder = new StringBuilder(); + + handler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == Constants.MESSAGE_READ) { + byte[] readBuf = (byte[]) msg.obj; + String strIncom = new String(readBuf, 0, msg.arg1); + stringBuilder.append(strIncom); + int endOfLineIndex = stringBuilder.indexOf("\r\n"); + if (endOfLineIndex > 0) { + receivedMessage = stringBuilder.substring(0, endOfLineIndex); + stringBuilder.delete(0, stringBuilder.length()); + String[] arr = receivedMessage.split(";"); + angleX = Integer.valueOf(arr[0]); + angleY = Integer.valueOf(arr[1]); + Log.d(Constants.TAG, "Angles: " + String.valueOf(angleX) + " " + String.valueOf(angleY)); + } + } + } + }; + + + + up.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + angleY + ";"); + angleY += 1; + if (angleY > 255) { + angleY = 255; + } + }/* else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { + //trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + (angleX) + ";"); + //trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + (angleY) + ";"); + }*/ + trackPlatform.send(ServoCommands.GET_ANGLES.getValue()); + Log.d(Constants.TAG, "Angles: " + angleX + " " + angleY); + return false; + } + }); + + left.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + angleX + ";"); + angleX -= 1; + if (angleY < 0) { + angleY = 0; + } + } /*else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ + //trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + (angleX) + ";"); + //trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + (angleY) + ";"); + }*/ + trackPlatform.send(ServoCommands.GET_ANGLES.getValue()); + Log.d(Constants.TAG, "Angles: " + angleX + " " + angleY); + return false; + } + }); + + right.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + angleX + ";"); + angleX += 1; + if (angleX > 255) { + angleX = 255; + } + } /*else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ + //trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + (angleX) + ";"); + //trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + (angleY) + ";"); + }*/ + trackPlatform.send(ServoCommands.GET_ANGLES.getValue()); + Log.d(Constants.TAG, "Angles: " + angleX + " " + angleY); + return false; + } + }); + + down.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + angleY + ";"); + angleY -= 1; + if (angleY < 0) { + angleY = 0; + } + } +/* } else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ + //trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + (angleX) + ";"); + //trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + (angleY) + ";"); + }*/ + trackPlatform.send(ServoCommands.GET_ANGLES.getValue()); + Log.d(Constants.TAG, "Angles: " + angleX + " " + angleY); + return false; + } + }); + + trackPlatform = new TrackPlatform(this, handler); + } + + @Override + protected void onResume() { + super.onResume(); + trackPlatform.connect(); + + trackPlatform.send(ServoCommands.GET_ANGLES.getValue()); + } + + @Override + public void onPause() { + super.onPause(); + + trackPlatform.disconnect(); + } + + +/* public void turnServoUp(View v) { + trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + (angleY + 1)); + } + + public void turnServoDown(View v) { + trackPlatform.send(ServoCommands.SET_VERTICAL_ANGLE.getValue() + (angleY - 1)); + } + + public void turnServoLeft(View v) { + trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + (angleX - 1)); + } + + public void turnServoRight(View v) { + trackPlatform.send(ServoCommands.SET_HORIZONTAL_ANGLE.getValue() + (angleX + 1)); + }*/ +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoCommands.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoCommands.java new file mode 100755 index 0000000..0324b52 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/ServoCommands.java @@ -0,0 +1,17 @@ +package com.example.yuras.trackplatformapi; + +public enum ServoCommands { + SET_HORIZONTAL_ANGLE("\003\001"), + SET_VERTICAL_ANGLE("\003\002"), + GET_ANGLES("\003\004"); + + private final String value; + + ServoCommands(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/TrackPlatform.java b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/TrackPlatform.java new file mode 100755 index 0000000..e4e32d4 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/java/com/example/yuras/trackplatformapi/TrackPlatform.java @@ -0,0 +1,96 @@ +package com.example.yuras.trackplatformapi; + +import android.app.Activity; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothSocket; +import android.content.Intent; +import android.os.Handler; +import android.util.Log; +import android.widget.Toast; + +import java.io.IOException; +import java.lang.reflect.Method; + +public class TrackPlatform implements Constants { + private Activity activity; + private Handler handler; + private BluetoothAdapter btAdapter = null; + private BluetoothSocket btSocket = null; + private ConnectedThread connectedThread; + + public TrackPlatform(Activity activity, Handler handler) { + btAdapter = BluetoothAdapter.getDefaultAdapter(); + this.handler = handler; + this.activity = activity; + } + + public void connect() { + checkBtState(); + BluetoothDevice device = btAdapter.getRemoteDevice(Constants.BLUETOOTH_MAC); + try { + btSocket = createBluetoothSocket(device); + } catch (IOException e) { + Log.d(TAG, e.getMessage()); + } + + btAdapter.cancelDiscovery(); + try { + btSocket.connect(); + Log.d(TAG, "Connecting: Ok"); + } catch (IOException e) { + try { + btSocket.close(); + } catch (IOException e2) { + errorExit("Fatal Error", "In onResume(): to close socket during connection failure" + e2.getMessage() + "."); + } + } + + connectedThread = new ConnectedThread(btSocket, handler); + connectedThread.start(); + } + + public void disconnect() { + try { + btSocket.close(); + connectedThread.cancel(); + } catch (IOException e) { + errorExit("Fatal Error", "In onPause() and failed to close socket." + e.getMessage() + "."); + } + } + + public void send(String msg) { + connectedThread.write(msg); + } + + private void checkBtState() { + if(btAdapter == null) { + errorExit("Fatal Error", "Bluetooth not support"); + } else { + if (btAdapter.isEnabled()) { + Log.d(Constants.TAG, "...Bluetooth ON..."); + } else { + Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); + activity.startActivityForResult(enableBtIntent, 1); + } + } + } + + private void errorExit(String title, String message){ + Toast.makeText(activity.getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); + activity.finish(); + } + + private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { + BluetoothSocket socket = null; + try { + Method m = device.getClass().getMethod( + "createRfcommSocket", new Class[]{int.class}); + + socket = (BluetoothSocket) m.invoke(device, 1); + } catch (Exception e) { + e.printStackTrace(); + } + return socket; + } +} diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_distance_sensors.xml b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_distance_sensors.xml new file mode 100755 index 0000000..fb687ed --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_distance_sensors.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_line_sensors.xml b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_line_sensors.xml new file mode 100755 index 0000000..f576358 --- /dev/null +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_line_sensors.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_main.xml b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_main.xml old mode 100644 new mode 100755 index 10f8534..149e682 --- a/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_main.xml +++ b/code/Java/Mobile/TestApplication/TrackPlatformAPI/app/src/main/res/layout/activity_main.xml @@ -1,33 +1,37 @@ - - - - - -