Looking good, but what with the 100% cpu tomtom problem?
I'm creating a plugin for CF wich will enables you to emulate a pocket pc inside CF. My idea has been based on this thread:
FAQ: TomTom How To (PocketPC Emulator)
Why u ask?
TomTom is the one and only navigator that satisfies me. Expecially because of the checkpoint add-in for TT navigators (huge PIO database).
Because of some limitations of the ppc emulator i'll try extending the functionality as much as possible for usage in CF.
How it will work:
I'm not creating a real plugin, but some sort of "container" app for the ppc emulator.
My app will embed the ppc window which allows me to easily controll the ppc window. Maybe you wonder why's that needed. Well its simple. The ppc needs has quite a long boot time. When you start CF my app will already launch the ppc and start booting (you won't see this). When you press the button in the CF menu, CF will embed my app wich already has a booted ppc window in it. So no waiting for that thing to boot.
Another advantage is the fact that when you close an external app in CF it completly closes it. This will not happen here. My app is gonne hide itself untill you need it again. Again, no waiting untill the ppc boots when you "restart" the app.
But don't worry, you'll actualy be able to close the emulator if you want to.
You will only be able to run the emulator inside CF in fullscreen OR non-fullscreen mode. The emulator is not resizable. When you do try to resize you'll just lose a part of the screen (see screenshots below).
- My app contains a bugfix for the emulator. Some USB -> Serials gps receivers are not detected by tomtom because of a bug in the emulator not opening the comport correctly. That should be solved.
This is how you'll have to run the ppc emulator:
if you don't you'll get this:
Later on i'll add an option where u can chose if you wish to run in fullscreen of non-fullscreen. But you have to know you cant switch between them.
A beta version of the app will be posted in this thread at the end of the week (i hope )
PS: sorry for my bad english, i'm dutch
PocketPC Emulator plugin in development
Looking good, but what with the 100% cpu tomtom problem?
You might be able to use a Win32 call in your plugin on the window handle of PocketPC emulator, SetWindowPos to modify it's size... You should be able to so you can still allow the application to be resized...
Most, if not all, needed Win32 calls should be in the CFPlugin DLL in the Win32 class...
Sounds great! Looking forward to seeing how this turns out.
Tip: Add the TomTom to the Startup folder inside the PPC emu, then it will autostart TomTom as well
here's some more ideas for ya
if you go to the control panel on the ppc emulator, then the today option, you can disable all that stuff on the today screen.
Also, you can install something like pocket plus on the ppc, and that'll give you the ability to stick custom launchers (like a tomtom button) on the today screen
and... tomtom works through keys. if you try to do things on the keyboard, you'll find the actually have functions on tomtom. so + will zoom in and - will zoom out. tab switches from 2D to 3D mode. I can't remmeber all the functions, but there are lots. and you know how tomtom has 6 icons on each screen (the sixth is usually next screen) well those map to buttons 1-6. I know that's useless when you can just touch the actual icons, but the cool thing is you can have a button for postcode that will press 6,1,1 (I think that gets the postcode entry screen!)
finally... it would be good if when your skinner loaded the ppc emulator, it would also start tomtom. it would be wise to stick the emulator's process priority to low.
I'd love to see this work for roadrunner too!
btw, are you booting from scratch each time? you know you can boot from a state file right? it's only tomtom that takes a min to load. if you are booting from a state file, then the startup won't work!
You can also not run it as an external application, but create a new CFPlugin... You can download the SDK and examples on the website...
This way you could have a different top header, or design it however you want... You could create zoom in/out buttons like the integrated GPS and have them send keyboard commands for the actions to trigger tom tom in the emulator...
100% CPU is not a bug an cannot be solved. A PPC has an ARM processor which uses other instructions than a PC. So those instructions need to be emulated (translated), and that just needs CPU power...
However the arm instuctions have been optimized since version 2. So it will be a little faster.
I know the windows api calls, i already work with them for embedding the window (SetParent). And besides, the function is MoveWindow since SetWindowPos only works on top-level windows
And like i said (maybe i should have explained myself better), the window of the emulator itself is resizeble, but the content dousn't resize.
- I know about the today options, but that's a users chouse, i'm not creating an emulator for TomTom only, i'm just creating an emulator. The PPC itself can be customized like a normal ppc by every user itself.
- I'll look into that plus thing
- Communication between TomTom and CF was an idea i had, but first i want to make my app stable and easy to use. I'll be extending it as we go.
- PPC priority is already al "Below Normal" If i don't do that the emulator practicly freezes the pc untill its booted.
- The way of booting is chosen by my app. In my app's config you need to set an image that has to be booted. You can create a new one or select an existing one u may already have. When my app finds the existing image it simply boots that one (fast boot time). If there's no boot image found, it boots an new one which will be automaticly saved when you close the emu. Next time u boot it will boot the saved state.
- My "plugin" will be aviable in each program thats able to embed a window.
- NO i'm not booting from scratch every time, that would mean you'll have to install TomTom every time
Well that was a hard choice by me. I know i could make a real plugin, but that would stick my app to CF only. I know i'll lose nice features from CF by not making a plugin, but i think thats not so bad since the emulator fills the screen completly and has its own zoom buttons...
The great advantage of my method is the fact you'll be able to run my app in every software that's able to embed a window, or even as a standalone application. On the other hand, it would increase CF's value.
I'm having a little problem with the method CF uses to close an external app. Looks like CF uses 2 method's to close an external app.
1. It sends a WM_CLOSE message to the window (normal application shutdown)
2. It just kills the process (forced application shutdown)
Now i can't figure out when CF uses one of these methods, can anyone tell me if there's a perticular strategy CF trys to close an app (looking @ veetid )?
I use SendMessage to send the clean WM_CLOSE and wait for a response from the application. If the application will not properly close in a reasonable amount of time, then I kill the process so it will not hang Centrafuse.