master
Zhengyu Peng 3 years ago
parent 42b4798a00
commit 601e4fbad1

@ -10,7 +10,6 @@ import androidx.appcompat.app.AppCompatActivity
import com.rookiedev.hexapod.network.TCPClient import com.rookiedev.hexapod.network.TCPClient
import com.rookiedev.hexapod.network.TCPClient.OnConnectEstablished import com.rookiedev.hexapod.network.TCPClient.OnConnectEstablished
import com.rookiedev.hexapod.network.TCPClient.OnMessageReceived import com.rookiedev.hexapod.network.TCPClient.OnMessageReceived
import java.util.concurrent.locks.ReentrantLock
import kotlin.math.PI import kotlin.math.PI
import kotlin.math.atan2 import kotlin.math.atan2
import kotlin.math.pow import kotlin.math.pow
@ -75,6 +74,8 @@ class ControlActivity : AppCompatActivity() {
private val scope = CoroutineScope(Job() + Dispatchers.IO) private val scope = CoroutineScope(Job() + Dispatchers.IO)
private var currentState: String = "standby"
// private val lock = ReentrantLock() // private val lock = ReentrantLock()
// private val waitLock = lock.newCondition() // private val waitLock = lock.newCondition()
@ -125,86 +126,66 @@ class ControlActivity : AppCompatActivity() {
val length = sqrt(coorX.pow(2) + coorY.pow(2)) val length = sqrt(coorX.pow(2) + coorY.pow(2))
if (length < radius / 3) { if (length < radius / 3) {
if (currentState != "standby") {
println("Standby") println("Standby")
sendMessageAsync("standby")
sendMessageAsync("Standby") currentState = "standby"
}
} else if (length >= radius / 3 && length < 2 * radius / 3) { } else if (length >= radius / 3 && length < 2 * radius / 3) {
var angle = atan2(coorY, coorX) var angle = atan2(coorY, coorX)
if (angle > -PI / 4 && angle <= PI / 4) { if (angle > -PI / 4 && angle <= PI / 4) {
if (currentState != "shiftright") {
println("Move right") println("Move right")
sendMessageAsync("shiftright")
runBlocking { // this: CoroutineScope currentState = "shiftright"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Move right")
}
} }
} else if (angle > PI / 4 && angle <= 3 * PI / 4) { } else if (angle > PI / 4 && angle <= 3 * PI / 4) {
if (currentState != "backward") {
println("Move back") println("Move back")
sendMessageAsync("backward")
runBlocking { // this: CoroutineScope currentState = "backward"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Move back")
}
} }
} else if (angle > -3 * PI / 4 && angle < -PI / 4) { } else if (angle > -3 * PI / 4 && angle < -PI / 4) {
if (currentState != "forward") {
println("Move forward") println("Move forward")
sendMessageAsync("forward")
runBlocking { // this: CoroutineScope currentState = "forward"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Move forward")
}
} }
} else { } else {
if (currentState != "shiftleft") {
println("Move left") println("Move left")
sendMessageAsync("shiftleft")
runBlocking { // this: CoroutineScope currentState = "shiftleft"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Move left")
}
} }
} }
} else if (length >= 2 * radius / 3 && length < radius) { } else if (length >= 2 * radius / 3 && length < radius) {
var angle = atan2(coorY, coorX) var angle = atan2(coorY, coorX)
if (angle > -PI / 4 && angle <= PI / 4) { if (angle > -PI / 4 && angle <= PI / 4) {
if (currentState != "rightturn") {
println("Turn right") println("Turn right")
sendMessageAsync("rightturn")
runBlocking { // this: CoroutineScope currentState = "rightturn"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Turn right")
}
} }
} else if (angle > PI / 4 && angle <= 3 * PI / 4) { } else if (angle > PI / 4 && angle <= 3 * PI / 4) {
if (currentState != "fastback") {
println("Fast back") println("Fast back")
// sendMessageAsync("Fast back")
runBlocking { // this: CoroutineScope currentState = "fastback"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Fast back")
}
} }
} else if (angle > -3 * PI / 4 && angle < -PI / 4) { } else if (angle > -3 * PI / 4 && angle < -PI / 4) {
if (currentState != "fastforward") {
println("Fast forward") println("Fast forward")
sendMessageAsync("fastforward")
runBlocking { // this: CoroutineScope currentState = "fastforward"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Fast forward")
}
} }
} else { } else {
if (currentState != "leftturn") {
println("Turn left") println("Turn left")
sendMessageAsync("leftturn")
runBlocking { // this: CoroutineScope currentState = "leftturn"
launch { // launch a new coroutine and continue
tcpClient?.sendMessage("Turn left")
}
} }
} }
} }
// val width = view.width
// val height = view.height
// println(width.toString().plus(":").plus(height.toString()))
// println(touchX.toString().plus(":").plus(touchY.toString()))
// println(coorX.toString().plus(":").plus(coorY.toString()))
// println(radius)
return true return true
} }
} }
@ -242,25 +223,15 @@ class ControlActivity : AppCompatActivity() {
} }
} }
fun sendMessageAsync(message: String) { fun sendMessageAsync(message: String) {
// Starts a new coroutine within the scope // Starts a new coroutine within the scope
scope.launch { scope.launch {
// New coroutine that can call suspend functions // New coroutine that can call suspend functions
// suspend fun sendMessage(message: String) = // Dispatchers.Main
withContext(Dispatchers.IO) { // Dispatchers.IO (main-safety block) withContext(Dispatchers.IO) { // Dispatchers.IO (main-safety block)
tcpClient?.sendMessage(message) tcpClient?.sendMessage(message)
/* perform network IO here */ // Dispatchers.IO (main-safety block)
} }
} }
} }
// suspend fun sendMessage(message: String) = // Dispatchers.Main
// withContext(Dispatchers.IO) { // Dispatchers.IO (main-safety block)
// tcpClient?.sendMessage(message)
// /* perform network IO here */ // Dispatchers.IO (main-safety block)
// } // Dispatchers.Main
} }

