Giter VIP home page Giter VIP logo

grcontrolport's Introduction

This is the basic Android library to build ControlPort clients into
your Android application.

Currently, ControlPort runs using the Thrift backend. We need Thrift
0.9.3 for this to apply the 'generated_annotations=suppress' option to
avoid issues with Android javax classes. As of writing this, 0.9.3 is
not yet out, so just use the master branch of the Thrift git repo.

To get and compile the GNU Radio Thrift interface file:

$ cd GrControlPort/library/src/main/java
$ wget https://raw.githubusercontent.com/gnuradio/gnuradio/master/gnuradio-runtime/lib/controlport/thrift/gnuradio.thrift
$ thrift -out . --gen java:android,generated_annotations=suppress gnuradio.thrift

This places the required Java interface classes to ControlPort into
org/gnuradio/controlport for use by the rest of the library.

Now build the library and you can integrate this into your own
ControlPort-based application.


* Example Usage

To make and use a ControlPort client in your Java app, you need to
have this library available, make the radio client connection, and
then perform the ControlPort operations on it.

With GrControlPort pulled down into your local machine, you need to
add this as an external library to your new ControlPort client
app. In Android Studio, go to "File -> New -> Import Module" and
navigate to the location of GrControlPort. Bring this in as
"library." Now go to "File -> Project Structure", click on "app", to
to the Dependencies tab, click the + button, select Module
Dependencies, and chose "library."


The following example application shows how to access the various
getters and setters provided for by ControlPort. For a given
flowgraph, the block names (e.g., "throttle0") and the name of the
application (e.g., "Top Block") will change, so you'll need to know
what the interface points are to know how to connect to their
interfaces.

<code>
public class App {

    public static void main(String [] args) {
        try {
            String hostname = "10.0.0.1";
            Integer portnum = 9090;
            RPCConnection conn = new RPCConnectionThrift(hostname, portnum);

            List<String> knobs = new ArrayList<String>();

            // Get all knobs -- pass an empty list
            //Map<String, RPCConnection.KnobInfo> x = conn.getKnobs(knobs);

            // Get exact knob
            //knobs.add("throttle0::work time");
            //Map<String, RPCConnection.KnobInfo> x = conn.getKnobs(knobs);

            // Get knob based on a regular expression
            knobs.add(".*::work time");
            Map<String, RPCConnection.KnobInfo> x = conn.getRe(knobs);

            for (Map.Entry<String, RPCConnection.KnobInfo> e : x.entrySet()) {
                System.out.println("X: " + e.getValue().key + ", " + e.getValue().value
                                   + " (" + e.getValue().ktype + ")");
            }

            // Set a knob that takes a specific parameter type.
            // The throttle block exposes the sample_rate interface
            // that takes in a double, so this changes the throttle's
            // rate to 100 ksps.
            RPCConnection.KnobInfo thr_sr =
                new RPCConnection.KnobInfo("throttle0::sample_rate", 100e3,
                                           BaseTypes.DOUBLE);
            Map<String, RPCConnection.KnobInfo> y =
                new HashMap<String, RPCConnection.KnobInfo>();
            y.put("throttle0::sample_rate", thr_sr);
            conn.setKnobs(y);

            // Set a knob that's just a toggle. This type of setter
            // does not require a KnobInfo defined, just the name of
            // the setter to trigger.
            // In this case, it locks and stops the flowgraph. Calling
            // "Top Block::unlock" would reset and restart the
            // flowgraph running.
            List<RPCConnection.KnobInfo> z = new ArrayList<RPCConnection.KnobInfo>();
            z.add(new RPCConnection.KnobInfo("Top Block::lock"));
            z.add(new RPCConnection.KnobInfo("Top Block::stop"));
            conn.setKnobs(z);

            //List<RPCConnection.KnobInfo> z = new ArrayList<RPCConnection.KnobInfo>();
            //z.add(new RPCConnection.KnobInfo("Top Block::unlock"));
            //conn.setKnobs(z);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
<endcode>

grcontrolport's People

Contributors

trondeau avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.