Skip to content

Commit

Permalink
Final changes
Browse files Browse the repository at this point in the history
  • Loading branch information
tainfante committed Oct 9, 2020
1 parent a532b3b commit bd0eec6
Show file tree
Hide file tree
Showing 12 changed files with 193 additions and 96 deletions.
31 changes: 22 additions & 9 deletions app/src/main/java/com/example/rehabapp/AccFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ class AccFragment(private val queueHandOuter: QueueHandOuter) : Fragment() {
): View {
val view: View =inflater.inflate(R.layout.acc_layout, container, false)

println("Accfragment oncreateview")

accChart=view.findViewById(R.id.accChart)
gyrChart=view.findViewById(R.id.gyrChart)

Expand All @@ -45,10 +47,10 @@ class AccFragment(private val queueHandOuter: QueueHandOuter) : Fragment() {
gyrChart.rangeStepValue = 10000.0
gyrChart.graph.getLineLabelStyle(XYGraphWidget.Edge.LEFT).format = DecimalFormat("0")

accChart.setRangeBoundaries(0,65536, BoundaryMode.FIXED)
gyrChart.setRangeBoundaries(0,65536, BoundaryMode.FIXED)
accChart.setRangeBoundaries(-32768,32768, BoundaryMode.FIXED)
gyrChart.setRangeBoundaries(-32768,32768, BoundaryMode.FIXED)

data = RealTimeXYDatasource(this.queueHandOuter)
data = RealTimeXYDatasource(this.queueHandOuter,1)

val accXseries = RealTimeSeries(data, 0, "ACC X")
val accYseries = RealTimeSeries(data, 1, "ACC Y")
Expand All @@ -60,19 +62,19 @@ class AccFragment(private val queueHandOuter: QueueHandOuter) : Fragment() {

val formatter1 = LineAndPointFormatter(Color.rgb(0, 200, 0), null, null, null)
formatter1.linePaint.strokeJoin = Join.ROUND
formatter1.linePaint.strokeWidth = 10f
formatter1.linePaint.strokeWidth = 2f
accChart.addSeries(accXseries,formatter1)
gyrChart.addSeries(gyrXseries, formatter1)

val formatter2 = LineAndPointFormatter(Color.rgb(0, 0, 200), null, null, null)
formatter1.linePaint.strokeJoin = Join.ROUND
formatter1.linePaint.strokeWidth = 10f
formatter2.linePaint.strokeJoin = Join.ROUND
formatter2.linePaint.strokeWidth = 2f
accChart.addSeries(accYseries,formatter2)
gyrChart.addSeries(gyrYseries, formatter2)

val formatter3 = LineAndPointFormatter(Color.rgb(200, 0, 0), null, null, null)
formatter1.linePaint.strokeJoin = Join.ROUND
formatter1.linePaint.strokeWidth = 10f
formatter3.linePaint.strokeJoin = Join.ROUND
formatter3.linePaint.strokeWidth = 2f
accChart.addSeries(accZseries,formatter3)
gyrChart.addSeries(gyrZseries, formatter3)

Expand All @@ -81,10 +83,21 @@ class AccFragment(private val queueHandOuter: QueueHandOuter) : Fragment() {
return view
}

override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if(isVisibleToUser&&isResumed){
onResume()
} else if(!isVisibleToUser&&isResumed){
onPause()
}
}

override fun onResume() {
super.onResume()
if((!userVisibleHint)) return
myThread = Thread(data)
myThread.start()
super.onResume()

}

override fun onPause() {
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/com/example/rehabapp/AccFrame.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,29 @@ class AccFrame(dataArray: UByteArray) {
init{
this.dataArray=dataArray
accX = (dataArray[0].toInt() shl 8) or dataArray[1].toInt()
if(accX.and(32768) == 32768){
accX=-(accX.inv().and(65535)-1)
}
accY = (dataArray[2].toInt() shl 8) or dataArray[3].toInt()
if(accY.and(32768) == 32768){
accY=-(accY.inv().and(65535)-1)
}
accZ = (dataArray[4].toInt() shl 8) or dataArray[5].toInt()
if(accZ.and(32768) == 32768){
accZ=-(accZ.inv().and(65535)-1)
}
gyrX = (dataArray[6].toInt() shl 8) or dataArray[7].toInt()
if(gyrX.and(32768) == 32768){
gyrX=-(gyrX.inv().and(65535)-1)
}
gyrY = (dataArray[8].toInt() shl 8) or dataArray[9].toInt()
if(gyrY.and(32768) == 32768){
gyrY=-(gyrY.inv().and(65535)-1)
}
gyrZ = (dataArray[10].toInt() shl 8) or dataArray[11].toInt()
if(gyrZ.and(32768) == 32768){
gyrZ=-(gyrZ.inv().and(65535)-1)
}
}

fun getAccX(): Int {
Expand Down
6 changes: 4 additions & 2 deletions app/src/main/java/com/example/rehabapp/ConnectDevice.kt
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,12 @@ class ConnectDevice(isReady: IsReadyForTransmition, queueHandOuter: QueueHandOut
if(emg==1&&acc==0){
val frame = decodeEmgFrame(readEmgBuffer.copyOfRange(0, readBufferPosition))
queueHandOuter!!.giveMeTheEmgQueue().add(frame)
queueHandOuter!!.giveMeTheEmgQueuetoPlot().add(frame)
if(queueHandOuter!!.ifEmgEnable())queueHandOuter!!.giveMeTheEmgQueuetoPlot().add(frame)
emg=0
} else if(emg==0&&acc==1){
val frame = decodeAccFrame(readAccBuffer.copyOfRange(0, readBufferPosition))
queueHandOuter!!.giveMeTheAccQueue().add(frame)
if(queueHandOuter!!.ifEnable())queueHandOuter!!.giveMeTheAccQueuetoPlot().add(frame)
if(queueHandOuter!!.ifAccEnable())queueHandOuter!!.giveMeTheAccQueuetoPlot().add(frame)
acc = 0
}
readBufferPosition=0
Expand Down Expand Up @@ -140,6 +140,7 @@ class ConnectDevice(isReady: IsReadyForTransmition, queueHandOuter: QueueHandOut
data[i]= data[i].inv()
encodedData[number]=data[i]
number++
change=0
}
else -> {
encodedData[number]=data[i]
Expand All @@ -162,6 +163,7 @@ class ConnectDevice(isReady: IsReadyForTransmition, queueHandOuter: QueueHandOut
data[i]= data[i].inv()
encodedData[number]=data[i]
number++
change=0
}
else -> {
encodedData[number]=data[i]
Expand Down
75 changes: 64 additions & 11 deletions app/src/main/java/com/example/rehabapp/EmgFragment.kt
Original file line number Diff line number Diff line change
@@ -1,37 +1,90 @@
package com.example.rehabapp

import android.database.Cursor
import android.os.Build

import android.graphics.Color
import android.graphics.Paint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import com.androidplot.xy.XYPlot

import com.androidplot.Plot
import com.androidplot.xy.*
import java.text.DecimalFormat
import java.util.*


class EmgFragment : Fragment() {
class EmgFragment(private val queueHandOuter: QueueHandOuter) : Fragment() {

lateinit var emgChart: XYPlot
lateinit var data: RealTimeXYDatasource
lateinit var myThread: Thread

@RequiresApi(Build.VERSION_CODES.P)
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val view: View = inflater.inflate(R.layout.emg_layout, container, false)

var color1 = ContextCompat.getColor((activity as MainActivity).applicationContext, R.color.colorblue)
var color2 = ContextCompat.getColor((activity as MainActivity).applicationContext, R.color.colorpink)

emgChart=view.findViewById(R.id.emgChart)

val plotUpdater=MyPlotUpdater(emgChart)
emgChart.graph.getLineLabelStyle(XYGraphWidget.Edge.BOTTOM).format = DecimalFormat("0")
emgChart.domainStepMode = StepMode.INCREMENT_BY_VAL
emgChart.domainStepValue = 400.0
emgChart.rangeStepMode = StepMode.INCREMENT_BY_VAL
emgChart.rangeStepValue = 10000.0
emgChart.graph.getLineLabelStyle(XYGraphWidget.Edge.LEFT).format = DecimalFormat("0")

emgChart.setRangeBoundaries(0,4095, BoundaryMode.FIXED)

data= RealTimeXYDatasource(this.queueHandOuter, 0)

val rawSeries = RealTimeSeries(data, 0, "Raw")
val filteredSeries = RealTimeSeries(data, 1, "Filtered")

val formatter1 = LineAndPointFormatter(Color.rgb(0, 200, 0), null, null, null)
formatter1.linePaint.strokeJoin = Paint.Join.ROUND
formatter1.linePaint.strokeWidth = 2f
emgChart.addSeries(rawSeries, formatter1)

val formatter2 = LineAndPointFormatter(Color.rgb(0, 0, 200), null, null, null)
formatter2.linePaint.strokeJoin = Paint.Join.ROUND
formatter2.linePaint.strokeWidth = 2f
emgChart.addSeries(filteredSeries, formatter2)

data.addObserver(plotUpdater)

return view
}

override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if(isVisibleToUser&&isResumed){
onResume()
} else if(!isVisibleToUser&&isResumed){
onPause()
}
}

override fun onResume() {
super.onResume()
if((!userVisibleHint)) return
myThread = Thread(data)
myThread.start()
}

override fun onPause() {
data.stopThread()
super.onPause()
}

inner class MyPlotUpdater(private var emgplot: Plot<*, *, *, *, *>) : Observer {

override fun update(o: Observable?, arg: Any?) {
emgplot.redraw()
}

}
}
15 changes: 9 additions & 6 deletions app/src/main/java/com/example/rehabapp/EmgFrame.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
package com.example.rehabapp

import kotlin.experimental.or

@ExperimentalUnsignedTypes
class EmgFrame(dataArray: UByteArray) {

private var dataArray = UByteArray(4)
private var rawEmg: Int = 0
private var filtredEmg: Int = 0
private var rawEmg: Short = 0
private var filtredEmg: Short = 0

init {
this.dataArray=dataArray
rawEmg = (dataArray[0].toInt() shl 8) or dataArray[1].toInt()
filtredEmg = (dataArray[2].toInt() shl 8) or dataArray[3].toInt()
rawEmg = (dataArray[0].toInt() shl 8).toShort() or dataArray[1].toShort()
filtredEmg = (dataArray[2].toInt() shl 8).toShort() or dataArray[3].toShort()
}

fun getRawEmg(): Int{
fun getRawEmg(): Short{
return rawEmg
}

fun getFiltredEmg(): Int{
fun getFiltredEmg(): Short{
return filtredEmg
}

Expand Down
22 changes: 0 additions & 22 deletions app/src/main/java/com/example/rehabapp/HistFragment.kt

This file was deleted.

14 changes: 8 additions & 6 deletions app/src/main/java/com/example/rehabapp/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,7 @@ class MainActivity : AppCompatActivity(), ComFragment.ComFragmentInterface, Conn
private fun setupViewPager(viewPager: ViewPager) {
val adapter = SectionsPageAdapter(super.getSupportFragmentManager())
adapter.addFragment(ComFragment(), "COM")
adapter.addFragment(HistFragment(), "HIST")
adapter.addFragment(EmgFragment(), "EMG")
adapter.addFragment(EmgFragment(this), "EMG")
adapter.addFragment(AccFragment(this), "ACC")
adapter.addFragment(LogFragment(), "LOG")
viewPager.adapter = adapter
Expand Down Expand Up @@ -181,11 +180,14 @@ class MainActivity : AppCompatActivity(), ComFragment.ComFragmentInterface, Conn
return queueHandler.getEmgQueuetoPlot()
}

override fun ifEnable(): Boolean {
return queueHandler.ifEnable()
override fun ifEmgEnable(): Boolean {
return queueHandler.ifEmgEnable()
}

override fun setEnable(enable: Boolean) {
queueHandler.setEnable(enable)
override fun setEnable(enable: Boolean, type: Int) {
queueHandler.setEnable(enable, type)
}
override fun ifAccEnable(): Boolean {
return queueHandler.ifAccEnable()
}
}
5 changes: 3 additions & 2 deletions app/src/main/java/com/example/rehabapp/QueueHandOuter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ interface QueueHandOuter {
fun giveMeTheEmgQueue(): LinkedBlockingQueue<EmgFrame>
fun giveMeTheAccQueuetoPlot(): LinkedBlockingQueue<AccFrame>
fun giveMeTheEmgQueuetoPlot(): LinkedBlockingQueue<EmgFrame>
fun ifEnable(): Boolean
fun setEnable(enable:Boolean)
fun ifEmgEnable(): Boolean
fun ifAccEnable(): Boolean
fun setEnable(enable:Boolean, type: Int)

}
18 changes: 10 additions & 8 deletions app/src/main/java/com/example/rehabapp/QueueHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ class QueueHandler {
private var emgQueue: LinkedBlockingQueue<EmgFrame> = LinkedBlockingQueue()
private var accQueuetoPlot: LinkedBlockingQueue<AccFrame> = LinkedBlockingQueue()
private var emgQueuetoPlot: LinkedBlockingQueue<EmgFrame> = LinkedBlockingQueue()
private var enable=false
private var accEnable=false
private var emgEnable=false

fun getAccQueue():LinkedBlockingQueue<AccFrame>{
return accQueue
Expand All @@ -25,13 +26,14 @@ class QueueHandler {
fun getEmgQueuetoPlot(): LinkedBlockingQueue<EmgFrame>{
return emgQueuetoPlot
}
fun ifEnable():Boolean{
return enable
fun ifEmgEnable():Boolean{
return emgEnable
}
fun setEnable(enable:Boolean){
this.enable=enable
fun setEnable(enable: Boolean, type:Int){
if(type==0)this.emgEnable=enable
else this.accEnable=enable
}
fun ifAccEnable():Boolean{
return accEnable
}



}
Loading

0 comments on commit bd0eec6

Please sign in to comment.