Archive

Archive for the ‘QNX’ Category

QNX MM 1.2 is Released

May 27th, 2009

Our team has finished Aviage MM 1.2. Its got some excellent features and new platforms that it supports. Notably:

  • DVD-V playback
  • Video file playback
  • Microsoft Zune support
  • Significant improvements to Album Art support
  • Significant improvements to metadata synchronization speeds
  • Additional playlists supported
  • Faster startup, much less memory used
  • RTP & HTTP streaming
  • TI OMAP3 Codec Engine (audio decoders)
  • Intel Performance Primitives codecs

There are lots of other improvements also. We’ve been busy this past 6 months!

You can find more information about it here: http://www.qnx.com/products/middleware/multimedia.html

This project is developed openly on the foundry27 site where you can get source code and daily builds. If you’re looking to try it out you can do that for free with one of those daily builds on top of QNX Momentics 6.4.0 or 6.4.1(soon to be released).

Multimedia, QNX

Multimedia on Foundry27

April 2nd, 2009

The multimedia project I work on at QNX is now available on foundry27. Foundry27 is QNX’s development portal where you can find software projects actively being developed.

On the foundry27 site for multimedia you can get source code, documentation, forums and other great resources. The source code is the latest and greatest, updated every night at 2am and right after that a binary nightly build is available. If you want to build the source, make sure to check our the source guide wiki page that describes the straight forward process.

We put together a QNX video a while ago where I walk through at a high level what each of the components are. Here it is:

Multimedia, QNX

Audi turns to Nvidia for 3D navigation

January 30th, 2009

QNX RTOS and multimedia are helping to drive this new infotainment system provided in the latest Audi’s.

Audi turns to Nvidia for 3D navigation: “

Audi navigation system

Audis new navigation system includes 3D textured buildings.

(Credit: Audi)

Audi’s new Q5 sports navigation graphics empowered by chip maker Nvidia, along with a radically updated dashboard interface, which Audi calls the Multimedia Interface, or MMI. Integrated into the new navigation system is an automotive grade Nvidia …

(Via Car Tech: An automotive blog from CNET.)

Multimedia, QNX

QNX Multimedia at Convergence!

October 21st, 2008

QNX is at convergence this year with a great demo. Some great things from a multimedia perspective that we’re showing at this demo:

  • Zune playback
  • iPod 1-wire playback
  • USB Mass storage playback
  • Youtube
  • Video games
  • Multinode: you can plug in an iPod in the front, and listen to it in the back seat using headphones
  • From you LCD panel dash cluster you can see what song you’re playing, and its artwork

I think this demonstrates a well “connected” car. You’ve got the devices, you’ve got the internet, and you’ve got several happy networked users!

Here is a photo of the booth:

QNX Convergence Booth

There are more photos of this on Paul Leroux’s blog.

There are lots of other advanced features that it shows as well such as voice integration, hands free support for bluetooth phones. I hope a few of you have a chance to see it.

Multimedia, QNX

iPod integration in the car

October 13th, 2008

Cars are getting to be pretty advanced and feature rich. CNET has an article that talks about how iPods are integrated into more than half of 2009 models. QNX likely has contributed a large portion to many of these models. Its satisfying to see your work end up in real-world product.

The article also has some interesting stats on hard drives and bluetooth integration in cars. The head units in cars these days are as powerful as many desktop computers and have even more peripherals.

Now unfortunately, the one thing the article has completely wrong is that “Microsoft Automotive Platform … offers the most universal integration”. If I were to compare MS Auto to QNX Car, I’d like to point out:

  • CD’s are not dead. MS Auto currently doesn’t do CDs, or CD Changers. QNX is shipping in many cars today with that feature. We also support MP3-CD’s
  • Ripping CDs, or USB Sticks. QNX’s MME manages all this for you so that when you ask to rip a CD or list of USB tracks to your hard drive it will do that as fast as possible without interrupting your playback. And if you power off your car, it’ll continue where it left off.
  • Embedded hard drive support: without ripping, do you support a hard drive?
  • Internet Radio integration.. how connected are you without the internet?
  • QNX Car also has the same “most universal integration” features that MS has: USB Mass Storage, iPod, PlaysForSure, Zune, Bluetooth.
  • QNX Car is shipping in many other makes than Ford. In fact the last stat I heard is that it is in over 40% of the 2009 models! I should talk to marketing to get a completely accurate number.

As usual, Microsoft has lots of dollars to spend on advertising, but the real question is how good is their product? QNX has always been quality driven, and therefore is chosen to run space equipment, nuclear power plants, and the fancy features in your car.

