The MP3car.com Store  

Welcome to the MP3Car.com forums.

You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features. Registering will also remove advertisements. By joining our free community you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content and access many other special features. Registration is fast, simple and absolutely free so please, join our community today!

If you have any problems with the registration process or your account login, please contact contact us.

Go Back   MP3Car.com > Mp3Car Technical > Software & Software Development > Coders Corner

Reply
 
Thread Tools Display Modes
Old 04-04-2007, 10:26 AM   #1
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
New environment for linux

I'm considering and attempting to gauge the level of interest in writing a new "environment" for linux. Here's what it should do:

1. Basic menu interface over an extremely simplified window manager (perhaps evilwm)

2. Plugin-based, to allow 3rd party plugins to override nearly any feature.

3. 3D menus plugin - something similar to beryl without the rotating cube effects and such. Maybe a 3D flaming background of an active engine, with rotating menu icons. Possibly also animating all menu context switches. Note this is only a plugin - there should also be a basic 2D menu plugin.

4. Native GPS capability via a plugin - Come on, we're on a 7" LCD touchscreen (well, most of us), we need a custom GPS application, not something designed for a fine pointer like a real mouse.

5. Media playback plugin

6. Voice activation input plugin (Ok, in this case I'm looking for help in the form of a 3rd party plugin)

7. Cell phone plugin

The general interface would be similar to the MythTV interface, except it would use mouse (touchscreen) input rather than keyboard / remote control input.

I'm hesitant to simply call this a frontend because it does more than wrap a bunch of applications in menus - it will in some cases be doing some complex application work. Therefore I'm more inclined to call it an "environment."

Also of note - I see there are other solutions, like Velocity. Honestly, when I saw Velocity, I was wondering if there was a point to doing anything else, and possibly going into writing plugins for it... until I realized that it was restricting itself to the capabilities of flash. The way I see it, that eliminates the 3D menus or any other 3D plugin, and possibly other 3rd party plugin ideas. Therefore, I'm pushing this forward as an alternative idea.

This environment would be written in C++ with Qt 4.x. I'm open to the idea of keeping this project cross-platform (C++ and Qt work on nearly everything), but I suspect some functions would be a royal PITA to implement cross-platform (like v4l (radio) support, GPS support, etc... the 3D menus should work on anything, but I can't go much beyond that).

Please note, I am only trying to gauge whether or not to begin this project - not a single line of code has been written. If I do begin, it will be under the GPL for all Qt-specific code sections, and under the BSD license for anything clear of the Qt taint (In other words, it will be free and open source).
kshots is offline   Reply With Quote
Sponsored Links
Old 04-24-2007, 08:44 AM   #2
Newbie
 
Join Date: Apr 2007
Posts: 2
My Photos: (0)
Dude that sounds like a great idea...

I was thinking of doing the same thing, but my qt is not that good...

Let me know how it goes...
PreDeToR_ is offline   Reply With Quote
Old 04-24-2007, 01:23 PM   #3
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Ok, I've decided to proceed with this project.

