Non-HID Mouse driver on NT - mouse

I'm looking to write a custom touchpad driver for my laptop, as its support under Windows is abysmal. I have the protocol figured out and I'm ready to go ahead and implement it, but I'm a bit confused as to how to go about it. It's a multitouch touchpad, so I'd like to support the Windows Touch interfaces in addition to standard mouse support, but the examples in the WDK (Elotouch being the most relevant one) only show HID support. In my Googling around, I discovered someone mentioning that the proper way to handle this is to write a shim driver that will expose HID from the low-level protocol, but I couldn't find good information on where to start with that.
What examples (WDK or otherwise) should I take a look at and is the HID shim the right way to go about this? I'm looking to target Vista+ at the least, XP would be nice as well.
Thanks
Edit: A bit of clarification. The touchpad is USB but non-HID. Also, if the HID shim is the best way to go, can I use KMDF there, or do I have to go WDM? Most of my experience is WDM, but I'm not sure which way to go.

There is a msdn article about how you can map a non-HID device to a HID device as part of the Windows Touch Overview.
Also don't miss the general driver developing tips.

Related

Where do I start if I want to write a wayland compositor?

I imagine there isn't a "Beginner's guide to wayland server programming" drifting around the web, and the weston source looks daunting.
Is there a barebones wayland server I can look at to give me an idea where to start? Something I can run under X that I can confirm is recieving input. I'm sure I can go from there.
Take a look at the Small Wayland Compositor. You can either use it as library to build upon, or check out how it does things internally if you want to start from scratch.
I wrote a minimal wayland compositor that runs on top of X11 with the hope that it might be useful for other people who want to learn how to write a wayland compositor.
It's about 500 lines of code that are really just the minimal code that is needed to host multiple instances of weston-terminal and move them around.
I can only recommend to take a look at the KWayland sources (especially if you're interested in how the wayland protocol maps to an object oriented world).
KWayland is an object oriented (C++/Qt) wrapper around the wayland client and server libraries and it also includes a minimal server (tests/renderingservertest.cpp).

Has Anyone Successfully Used CMU Sphinx for Programming by Voice Recognition

I want to start doing some of my coding by voice recognition software (maybe 10-20% of the work I do).
I've seen that some people have had success with Dragon Natural Speaking (DNS) software, but I use a Mac, and unfortunately, Dragon only works on Windows.
Has anyone used the Carnegie Melon open source Sphinx http://cmusphinx.sourceforge.net/ for programming?
Are there other options that I could implement on a Mac? I don't mind dropping a little bit of cash to make this a reality. Ideally it would be a system where I could add in my own commands. (Check out the awesome stuff this guy did, with DNS: https://www.youtube.com/watch?v=8SkdfdXWYaI)
There is a protoype plugin for IDEA written by JetBrains developers. The work was done during one of their hackathons.
If you are not fixed with Sphinx, I would recommend Kaldi as an adaptable, compatible open-source speech recognizer. With kaldi you can adapt your own grammar and commands and retrain the underlying models. In addition, there is a python-wrapper that makes Kaldis use easy and convenient.

SoftPhone and linux

We are thinking about writing a softphone app. It would basically be a component of a system that has calls queued up from a database. It would interface with a LINUX server which has Asterisk installed.
My first question is
Whether we should write the softphone at all or just buy one?
Secondly, if we do,
what base libraries should be use?
I see SIP Sorcery on CodePlex. More than anything, I am looking for a sense of direction here. Any comments or recommendations would be appreciated.
The answer would depend on the capabilities you have in your team and the place you see your core value and the essence of the service you provide.
In most cases, I'd guess that you don't really care about SIP or doing anything fancy with it that require access to its low level. In such a case, I'd recommend getting a ready-made softphone - either a commercial one or an open source one. I'd go for a commercial one, as it will give you the peace of mind as to its stability and assistance with bug fixing and stuff.
To directly answer your question, one of the many open source softphones are likely to fit your needs, and allow slight modifications as needed. Under most open source licenses there is no obligation to distribute your code as long as you only use it internally (do not distribute the binary.)
Trying to guess what you are trying to do, it sounds like a call center like scenario, so one of the many call queue implementations out there might fit your needs.
I had to write an own softphone and I found a great guide how to achieve it. In the guide there are 10 steps provided for having an own softphone (voip-sip-sdk.com on page 272)
I found it useful and maybe you will find it as well.

What does it take to write a virtualization host?

I'm not planning on doing this right now, as I don't have the experience in this area to even attempt it at the moment, but I'm curious about something.
If implementing an operating system from scratch, what would it take to build an application like VirtualBox? Not necessarily as user friendly with a nice GUI or anything, but something that is capable of launching other operating systems and allowing you to interact with them?
I've got an idea rolling around in my head about an operating system that uses virtualization for a few key things (probably ideas out there like this already), and I'm just curious what it would take to build it.
There is a version of VirtualBox that is open source. If you want to know what it would take, checking out their source would be a very good start. Also, check out Xen (open source as well).

How hard would it to create a media player (gui fronteend for mplayer), need guiddance for getting started

I am pretty dissatisfied with all the available media players, and I was also looking for a major project to really get into programming. so I am thinking of writing my own media player . Or to be more accurate a gui-frontend for mplayer (something similar to smplayer). How hard would this be.? I have plenty of time (months), and am willing to learn anything.
I practically don't have any knowledge of any windows/gui libraries . My programming experience : tried lots of different languages, wrote a couple of websites in php, lots of practice in java (although did nothing major) . Thats all
Can someone provide some guidance, about where to get started. what all to read. Which language should be used. is C#/.net a good language for this? since I am no expert in any language and have dabbled in plenty of different languages , I think I can pick up any language. Though My main concern is my lack of any practical knowledge . So guide me please.
Lastly my preference is windows (haha whatever), so thats what my target is and thats where I'll doing my coding.
To sum it up I want to create a guifrontend for mplayer that would work in windows.
Thanks
Edit: by mplayer I mean mplayer (the linux one) , and not WIndows media player.
One good place to start could be looking at how the code for gmplayer works - gmplayer is the graphic frontend for mplayer on Linux. It could be that all you really need to do is port the gmplayer code to Windows, then you get a fully integrated GUI instead of just a frontend.
Also, feature request: a nice friendly UI for putting video / audio effects on the output stream (it is so hard to use in the CLI version that most mplayer users probably don't even know it is in there).
I know what I'm going to recommend you is not what you're looking for, BUT:
I'd create a front-end for VLC, which uses Qt, a GUI framework which is extremely usable and easy to start with, in C++.
From my experience as an user, VLC is also more stable and has more features.
Start by copying a working implementation. As you mentioned, SMPlayer exists as a working example of what you want. I'd recommend starting by either hacking it to work better (the playlist really needs more intuitive controls, and multiple monitor support in Windows was nonexistent last time I tried it) or trying to duplicate it in your language of choice.
The benefits of hacking on an existing probject include: the existing codebase works, the margin of work required to make a noticeable change is much smaller, and the existing developers are able to help you come to speed with internals. Also, learning the project's language (C++) would be useful, though it may not be worth the effort if it's more interesting to copy its features in your favorite language.
C# is great for creating any desktop gui quickly. Best way to start with the gui design is to play a bit with the drag/drop components available in visual studio. For the functionality you can use this: http://msdn.microsoft.com/en-us/library/dd564585%28VS.85%29.aspx .