Tag Archives: efl

Introducing EWS to help EFL on FB and PS3

Lots of systems do not support multi-window on their own, consider standard Linux Frame Buffer (FB) or the PlayStation3. This makes it cumbersome as you’re restricted to a single window,  likely you’ll have to rewrite your apps to behave well in this scenario.

Traditionally this problem is worked around by toolkits like Qt that provides QWS, a great help for developers. Considering QWS I decided to help our PS3 friends with something similar which I shamelessly called EWS (Ecore + Evas Single Process Windowing System).

Ecore and Evas already made 99% of this work: they abstract rendering, abstract windowing and so on. There is even support for “inlined windows” in Elementary, these are rendered to buffers that are visible inside other windows. Actually the first version of EWS was a 30min hack in Elementary called “eland” (making fun of wayland). But as not everyone would use Elementary it was better to move it lower in the stack: Ecore_Evas.

Ecore_Evas is a glue layer between Ecore and Evas that takes care to configure actual windows and setup Evas on them, to capture events from various sources and feed them to canvas, etc. If you cope with its API you’ll work with most EFL libraries and applications out-of-the-box.

Ecore_Evas_EWS was created as a new engine that builds on top of others. It will use a backing-store engine like X11, FB, DirectFB, WinCE or PS3 to create an internal Ecore_Evas. Every new window created with ecore_evas_ews_new() is rendered to an Evas using the buffer engine and its pixels end as the image source in the backing-store engine, displaying it. This is very similar to existing ecore_evas_buffer feature ecore_evas_object_image_new(), however it will handle more things automatically.

Among the new features are events to allow window management. Things like “window created”, “window moved” and “window resized” are placed in the main loop for interested peers, they may handle these and decorate the windows, offer window management (close, maximize, …). To exemplify that I’ve added support in Elementary with basic controls such as move, maximize, restore and close. Unfortunately it looks  ugly like hell and then I’m not posting any screenshot or screencast ;-) Let’s wait for people doing themes to make a great work.

The work is far from complete, bugs remain,  optimizations could be applied for OpenGL… if you consider the rules “20/80″, 80% of the code was written in 20% of the time, now we’ll take 80% to make it work for sure :-D  But it’s not bad considering it took me 2 days,  1421 lines in ecore_evas_ews.c, 543 in elu_ews_wm.c and 317 in ews.edc…

That’s why I keep saying that EFL is an amazing technology to build products. It runs fast, it’s slick and it does not get in the way. Give it a try! :-)

EFL portability shines: native PS3 support!

While most projects praises portability with fancy things like “gchar” (Gtk), fancy names like “LightHouse” (Qt) or completely new abstraction concepts, The Enlightenment Project always choose a simple approach to use POSIX and fill the gaps as required. This requires much less work and yields the same or better results, as we could see in the past and now being the first toolkit to be ported to PlayStation3 (native, no Linux)!

As announced by the the developer, KaKaRoTo, in our official news the port was done on top of our existing SDL backend in a couple of days, then being migrated to native PlayStation3 using unofficial SDK PSL1GHT for jailbroken systems. There is still no hardware acceleration, yet it runs fine a physics game at Full HD.

Right now we have port to MacOS and Windows, including WinCE. Given our scarce resources we do not lag behind Qt or Gtk in portability front. Basically what we have is one brave developer called Vincent Torri that is a Math professor and do it on his spare time!

Vincent could do it by keeping our approach: use POSIX and fill the gaps. He created “Evil”, a library to provide missing functions to Windows. Kakaroto then created “Escape” to do the same for PSL1GHT. Seems this approach works fine ;-)

MeeGo, Nokia… light at the end?

Hello people, as most of open source lovers I’m still trying to digest Nokia’s move to WP7. But although many are worried about the future of Meego or the Linux on mobiles, I’m quite confident.

