OsciPrime an Open Source Android Oscilloscope

Today we are releasing our first draft of the new Android Oscilloscope called OsciPrime.
We added a bunch of new features such as:

  • Trigger Offset
  • Signal Offset
  • Cursors for measurement
  • Performance Improvements
  • Running on Beagleboard with Rowboat Gingerbread

The Application is going to run on your phone as well. Although at the moment it requires you be able to record mono at 44100 [Hz] to use Audio.
You might also have to adjust measurement units in the source code.

We packed also libusb if you want to deploy the app on the Beagleboard directly into the APK.

Enjoy ๐Ÿ™‚

Download the Source Code

(hint: You can open the menu using the menu button in the application, press once more to close again)

21 Replies to “OsciPrime an Open Source Android Oscilloscope”

  1. Does this only work on tablets or ver 3.x? Or could I get it to work on my Droid X ver 2.2.1?

  2. Great work on this project. Your site has been a excellent resource and has saved me considerable amounts of time. Thanks for open-sourcing everything, it’s really beneficial for the community. I’m attempting to use DSPlink with the Android NDK, just wondering if you’ve gone down that path with success…

    PS. The Osciprime app works well on the Galaxy Tab 10.1.

  3. @Dan Lyden
    Thank you so much! There is still a lot of work to do, especially the UI sometimes behaves not as wanted… We have not used DSPLink with the Osci, but played a bit around in our first project ๐Ÿ™‚

    Note: For the Tab we increased the NUM_POINTS_PER_PLOT constant in the OPC class… since we have more pixels compared to the phone ๐Ÿ™‚


  4. Hello ,

    I have android 3.1 acer iconia Host tab device. i have used OsciPrime application code for getting data from external USB device when i attached external usb device to my android tab device. here modify some code like vendor id and product id i have success in open connection of external USB device. here i paste some code of read data from queue ….

    if(!mRunning || mPaused){
    l(“Returning from Sampling Thread”);
    for(int i = 0; i < NUM_BUFFERS; i++){
    for(int j = 0; j < NUM_SUBBUFFERS; j++){
    UsbRequest r = mConnection.requestWait();
    r.queue(mByteBuffers[i][j], MAX_BUFFERSIZE);
    t = System.currentTimeMillis();
    split(mBigBuffer[i], NUM_SUBBUFFERS*MAX_BUFFERSIZE, mChannelLeft, mChannelRight);
    callback(mChannelLeft, mChannelRight);
    if(dbgcnt % 256 == 0){
    l("Processing took: "+(System.currentTimeMillis()-t)+" [ms]");

    in my case i will receive mByteBuffers every time zero value. only first and second position get value and another buffer all value is 0.
    i have external device scanner in which FDTI FT232BM chip
    and It is a USB device that emulates a RS232 interface it appears as a RS232 port to talk to the
    Atmel AT90LS8535 processor.

    Please suggest me any problem in my external USB device or any step missing me….

    1. Hello there,

      maybe you need to also send IN packets to the IN Endpoint after sending your OUT packets…

      Better try the synchronous method to figure out how the protocol works

      connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT);

      You should focus on finding information about how the FT232 Protocol works with those bulk Endpoints. I suggest that you browse the internet and if you can’t find good answers that you look at the kernel module of the ft232 driver…

  5. I was wondering if we can use a bluetooth module to send in data via the audio channel. Well I am very new to Android and Electronics too. So even if you can give me some guidance I will put in all my efforts to make it work . What do you think ?

    1. Hi Akshat

      Should be no problem at all if you are using a Bluetooth microphone. Actually since we are taking Audio from the default mic it should work out of the box, yet I have never tested it.

      On Line 117 of the AudioAdapter class you can adjust the audio source to your requirements:

      AudioRecord rec = new AudioRecord(

      Hope that helps ๐Ÿ™‚


  6. Hi,
    I am trying to compile your source code in Eclipse IDE.
    I get errors when I try to compile. Error says “Unable to resolve target ‘android-9′”
    I am trying to run this application on a Samsung Galaxy mini.
    Another error in
    src -> ch.serverbox.android.osciprime.ui -> VerticalSeekBarOverlay.java

    line 35 – It says “The hierarchy of the type VerticalSeekBarOverlay is inconsistent”

    Please help me to fix this error.

    Thanks in advance,


    1. Hi Hasala

      You should update your ADT tool and then download the Android Platform for API9. This should fix your problems.


  7. Does anyone actually have specs on the Android phone ADCs? Are they Sigma-Delta or what exactly? This is pretty important information for things like Oscope use when using the built in “mic” port. I cant seem to find any real datasheets that list this information from Google or any OEM.

  8. “You might also have to adjust measurement units in the source code” Awesome! I’ll be looking into this soon. Gotta do some simple diagnostics in my car and this looks like the right tool for the job. On the other hand, xoscope with a laptop might be more extensive…

  9. Hi,
    when i import the project i get “No projects where found” error on eclipse and
    in my app i want to show oscilloscope while recording How to solve it? please help me.

  10. Thanks, i have tried long time to get Oscilloscope part from your code. actually my need is i need show Oscilloscope when record audio. i did the audio recording part with the help of Audio Recorder. Now i want to integrate oscilloscope part(code). How to get oscilloscope code part from your project please help me. thanks in advance.

    1. Hi Murali,

      To use the “oscilliscope part” I recommend, that you take our project as a starting point, it already has the audio source built in ๐Ÿ™‚
      Just hit the source code link in the post to get started.

      all the best

  11. Hi Manuel,
    I am also developing an application that connect to our custom USB CDC ACM device using the libusb API in Android. The communication did start using the provided functions. However, after about hundred bulk in transfer, the connection lost. And after checking with USB analyzer, it was found there exist many URB_FUNCTION_ABORT_PIPE request and status cancel error. Have you got this problem or how you solve it? It would be really thankful if any one can solve this as I have be sucked in this error for long time.

Leave a Reply

Your email address will not be published. Required fields are marked *