I've written the most of basic framework, at least to the point where it should be possible for people to start writing plugins. I've included several sample plugins as placeholders (they load to the main framework, but until some code is written, that's all they do).

I'm calling it evilcpc (Evil Car PC). I've submitted the project to sourceforge for hosting a few minutes ago. If you're really interested in looking at what's going on, I'm running a subversion repository for the code, reachable at *moved (see below)*. If you're not that good at Qt, it's pretty easy to pick up (assuming you know OO concepts reasonably well). You can find some good documentation on their site

Right now, I'm just focusing on the framework. All the real work will be done with the plugins.

Last edited by kshots : 04-27-2007 at 02:12 PM.
kshots is offline   Reply With Quote
Old 04-24-2007, 01:35 PM   #4
Variable Bitrate
nasa's CarPC Specs
 
Join Date: Aug 2006
Location: PA
Vehicle: 2003 Honda Accord Sports Coupe
Posts: 332
My Photos: (8)
Have you seen this?

http://www.mp3car.com/vbulletin/linu...nter-beta.html

Nasa
nasa is offline   Reply With Quote
Old 04-24-2007, 02:05 PM   #5
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
No, I had missed that. However, I can see that a lot of what I'd want to do would be very difficult under that environment, at least on the 3D side.

The trouble with SDL is that it's either 2D or 3D - nothing in-between. If I were to attempt to modify nghost to be 3D, I'd have to start from scratch on all the various widgets. Under Qt, I could work in 2D and 3D at the same time by taking control of the protected paintEvent() function of my QGLWidget, outputting all my 3D stuff, then slapping my 2D stuff on top.

I may be interested in helping him out with his plugin architecture difficulties (I have written several plugin-based projects, using ldopen (unix), lt_ldopen (libtool), and Qt plugins). I may then be interested in contributing a few plugins... but if I want the flashy 3D stuff it would probably be easier to work with under Qt (Though I don't particularly like the GPL - I prefer BSD myself, which SDL allows for).
kshots is offline   Reply With Quote
Old 04-25-2007, 01:16 AM   #6
Newbie
 
Join Date: Apr 2007
Posts: 2
My Photos: (0)
Keep us up-to-date...

I would love to you a very pretty linux based system....

And have a look at the code...

I had a look at the code for headunit, but it is very difficult to read, so if you could comment a lot, and give ppl ideas of what you doing.

Cause then you can have ppl, modifying the code and submitting the code to you,
so that you can include it into the project...

This can be a really nice system... and can easily be ported to windows/mac... so then
you can have an even bigger user/suggestion base...

KEEP UP THE GOOD WORK!!!
PreDeToR_ is offline   Reply With Quote
Old 04-25-2007, 09:07 AM   #7
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Yeah, I was intending to write API documentation when SF accepts the project, but I can get a head start on it earlier. My priority will of course be plugin documentation, to allow people to write plugins as soon as possible.

For the most part, the code is ultra simple and self-explanatory... it's just spread across many files. Because of its simplicity, I didn't see much of a need for comments, but I definately see the need for documentation.
kshots is offline   Reply With Quote
Old 04-25-2007, 10:09 AM   #8
FLAC
 
shotgunefx's Avatar
 
Join Date: Apr 2005
Location: Boston, MA
Vehicle: 2002 Chrysler Sebring Coupe LXI
Posts: 1,747
My Photos: (30)
Quote: Originally Posted by kshots View Post
No, I had missed that. However, I can see that a lot of what I'd want to do would be very difficult under that environment, at least on the 3D side.

The trouble with SDL is that it's either 2D or 3D - nothing in-between. If I were to attempt to modify nghost to be 3D, I'd have to start from scratch on all the various widgets. Under Qt, I could work in 2D and 3D at the same time by taking control of the protected paintEvent() function of my QGLWidget, outputting all my 3D stuff, then slapping my 2D stuff on top.

...

I've been working on a Perl/SDL Music/Dash front end Auto-DAC for awhile now.

SDL is nice, one thing that hurts for an app like this though is the lack of widgets. I've heard some people have mated WX to SDL for a best of breed solution, but I haven't experimented with it yet as I don't have the time at the moment.

When I was having problems with the Perl bindings not keeping up with the SDL releases, I started looking at QT, but I was able to patch the issues that were occuring, though if I hit any more major roadblocks, I may very well go that route.

I haven't experimented with the OpenGL aspects yet, but it's on the todo as I have a nice 3d model of my car that I want to use with the OBDII side of things. I've not heard that in SDL 2D and 3D were mutually exclusive, I've actually read several places that if anything, it's faster due to hardware acceleration. Am I missing something?
shotgunefx is offline   Reply With Quote
Old 04-25-2007, 11:18 AM   #9
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
I've started putting in plugin documentation. You can find it here. Note that it's a work in progress, and that I'm focusing exclusively on the plugin documentation at the moment. Currently the input plugin documentation is nearly complete, and the other docs should follow shortly.

EDIT: For the most part, the plugin documentation is now complete. This does not mean that the interface is complete - I note at least some missing functionality in the menuing system (something to feed in menu items), and there may well be more. At this point, I am open to ideas of what each plugin must implement, to be placed into the interface.

Last edited by kshots : 04-25-2007 at 01:00 PM.
kshots is offline   Reply With Quote
Old 04-25-2007, 11:23 AM   #10
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Quote: Originally Posted by shotgunefx View Post
I've not heard that in SDL 2D and 3D were mutually exclusive, I've actually read several places that if anything, it's faster due to hardware acceleration. Am I missing something?

The issue with SDL is that it's difficult to work with the OpenGL context window using 2D widgets. It's solid and very fast if all you're doing is 3D (and hence an excellent choice for gaming), but I find it very difficult to make decent 2D/3D applications with it.

An example would be a 3D model editor. You would run into at least two problems with SDL on such a project - only being able to have one context (and one window), and just widgets in general.
kshots is offline   Reply With Quote
Sponsored Links
Old 04-25-2007, 11:36 AM   #11
FLAC
 
shotgunefx's Avatar
 
Join Date: Apr 2005
Location: Boston, MA
Vehicle: 2002 Chrysler Sebring Coupe LXI
Posts: 1,747
My Photos: (30)
Quote: Originally Posted by kshots View Post
The issue with SDL is that it's difficult to work with the OpenGL context window using 2D widgets. It's solid and very fast if all you're doing is 3D (and hence an excellent choice for gaming), but I find it very difficult to make decent 2D/3D applications with it.

An example would be a 3D model editor. You would run into at least two problems with SDL on such a project - only being able to have one context (and one window), and just widgets in general.

I certainly hear you on the widget issue. A big PITA. The way I'm approaching it at the moment is just writing stuff like that in Perk/TK and launching those processes from the main app.
shotgunefx is offline   Reply With Quote
Old 04-25-2007, 04:51 PM   #12
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Finished up a functional shell configuration utility. The idea here was to be flashy and foolproof without a frontend capability, so the thing is remotely configurable. Hence it's an ncurses application utilizing Qt's QSettings for the evilcpc project. The settings saved by the utility are used by the core to initialize. The utility is under trunk/evilcpcconfig.

You can try it out by downloading from the subversion repository, compiling some of the plugins and running the configuration utility. Put all the plugins in one folder, navigate there with the utility, and the select your plugins. Space toggles a plugin on and off. If there's only one plugin, at the moment it's difficult to tell whether it has been selected or not.

Plugin settings are stored under ~/.config/War Games/evilcpc.conf (This is standard for using QSettings).

Another possibility I'm considering is running a http daemon for run-time configuration, rather than simply a shell that will tell it which plugins to invoke the next time it starts.

EDIT: The plugin interface needs a configuration section. I'm considering two ways of implementing this.

1. The plugin can be configured during run-time. Default options must be defined. A configure() function will be added to the interface.

Pros: Online configuration
Cons: Must assume that no keyboard is available (mouse input only), little johnny can royally screw up your evilcpc configuration by poking at the touch screen.

2. The plugin will be configured while off-line using the configuration utility

Pros: Idiot proof - little johnny's not going to screw up your plugin setup by poking at your touch screen, can assume keyboard input
Cons: Plugin coders will need to know how to manipulate ncurses in addition to Qt (more work / know-how required - I'm trying to avoid that), if I change the configuration utility to an http daemon, the whole configuration interface would change

I need input / suggestions on how I should approach this. Any other ideas?

Last edited by kshots : 04-25-2007 at 05:12 PM.
kshots is offline   Reply With Quote
Old 04-26-2007, 05:54 PM   #13
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Ok, the project has been moved to sourceforge. This includes the subversion server - I've shut down the old svn repository to avoid confusion.

The new site is here

EDIT:

If you were using the old svn server and want to maintain your current environment, run the following command to switch to the sf subversion server:

svn switch --relocate https://warfaresdl.com/svn/evilcpc https://evilcpc.svn.sourceforge.net/svnroot/evilcpc

That should tell your local copy to look for and post updates to the sf site

Last edited by kshots : 04-27-2007 at 11:23 AM.
kshots is offline   Reply With Quote
Old 04-27-2007, 11:26 AM   #14
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Update: The core is operational. It loads all selected plugins (from the configuration utility), connects the selected input plugins to the selected menu plugin, passes all menu item plugins to the menu plugin, and shows the menu plugin's widget full-screen and executes. From this point, all the work will be done by the plugins.

This does not mean that development on the core is finished or finalized, but it means that all plugins can now be written and tested.
kshots is offline   Reply With Quote
Old 05-17-2007, 03:12 PM   #15
Newbie
kshots's CarPC Specs
 
kshots's Avatar
 
Join Date: Mar 2007
Location: florida
Vehicle: 2004 Ford Mustang (40th Anniversary)
Posts: 35
My Photos: (0)
Cool Reflection capabilities added

Further update:

The core now connects the input plugin signals to matching menu item slots via reflection. This means that the input plugins can develop custom signals to connect to custom slots on menu item plugins without a recompile of the core, and with minimal integration efforts (just match the signal name to the slot name).

For example, the voice input stub now features "activate" signals for each of the menu item plugins to allow these plugins to be activated anywhere in the environment (if/when voice activation becomes available, you should be able to say "gps" from the mp3 player menu item, and the gps menu item will appear)

This feature has been tested with the voice input stub (the core detects the signals and slots, which were not in the interface, matches them, and connects them to each other). I am considering doing the same thing between individual menu item plugins, menu plugins, mixer plugins, and input plugins, just to be as flexible as possible.

This should allow people to release plugin "suites" that are tightly integrated into each other, allowing for example a gps button inside an mp3 player interface to activate the gps interface from the mp3 interface.

I am working now on updating the plugin developer documentation to describe the process of developing custom signals and slots that get recognized by the core via the reflection process described above. For the most part, it simply involves following a simple naming convention for the signals and slots, with signal names matching slot names. Parameters must also be identical, but this will not cause undefined behaviour if they do not match - a non-exact match will not be connected, so you can have similar signals/slots with different parameters with no problems. A signal can be connected to multiple slots, just use the one signal and multiple slots with the same name in multiple plugins.

As you may have surmised from above, I'm also going to be adding yet another interface to the plugin architecture - a mixer interface. I have yet to see a good cross-platform mixer library, so I feel it is best to offer a plugin approach to let a mixer plugin load a mixer library that is appropriate to the operating system being targetted. For example, linux users would use the alsa or oss libraries, windows users would likely use direct-sound libraries, and I'm not sure what mac users would use, but there must be some library available to fill that niche.

To make a long story short, there's been a lot of progress with the environment, it's usable as it stands in terms of writing plugins... but the plugin interface is about to undergo major changes, so it is not recommended to do any serious plugin work quite yet.
kshots is offline   Reply With Quote
Sponsored Links
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
Streetdeck Dev. Environment Question AznArkitekt DigitalMods (Scripts / API) 8 04-02-2007 06:06 PM
Are there any crossover GPS models that would work well in both a car environment, an rotarypower101 GPS 10 03-19-2006 03:37 PM
VB 6 Data environment Gobby Coders Corner 3 11-25-2005 08:47 AM
MediaCar in a Dual Head Environment - How could it be done? RaK MediaCar 0 06-28-2004 09:54 AM
Car Environment Temperature vs LCD screen, PC?? dekodan General Hardware Discussion 4 08-01-2001 02:46 PM


All times are GMT -5. The time now is 10:12 PM.


Sponsored Links
The MP3car.com Store

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.1.0
Copyright © 1999 - 2008 Mp3Car.com Inc.
Ad Management by RedTyger
Message Board Statistics