First, as said before MeeGo is not just about Nokia or phones, it’s also being pushed as In-Vehicle Infotainment (IVI) and is already adopted by BMW, which you can see daily contributions on projects such as ConnMan. So let’s not assume it is the end of the world given Nokia’s action.

Second, although Android and WebOS are indeed Linux since they use this kernel, we often want more traditional user-space stack, like MeeGo would be. For those,  don’t loose hope! Today (Feb14, 2011) we got a major announcement at MWC by LiMo: LiMo Foundation Unveils LiMo 4. It’s based on X11, WebKit, GNOME and… EFL!

Wait? Where do you see EFL in that announcement? You’ll have to check What is the LiMo 4 Platform? block diagram and see EFL is now a first class component at it, together with GNOME that was there since first release. Yeah, we surely could use better publicity at EFL side ;-)

The release is still just text and no code, which should be available by July2011, however you can get code straight from EFL SVN.

ProFUSION team is happy due our contributions to make this possible, after all we help with EFL and WebKit-EFL developments!

Enlightenment meets BlueZ

In the past weeks ProFUSION coworker Gustavo Padovan was hacking on bluetooth support for Enlightenment ecosystem using the BlueZ stack.

Enlightenment powered and discoverable Bluetooth adaptor.

This module follows my previous ConnMan module and is built upon the same base. Since BlueZ and ConnMan are both developed by almost the same developer group, the DBus APIs are very similar. The current module is quite simple, yet useful and allows pairing devices. The idea is to further extend it to be a full Bluetooth Agent, allowing different authentication and authorization methods, maybe go even further and send files using the OBEX protocol.

Enlightenment powered but hidden Bluetooth adaptor.
Enlightenment popup menu with discovered devices.
Enlightenment bluetooth adapter controls.

The infrastructure is available as ebluez inside e_dbus, so it is easily accessible to all EFL applications. The infrastructure exposes just a handful methods that were required by the module, but it is easily extensible as most methods are similar and the helpers do most of work, just need to specify the method names and convert types.

ProFUSION is also working on oFono support. Stay tuned to see the module João Paulo is cooking, the e_dbus code is already in SVN.

Enlightenment meets ConnMan

I’m proud to present you with my last Enlightenment module: ConnMan!

ConnMan module popup.

For those unfamiliar with ConnMan, it is a solution to configure and manager your network connections. Unlike NetworkManager, it is very simple and fast, specially for users of it’s DBus API. It will manage everything, including DNS proxy to avoid messing with your /etc/resolv.conf. It also handles WiFi, Ethernet, WiMax, Bluetooth and even Cellular connections easily. For developers using it, it is very simple to use and you just need to use the high level “Service” interface.

ConnMan module tooltip

In order to make it more useful, I created econnman inside e_dbus that abstracts the DBus API as a nice C interface that matches it perfectly and optimally, keeping objects in sync with server and emitting Ecore_Event whenever things change.

The module is quite simple, yet useful. As seen in the above screenshots, it will list the current status and service name (if module is bigger than 32px), when you mouse over it will show a fancy popup with more details, including error messages and IPv4 addresses. If you click it, you get a simple popup with the current connected service selected and clicking it will disconnect, while clicking a new one will connect to that one. Services requiring password will automatically ask for it, while those that failed to connect will also re-ask your password.

The module nicely exposes the offline mode feature to turn off radios. It integrates well with E17 mode: whenever you change E17 or ConnMan, they will sync with the other.

There is still work to do, mainly focus on the cellular specific needs and also create static services. And I also plan to have an application to allow managing your services, reorder them (that defines the priority) and even switch technologies that are available.

And more EFL news out there!

Wow! Just after my last week post about companies supporting EFL, we were pleased with two more announcements:

  • Ardy, a tool that brings together EFL and Arduino using Python
  • Free.fr, the second biggest ISP in France opened up the development of their Freebox HD set-top box using Enlightenment Foundation Libraries and Mozilla JavaScript library. This is pretty amazing as it’s the biggest deployment of EFL out there, an uncertain number that ranges from 2 to 3 million devices.

