Note: My net connection so bad that I have to use basic html version
of gmail. For a well formatted version of the report, please refer:
http://blog.praveenkumar.co.in/2014/05/beagle-gsoc-progress-tracking/
Week 12 report:
Accomplished:
-- Checkout the following video demos below
-- Bone: Driver now fully working on bone
-- Bone: Tested with starting an xsession on framebuffer created by driver
-- Bone: Tested with various applications in the xsession
-- Framebuffer: Removed all redundant operations in render functions –
No more URB related operations in hline_render
-- Android: Now uses full resolution image to show the frames. Fixed
all force closes caused when using a full resolution image.
-- Android: Decreased workload on the USB reader thread by shifting
frame updating to an independent runner
Issues:
-- Bone: Even after disconnecting the device and stopping the
xsession, there are continuous calls to damage handle. This is
preventing the unloading of the udlfb module from kernel. rmmode gives
module busy error. However, the driver works on reattaching device at
this stage.
Plans for next week:
-- Framebuffer: Will integrate compression. Standalone tests were
already done however integrating into driver requires some corner case
considerations.
-- Framebuffer: Code cleanup. There are many unused functions and
operations which came with udlfb but were replaced, commented out or
never reached
-- Android: Code cleanup. Reorganise code to decrease workload in USB
reader thread with seperate threads for decompress and UI updates.
Demo video links.
-- First demo - without vertical sync and not full resolution:
https://www.youtube.com/watch?v=ukQJ9EKEcm4
-- Final demo - with vertical sync and full resolution :
https://www.youtube.com/watch?v=drMWtB0ipd0
On 7/30/14, Praveen Kumar Pendyala <
pravee...@gmail.com> wrote:
> *Week 11 report:*
>
> *Accomplished:*
>
> - Framebuffer: Implemented a compression algorithm using Run Length
> Encoding. This is really efficient, Time: O(N) without using any
> additional
> buffers
> - Framebuffer: Tested the RLE on a sample frame. The RLE encoding apoted
> gave reductions in size from 1.6 MB -> 15.7 KB
> - Framebuffer: Documented the RLE scheme. Special cases aren't
> documented yet.
> - Bone: Fixed URB allocation issue while testing on BB
> - Bone: Tested deferred io support on bone. Ignoring damage handle calls
> with resolution besides 1024x768
> - Bone: The setup frame in now working on bone. After the setup, endless
> calls of image_blip are preventing xinit call. More in Issues
> - Bone: Was able to reach a closure (without endless calls) in probe
> function and start xserver. More in Issues
> - Demo: A demo video of the driver with auto updation of frames on
> - Bone: Even after ignoring data transmission for the damage handle
> calls (besides the first frame), the calls are made continously and
> because
> of this, call to start xserver on framebuffer isn't working.
> - Bone: During tests, I once reached the end of initial setup and
> started the xserver on fb. This rendered the 1st frame from fb to the
> device but later the continious calls to damage_handle started and
> xserver
> failed to send the 2nd frame to device and stopped.
>
>
> Plans for next week:
>
> - Fixing the issue with endless calls to damage_handle (actually
> image_blip). This should mostly complete the testing of driver on bone.
> - Integrating the compression implemented into the driver and minor
> modifications to compression for corner cases.
> - Completing the documentation on compression corner cases.
> - Implementation and integration of rle decoder in java.
> - Testing the compression integrated driver on Bone.
>> *Week 10 report*
>>
>> *Accomplished:*
>>
>>
>> - Framebuffer: Raw frame data is now sent to Android. Successfully
>> removed hline_trim and hline_compress functions without any issues.
>> Removed
>> udlfb urbs and replaced with a new usb transfer code. The new code can
>> transfer upto 16384 Bytes at a time compared to the previous urb
>> method
>> which does 256 Bytes at a time. We are however, transferring only one
>> page
>> (4096 Bytes) at a time after setup. Will improve the size/transfer in
>> future.
>> - Android: Tested auto updating of setup frame and the xserver frames
>> with a button click on Android.
>> - Android: Implemented a Frame class to hold raw frame buffer data and
>> UI updates are done with the data in this frame. New frame from PC
>> will
>> override the current frame data. This updated frame data can be pushed
>> to
>> the ImageView with a button click currently.
>> - BBB: Installed the required packages on BBB - fbcon, X11, fbdev and
>> added framebuffer support. Partially tested the driver. (in issues
>> about a
>> full testing)
>>
>> Issues:
>>
>> - Framebuffer: The random page fault is now more serious with more
>> frequent occurrences now. Strange thing is that there is no code
>> changes
>> from the version in which the it's frequency was very rare.
>> - Framebuffer: Increasing the work load after each frame reception on
>> Android seems to be triggering the above issue.
>> - Android + Framebuffer: Need to encode the page information along
>> with each page transferred for proper frame updates in future and also
>> a
>> decoding scheme on Android. Currently the new page data is filled in a
>> Bytebuffer of framelength and on overflow, it is being filled
>> from beginning. This won't work when the page faults are in the middle
>> of
>> the frames.
>> - BBB: The data sent per transfer when testing the driver on BBB is
>> just 16 Bytes! Possibly the reason for xinit failure.
>>
>>
>> Plans for next week:
>>
>> - Fixing the paging issue and then we shall have a continuously
>> updating frames on Android.
>> - Tweaking the Bytebuffer size being used for a Frame. A higher or
>> lower value is triggering an insufficient bytes to copy pixels error
>> on
>> Android.
>> - Once the above two are done, will be encoding damaged pages
>> information along with the page data.
>> - Testing in BBB and resolving the write buffer as just 16 Bytes
>> issue.
>> - Once these issues are resolved, we shall be having a driver that can
>> run a xserver and update frames on Android automatically. The next
>> work
>> would be on compression.
>>
>> This is a screenshot (attached) of the auto updated frame from the raw
>> frame data sent from driver. I tried recording a video only to find out
>> that the video was corrupted :/ Will make one for next week report.
>>
>>
>> This report is also available with updates through the week at,
>>
http://blog.praveenkumar.co.in/2014/05/beagle-gsoc-progress-tracking.html
>>
>>
>> On Wed, Jul 16, 2014 at 9:30 PM, Praveen Kumar Pendyala <
>>
pravee...@gmail.com> wrote:
>>
>>> *Week 9 report:*
>>>
>>> *Accomplished:*
>>>
>>>
>>> - Framebuffer: Understanding the way udlfb - kernel framebuffer,
>>> works.
>>> - Framebuffer: Removed some of the displayLink specific commands sent
>>> along with the frame data by the udlfb driver and tested working.
>>> - Framebuffer: (Work-in-progress), Removing the issues when
>>> commenting out the compress and trim functions in the driver.
>>> - Framebuffer: Figured out the reason for BUG: Soft lockup as shown
>>> - Android: Since getting raw data from driver to device is having
>>> some issues, I obtained framebuffer data on PC, transferred it to
>>> device
>>> and completed the raw frame processing on Android. Images attached.
>>>
>>>
>>> Issues:
>>>
>>>
>>> - Framebuffer: BUG: Soft lockup - The reason is because the program
>>> gets stuck in an infinite while loop on removing the compress
>>> function.
>>> - Framebuffer: When the hline_trim function is removed kernel paging
>>> error occurs. Tried getting the prefetch calls out but didn't help
>>> - Framebuffer: The BPP (Bits per pixel) value is to be found out. The
>>> raw data collected on linux is 24bpp (RGB888) but however, looking at
>>> the
>>> udlfb code and call backs, it looks like the driver is using 16bpp
>>> (RGB565). Not a major issue.
>>>
>>>
>>>
>>> Plans for next week:
>>>
>>>
>>> - Framebuffer: Resolve the framebuffer issues.
>>> - Framebuffer: Send raw data onto Android and see how it is rendered
>>> with the existing code for RGB565 - bitmap decoding.
>>> - BeagleBone: Test the driver on a BBB. So far, all testing and
>>>> *Week 8 report:*
>>>>
>>>>
>>>> *Accomplished:*
>>>>
>>>> - Framebuffer: Attempted to start xserver with DisplayLink userspace
>>>> driver and udlfb (issues)
>>>> - Framebuffer: Attempted to start xserver with a couple of other
>>>> methods listed below, (issues). Few more that I lost track of, they
>>>> didn't
>>>> work though.
>>>> -
>>>>
>>>>
http://www.thinkplexx.com/learn/howto/linux/system/start-and-use-xfdb-enable-x-server-on-headless-system
>>>> -
https://github.com/notro/fbtft/wiki/Framebuffer-use
>>>> - Framebuffer: Success with starting an xserver on the framebuffer
>>>> added by udlfb. Details are updated on git README in udlfb repo.
>>>> fbgrab or
>>>> fbdump read the expected screen in the framebuffer. Shown in the
>>>> fbgrab
>>>> image attached.
>>>> - Android: Changes to the way data received is displayed on Android.
>>>> The changes are how the TextView data is built without resulting in a
>>>> log
>>>> sequence of Garbage collections.
>>>> - Framebuffer: Attempted to use core keyboard as input device for
>>>> framebuffer (issues)
>>>>
>>>>
>>>>
>>>> *Issues:*
>>>>
>>>> - Framebuffer: Displaylink userspace driver with udlfb is giving
>>>> segmentation faults. Fixed the EDID segmentation faults though. This
>>>> has
>>>> become hard to debug as the segmentation fault crashes my PC and the
>>>> log
>>>> couldn't be saved. Besides, even with the log files, tracing the root
>>>> cause
>>>> for the fault is hard to detect as the logs only show Hexadecimal
>>>> address
>>>> in the trace and not the function call or the module that caused it.
>>>> Alternative found. Can be ignored for now.
>>>> - Framebuffer: Other methods either resulted in a crash or when the
>>>> x server starts, it doesn't start on the right framebuffer probably.
>>>> Because there is data receiption at the device end, no new kernel
>>>> logs on
>>>> starting xserver on fb. Also, the framebuffer fbgrab/fbdump doesn't
>>>> show
>>>> the expected frame (only a green screen). Alternative found. Can be
>>>> ignored.
>>>> - Framebuffer: Framebuffer data encoding has to be figured out. The
>>>> raw dumps on the Android device show negative numbers also. Also
>>>> format of
>>>> the frame sent by the framebuffer has to found out. Mostly PPM.
>>>> - Framebuffer: Framebuffer uses compression before sending the data
>>>> to the Android device. The algorithm has to be understood and the
>>>> respective counter part to decompress has be done on the Android
>>>> side.
>>>> - Inputdevice: When the core keyboard is added as inputdevice the
>>>> xserver start command gave errors about the inputdevice entry. On
>>>> commenting this entry, the xserver starts.
>>>>
>>>>
>>>>
>>>> Plans for next week:
>>>>
>>>> - Framebuffer: Figure out the encoding of the data. Since negative
>>>> values are also received in Java code.
>>>> - Framebuffer: Understanding the compression used in framebuffer
>>>> (things would be simple if it is RLE ) and writing the counterpart in
>>>> Java
>>>> for decompression. Alternatively compression may be bypassed for
>>>> initial
>>>> stages.
>>>> - Android: Conversion of the framebuffer frame data into bitmap that
>>>> can be showed in a ImageView on Android.
>>>> - Android: Decompression part in Java if it is not bypassed right
>>>> now.
>>>> - Inputdevice: Will try to fix the issue with using core keyboard as