@ -11,65 +11,91 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1"> android:layout_weight="1">
<Button <Button
android:id="@+id/button" android:id="@+id/button_rotatex"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Button" android:layout_marginStart="32dp"
app:layout_constraintBottom_toTopOf="@+id/button3" android:layout_marginBottom="24dp"
app:layout_constraintEnd_toStartOf="@+id/button2" android:paddingTop="24dp"
android:paddingBottom="24dp"
android:text="Rotate X"
app:layout_constraintBottom_toTopOf="@+id/button_rotatey"
app:layout_constraintEnd_toStartOf="@+id/button_climb"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<Button <Button
android:id="@+id/button2" android:id="@+id/button_climb"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Button" android:layout_marginStart="24dp"
app:layout_constraintBottom_toTopOf="@+id/button4" android:layout_marginBottom="24dp"
app:layout_constraintEnd_toEndOf="parent" android:paddingTop="24dp"
app:layout_constraintStart_toEndOf="@+id/button" android:paddingBottom="24dp"
app:layout_constraintTop_toTopOf="parent" /> android:text="Climb"
app:layout_constraintBottom_toTopOf="@+id/button_twist"
app:layout_constraintStart_toEndOf="@+id/button_rotatex"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<Button <Button
android:id="@+id/button3" android:id="@+id/button_rotatey"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Button" android:layout_marginStart="32dp"
app:layout_constraintBottom_toTopOf="@+id/button5" android:layout_marginBottom="24dp"
app:layout_constraintEnd_toStartOf="@+id/button4" android:paddingTop="24dp"
android:paddingBottom="24dp"
android:text="Rotate Y"
app:layout_constraintBottom_toTopOf="@+id/button_rotatez"
app:layout_constraintEnd_toStartOf="@+id/button_twist"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" /> app:layout_constraintTop_toBottomOf="@+id/button_rotatex" />
<Button <Button
android:id="@+id/button4" android:id="@+id/button_twist"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Button" android:layout_marginStart="24dp"
android:layout_marginBottom="24dp"
android:paddingTop="24dp"
android:paddingBottom="24dp"
android:text="Twist"
app:layout_constraintBottom_toTopOf="@+id/button6" app:layout_constraintBottom_toTopOf="@+id/button6"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/button_rotatey"
app:layout_constraintStart_toEndOf="@+id/button3" app:layout_constraintTop_toBottomOf="@+id/button_climb" />
app:layout_constraintTop_toBottomOf="@+id/button2" />
<Button <Button
android:id="@+id/button5" android:id="@+id/button_rotatez"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Button" android:layout_marginStart="32dp"
android:paddingTop="24dp"
android:paddingBottom="24dp"
android:text="Rotate Z"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/button6" app:layout_constraintEnd_toStartOf="@+id/button6"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button3" /> app:layout_constraintTop_toBottomOf="@+id/button_rotatey" />
<Button <Button
android:id="@+id/button6" android:id="@+id/button6"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:paddingTop="24dp"
android:paddingBottom="24dp"
android:text="Button" android:text="Button"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/button_rotatez"
app:layout_constraintStart_toEndOf="@+id/button5" app:layout_constraintTop_toBottomOf="@+id/button_twist" />
app:layout_constraintTop_toBottomOf="@+id/button4" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@ -82,8 +108,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

Loading…
Cancel
Save