joystick working
This commit is contained in:
parent
f39dd6f61a
commit
c5e27c2ca7
@ -4,8 +4,6 @@ package com.example.flightgearcontrollerapp.model
|
|||||||
class FGModel {
|
class FGModel {
|
||||||
private val telnetClient = TelnetClient()
|
private val telnetClient = TelnetClient()
|
||||||
private var isConnected =false
|
private var isConnected =false
|
||||||
private var isExceptionOccurred = false
|
|
||||||
private var isTouchingJoystick = false
|
|
||||||
|
|
||||||
fun connect(ipAddress: String, portAddress: String): Boolean {
|
fun connect(ipAddress: String, portAddress: String): Boolean {
|
||||||
var res = false
|
var res = false
|
||||||
@ -17,14 +15,9 @@ class FGModel {
|
|||||||
throw RuntimeException(e)
|
throw RuntimeException(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val h = Thread.UncaughtExceptionHandler { _, _ -> isExceptionOccurred = true;res= false }
|
|
||||||
t.uncaughtExceptionHandler = h
|
|
||||||
t.start()
|
t.start()
|
||||||
try {
|
try {
|
||||||
t.join()
|
t.join()
|
||||||
if (!isExceptionOccurred) {
|
|
||||||
this.isTouchingJoystick = false
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
return false
|
return false
|
||||||
@ -50,13 +43,13 @@ class FGModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setAileron(fl: Float) {
|
fun setAileron(fl: Double) {
|
||||||
if(isConnected) {
|
if(isConnected) {
|
||||||
telnetClient.updateAileron(fl)
|
telnetClient.updateAileron(fl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setElevator(fl: Float) {
|
fun setElevator(fl: Double) {
|
||||||
if(isConnected) {
|
if(isConnected) {
|
||||||
telnetClient.updateElevator(fl)
|
telnetClient.updateElevator(fl)
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ class TelnetClient{
|
|||||||
fun connect(ipAddress: String, portAddress: Int): Boolean {
|
fun connect(ipAddress: String, portAddress: Int): Boolean {
|
||||||
try {
|
try {
|
||||||
client = Socket()
|
client = Socket()
|
||||||
client.connect(InetSocketAddress(ipAddress, portAddress),5000)
|
client.connect(InetSocketAddress(ipAddress, portAddress),2000)
|
||||||
output = PrintWriter(client.getOutputStream(), true)
|
output = PrintWriter(client.getOutputStream(), true)
|
||||||
executor = Executors.newSingleThreadExecutor()
|
executor = Executors.newSingleThreadExecutor()
|
||||||
return true
|
return true
|
||||||
@ -41,11 +41,11 @@ class TelnetClient{
|
|||||||
executor.execute { output.print("set /controls/flight/rudder $fl\r\n");output.flush() }
|
executor.execute { output.print("set /controls/flight/rudder $fl\r\n");output.flush() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateAileron(fl: Float) {
|
fun updateAileron(fl: Double) {
|
||||||
executor.execute { output.print("set /controls/flight/aileron $fl\r\n");output.flush() }
|
executor.execute { output.print("set /controls/flight/aileron $fl\r\n");output.flush() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateElevator(fl: Float) {
|
fun updateElevator(fl: Double) {
|
||||||
executor.execute { output.print("set /controls/flight/elevator $fl\r\n");output.flush() }
|
executor.execute { output.print("set /controls/flight/elevator $fl\r\n");output.flush() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,9 @@ class FGViewModel : ViewModel() {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
fun getModel() : FGModel{
|
||||||
|
return model
|
||||||
|
}
|
||||||
fun disconnectFromFG() {
|
fun disconnectFromFG() {
|
||||||
model.disconnect()
|
model.disconnect()
|
||||||
}
|
}
|
||||||
@ -23,12 +25,4 @@ class FGViewModel : ViewModel() {
|
|||||||
fun setRudder(fl: Float) {
|
fun setRudder(fl: Float) {
|
||||||
model.setRudder(fl)
|
model.setRudder(fl)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setAileron(fl: Float) {
|
|
||||||
model.setAileron(fl)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setElevator(fl: Float) {
|
|
||||||
model.setElevator(fl)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.example.flightgearcontrollerapp.view_model
|
||||||
|
|
||||||
|
import com.example.flightgearcontrollerapp.model.FGModel
|
||||||
|
import java.lang.Math.toRadians
|
||||||
|
import kotlin.math.cos
|
||||||
|
import kotlin.math.sin
|
||||||
|
|
||||||
|
class VMJoyStick(m: FGModel) {
|
||||||
|
private val model = m
|
||||||
|
fun updateMove(angle: Double, strength: Float) {
|
||||||
|
val length = strength /100
|
||||||
|
val x = length*cos( toRadians(angle))
|
||||||
|
val y = length*sin( toRadians(angle))
|
||||||
|
model.setAileron(x)
|
||||||
|
model.setElevator(y)
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,17 @@
|
|||||||
package com.example.flightgearcontrollerapp.views
|
package com.example.flightgearcontrollerapp.views
|
||||||
|
|
||||||
import android.util.Log
|
import com.example.flightgearcontrollerapp.model.FGModel
|
||||||
|
import com.example.flightgearcontrollerapp.view_model.VMJoyStick
|
||||||
import com.jackandphantom.joystickview.JoyStickView
|
import com.jackandphantom.joystickview.JoyStickView
|
||||||
|
|
||||||
|
class JoyStick(m: FGModel, joyStick: JoyStickView) {
|
||||||
class JoyStick(jsv: JoyStickView) {
|
private val viewModel = VMJoyStick(m)
|
||||||
/* private var joyStickView = jsv
|
|
||||||
init {
|
init {
|
||||||
joyStickView.setOnMoveListener(object : JoyStickView.OnMov0eListener( run {
|
|
||||||
fun onMove(angle: Int, strength: Int) {
|
joyStick.setOnMoveListener { angle, strength -> viewModel.updateMove(angle, strength)
|
||||||
Log.i("TAG", "angle: $angle strength: $strength");
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}*/
|
}
|
||||||
|
//viewModel.updateMove(0.0,0f)
|
||||||
}
|
}
|
@ -13,7 +13,6 @@ import com.example.flightgearcontrollerapp.R
|
|||||||
import com.example.flightgearcontrollerapp.R.id.*
|
import com.example.flightgearcontrollerapp.R.id.*
|
||||||
import com.example.flightgearcontrollerapp.view_model.FGViewModel
|
import com.example.flightgearcontrollerapp.view_model.FGViewModel
|
||||||
import com.google.android.material.slider.Slider
|
import com.google.android.material.slider.Slider
|
||||||
import com.jackandphantom.joystickview.JoyStickView
|
|
||||||
|
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
@ -21,10 +20,12 @@ class MainActivity : AppCompatActivity() {
|
|||||||
private val vmConnection = FGViewModel()
|
private val vmConnection = FGViewModel()
|
||||||
private lateinit var throttleSlider: Slider
|
private lateinit var throttleSlider: Slider
|
||||||
private lateinit var rudderSlider: Slider
|
private lateinit var rudderSlider: Slider
|
||||||
|
private lateinit var joyStick:JoyStick
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
|
joyStick = JoyStick(vmConnection.getModel(), findViewById(widget_joystick))
|
||||||
throttleSlider = findViewById(slider_throttle)
|
throttleSlider = findViewById(slider_throttle)
|
||||||
rudderSlider = findViewById(slider_rudder)
|
rudderSlider = findViewById(slider_rudder)
|
||||||
throttleSlider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
|
throttleSlider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
|
||||||
@ -35,7 +36,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
vmConnection.setThrottle(slider.value)
|
vmConnection.setThrottle(slider.value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
throttleSlider.addOnChangeListener { _, value, _ ->
|
throttleSlider.addOnChangeListener { _, value, _ ->
|
||||||
vmConnection.setThrottle(value)
|
vmConnection.setThrottle(value)
|
||||||
}
|
}
|
||||||
@ -47,12 +47,9 @@ class MainActivity : AppCompatActivity() {
|
|||||||
vmConnection.setRudder(slider.value)
|
vmConnection.setRudder(slider.value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
rudderSlider.addOnChangeListener { _, value, _ ->
|
rudderSlider.addOnChangeListener { _, value, _ ->
|
||||||
vmConnection.setRudder(value)
|
vmConnection.setRudder(value)
|
||||||
}
|
}
|
||||||
// var joyStick = JoyStick(findViewById(widget_joystick))
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onClickConnect(view: View) {
|
fun onClickConnect(view: View) {
|
||||||
@ -101,9 +98,5 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,26 +127,14 @@
|
|||||||
android:background="@color/black_60"
|
android:background="@color/black_60"
|
||||||
android:baselineAligned="false">
|
android:baselineAligned="false">
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
|
<include
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_weight="75"
|
android:layout_weight="75"
|
||||||
android:layout_gravity="center">
|
android:layout_gravity="center"
|
||||||
|
layout="@layout/joystick" />
|
||||||
|
|
||||||
<com.jackandphantom.joystickview.JoyStickView
|
|
||||||
android:id="@+id/widget_joystick"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_alignParentBottom="true"
|
|
||||||
app:innerCircleColor="#f6FFFFFF"
|
|
||||||
app:innerCircleImage="@drawable/ic_baseline_airplane_mode_active_24"
|
|
||||||
app:outerCircleBorderColor="#fff"
|
|
||||||
app:outerCircleBorderWidth="5"
|
|
||||||
app:outerCircleColor="@color/navy_blue_40"
|
|
||||||
app:shadowColor="#000"
|
|
||||||
app:shadowRadius="7" />
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
17
app/src/main/res/layout/joystick.xml
Normal file
17
app/src/main/res/layout/joystick.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
<com.jackandphantom.joystickview.JoyStickView
|
||||||
|
android:id="@+id/widget_joystick"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:innerCircleColor="#f6FFFFFF"
|
||||||
|
app:innerCircleImage="@drawable/ic_baseline_airplane_mode_active_24"
|
||||||
|
app:outerCircleBorderColor="#fff"
|
||||||
|
app:outerCircleBorderWidth="5"
|
||||||
|
app:outerCircleColor="@color/navy_blue_40"
|
||||||
|
app:shadowColor="#000"
|
||||||
|
app:shadowRadius="7" />
|
||||||
|
</LinearLayout>
|
Loading…
Reference in New Issue
Block a user