]> rtime.felk.cvut.cz Git - orte.git/blob - orte/contrib/Robot_Demo/src/org/ocera/orte/demo/Subscribers/PwrVoltageSubscribe.java
ROBOT_DEMO: move to contribs
[orte.git] / orte / contrib / Robot_Demo / src / org / ocera / orte / demo / Subscribers / PwrVoltageSubscribe.java
1 package org.ocera.orte.demo.Subscribers;
2
3 import java.util.concurrent.locks.ReentrantReadWriteLock;
4 import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
5 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
6
7 import org.ocera.orte.DomainApp;
8 import org.ocera.orte.Subscription;
9 import org.ocera.orte.SubscriptionCallback;
10 import org.ocera.orte.demo.DataTypes.PwrVoltageType;
11 import org.ocera.orte.types.MessageData;
12 import org.ocera.orte.types.NtpTime;
13 import org.ocera.orte.types.RecvInfo;
14 import org.ocera.orte.types.SubsProp;
15 import org.ocera.orte.types.ORTEConstant;
16
17 import android.os.Bundle;
18 import android.os.Handler;
19 import android.os.Message;
20
21 public class PwrVoltageSubscribe extends SubscriptionCallback{
22
23     static Handler handler;
24     
25         private Subscription sub;
26         private PwrVoltageType voltagemsg;
27         private DomainApp domainApp;
28         private SubsProp subProps;
29         
30         private boolean isCancelled = true;
31         private final ReentrantReadWriteLock controlRrwl = new ReentrantReadWriteLock(true);
32         private final ReadLock rcLock = controlRrwl.readLock();
33         private final WriteLock wcLock = controlRrwl.writeLock();
34         
35         public PwrVoltageSubscribe(DomainApp domainApp, Handler dialogHandler) {
36                 handler = dialogHandler;
37                 this.domainApp = domainApp;
38                 
39             NtpTime deadline      = new NtpTime(0,1288490189);
40             NtpTime minSeparation = new NtpTime(1);
41             
42             voltagemsg = new PwrVoltageType(domainApp, "pwr_voltage");
43                 
44             subProps = new SubsProp(voltagemsg.getTopic(),
45                                                         "pwr_voltage",                                  
46                                                         minSeparation,  
47                                                         deadline,
48                                                         ORTEConstant.IMMEDIATE,
49                                                         ORTEConstant.BEST_EFFORTS,
50                                                         0);
51         }
52         
53         public void start() {
54                 wcLock.lock();
55                 try {
56                         isCancelled = false;
57                         sub = domainApp.createSubscription(subProps, voltagemsg, this);
58                 } finally {
59                         wcLock.unlock();
60                 }
61         }
62         
63         public void cancel() {
64                 wcLock.lock();
65                 try {
66                         isCancelled = true;
67                         sub.destroy();
68                 } finally {
69                         wcLock.unlock();
70                 }
71         }
72         
73         public boolean isCancelled() {
74                 rcLock.lock();
75                 try {
76                         return isCancelled;
77                 } finally {
78                         rcLock.unlock();
79                 }
80         }
81         
82     public void callback(RecvInfo info, MessageData msg) {
83       if (info.getRecvStatus() == ORTEConstant.NEW_DATA) {
84         Message message = handler.obtainMessage();
85         Bundle bundle = new Bundle();
86
87         bundle.putDoubleArray("voltages", ((PwrVoltageType)msg).voltage.clone());
88         message.setData(bundle);
89         handler.sendMessage(message);
90       }
91     }
92 }