Skip to content

Software #159

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 51 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
e566c61
Create menu_neopixel.xml
ramshak99 Nov 6, 2021
01a089d
Merge branch 'master' into Software
ramshak99 Nov 19, 2021
1786e3d
Added Connect button
ramshak99 Jan 12, 2022
0352753
Added Connect button
ramshak99 Jan 12, 2022
c7fad6d
Updated Home screen
ramshak99 Jan 13, 2022
ebbb201
Merge branch 'rk' into Software
ramshak99 Jan 14, 2022
4820fb3
Lesson Pages
shahadalhusain Jan 14, 2022
7816c1d
Adding BLE module
ramshak99 Jan 15, 2022
c2d164a
Changed BLE folder path
ramshak99 Jan 15, 2022
b218bf3
Update libimagemagick.so
ramshak99 Jan 15, 2022
3d0f2f1
Bluetooth
ramshak99 Jan 15, 2022
349ba93
Bluetooth
ramshak99 Jan 15, 2022
9deb9f1
bluetooth
ramshak99 Jan 15, 2022
69be15c
bluetooth
ramshak99 Jan 15, 2022
620ddda
Merge branch 'Software' into rk
ramshak99 Jan 15, 2022
e2109e7
Main Screen formatting
ramshak99 Jan 15, 2022
2778e7d
Welcome Message
ramshak99 Jan 15, 2022
4f0bd08
Add in BLE support on the Android app (#74)
stephen99scott Feb 1, 2022
37751e1
Merge branch 'master' into rk
ramshak99 Mar 3, 2022
4de24d8
Pulled from Master
ramshak99 Mar 3, 2022
789749b
Lesson Mode
ramshak99 Mar 6, 2022
ab00555
Merge branch 'rk' into Software
ramshak99 Mar 6, 2022
a5bc824
Adding Sign Pictures
ramshak99 Mar 7, 2022
861a164
Merge branch 'rk' into Software
ramshak99 Mar 7, 2022
9852f1a
Update libimagemagick.so
ramshak99 Mar 7, 2022
c7d2873
Update libimagemagick.so
ramshak99 Mar 7, 2022
f0f1a2c
Lesson Activity
ramshak99 Mar 14, 2022
51028ef
Adding Countdown
ramshak99 Mar 14, 2022
2e5b053
Update LessonActivity.java
ramshak99 Mar 14, 2022
4071c89
Merge branch 'rk' into Software
ramshak99 Mar 14, 2022
ad03745
Adding Quiz mode
ramshak99 Apr 1, 2022
b9f2772
Adding Quiz mode
ramshak99 Apr 1, 2022
5c9bcd4
Update qBjuwb8Fz9Ld9bb0YORqfh1HpEc=
ramshak99 Apr 1, 2022
a5fd7e5
Merge branch 'master' into Software
ramshak99 Apr 1, 2022
d4b4a89
Update qBjuwb8Fz9Ld9bb0YORqfh1HpEc=
ramshak99 Apr 1, 2022
28af282
removing old app file
ramshak99 Apr 1, 2022
958d79d
Merge branch 'rk' into Software
ramshak99 Apr 1, 2022
b4b9319
Merge branch 'master' into Software
ramshak99 Apr 4, 2022
d5f3ed0
Adding SVC correctness check
ramshak99 Apr 4, 2022
a6de612
Update LessonActivity.java
ramshak99 Apr 4, 2022
e32228c
deleted unnecessary files
ramshak99 Apr 4, 2022
339f540
Update LessonActivity.java
ramshak99 Apr 11, 2022
b817460
Update MainActivity.java
ramshak99 Apr 11, 2022
29e6f37
Update LessonActivity.java
ramshak99 Apr 11, 2022
0c49460
Update LessonActivity.java
ramshak99 Apr 11, 2022
5808761
Force light mode
stephen99scott Apr 11, 2022
1753c4a
Fix BLE write and receive
stephen99scott Apr 11, 2022
5fd1179
Change SVCalpha
stephen99scott Apr 12, 2022
f72585d
Re-train model
stephen99scott Apr 12, 2022
eb20b23
Update LessonActivity.java
ramshak99 Apr 12, 2022
e3b9c6f
Quiz Mode
ramshak99 Apr 12, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 24 additions & 8 deletions software/android_app/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,45 @@
android:supportsRtl="true"
android:theme="@style/Theme.SignBuddy">
<activity
android:name=".ALessonActivity"
android:name=".LessonActivity"
android:exported="false"
android:label="A"
android:theme="@style/Theme.SignBuddy.NoActionBar" />
<activity
android:name=".AlphabetActivity"
android:name=".LessonAlphabetActivity"
android:exported="false"
android:label="Select a Letter"
android:parentActivityName=".MainActivity" />
android:parentActivityName=".MainActivity"
android:theme="@style/Theme.SignBuddy.NoActionBar"/>
<activity
android:name=".LessonActivity"
android:name=".LessonMenuActivity"
android:exported="false"
android:label="Select a Letter"
android:label="Select a Lesson"
android:parentActivityName=".MainActivity" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</intent-filter></activity>
<activity
android:name=".QuizActivity"
android:exported="false"
android:label="A"
android:theme="@style/Theme.SignBuddy.NoActionBar" />
<activity
android:name=".QuizAlphabetActivity"
android:exported="false"
android:label="Select a Letter"
android:parentActivityName=".MainActivity"
android:theme="@style/Theme.SignBuddy.NoActionBar"/>
<activity
android:name=".QuizMenuActivity"
android:exported="false"
android:label="Select a Quiz"
android:parentActivityName=".MainActivity" />

</application>

</manifest>

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,249 @@

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.os.CountDownTimer;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class LessonActivity extends AppCompatActivity {
import com.clj.fastble.BleManager;
import com.clj.fastble.callback.BleNotifyCallback;
import com.clj.fastble.callback.BleWriteCallback;
import com.clj.fastble.data.BleDevice;
import com.clj.fastble.exception.BleException;
import com.clj.fastble.scan.BleScanRuleConfig;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;

ListView listView;

//data for list
String[] categoryTypes = {"Alphabet", "Colours", "Education", "Emotions", "Family", "Food", "Sports", "Time", "Weather", "Work"};
public class LessonActivity extends AppCompatActivity {
private ProgressBar pgsBar;
private TextView countText;
int alpha; //coming from previous activity (1-5)
int SVCalpha;//outputted by SVC
int lessonnum; //coming from previous activity
int alphanum; //mapped to actual alpha number (1-26)
boolean correct;
private BleDevice SignBuddy;
private ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
private final byte[] CMD_SAMPLE_ONCE = {0x01};

private final String UUID_SERVICE = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E";
private final String UUID_CHARACTERISTIC_WRITE = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E";
private final String UUID_CHARACTERISTIC_NOTIFY = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E";
private final byte MSG_SYNC = 0x16;
private SignBuddyProto.SBPGestureData gestureData;
private final byte MID_SAMPLE = 0x01;
private final int num_samples = 1;
private int msg_length;
private int skip_crc;
private boolean next_byte_is_length;
private String gestureLetter = "";
private Intent i;
private String lessonNumber;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lesson);
setContentView(R.layout.activity_alesson);
SignBuddy = BleManager.getInstance().getAllConnectedDevice().get(0);
ImageView image = (ImageView) findViewById(R.id.signImage);

//setting gesture image
i = getIntent();
lessonNumber = i.getStringExtra("LessonNumber");
lessonnum = Integer.valueOf(lessonNumber);
alpha = i.getIntExtra("alpha", 0);

//set Progress Bar
pgsBar = (ProgressBar) findViewById(R.id.progressBar);
pgsBar.setProgress(alpha);

//setting current letter
if (alpha == 5) {
finish();
Toast.makeText(LessonActivity.this, "You have completed Lesson " + lessonnum, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LessonActivity.this, LessonMenuActivity.class);
startActivity(intent);

}

//setting current image
alphanum = (lessonnum - 1) * 5 + alpha;
String alphaNumber = String.valueOf(alphanum);
String fnm = "alpha_" + alphaNumber; // image file name
String PACKAGE_NAME = getApplicationContext().getPackageName();
int imgId = getResources().getIdentifier(PACKAGE_NAME + ":drawable/" + fnm, null, null);
image.setImageResource(imgId);
BleManager.getInstance().init(getApplication());
BleManager.getInstance()
.enableLog(false)
.setReConnectCount(1, 5000)
.setOperateTimeout(5000);

BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
.setScanTimeOut(3000)
.build();

listView = findViewById(R.id.listView);
BleManager.getInstance().initScanRule(scanRuleConfig);

//array adapter
//populate data from array into listView
//takes context of R.layout, layout/arrangement of data, data to be displayed
ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, categoryTypes);

listView.setAdapter(adapter); //link adapter to listView
BleManager.getInstance().notify(SignBuddy, UUID_SERVICE, UUID_CHARACTERISTIC_NOTIFY, new BleNotifyCallback() {
@Override
public void onNotifySuccess() {

}

//event handler for clickEvents
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
//clicked alphabet
//go from main activity to alphabet activity
startActivity(new Intent(LessonActivity.this, AlphabetActivity.class));
} else {
public void onNotifyFailure(BleException exception) {

}

@Override
public void onCharacteristicChanged(byte[] data) {
for (byte b : data) {
if (b == MSG_SYNC && byteBuffer.size() == 0) {
skip_crc = 4;
next_byte_is_length = true;
} else if (next_byte_is_length) {
msg_length = b;
next_byte_is_length = false;
} else if (skip_crc > 0) {
skip_crc--;
} else {
byteBuffer.write(b);
if (byteBuffer.size() == msg_length) {
new Thread(new LessonActivity.ParseMessage(byteBuffer.toByteArray())).start();
byteBuffer.reset();
}
}
}
}
});
//start countdown
new CountDownTimer(5000, 1000) {
public void onTick(long millisUntilFinished) {
countText = findViewById(R.id.countText);
countText.setText("Perform Sign in: " + ((millisUntilFinished / 1000) + 1));
}

public void onFinish() {
byte[] cmd;
cmd = CMD_SAMPLE_ONCE;
BleManager.getInstance().write(SignBuddy, UUID_SERVICE, UUID_CHARACTERISTIC_WRITE, cmd, new BleWriteCallback() {
@Override
public void onWriteSuccess(int current, int total, byte[] justWrite) {
}

@Override
public void onWriteFailure(BleException exception) {
Toast.makeText(LessonActivity.this, "Failed to start collection!", Toast.LENGTH_SHORT).show();
}
});
countText.setText("GO!");
}
}.start();
}

