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