EFL things becoming public…

Hey all,

Yesterday we started to see some announcements of companies backing Enlightenment Foundation Libraries development. Of course, INdT was pioneer in that since it was decided to use it for Canola2. Later on I created my own company and we officially support EFL as GUI alternative (together with Clutter, GTK and Qt), being the first company to do that.

While there are speculations about which company is it, what I can assure you is that this company is serious and is not alone. ProFUSION itself worked on EFL on behalf of various clients and you may expect another press release about a big French internet and telecom company deploying a massive number of units with EFL pre-installed. Not accounting various community driven projects that choose it and E17 as its base platform, such as OpenMoko and OpenInkpot.

Bottom line? While EFL does not get the same amount of marketing and visibility as Qt and GTK counterparts, it is playing fine enough to be considered to ship in dozen million devices in the next year. Why don’t you consider it for your project? Be open minded and try it out ;-)

Evas UV Mapping and WebKit-EFL

One of the most requested feature for Evas was rotation and other transformations. These are no more, Rasterman just did generic UV Mapping support, enabling rotation, perspective, 3d-simulation and more.

As usual he wrote a fast software engine to make this available on non-3d accelerated, next should come OpenGL and OpenGL-ES as some big players in the industry are now funding his work in both software and GL-ES support, as well as ARM NEON optimizations.

As ProFUSION is also being funded to work on WebKit-EFL, I thought I could demo our work using new rotation support, and the result is quite good:

As you can see, there are still bugs… actually this video was first meant to report a bug with mapping code, but raster is already fixing it.

As soon as I have time I’ll try to update EFL for N900 and try out the new expedite tests, they include 3d cubes, coverflow and more. Hopefully by the time OpenGL-ES will be ready and then we can compare software and hardware performance on this amazing hardware.

All in all, this semester is being quite busy for EFL hackers. Fast OpenGL-ES, UV Mapping, WebKit and soon-to-be-release Edje Editor were all done, with much more to come. Stay tuned!

Ecore-GLib main loop integration

It’s done: http://trac.enlightenment.org/e/changeset/42825

This was a often requested feature by friends, ProFUSION clients and people that want to use the large amount of GLib-based libraries with EFL applications.

To avoid impacting each other, the suggested way is to have each main loop in its own thread, communicating these using pipes. This is used by Emotion’s GStreamer plugin, lots of projects inside ProFUSION or for our clients. But sometimes this is not easy to do (Adobe Flash plugin for WebKit-EFL) or maybe we just want to do an experiment until native efl version is available (for example, EUPnP is still in early stages, while GUPnP is rock solid).

This enables (or makes it easier) using nice projects from EFL applications, to name a couple of personal interest:

  • Rygel: Rygel is a collection of DLNA (UPnP AV) services (devices in UPnP speak).
  • GUPnP: object-oriented (GObject) open source framework for creating UPnP devices and control points.
  • PulseAudio: sound server. Although it is possible to write your own main loop support for pulse, it’s much easier to use glib’s until someone writes ecore_pulseaudio.
  • Moblin Mojito: ocial data server which will fetch data from the “social web”, such as your friend’s blog posts and photos, upcoming events, recently played tracks, and pending eBay auctions. It also provides a service to update your status on web services which support it, such as MySpace and Twitter.
  • Google Gadgets: similar to E17 gadman, provides sandboxed widgets. It allows storing basic data and network I/O, so there are forecasts, stock options and rss feeds. It would be nice to have a native port (we’re working on it), but meanwhile using GTK’s infrastructure would help.

Memphis on real hardware: Nokia N810

This is a followup of my previous post, but now running on Nokia Internet Tablet N810 with Maemo. We interleaved it with parts of screen casts so you can note it’s very close to the desktop edition, even animated video thumbnails works fine:

We even managed to convince Mariana to do the initial talk!