Multimedia, QNX, Uncategorized

QNX 6.3.2 on Parallels 3.0

January 3rd, 2008

I spent some time getting QNX working on Parallels 3.0. Its working well with the exception of video which I know can work, I just haven’t spent the time to get it going yet. If you get it working please comment on this post with how to do it.

First off, why use Parallels now that VMWare is working? I use Parallels instead of VMWare because it is much faster for what I use it for. I have all my work on my mac and export that folder using nfs to my virtual machines. On my virtual machines I do builds as well as run and test my code. I did a quick test comparing QNX 6.3.2 building the multimedia engine and it took 9.5 minutes on VMWare Fusion 1.1, it took Parallels slightly less than 3 minutes to do the same thing. I also find a significamarknt difference in performance while running my application also.

Issues:

There are 3 issues with QNX 6.3.2 running on Parallels out of the box: 1. Kernel doesn’t work 2. Network driver (ne2000) doesn’t work 3. Graphics detect vga mode only

There is only one issue with running QNX 6.3.2 on VMWare Fusion out of the box: 1. USB doesn’t work

I’ve got problems one and two fixed for Parallels, here are the steps to get yourself a QNX 6.3.2 virtual machine running on Parallels 3.0 build 5582. There are two floppy images you’ll need to get for this off my server:

  1. Boot floppy: http://www.mediatype.ca/wp-content/uploads/parallels/QNX632ParallelsBoot.fdd
  2. Installation floppy: http://www.mediatype.ca/wp-content/uploads/parallels/QNX632ParallelsInstall.fdd

Create the virtual machine:

  1. get the QNX 6.3.2 ISO
  2. open Parallels
  3. click file | new
  4. choose custom. OS type: Other OS Version: Other
  5. Choose the amount of RAM to give QNX. I choose 300.
  6. Create a new hard disk image. I make mine 3000GB expanding.
  7. Shared networking
  8. Give it a name
  9. Optimize for VM
  10. Click more options, then select ISO image, then choose the image you got from step 1.
  11. uncheck “start guest operating system”
  12. Click menu item “Edit” then “Virtual Machine…”
  13. Click “Add…” I add a usb adapter
  14. Click “Options” Then click the “Booting” tab on the right. Choose “Floppy, Hard Disk, CDROM”
  15. Click “Floppy” on the left. Check the “Connect at startup” checkbox. Click the “…” for the image file and choose the QNX632ParallelsInstall.fdd file.
  16. Click OK. Then start the VM.

Install QNX:

Follow the steps on the screen. You’ll need your license key to perform the installation. Make sure to install to the complete hard drive. Myself I install all the tools and GPL utilities. When it asks you to reboot, just turn off the virtual machine by hitting the red stop button on the top right.

Prepare the VM for regular booting:

  1. Click “Edit” | “Virtual Machine…”
  2. Click Floppy
  3. Check the “…” for the image file and choose QNX632ParallelsBoot.fdd
  4. Click OK. Start the virtual machine.
  5. This part you need to do quickly. While the virtual machine is booting, click on the black part where the VM text will come up to put your cursor into it. Then when it asks if you want to enter boot options by hitting the space key, hit the space key on your keyboard.
  6. Press F5 to have it drop to a shell during boot
  7. Type these commands in the shell to replace the stock 6.3.2 network driver with one that works included in the boot image: cd /lib/dll /bin/cp devn-ne2000.so devn-ne2000.so.bak /bin/cp /proc/boot/devn-ne2000.so devn-ne2000.so
  8. Hit CTRL-D twice
  9. It should continue booting. Only the vga option will present itself at first, continue using these settings.

QNX

pkgsrc for installing open source

October 18th, 2007

I’ve always found it a lot of work to install open source software on QNX.. until today. pkgsrc is fantastic!

From the QNX community website:

‘pkgsrc’ is a framework for building third-party software and managing the resulting packages. Originally developed on NetBSD, pkgsrc has evolved according to NetBSD’s principle of portability and currently supports 13 different platforms (hopefully QNX will be number 14). Over 6400 packages are in the base distribution.

This handles dependencies and can build packages on your desktop, very important for a good UNIX system. So far I’ve got bash, openssh, and perl installed… more to follow :)

If you haven’t given it a shot it is quite simple to get started with, you can find the instructions on the wiki.

QNX

Unblock Handler

September 21st, 2007

I had fun writing my first unblock handler in a resource manager. unblock handling is required when clients are currently blocked on a resource manager service and are requesting to be unblocked because of being hit by a signal or other reasons. The kernel will detect that they’d like be unblocked and will send a pulse to the server passing the rcvid and ocb that need to be unblocked and that resource manager can decide what to do with it.