private class ParseMessage implements Runnable {

private byte[] msg;

public ParseMessage(byte[] msg) {
this.msg = msg;
}

public void run() {
try {
SignBuddyProto.SBPMessage message = SignBuddyProto.SBPMessage.parseFrom(this.msg);
if (message.getId() == MID_SAMPLE) {
SignBuddyProto.SBPSample sample = message.getSample();
Log.i("Sign Buddy", "NEW SAMPLE");
List<SignBuddyProto.SBPSample> samples = new ArrayList<>();
samples.add(sample);
gestureData = SignBuddyProto.SBPGestureData.newBuilder()
.setLetter(gestureLetter)
.addAllSamples(samples)
.build();
Log.i("SignBuddy", gestureData.toString());

samples.clear();
Log.i("Sign Buddy", "NEW GESTURE");
if (checkCorrect()) {
runOnUiThread(() -> {
Toast.makeText(LessonActivity.this, "Correct!", Toast.LENGTH_SHORT).show();
});
alpha++;
finish();
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Bundle mbundle = new Bundle();
mbundle.putInt("alpha", alpha);
mbundle.putString("LessonNumber", lessonNumber);
i.putExtras(mbundle);

startActivity(i);
overridePendingTransition(0, 0);
} else {
runOnUiThread(() -> {
Toast.makeText(LessonActivity.this, "Incorrect, Please try again!", Toast.LENGTH_SHORT).show();
});
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
recreate();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

private void callSVC() {
String data0 = String.valueOf((gestureData.getSamples(0).getFlexData().getFlexIndex()) / 756.37358);
String data1 = String.valueOf((gestureData.getSamples(0).getFlexData().getFlexLittle()) / 826.82646);
String data2 = String.valueOf((gestureData.getSamples(0).getFlexData().getFlexMiddle()) / 929.51170);
String data3 = String.valueOf((gestureData.getSamples(0).getFlexData().getFlexRing()) / 965.84108);
String data4 = String.valueOf((gestureData.getSamples(0).getFlexData().getFlexThumb()) / 1011.90266);
String data5 = String.valueOf((gestureData.getSamples(0).getImuData().getQuatW()) / 79198.56836);
String data6 = String.valueOf((gestureData.getSamples(0).getImuData().getQuatX()) / 79198.56836);
String data7 = String.valueOf((gestureData.getSamples(0).getImuData().getQuatY()) / 59061.66665);
String data8 = String.valueOf((gestureData.getSamples(0).getImuData().getQuatZ()) / 140609.55664);
String data9 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch1() ? 1 : -1) / 12.60952);
String data10 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch10() ? 1 : -1) / 12.60952);
String data11 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch11() ? 1 : -1) / 12.60952);
String data12 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch12() ? 1 : -1) / 12.60952);
String data13 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch2() ? 1 : -1) / 12.60952);
String data14 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch3() ? 1 : -1) / 12.60952);
String data15 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch4() ? 1 : -1) / 12.60952);
String data16 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch5() ? 1 : -1) / 12.60952);
String data17 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch6() ? 1 : -1) / 12.60952);
String data18 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch7() ? 1 : -1) / 12.60952);
String data19 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch8() ? 1 : -1) / 12.60952);
String data20 = String.valueOf((gestureData.getSamples(0).getTouchData().getTouch9() ? 1 : -1) / 12.60952);
String[] args = {data0, data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12, data13, data14, data15, data16, data17, data18, data19, data20};
SVCalpha = SVC.main(args)+1;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the +1 is necessary


}

private boolean checkCorrect() {
callSVC();
if (alphanum <= 9) {
correct = (alphanum == SVCalpha);
}
//skip j
if (alphanum < 26 && alphanum > 10) {
correct = (alphanum == SVCalpha - 1);
}
if (alphanum == 10 || alphanum == 26) {
correct = true;//skip this letter
}
return correct;
}

}
Loading