aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java56
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java15
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java212
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java28
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java111
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java40
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java22
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java56
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml2
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml35
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml56
-rw-r--r--Software/DB/PPC/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/PPC/Tango_log.ldfbin53673984 -> 53673984 bytes
-rw-r--r--Software/DB/TCC/TCC.mdfbin8388608 -> 8388608 bytes
-rw-r--r--Software/DB/TCC/TCC_log.ldfbin8388608 -> 8388608 bytes
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs15
-rw-r--r--Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs18
19 files changed, 593 insertions, 75 deletions
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java
index b25e6970c..1109ba02f 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java
@@ -1,5 +1,59 @@
package com.twine.colorcapture.core;
-public class Event
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * Represents C# like event simulation by holding a collection of event handlers.
+ *
+ * @param <T> the event handler type parameter
+ */
+public class Event<T>
{
+ private List<IEventHandler<T>> listeners = new ArrayList<>();
+
+ /**
+ * Remove listener.
+ *
+ * @param listener the listener
+ */
+ public void removeListener(IEventHandler<T> listener)
+ {
+ listeners.remove(listener);
+ }
+
+ /**
+ * Add listener.
+ *
+ * @param listener the listener
+ */
+ public void addListener(IEventHandler<T> listener)
+ {
+ listeners.add(listener);
+ }
+
+ /**
+ * Invoke the event for all listeners.
+ *
+ * @param sender the sender
+ * @param e the e
+ */
+ public void invoke(Object sender, T e)
+ {
+
+ for (int i = 0; i < listeners.size(); i++)
+ {
+ listeners.get(i).invoke(sender, e);
+ }
+ }
+
+
+ /**
+ * Clears the collection of event handlers.
+ */
+ public void reset()
+ {
+ listeners.clear();
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java
index 7d0a277b5..5d212eed8 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java
@@ -1,5 +1,18 @@
package com.twine.colorcapture.core;
-public class IEventHandler
+/**
+ * Represents an {@link Event} handler delegate.
+ *
+ * @param <T> the type parameter
+ */
+public interface IEventHandler<T>
{
+
+ /**
+ * Invokes the handler callback.
+ *
+ * @param sender the sender
+ * @param args the event arguments.
+ */
+ void invoke(Object sender, T args);
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java
index 052f7a3b8..3262a72a8 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java
@@ -1,5 +1,213 @@
package com.twine.colorcapture.core;
-public class ObservableCollection
-{
+import android.support.annotation.NonNull;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+
+/**
+ * Represents an observable collection with change notification.
+ *
+ * @param <T> the type parameter
+ */
+public class ObservableCollection<T> implements List<T> {
+
+ /**
+ * The interface On changed listener.
+ */
+ public interface OnChangedListener {
+ /**
+ * On change.
+ */
+ void onChange();
+ }
+
+ private List<T> list;
+ private OnChangedListener onChangedListener;
+
+ /**
+ * Sets on change listener.
+ *
+ * @param listener the listener
+ */
+ public void setOnChangeListener(OnChangedListener listener) {
+ this.onChangedListener = listener;
+ }
+
+
+ /**
+ * Clear on change listener.
+ */
+ public void clearOnChangeListener()
+ {
+ this.onChangedListener = null;
+ }
+
+ /**
+ * On change.
+ */
+ protected void onChange() {
+ if (this.onChangedListener != null) {
+ this.onChangedListener.onChange();
+ }
+ }
+
+ /**
+ * Instantiates a new Observable collection.
+ */
+ public ObservableCollection() {
+ list = new ArrayList<>();
+ }
+
+ @Override
+ public int size() {
+ return list.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return list.isEmpty();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return list.contains(o);
+ }
+
+ @NonNull
+ @Override
+ public Iterator<T> iterator() {
+ return list.iterator();
+ }
+
+ @NonNull
+ @Override
+ public Object[] toArray() {
+ return list.toArray();
+ }
+
+ @NonNull
+ @Override
+ public <T1> T1[] toArray(@NonNull T1[] t1s) {
+ return list.toArray(t1s);
+ }
+
+ @Override
+ public boolean add(T t) {
+ boolean result = list.add(t);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ boolean result = list.remove(o);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public boolean containsAll(@NonNull Collection<?> collection) {
+ return list.containsAll(collection);
+ }
+
+ @Override
+ public boolean addAll(@NonNull Collection<? extends T> collection) {
+ boolean result = list.addAll(collection);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public boolean addAll(int i, @NonNull Collection<? extends T> collection) {
+ boolean result = list.addAll(i, collection);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public boolean removeAll(@NonNull Collection<?> collection) {
+ boolean result = list.removeAll(collection);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public boolean retainAll(@NonNull Collection<?> collection) {
+ boolean result = list.retainAll(collection);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public void clear() {
+ list.clear();
+ onChange();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return list.equals(o);
+ }
+
+ @Override
+ public int hashCode() {
+ return list.hashCode();
+ }
+
+ @Override
+ public T get(int i) {
+ return list.get(i);
+ }
+
+ @Override
+ public T set(int i, T t) {
+ T result = list.set(i, t);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public void add(int i, T t) {
+ list.add(i,t);
+ onChange();
+ }
+
+ @Override
+ public T remove(int i) {
+ T result = list.remove(i);
+ onChange();
+ return result;
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ return list.indexOf(o);
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ return list.lastIndexOf(o);
+ }
+
+ @NonNull
+ @Override
+ public ListIterator<T> listIterator() {
+ return listIterator();
+ }
+
+ @NonNull
+ @Override
+ public ListIterator<T> listIterator(int i) {
+ return listIterator(i);
+ }
+
+ @NonNull
+ @Override
+ public List<T> subList(int i, int i1) {
+ return list.subList(i,i1);
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java
index 2ded0cb8f..e88b3bace 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java
@@ -2,4 +2,32 @@ package com.twine.colorcapture.integration;
public class ExternalBridgeMachine
{
+ private String ipAddress;
+ private String serialNumber;
+
+ public String getIpAddress()
+ {
+ return ipAddress;
+ }
+
+ public void setIpAddress(String ipAddress)
+ {
+ this.ipAddress = ipAddress;
+ }
+
+ public String getSerialNumber()
+ {
+ return serialNumber;
+ }
+
+ public void setSerialNumber(String serialNumber)
+ {
+ this.serialNumber = serialNumber;
+ }
+
+ public ExternalBridgeMachine(String ipAddress, String serialNumber)
+ {
+ this.ipAddress = ipAddress;
+ this.serialNumber = serialNumber;
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java
index 56d2224f4..390ccab3b 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java
@@ -1,6 +1,115 @@
-package com.twine.colorcapture.bridge;
+package com.twine.colorcapture.integration;
+
+import android.os.StrictMode;
+
+import com.twine.colorcapture.core.Event;
+import com.twine.colorcapture.core.IEventHandler;
+import com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket;
+
+import org.joda.time.DateTime;
+import org.joda.time.Seconds;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import static br.com.zbra.androidlinq.Linq.stream;
public class ExternalBridgeScanner
{
+ private Thread udpDiscoveryThread;
+ private boolean isStarted;
+ private List<ExternalBridgeMachine> machines;
+ private Event<ExternalBridgeMachine> newMachineEvent;
+
+ public ExternalBridgeScanner()
+ {
+ machines = new ArrayList<>();
+ newMachineEvent = new Event<>();
+ }
+
+ public void start()
+ {
+ if (!isStarted)
+ {
+ machines.clear();
+ isStarted = true;
+ udpDiscoveryThread = new Thread(this::udpDiscoveryMethod);
+ udpDiscoveryThread.start();
+ }
+ }
+
+ public void stop()
+ {
+ if (isStarted)
+ {
+ isStarted = false;
+ }
+ }
+
+ public void addNewMachineEventHandler(IEventHandler<ExternalBridgeMachine> handler)
+ {
+ newMachineEvent.addListener(handler);
+ }
+
+ private void udpDiscoveryMethod()
+ {
+ StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
+ StrictMode.setThreadPolicy(policy);
+
+ while (isStarted)
+ {
+ DatagramSocket client = null;
+
+ try
+ {
+ client = new DatagramSocket(8888);
+ client.setReuseAddress(true);
+ client.setBroadcast(true);
+
+ byte[] buffer = new byte[100];
+ DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
+
+ client.receive(packet);
+ byte[] message = new byte[packet.getLength()];
+ ByteBuffer wrapper = ByteBuffer.wrap(message);
+ wrapper.put(buffer, 0, message.length);
+
+
+ ExternalBridgeUdpDiscoveryPacket discoveryMessage = ExternalBridgeUdpDiscoveryPacket.parseFrom(message);
+
+ boolean hasTime = !discoveryMessage.getTime().equals("");
+
+ DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
+ DateTime time = hasTime ? formatter.parseDateTime(discoveryMessage.getTime()) : DateTime.now();
+
+ String address = packet.getAddress().toString().replaceAll("/","");
+ if (!hasTime || Seconds.secondsBetween(DateTime.now(), time).getSeconds() < 6)
+ {
+ if (!stream(machines).any(x -> x.getSerialNumber().equals(discoveryMessage.getSerialNumber()) && x.getIpAddress().equals(address)))
+ {
+ ExternalBridgeMachine newMachine = new ExternalBridgeMachine(address, discoveryMessage.getSerialNumber());
+ machines.add(0, newMachine);
+ newMachineEvent.invoke(this, newMachine);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ if (client != null)
+ {
+ client.close();
+ }
+ }
+ }
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java
index 30cc259d6..8be2b5b9d 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java
@@ -9,34 +9,24 @@ import android.databinding.InverseBindingListener;
import android.databinding.InverseBindingMethod;
import android.databinding.InverseBindingMethods;
import android.util.Log;
+import android.widget.ListView;
import com.twine.colorcapture.controls.ToggleImageButton;
-//@BindingMethods({
-// @BindingMethod(type = ToggleImageButton.class, attribute = "checked", method = "setChecked"),
-//})
-//@InverseBindingMethods({
-// @InverseBindingMethod(type = ToggleImageButton.class, attribute = "checked", method = "getChecked"),
-//})
public class BindingAdapters
{
-// @BindingAdapter(value = "checkedAttrChanged")
-// public static void setListener(ToggleImageButton btn, final InverseBindingListener attrChange)
-// {
-// btn.setOnCheckedChangeListener((e, r) -> attrChange.onChange());
-// }
-//
-// @BindingAdapter("checked")
-// public static void setChecked(ToggleImageButton view, Boolean value)
-// {
-// Log.d("DATA BINDING", "setChecked: ");
-// view.setChecked(value);
-// }
-//
-// @InverseBindingAdapter(attribute = "checked")
-// public static Boolean getChecked(ToggleImageButton view)
-// {
-// Log.d("DATA BINDING", "getChecked: ");
-// return view.isChecked();
-// }
+ /**
+ * Binds a {@link ListView} item click to a listener.
+ *
+ * @param view the view
+ * @param listener the listener
+ */
+ @BindingAdapter("android:onItemClick")
+ public static void listViewClickAdapter(ListView view, ListView.OnItemClickListener listener)
+ {
+ if (view != null && listener != null)
+ {
+ view.setOnItemClickListener(listener);
+ }
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java
index cb7a558c5..e132d1b56 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java
@@ -1,5 +1,6 @@
package com.twine.colorcapture.mvvm;
+import android.animation.ValueAnimator;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
@@ -87,7 +88,8 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends
ButterKnife.bind(this, binding.getRoot());
return binding.getRoot();
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
ex.printStackTrace();
return null;
@@ -132,18 +134,16 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends
getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
View group = this.getView();
+
group.post(() ->
{
- group.setAlpha(0);
-
- new CountUpTimer(500,30){
- @Override
- public void onTick(float milli)
- {
- group.setAlpha(milli / 500f);
- Log.d("ANIM", Float.toString(milli / 500f));
- }
- }.start();
+ ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
+ animator.setDuration(300);
+ animator.addUpdateListener((x) ->
+ {
+ group.setAlpha((Float) x.getAnimatedValue());
+ });
+ animator.start();
});
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java
index 99bb0846d..5f2a0e8ac 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java
@@ -8,6 +8,7 @@ import android.util.Log;
import com.squareup.otto.Bus;
import com.twine.colorcapture.BuildConfig;
import com.twine.colorcapture.core.Task;
+import com.twine.colorcapture.integration.ExternalBridgeScanner;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationProvider;
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
index 38d917a7e..b579a3e9f 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
@@ -2,6 +2,7 @@ package com.twine.colorcapture.views.main;
import com.squareup.otto.Bus;
import com.twine.colorcapture.dialogs.welcome.WelcomeDialog;
+import com.twine.colorcapture.integration.ExternalBridgeScanner;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationProvider;
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java
index d6eb15d34..c77e93a20 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java
@@ -1,5 +1,18 @@
package com.twine.colorcapture.views.sendtomachine;
+import android.databinding.ObservableArrayList;
+import android.databinding.ObservableField;
+import android.databinding.ObservableList;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+
+import com.twine.colorcapture.BR;
+import com.twine.colorcapture.R;
+import com.twine.colorcapture.integration.ExternalBridgeMachine;
+import com.twine.colorcapture.integration.ExternalBridgeScanner;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationObjectReceiver;
import com.twine.colorcapture.navigation.INavigationProvider;
@@ -8,12 +21,49 @@ import com.twine.colorcapture.web.messages.DetectionColor;
import javax.inject.Inject;
+import me.tatarka.bindingcollectionadapter2.ItemBinding;
+
public class SendToMachineFragmentVM extends ViewModelBase<ISendToMachineFragment> implements INavigationObjectReceiver<DetectionColor>
{
+ private ExternalBridgeScanner scanner;
+
+ public ObservableList<ExternalBridgeMachine> machines;
+ public ItemBinding<String> machineBinding;
+
@Inject
public SendToMachineFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider)
{
+ machines = new ObservableArrayList<>();
+ scanner = new ExternalBridgeScanner();
+ machineBinding = ItemBinding.of(BR.machine, R.layout.external_machine_item);
+
+ scanner.addNewMachineEventHandler(this::onNewMachine);
+ }
+
+ private void onNewMachine(Object o, ExternalBridgeMachine machine)
+ {
+ Handler handler = new Handler(Looper.getMainLooper());
+ handler.post(new Runnable() {
+ public void run() {
+ machines.add(0, machine);
+ }
+ });
+ }
+
+ @Override
+ protected void onNavigatedTo()
+ {
+ super.onNavigatedTo();
+ machines.clear();
+ scanner.start();
+ }
+ @Override
+ protected void onNavigatedFrom()
+ {
+ machines.clear();
+ super.onNavigatedFrom();
+ scanner.stop();
}
@Override
@@ -21,4 +71,10 @@ public class SendToMachineFragmentVM extends ViewModelBase<ISendToMachineFragmen
{
DetectionColor color = detectionColor;
}
+
+ public void onMachineSelected(AdapterView<?> adapterView, View view, int i, long l)
+ {
+ ExternalBridgeMachine machine = (ExternalBridgeMachine) adapterView.getAdapter().getItem(i);
+ ExternalBridgeMachine m = machine;
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml
index a8b409b1d..8895ad0ae 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
+ <item android:drawable="@color/colorAccent" android:state_activated="true" />
</selector> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml
index d8fb3247f..c13fdaaef 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml
@@ -1,6 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout
- xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
- android:layout_height="match_parent">
-</android.support.constraint.ConstraintLayout> \ No newline at end of file
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <data>
+ <variable
+ name="machine"
+ type="com.twine.colorcapture.integration.ExternalBridgeMachine"/>
+ </data>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@drawable/list_view_selectable"
+ android:padding="5dp">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@{machine.serialNumber}"
+ tools:text="Serial Number"
+ android:textSize="18sp" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@{machine.ipAddress}"
+ tools:text="IP Address"
+ android:layout_marginTop="10dp" />
+ </LinearLayout>
+</layout> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml
index 82dc3d1df..0e9fba276 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml
@@ -1,40 +1,58 @@
-<layout xmlns:tools="http://schemas.android.com/tools"
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:bind="http://schemas.android.com/apk/res-auto">
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
<data>
+
<variable
name="vm"
type="com.twine.colorcapture.views.sendtomachine.SendToMachineFragmentVM" />
</data>
<RelativeLayout
- android:layoutDirection="ltr"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/colorDarkBackground"
+ android:layoutDirection="ltr"
android:paddingLeft="20dp"
android:paddingRight="20dp"
- android:background="@color/colorDarkBackground"
tools:context="com.twine.colorcapture.views.sendtomachine.SendToMachineFragment">
+ <android.support.v7.widget.AppCompatTextView
+ android:id="@+id/txtTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:layout_gravity="center"
+ android:layout_marginTop="15dp"
+ android:fontFamily="@font/flexo_bold"
+ android:letterSpacing="0.07"
+ android:text="Send To Machine"
+ android:textSize="17.3sp" />
- <FrameLayout
- android:id="@+id/frameTitle"
- android:layout_width="match_parent"
+ <android.support.v7.widget.AppCompatTextView
+ android:id="@+id/txtScanning"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="15dp">
+ android:layout_below="@id/txtTitle"
+ android:layout_gravity="center"
+ android:layout_marginTop="15dp"
+ android:fontFamily="@font/flexo_light"
+ android:letterSpacing="0.07"
+ android:text="Scanning for machines on your local network..."
+ android:textSize="17.3sp" />
- <android.support.v7.widget.AppCompatTextView
- android:id="@+id/txtTitlef"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:fontFamily="@font/flexo_bold"
- android:letterSpacing="0.07"
- android:layout_gravity="center"
- android:text="Send To Machine"
- android:textSize="17.3sp" />
+ <ListView
+ android:id="@+id/listResults"
+ android:layout_marginTop="10dp"
+ android:layout_below="@id/txtScanning"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:choiceMode="none"
+ android:onItemClick="@{vm::onMachineSelected}"
+ bind:itemBinding="@{vm.machineBinding}"
+ bind:items="@{vm.machines}" />
- </FrameLayout>
</RelativeLayout>
</layout>
diff --git a/Software/DB/PPC/Tango.mdf b/Software/DB/PPC/Tango.mdf
index ebe92e6dd..d593d608a 100644
--- a/Software/DB/PPC/Tango.mdf
+++ b/Software/DB/PPC/Tango.mdf
Binary files differ
diff --git a/Software/DB/PPC/Tango_log.ldf b/Software/DB/PPC/Tango_log.ldf
index 668000e8e..5f34ab427 100644
--- a/Software/DB/PPC/Tango_log.ldf
+++ b/Software/DB/PPC/Tango_log.ldf
Binary files differ
diff --git a/Software/DB/TCC/TCC.mdf b/Software/DB/TCC/TCC.mdf
index 7aa7b838e..4a494371a 100644
--- a/Software/DB/TCC/TCC.mdf
+++ b/Software/DB/TCC/TCC.mdf
Binary files differ
diff --git a/Software/DB/TCC/TCC_log.ldf b/Software/DB/TCC/TCC_log.ldf
index f1d5d144d..aaa771c9c 100644
--- a/Software/DB/TCC/TCC_log.ldf
+++ b/Software/DB/TCC/TCC_log.ldf
Binary files differ
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
index 15ccbf0f7..110895bdd 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeScanner.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Globalization;
using System.IO.Ports;
using System.Linq;
using System.Management;
@@ -141,7 +142,7 @@ namespace Tango.Integration.ExternalBridge
ExternalBridgeUdpDiscoveryPacket packet = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(ClientRequestData);
- if (packet.Time == String.Empty || (DateTime.Now - DateTime.Parse(packet.Time)).TotalSeconds < 6)
+ if (packet.Time == String.Empty || (DateTime.Now - ParseDateTime(packet.Time)).TotalSeconds < 6)
{
if (!AvailableMachines.OfType<ExternalBridgeTcpClient>().ToList().Exists(x => x.SerialNumber == packet.SerialNumber && x.IPAddress == ClientEp.Address.ToString()))
{
@@ -174,6 +175,18 @@ namespace Tango.Integration.ExternalBridge
}
}
+ private DateTime ParseDateTime(String dateTime)
+ {
+ try
+ {
+ return DateTime.ParseExact(dateTime, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
+ }
+ catch (Exception)
+ {
+ return DateTime.Parse(dateTime);
+ }
+ }
+
/// <summary>
/// Handles the available machines component state changed event.
/// </summary>
diff --git a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
index faa538e93..90d8995b0 100644
--- a/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
+++ b/Software/Visual_Studio/Tango.Integration/ExternalBridge/ExternalBridgeService.cs
@@ -23,7 +23,7 @@ namespace Tango.Integration.ExternalBridge
{
public class ExternalBridgeService : BasicTransporter, IExternalBridgeService
{
- private UdpDiscoveryService<ExternalBridgeUdpDiscoveryPacket> _discoverySevice;
+ private UdpDiscoveryService<ExternalBridgeUdpDiscoveryPacket> _discoveryService;
private TcpServer _tcpServer;
private bool _send_app_logs;
private String _app_logs_token;
@@ -147,23 +147,23 @@ namespace Tango.Integration.ExternalBridge
/// </summary>
protected virtual void OnMachineChanged()
{
- if (_discoverySevice != null && _discoverySevice.IsStarted)
+ if (_discoveryService != null && _discoveryService.IsStarted)
{
- _discoverySevice.Stop();
+ _discoveryService.Stop();
}
- _discoverySevice = new UdpDiscoveryService<ExternalBridgeUdpDiscoveryPacket>(8888, new ExternalBridgeUdpDiscoveryPacket()
+ _discoveryService = new UdpDiscoveryService<ExternalBridgeUdpDiscoveryPacket>(8888, new ExternalBridgeUdpDiscoveryPacket()
{
SerialNumber = Machine.SerialNumber,
});
- _discoverySevice.BeforeBroadcasting -= _discoverySevice_BeforeBroadcasting;
- _discoverySevice.BeforeBroadcasting += _discoverySevice_BeforeBroadcasting;
+ _discoveryService.BeforeBroadcasting -= _discoverySevice_BeforeBroadcasting;
+ _discoveryService.BeforeBroadcasting += _discoverySevice_BeforeBroadcasting;
}
private void _discoverySevice_BeforeBroadcasting(object sender, ExternalBridgeUdpDiscoveryPacket e)
{
- e.Time = DateTime.Now.ToString();
+ e.Time = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
}
/// <summary>
@@ -232,7 +232,7 @@ namespace Tango.Integration.ExternalBridge
if (!IsStarted)
{
_tcpServer.Start();
- _discoverySevice.Start();
+ _discoveryService.Start();
IsStarted = true;
_enabled = true;
@@ -248,7 +248,7 @@ namespace Tango.Integration.ExternalBridge
if (IsStarted)
{
_tcpServer.Stop();
- _discoverySevice.Stop();
+ _discoveryService.Stop();
IsStarted = false;
IsInSession = false;