So the reason I was adding this was to support timeouts on the API. This is relatively easy to do from a client API:

  1.  
  2. struct sigevent apitimeoutevent;
  3. apitimeoutevent.sigevnotify = SIGEVUNBLOCK;
  4. apitimeoutvalue = 100 * 1000 * 1000;  // 100 ms
  5. TimerTimeout(CLOCKREALTIME, _NTOTIMEOUTSEND | _NTOTIMEOUTREPLY, &apitimeoutevent, &apitimeoutvalue, &hdl->apitimeout_left);
  6. rc = MsgSend(fd, &msg, sizeof msg.to, NULL, 0);
  7. if (rc == -1 && errno == EINTR) {
  8.         fprintf(stderr, "Interrupted!\n");
  9. }
  10.  

Supporting this in a server is more difficult. The server is already in the middle of processing the request, potentially already blocked itself. Ideally we could cancel the request but sometimes that isn’t possible.

Lets just say you can, your unblock handler could be as simple as:

  1.  
  2. int io_unblock(resmgr_context_t *ctp, io_pulse_t *msg, RESMGR_OCB_T *ocb)
  3. {
  4.         struct _msg_info        info;
  5.  
  6.         if (MsgInfo(ctp->rcvid, &info) != -1 && (info.flags & _NTO_MI_UNBLOCK_REQ)) {
  7.                 cancellation_flag = true;  // other code knows to check this periodically and cancel
  8.                                            // if it’s set.
  9.         }
  10.         return(_RESMGR_NOREPLY);
  11. }
  12.  

It’s important to do that MsgInfo check first because its possible that since getting the pulse the client may have already been replied to.

For the full docs on the QNX site visit http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/prog/resmgr.html#HANDLING_UNBLOCKING

QNX

QNX Videos

September 11th, 2007

Lots of exciting things coming from QNX these days. QNX released several new technical videos to YouTube today. Mine included is posted there although it isn’t that technical. Its good to start with an overview and I’ll get some more done in the future I’m sure.

Here is a list of current QNX Videos:

Instrumented Kernel – Collin Burgess

Momentics Overview – Doug Schaefer

QNX Multimedia Components – Dan Cardamore

QNX

Virtual Machine woes

September 10th, 2007

My goals for setting up my development environment are: – Keep code files off of virtual machines so that I can work on my laptop without killing the battery – have full access to tools like gcc and gdb – not too worried about using the IDE since I typically work with another editor

For a while it was difficult since I picked up one of the first Macbook Pro’s and at that time there were no virtual machine environments for it. Eventually came Parallels and then VMWare.

I started with setting up Mac OS X Tiger to be an NFS file server. Leopard is going to use /etc/exports to make this easy to do, but until then while you’re running Tiger your best bet is to use NFS Manager. I create a /w folder which I put all my source code checkouts and QNX stages into and when I mount it on my virtual machine it gets the same /w pathname. This way it doesn’t matter which system I’m on, its /w either way.

In my experience so far, parallels is very fast. Even single CPU it out performs VMWare Fusion 1.0 running QNX 6.3.0. Keep in mind however that parallels doesn’t support QNX and the standard 6.3.2 neutrino doesn’t run on Parallels. Colin Burgess managed to get the kernel running on Parallels and that worked well for a while. io-audio, io-net, io-graphics, and io-usb all work well on Parallels. The only problem is that its gotten quite unstable for me, I’m not sure if its because of a Parallels update that I’ve installed or not, but io-audio seems to hang now and then, and in addition parallels itself crashes fairly frequently.

VMWare is stable, io-audio, and io-net work. It has SMP which is good for testing multi-threaded access to applications. The downsides is that its a dog… it is very slow to compile compared to Parallels, somewhere in the order of 5-8 times slower which is very noticeable. And io-usb gives errors but I haven’t spent much time at all trying to get this working. Because parallels has gotten so unstable I’m going to spend a bit more time trying to get this working better.

Many months ago I had built the QNX toolchain on Mac OS X so that I could build QNX applications directly on Darwin. I’m going to take a crack at this again. The reason why I went away from this in the past was because I had only compiled GCC 3.3.4 and we typically ship 2.9.53 binaries so my executables were often incompatible. Parallels back then was very fast and stable and there was no big performance difference while building small apps on the virtual machine. Now that things have gotten so unstable or slow depending on virtual machine I choose I’m going to rebuild the toolchain for Darwin and do testing in VMWare.

One thing that is very nice about this problem, is that I have a choice :)

QNX