About you What is your name? • Kumar Abhishek

About you
•
What is your name?
Kumar Abhishek
•
What is your email address?
<>
•
What is your eLinux wiki username?
<>
What is your IRC nickname?
<>
•
•
What is the name of your School and in what country?
Indian Institute of Technology, Kharagpur; India
•
What is your primary language? (We have mentors who speak multiple languages and can
match you with one of them if you'd prefer.)
English
•
Where are you located, and what hours do you tend to work? (We also try to match mentors by
general time zone if possible) Have you participated in an open-source project before? If so,
please send us URLs to your profile pages for those projects, or some other demonstration of
the work that you have done in open-source. If not, why do you want to work on an opensource project this summer?
I have contributed display drivers and touchscreen calibration features to the ChibiOS/GFX
project (which is now known as uGFX), as mentioned at: http://ugfx.org/community and on my
GitHub activity log: http://github.com/abhishek-kakkar
About the Project
•
What is the name of your project?
“BeagleLogic: A logic analyser / visualiser tool using the BeagleBone Black”
•
Describe your project in 10-20 sentences. What are you making? For whom are you making it,
and why do they need it? What technologies (programming languages, etc.) will you be using?
The project is an implementation of a standalone logic analyzer using the Programmable RealTime Unit (PRU) on the BeagleBone Black intended to be used as an on-board learning and
diagnostic tool, bundled along with the Bone101 web-based starter interface of the
BeagleBone Black. The goal is not to make an expensive or professional logic analyzer, but a
tool that will be widely available (as widely as the BeagleBone Black) and which can help
tinkerers do things more effectively, concentrate on building their application while still being
able to debug their logic connections and devices in a time and cost-effective way. It will carry a
web-based client user interface which would make it universally accessible from PCs,
smartphones and tablets alike.
The project is intended to be used by a very wide audience. There are many logic analyzers
available at the same price point as the BeagleBone Black, but they are a mostly USB
dataloggers with everything happening on the PC side. I am sure that a logic analyzer built with
a BeagleBone Black would offer the best blend of price, features and performance at its
price point, as it has both the sampling hardware (the 200 MHz PRU) and a 1 GHz ARM CortexA8 on board which can be used to efficiently process the data onboard.
The specifications to begin with are 50 MHz and 8 channels; avenues for real-time sampling,
expanding to 16 channels and increasing the sample rate will be considered with my (potential)
mentors; if it might be possible to fit them in the timeline, else will be kept as stretch (postGSoC) project goal. Edge-based triggering will be present, pattern based triggering is planned
[under discussion].
The project will consist of:
• The core running on the PRU, responsible for trigger and data capture - PRU Assembly
• libsigrok, with custom bindings for the PRU core. [The skeleton driver has already been
•
added into libsigrok, see my fork at: https://github.com/abhishek-kakkar/libsigrok] - C
The back-end program using libsigrok and libsigrok-decode to retrieve and process the
logic data, and then pass it on to the web client using node.js; it will receive UI inputs for
trigger and sample rate configuration.
• The web-based client, built using rich user interface components. WaveDrom will be
used to render the timing diagram data received from the back-end.
•
What is the timeline for development of your project? The Summer of Code work period is
about 11 weeks long; tell us what you will be working on each week.
The project is demanding, and hence for successful execution, I have started working right
away, ahead of the 11 weeks timeline. I will be sharing updates about my progress on various
components post the application deadline here - http://www.theembeddedkitchen.net/gsoc2014-beaglelogic/.
My plan of action will be to get the core and libsigrok bindings working before the coding
period begins. The community bonding period will be spent in discussing possible
improvements to the core, running iterations on the user interface of the front-end and looking
at possible design iterations; and coding will begin directly with the backend. I have reported
success with adding a "bbb_pru" driver skeleton into my fork of libsigrok, and have been able to
successfully compile and install it on my BeagleBone Black.
The work of each week will blend into the work of the next week, but the task defined for each
week is the minimum that has to be achieved during that period.
Been Done So Far / In progress:
• Successful Running of a Proof-of-concept demonstration of an example –
http://linux.thaj.net63.net/2014/01/logic-analyzer-with-your-beaglebone.htm - this will serve as
the core of the project and will be improved upon with support from my mentors (triggering
based on patterns in addition to edges) in the Community Bonding period [Done: March 14th]
•
•
•
•
Setup of libsigrok build system on the BBB, and successful build. Committed driver skeleton
[Done: March 17th/18th]
Going through PRU assembly, the PRU subsystem from the reference manual, and the PRU
demos available (ongoing, to be completed by 23rd March).
A sample webpage using BoneScript to poll a few pins and then use WaveDrom to draw the
timing diagram (to be done by 23rd March).
Writing the bindings of libsigrok with bbb_pru driver using the already existing core (mentioned
in the first point above) and testing with sigrok-cli (to be done in the coming 2 weeks)
Till Week -1.5 (May 1 – May 9) [Community Bonding Period]
• Brainstorming on the development of the "View" of the front-end. Looking at changes to the
WaveDrom engine as it has limitations which prevent zooming out of a waveform above a
certain level. Also look on the best ways of implementation of addition of markers. A reference
we might use for the UI design is of an online VCD viewer - http://www.edaplayground.com/w/
•
Deliberation on the back-end daemon architecture, and preparation of a blueprint in code.
Week -1.5 -> 1 - Finalisation of the PRU Core [May 10 - May 25]
• Discussion, improvements and finalisation of the PRU+libsigrok core
• Increase in sample rate beyond 50 MHz and number of channels to 16 (if possible),
working together with the mentors
• Looking into possibilities of real-time sampling [its implementation to be looked at postGSoC]
• Fixing bugs in the core and tests
• Testing with sigrok-cli : Once the library passes these stages, sigrok-cli to be used to
verify that everything works correctly, though the aim is to develop a web-based client to
be added to Bone101 as the PRU LA input pins are shared with the HDMI framer, hence
display cannot be used with the PRU [The PRU pins may be remapped but they would
disable one of internal eMMC or external SD]
•
Submission of the completed driver patch to the sigrok Git repository
Week 2-3-4 - Backend development [May 26 - June 15]
•
•
•
Forking sigrok-cli and building over it a daemon that will communicate with the client.
Possible approach: C application <=> node.js webserver <=> web client (via Socket.IO) . Interface
between C and webserver has not been finalized. Suggested pathways: via libffi (for native
library invocation via node.js), tmpfs or sockets.
Define the overall data packet format between BBB and the web client. [WaveDrom accepts
JSON input, node.js server to handle this conversion]
•
Implement the backend [Week 2 - deliberation (architecture related) & Coding, Week 3 & 4 coding]
•
The backend is expected to be ready by the end of Week 4. Finishing touches (if required) will be
given Week 9.
Week 5 - Commence development of the front-end [June 16 - June 22]
• Creation of the web client UI using Bootstrap / jQuery and WaveDrom; add basic functionality
like start, stop, edge triggers.
• Reference Mockup of the user interface [Balsamiq]:
•
The Skeleton client should be able to communicate with the skeleton back-end built in week 2-3,
and be able to draw from a JSON sent over Socket.IO
Pre-mid-term evaluation [June 23 - June 25]
• Prepare the front-end so as to trigger on a particular edge, record a waveform and graph it onto
the web client.
• This would be the midterm evaluation checkpoint for the project.
•
Once this is accomplished, moving on to the tasks of Week 6 and further implement the frontend features.
Week 6-7-8-9 - Implementation of advanced features on web client; Finalization [June 26 - July 27]
• Add functionality for pin labeling and selection [say, only two out of 8 pins are used, hence just
display two pins with appropriate labels].
• Add UI for "trigger on pattern"
• Add support for display of text for decoded protocols. To achieve this using WaveDrom, the
source JSON that is sent to the client, and hence the back end will need to be tweaked.
•
Implement pan-zoom-scroll support.
•
Save / load / download to host support
•
Optional (if time permits, otherwise Post-GSoC): Support for markers
Week 10 and 11 - Wrap - up, Documentation [July 28 - August 10th]
• Documentation on the usage of the front-end, specifically
• Integrating the web client features into Bone101
•
Putting all the work in a package that can be installed via the package manager [for Debian and
Angstrom]; create a tarball for others.
•
Conclude with a YouTube video featuring the tool and explaining the basic functionality and
usage of the analyser
•
Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the
timeline you have described. This is usually where people describe their past experiences,
credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work
or other resources as relevant. Provide references such as professors who know your work if
you like. Please feel encouraged to visit our IRC channels, #beagle and #beagle-gsoc on
irc.freenode.net, and ask for help.
I come from a background in C programming in embedded systems with microcontrollers like
the STM32, AVR and the 8051. My methodology of teaching myself the various concepts of
embedded systems, programming, and electronics has been to set myself certain goals every
summer or winter break (for example, to learn about UI design, build a system with an LCD and
few buttons, and then write code to design a simple user interface), and then achieve and
exceed them. I have learnt most of the concepts on my own, and have debugged circuits and
code without any outside support, and with limited equipment. I have had a very early start in
the world of computer programming and electronics stuff, and that makes it advantageous as I
can learn new things and master them quickly enough. My profile can be seen here.
This summer break at school, [from May to mid-July] I will be completely free of any academic
or work commitments. Hence I will be able to dedicate ample time each day (8- 10 hours) for
the code. I am looking forward to channelize my time and the resources at my disposal to build
something carrying immense value to the entire BeagleBoard community
I have a BeagleBone Black, and I have been setting up the testing environment, and also got
leads as I have previously mentioned (being able to run PRU-based applications, setting up and
building libsigrok on the BBB). In the coming 2-3 weeks, I expect to be thorough with all the
technologies and libraries that will be used to implement the tool; thus allowing me to focus on
the implementation and integration during the GSoC period.
This is indeed a challenging project, and the deadlines are quite stringent. I intend to meet all
the deadlines and complete things by the assigned date so that things are able to go on
smoothly.
You and the community
•
If your project is successfully completed, what will its impact be on the BeagleBoard.org
community? Consider who will use it and how it will save them effort. Give 3 answers, each 1-3
paragraphs in length. The first one should be yours. The other two should be answers received
from feedback of members of the BeagleBoard.org community, at least one of whom should be
a BeagleBoard.org GSoC mentor. Provide email contact information for non-GSoC mentors.
My answer:
The goal of the project (as a whole, beyond the GSoC timeline) is to become a tool bundled in
the default system image on every BeagleBone Black. Implementation of this tool will add
significant value to the BeagleBone Black, which now apart from being used in projects will be
able be used as a debugging tool for intermediate users and a learning tool for beginners.
Users will be able to use it for debugging their circuits right away after installing our software on
it. Successful completion of this project will also attract more users to the BeagleBone Black.
Beginners may use our project to visualise actual hardware communication between the BBB
and the peripherals they are using by connecting their SPI, I2C or other ports to the PRU inputs
of the BeagleBone Black.
With inputs from Hunyue Yau [ds2] :
The value of such a tool will be to help create a self-contained educational lab that will go
from blinking an LED to more complex protocols like SPI/I2C and beyond. Also, the project can
provide remote debugging capabilities due to the onboard networking features of the BBB.
Other low cost logic analyzers built around FPGAs would require an additional processor to
reduce the data into a network capable format. The BeagleBone Black can leverage its
networking and processing capabilities, combined with the two 200 MHz PRUs to provide a
network-enabled instrumentation platform at the same price point as a competing FPGA based
product.
With inputs from Pantelis Antoniou [panto]:
Upon successful conclusion of this project the community will also have access to an
established and documented method of using the PRU (or any kind of heterogenous)
architecture on a very high speed capture problem.
With inputs from Jason Kridner [jkridner]:
If completed, such a system would enable BeagleBone developers to learn all about the signals
they are generating, without needing to pay for any extra equipment. Visualization is an
absolutely critical tool for building an intuitive understanding and this project has a tremendous
potential for enabling both new and experienced users to visualize signals in an easier way than
ever.
•
What will you do if you get stuck on your project and your mentor isn't around?
Since the project involves multiple aspects, and it is unlikely that I would get stuck on all aspects
at once, I will focus my time building the other parts of the project, or looking for possible
improvements or touch-ups on previously written code when I get stuck on one of the aspects
while I wait for my mentor to be back.
As I have mentioned previously, I have spent my summer and winter breaks doing projects on
topics I found interesting, but had little knowledge to start with, and by experimentation and
reading through the available documentation, I have been able to understand the concepts
better, sort out problems, debug, and successfully able to run my applications with almost nil
external support. Hence I feel I will be able to handle things and report progress in the best
possible way till my mentor is back.
Miscellaneous
•
Please submit to the beagleboard-gsoc mailing list a statically-linked ARM Linux "hello world"
style executable that prints out your name and the date. Please keep it under 1MB. Provide a
link here to that executable as archived on the mailing list and provide any instructions required
for invoking it. You are welcome to test it on an ARM QEMU environment. Please feel free to
visit our IRC channels, #beagle and #beagle-gsoc on irc.freenode.net, and ask for help.
Done. Please see the thread on the list, and pull request #23 on github.com/jkridner/gsocapplication .
•
Is there anything else we should have asked you?
•
None in particular.