GPS intermediate driver - P3300, MDA Compact III General

Hello everybody,
I tried to get the GPS postion data o from the integrated GPS-Device of a HTC Artemis.
For this purpose, i used the Microsoft GPS intermediate Drivers
But now, i've got a problem. If i tried to get the Data with the following code
Code:
DegreesMinutesSeconds location;
location = GPSGeraet.GetPosition().LatitudeInDegreesMinutesSeconds;
int x = location.Degrees;
int y = location.Minutes;
double z = location.Seconds;
I get a zero in the Degree-variable, in the minutes-variable i get the degree-Value, in the seconds-variable the minutes-value, i can't find the second-Value
However, if i use:
Code:
GpsPosition GPSLoc = new GpsPosition();
GPSLoc = GPSGeraet.GetPosition();
double a = GPSLoc.dblLatitude;
the variable has the correct value. Instead of converting this value, i would like to use the original degree, minutes, seconds-variables.
Does anyone have an idea what is wrong?

Related

Cant modify module IAT to hook API

This may be better served in the development and hacking forum. Mods please move?
I am trying to hook the keybd_event API in the keypad. I have found the address of the import entry for keybd_event in the keypad.dll's IAT. I have done so by disassembling the keypad.dll and finding the offset from an exported function to that IAT entry. At runtime, I have added my own service (in order to get my dll loaded into services.exe). When loaded, I use GetModuleHandle and GetProcAddress to find that exported function then use the known offset to find the IAT entry. I have verified that I have the right memory location by comparing the pointer to the module's location using remote process viewer.
The problem is that I cannot read from or write to the IAT. My code crashes when I try. IsBadReadPtr and IsBadWritePtr tell me that I cant read or write to this memory location. Even a call to VirtualProtect to set it to PAGE_EXECUTE_READWRITE will not work. The call fails. How can I get access to this memory?
This simple test code exe shows that all the memory in the code section of keypad.dll is writeable. As soon as I hit section 2 which contains the IAT The call starts failing. Once I hit section 3 it succeeds again (the hard coded PID and address come from remote process viewer and my service dll; I debugged to find where the read calls fail).
Code:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
DWORD PID = 239927214, addr = 2061766572, read = 0, sz = 0;
HANDLE pr;
BOOL ans1;
_SetKMode SetKMode;
SetKMode = (_SetKMode)GetProcAddress(GetModuleHandle(L"coredll.dll"), L"SetKMode");
ans1 = SetKMode(true);
pr = OpenProcess(0, 0, PID);
while(ReadProcessMemory(pr, (LPVOID)addr, &read, 4, &sz))
addr++;
while(!ReadProcessMemory(pr, (LPVOID)addr, &read, 4, &sz))
addr++;
while(ReadProcessMemory(pr, (LPVOID)addr, &read, 4, &sz))
addr++;
//ans4 = WriteProcessMemory(pr, ptr2, &mkep, 4, &p4);
CloseHandle(pr);
return 0;
}
What do I need to do to get access? Calls to VirtualProtect and SetKMode do nothing. Any ideas? Thanks!
Nevermind! It seems I was not modifying the correct location. I was trying to modify the table that simply lists imports. I found where the actual function pointer is stored.

SQL CE is driving me crazy !

Hi !
I'm trying to create an application based on location aware concept.
And I'm trying to do a simple query to update some records in my database but it isn't working..
I'm trying to do a simple query like "UPDATE markers set status = 0 WHERE id = 10"
This is giving me an error like this "[1,8,markers]". BUT WHAT THE HELL DOES THIS MEAN ?
If I try to run que query manually it does work ! So what i'm I doing wrong ? How can I activate a (MUCH) more verbose error information ?
This is my function :
Code:
Public Sub turnMarker(ByVal id As String, ByVal status As String)
cOpen()
Dim query As SqlCeCommand = myCon.CreateCommand
query.CommandText = "UPTADE markers set status = " + status + " WHERE id = " + id + ""
Try
'MsgBox(query.CommandText)
query.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Error updating markers !" + query.CommandText + ex.Message)
End Try
cClose()
End Sub
thanks !
EDIT: Nevermind ... found out the problem.
Nevertheless, does anyone know how to make errors more verbose ?
Use SqlCeException as opposed to Exception, and then run through the errors collection....
strX = strX & ex.NativeError
For I = 0 To ex.Errors.Count - 1
strX = strX & "Index #" & I & vbCrLf & "Error:" & ex.Errors(I).ToString() & vbCrLf
Next
do a search for sr.dll. you need to deploy this as part of your app to be able to see exception data when debugging .net ce apps.
or go here -> http://forum.xda-developers.com/showpost.php?p=4862355&postcount=87 .That sample project has got a copy. you'll need to add it as part of whatever project you're making.

[Q] Custom Key Mappings for keyboard and FN?

Hello, I use my HTC to connect to Linux based machines.
Unfortunately the keyboard is missing a few things.
I would like to know if it is possible to extend the keymapping of the FN+[KEY] to add new keys?
For an example of the mappings I would like:
FN+[KEY] = [KEY]:
Q = {
W = }
A = [
S = ]
D = <
F = >
Z = |
X = \
T = TAB
Y = ESC
C = `
V = HOME
B = END
G = ~
Is that possible?
http://forum.xda-developers.com/showthread.php?t=554240
yay yay YAY YAY yay yay yay!
Perhaps I should test it first though.
That key remapper works great. But I don't see a lot of the symbols you want listed as possible options in the remapper. But maybe they can be entered manually.
The key mapper wont work, however it might if I upgrade to 6.5. Unfortunately, I cannot find any way to perform a full backup of the device's memory.
Edit: I've tried with 6.5 and no luck. I've moved my enquiry to the keymapper thread (took some hardcore google usage to find that) as that looks best.
Thanks.

Possibility to execute download mode programmatically on Omnia 7?

Us T-Mobile users cannot flash Roms at the minute because the download mode button combo has been disabled.
Maybe there is a way to do this programatically or use a resistor accross certain USB pins like the Galaxy S method.
What's your opinion on this?
Sent from my OMNIA7 using Board Express
Yesterday I wasted some time playing around with the USB diagnostic port (enable in the Diagnosis app, it's the third USB mode option). Both PSAS and QPST can connect to and mess with the phone, so I think if someone knows his way around, the phone can be kicked into Download Mode.
(I only managed to crash the phone in many different ways, but I was really just monkeying around.)
If this can be done it would be great as this is the first phone I have owned where I cannot flash firmware myself.
Might be worth while seeing if everyone with a tmobile uk branded omnia 7 has this issue?
FYI I have included my firmware versions etc so we can try and collate a list of working/non working ones to see what the differences are if any.
os version 7.0.7004.0
firmware revision number 2424.10.10.6
hardware revision number 3.15.0.4
radio software version 2424.10.10.6
radio hardware version 0.0.0.800
bootloader version 4.10.1.9
chip soc version 0.36.2.0
KarmaXXK said:
Yesterday I wasted some time playing around with the USB diagnostic port (enable in the Diagnosis app, it's the third USB mode option). Both PSAS and QPST can connect to and mess with the phone, so I think if someone knows his way around, the phone can be kicked into Download Mode.
(I only managed to crash the phone in many different ways, but I was really just monkeying around.)
Click to expand...
Click to collapse
Yes, I tried the *#7284# code and changed the USB Path Control to "Modem, USB Diag" and my phone was recognised by the ROM Downloader but the phone was not in download mode.
I have stumbled upon something which may be what we are looking for though, after reverse engineering the Samsung Diagnosis app I notice there are codes to access 'Operator Specific' Admin areas in the app. Take a look at the attached image.
Now as you can see, the values listed cannot be typed into the Diagnosis app as there is a formula to decipher them. I have the formula but cannot get it to work.
Code:
Private Overloads Function GetHashCode(ByVal str As String) As UInteger
Dim num As UInteger = 0
For i As Integer = 0 To str.Length - 1
[B]num = ((num << 5) + num) + str(i)[/B]
Next
Return num
End Function
Now the bit highlighted in bold is the bit I cant get to work.
It gives the following error:
Operator '+' is not defined for types 'UInteger' and 'Char'.
Once someone can help to get this working, reversing the formula should in theory show us the correct *#000# code combination for each area.
Fingers crossed you can crack it!
lyriquidperfection said:
Yes, I tried the *#7284# code and changed the USB Path Control to "Modem, USB Diag" and my phone was recognised by the ROM Downloader but the phone was not in download mode.
I have stumbled upon something which may be what we are looking for though, after reverse engineering the Samsung Diagnosis app I notice there are codes to access 'Operator Specific' Admin areas in the app. Take a look at the attached image.
Now as you can see, the values listed cannot be typed into the Diagnosis app as there is a formula to decipher them. I have the formula but cannot get it to work.
Code:
Private Overloads Function GetHashCode(ByVal str As String) As UInteger
Dim num As UInteger = 0
For i As Integer = 0 To str.Length - 1
[B]num = ((num << 5) + num) + str(i)[/B]
Next
Return num
End Function
Now the bit highlighted in bold is the bit I cant get to work.
It gives the following error:
Operator '+' is not defined for types 'UInteger' and 'Char'.
Once someone can help to get this working, reversing the formula should in theory show us the correct *#000# code combination for each area.
Click to expand...
Click to collapse
I worked on this few days ago, I couldn't reverse the hash function but we had some brilliant ideas how to do it (see the stackoverflow thread about it http://stackoverflow.com/questions/4523553/reversing-a-hash-function)
but I used brute force and extracted some 60 diagnosis codes that you can find here http://www.martani.net/2010/12/windows-7-hacks-all-diagnosis-codes-you.html
and here http://www.martani.net/2010/12/windows-7-hacks-all-diagnosis-codes-you_26.html
This is great stuff martani if there is any way to decipher these ones, they may be worth looking at:
g_ADMIN_GENERIC = 3370684588
g_ADMIN_TMOBILE = 469486183
g_ADMIN_VODAFONE = 474092301
These ones indeed look very interesting and may offer a way to enable ADC or even the Download Mode some people like me have been looking for.
lyriquidperfection said:
This is great stuff martani if there is any way to decipher these ones, they may be worth looking at:
g_ADMIN_GENERIC = 3370684588
g_ADMIN_TMOBILE = 469486183
g_ADMIN_VODAFONE = 474092301
These ones indeed look very interesting and may offer a way to enable ADC or even the Download Mode some people like me have been looking for.
Click to expand...
Click to collapse
Actually the code is a little misleading, if you see closely, the enum HashCodeTable is used nowhere.
The app waits for user input, after each "tap" on a number it calls the function ParseDial() that hashes the input with GetHashCode then calls the function GetEnumFromList() on this hashed value.
In GetEnumFromList, there is no use of HashCodeTable and even the codes you provided are not hard-coded in this function. I am not sure why they are there but as far as I can tell, to access these parts of the diagnosis app, you need another method than dialing a code it seems
martani said:
Actually the code is a little misleading, if you see closely, the enum HashCodeTable is used nowhere.
The app waits for user input, after each "tap" on a number it calls the function ParseDial() that hashes the input with GetHashCode then calls the function GetEnumFromList() on this hashed value.
In GetEnumFromList, there is no use of HashCodeTable and even the codes you provided are not hard-coded in this function. I am not sure why they are there but as far as I can tell, to access these parts of the diagnosis app, you need another method than dialing a code it seems
Click to expand...
Click to collapse
Damn it! Looks like we are back to square one!
Have you seen also on the Samsung Galaxy S the Download mode is disabled on some devices, but some users made a jig where you bridge 2 pins with a certain resistor and it knocks the phone into download mode. Maybe this would work on the Omnia 7 also????
I am hoping for a software based fix rather than hacking together something.
**ALL** diagnostic codes for SAMSUNG devices
I reverse engineered the Diagnostic Menu Application. It contains a list of configuration "Titles" with corresponding hash-codes. I made a tool to reverse the hash-codes to dial-codes. The dial-codes may not be the same as some codes that were already known, but the dial-codes are absolutely correct for these menu. Differences are due to hash-collisions (same hash-code may have multiple possible dial-codes). I just used the shortest dial-codes for every menu.
The list of menu's is very long and I discovered that not all menu-codes were not actually implemented. I guess this list of codes is used for all Samsung devices (possibly also for Galaxy S and older Windows Mobile devices). So not all dial-codes may actually work on your device.
WARNING!! The menu's can configure low-level settings of your phone. And if you don't know what you're doing you may brick your device or maybe hard-reset the device and loose all your data and settings. Or you may faulty calibrate your sensors. Be very, very careful with experimenting!! I will not take any responsibility for damaging your device in any way.
I would personally be very interested if anyone finds a way to get the device in download-mode by using these menu's (I have a bad bootloader which does not let my Samsung Omnia 7 go into download-mode to flash it to a newer firmware).
By the way: the admin menu's are NOT implemented on the Omnia 7 :-(
This is the list with menu-titles, dial-codes and their hashcode:
Code:
FTAMain = 15 (0x686)
QUALCOMM TEST = *09# (0x17DB96)
TMOServiceMenu = *74*# (0x31710C2)
SMDINFO = *#03# (0x30C0953)
SIMPLE FUNCTION TEST = *#05# (0x30C0995)
IMEI NUMBER = *#06# (0x30C09B6)
VIEWHISTORYNW = *#07# (0x30C09D7)
LCDTEST = *#0*# (0x30C082A)
QWERTYTEST = *#1*# (0x30C0C6B)
BATT TEST = *#2*# (0x30C10AC)
BRIGHTNESS TEST = *#3*# (0x30C14ED)
TouchDelta 80 = *#80# (0x30C2AF8)
LIGHTTEST = *#12*# (0x648DBCDD)
BTLOGDUMP = *#232# (0x648E4E87)
WIFI FACTORY TEST = *#526# (0x648FEFED)
RILNETLOG = *#638# (0x649080D1)
RILDUMP = *#745# (0x64911110)
VPHONE770 = *#770# (0x64911D2E)
VPHONE771 = *#771# (0x64911D4F)
VPHONE772 = *#772# (0x64911D70)
VPHONE773 = *#773# (0x64911D91)
VPHONE774 = *#774# (0x64911DB2)
VPHONE775 = *#775# (0x64911DD3)
VPHONE776 = *#776# (0x64911DF4)
VPHONE777 = *#777# (0x64911E15)
VPHONE778 = *#778# (0x64911E36)
VPHONE779 = *#779# (0x64911E57)
SR TEST = *#780# (0x6491216F)
VT DUMP = *#938# (0x649225F4)
Disable Testbed = #12358# (0xFC28BE89)
Enable Testbed = *12358# (0x170067D0)
DEBUGMODE1 = *#0011# (0xF63246F2)
BATTERYINFO = *#0228# (0xF63364DC)
PHONELOOPBACKTEST = *#0283# (0xF6337DBD)
AUDIOTEST2 = *#0289# (0xF6337E83)
FMRADIORX = *#0368# (0xF6340241)
LIGHTSENSORTEST = *#0589# (0xF63523A6)
RRCVERSION = *#0599# (0xF63527E7)
AUDIOTEST = *#0673# (0xF635AB00)
SOUNDTEST = *#0675# (0xF635AB42)
RTC = *#0782# (0xF6363B81)
DEVICETEST = *#0842# (0xF636B6DE)
ILLUMINATIONTEST = *#0843# (0xF636B6FF)
MultiTouch = *#0987# (0xF63754E8)
SWversionFTA = *#1111# (0xF644EBD4)
MOUSETEST = *#121*# (0xF645774E)
SWversionEx = *#1234# (0xF645811A)
MOUSECAL = *#123*# (0xF6457FD0)
MOUSECAL06 = *#126*# (0xF6458C93)
GPSTEST = *#1575# (0xF6473762)
MICROUSB TEST = *#1793# (0xF6485864)
HWversionFTA = *#2222# (0xF6579518)
BANDSELECTION = *#2263# (0xF657A63D)
PHONEDUMP = *#2454# (0xF658BADF)
CAMERAUPDATE = *#2470# (0xF658C2DD)
CAMERADISABLE = *#2480# (0xF658C71E)
NAVIKEY TEST = *#2486# (0xF658C7E4)
INTEGRITY = *#2580# (0xF659537F)
TouchFirmare 2663 = *#2663# (0xF659D7C1)
TouchDelta 2664 = *#2664# (0xF659D7E2)
TouchDelta 2665 = *#2665# (0xF659D803)
RILNETLOG OFF = *#6380# (0xF6A09CC1)
RILNETLOG ON = *#6381# (0xF6A09CE2)
NETLOCK NETWORK = *#6955# (0xF6A3DAE9)
USBPATHCHANGE = *#7284# (0xF6B22965)
POWERONATTACH = *#7298# (0xF6B22E2A)
SELF DIAGNOSTIC MODE = *#7353# (0xF6B2A8E2)
DebugOption = *#7450# (0xF6B334E0)
ERROR REPORT ON = *#7451# (0xF6B33501)
ERROR REPORT VERIFY = *#7452# (0xF6B33522)
NETLOCK SERVICE = *#7755# (0xF6B4DAA8)
VPHONE DISABLED = *#77*0# (0xF6B4AB38)
VPHONE ENABLED = *#77*1# (0xF6B4AB59)
UARTCHANGER = *#9090# (0xF6D54562)
DEBUGDUMP = *#9900# (0xF6DA0E82)
PILEDUMP = *#9901# (0xF6DA0EA3)
NETLOG LOG START = *#9905# (0xF6DA0F27)
DEBUG RIL DUMP = *#9906# (0xF6DA0F48)
ERRORREPCAB INSTALL = *#9907# (0xF6DA0F69)
GUMITEST3G CAB INSTALL = *#9908# (0xF6DA0F8A)
SUWON3G CAB INSTALL = *#9909# (0xF6DA0FAB)
UARTPATH = *#9910# (0xF6DA12C3)
BATTERYMONITOR = *#9911# (0xF6DA12E4)
CONNECTION SETTING = *#9920# (0xF6DA1704)
VERIFYCOMPARE = *#9990# (0xF6DA34CB)
YSSHINTEST = *#9999# (0xF6DA35F4)
VersionScript = 19104#2* (0xD21FC43E)
BLUETOOTH LOG DISABLE = 20652609 (0x1598F3DE)
BLUETOOTH LOG ENABLE = 20652619 (0x1598F3FF)
BT SSPDEbugModeEnable = 20652629 (0x1598F420)
BT SSPDEbugModeDisable = 20652639 (0x1598F441)
OMADMCLIENT LOG DISABLE = 20653609 (0x1599803F)
OMADMCLIENT LOG ENABLE = 20653619 (0x15998060)
CELOG LOG DISABLE = 20654609 (0x159A0CA0)
CELOG LOG ENABLE = 20654619 (0x159A0CC1)
TOTALCALLTIME = 2934331* (0xC35403F3)
RESET CUSTOM = 35180948 (0x77496B66)
RESET FACTORY = 35190718 (0x775B7B02)
ERASE IMEIITEM = 35190728 (0x775B7B23)
IMEI ADJUST = 35190738 (0x775B7B44)
BLUETOOTH RF TEST = 3##65*88 (0xECE73A9E)
BLUETOOTH AUDIO TEST = 3##65*98 (0xECE73ABF)
AutoSimSetting = 40*047#3 (0xD1C556DF)
PVKKey = 40*549#3 (0xD21FD9E6)
RESET FACTORY WITHDEFAULTLANGUAGE = 76264513 (0x777E1362)
NONSLEEPCALL OFF = *#069*0# (0xBCEBFF49)
NONSLEEPCALL ON = *#069*1# (0xBCEBFF6A)
LEDTEST = *#14789# (0xBF1C1ADD)
DMSessionInit = *#15428# (0xBF2C7494)
CIPHERING = *#32489# (0xC3A095FA)
CAMERAUPDATESVC = *#32589# (0xC3A1225B)
LOGDUMPMGR = *#33284# (0xC3B19514)
SR DISABLED = *#780*0# (0xCD5F5D49)
SR ENABLED = *#780*1# (0xCD5F5D6A)
NETLOCK SUBSET = *#78255# (0xCD60A57B)
LAUNCH UAEDIT = *#92782# (0xD1A12DFC)
PdaBuildTime = *#99820# (0xD2204C1C)
VersionTime = *#99821# (0xD2204C3D)
WIFI TEST = 0373385#6 (0xECE73BA6)
EN LOCK NW = 074578132 (0xBBF27D35)
GCFTESTMODE ENTER = 086#58023 (0x1807BAE3)
FILE SYSTEM TEST = 089559715 (0x28F3F681)
AUDIOGAINCONTROL = 08#766104 (0x902D68E3)
DIS LOCK SUB NW = 17#991#3* (0x1D45A6AE)
PVKFileName = 18*357#25 (0x161B193C)
EN LOCK SUB NW = 193582504 (0xBC073A15)
GPSTESTTOOL = 1#8865#55 (0xF61EC09C)
EN LOCK CORP = 1*0273411 (0xF62C007D)
EN LOCK SVC = 1*0278411 (0xF62EBE62)
DIS LOCK NW = 20789802* (0x1D30E9CE)
SellOutSMS = 2615#0922 (0xD04CA8DE)
TFlashUnPairing = 30334*733 (0x51B892C4)
DIS LOCK SVC = 38025*93# (0xCA957BDB)
GPSTESTTOOL2 = 400#40*08 (0xB9F6D60D)
GPSTESTXTRA = 400#40*18 (0xB9F6D62E)
SerialNumber = 5317*0648 (0x6E256D8C)
EN LOCK SIM = 5494585*3 (0xBC051995)
SERVERURL = 553378683 (0xD8389060)
SLIDECOUNT = 584644021 (0xF0BF3052)
SellOutSMSTestMode = 597#*224# (0x96E7B26D)
APPSLAUNCHER = 5**6244*3 (0x33B0B76)
SLOGSERIAL M2 = 66#6757#1 (0x7050E07C)
AutoReceive Enable = 7160*5088 (0xEF2C5E0D)
TESTMODE = 718071#49 (0x8A09ACC8)
RESET SERVICE = 72673#00# (0xEC5B4BEF)
ReactivateSellOutSMS = 74201#086 (0x807DB65F)
AUDIOCODEC = 7#16#1#37 (0x902D68C2)
ADMIN GENERIC = 838*5448* (0xC8E890AC)
SLOGSERIAL ALL ON = 8644*3081 (0x705107AC)
VT MANUALSETTING = 8802*7*5# (0x104384B5)
DISLOCK SIM = 98217*243 (0x1D43862E)
DMTESTMENU = 9#7357764 (0x414D9633)
SLOGSERIAL ALL OFF = #22#6214# (0x7050E03A)
SLOGSERIAL M1 = #22#6215# (0x7050E05B)
SLOGSERIAL M3 = #22#6217# (0x7050E09D)
SLOGSERIAL M4 = #22#6218# (0x7050E0BE)
SLOGSERIAL M5 = #22#6219# (0x7050E0DF)
ADMIN VODAFONE = #75471648 (0x1C42130D)
DisableSellOutSMS = *4587*676 (0x903477AF)
BLUETOOTH SEARCH TEST = *#232333# (0xECE73AE0)
RANDOM BT MAC = *#232336# (0xECE73B43)
BLUETOOTH MAC VIEWER = *#232337# (0xECE73B64)
WIFI MAC VIEWER = *#232338# (0xECE73B85)
PRECONFIGURATION = *#638738# (0x213EF313)
SELF DIAGNOSTIC MODE DISABLE = *#7353*0# (0x6E008D7C)
SLOGSERIAL M6 = *#745*06# (0x7050E100)
DIS LOCK CORP = 00*2*2#524 (0xCA92BDF6)
ADMIN TMOBILE = 0612824763 (0x1BFBCA67)
AutoReceive Disable = 09925572#3 (0xD4B8217D)
SWversionIn = 1309653522 (0xECB23FC4)
GPSTTFFTESTTOOL = 154*068271 (0xF61EBC7C)
SellOutSMSProductionMode = 1#3341#5#0 (0x96D7C68A)
LOCK STATUS INFO = 28##**23*0 (0x7D8C72E3)
SWversionNewIn = 32456464#7 (0xFD58D7FC)
Heathcliff74 said:
I reverse engineered the Diagnostic Menu Application. It contains a list of configuration "Titles" with corresponding hash-codes. I made a tool to reverse the hash-codes to dial-codes. The dial-codes may not be the same as some codes that were already known, but the dial-codes are absolutely correct for these menu. Differences are due to hash-collisions (same hash-code may have multiple possible dial-codes). I just used the shortest dial-codes for every menu.
Click to expand...
Click to collapse
Can you share how did you reverse the hash function? I worked on this some time ago but finally just brute forced it to extract the keys.
I would also like to know how he reversed the hash codes! I tried for hours and had no luck!
Haha.. Well, I first tried to calculate the original dial-codes, but that seems to work only for dialcodes shorter than 8 digits (5 bits per digit, 32 bits hash-code = 32 / 5 = 7 digits + 1 digit for the extra add):
Code:
uint hash = 0; // enter hash here
string DialCode = "";
while (hash > 0)
{
uint digit = (hash % 33) + 33;
if (digit > hash)
hash = 0;
else
hash = (hash - digit) / 33;
DialCode = Convert.ToChar(digit) + DialCode;
}
return DialCode;
But this does not work for long dial-codes. So after that I just made a little program to brute-force it. I copied the enum with menu-titles and hash-codes to my project. Then I used reflection to populate a sortedlist. Then I started to brute-force and check all dialcodes for their hashcode and see if it exists in the list. If it exists, I add it to a textbox and remove the item from the list. That's it. So it is not really reversed, but my program took about an hour to get dial-codes for all the hashcodes in the enum.
Code:
SortedList<uint, string> hashCodes = new SortedList<uint, string>();
int l = typeof(HashCodeTable).GetEnumNames().Length;
string[] menunames = typeof(HashCodeTable).GetEnumNames();
for (int i = 0; i < l; i++)
{
try
{
hashCodes.Add(Convert.ToUInt32(Enum.Parse(typeof(HashCodeTable), menunames[i])), menunames[i].Substring(2).Replace('_', ' '));
}
catch { }
}
char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*' };
for (int length = 1; length <= 20; length++)
{
ushort[] digits = new ushort[length];
for (int i = 0; i < length; i++) digits[i] = 0;
while (true)
{
// calc hash
uint hashCode = 0;
for (int i = 0; i < length; i++)
{
hashCode = ((hashCode << 5) + hashCode) + chars[digits[i]];
}
if (hashCodes.ContainsKey(hashCode))
{
int m = hashCodes.IndexOfKey(hashCode);
string str = "";
for (int j = 0; j < length; j++)
str = str + chars[digits[j]];
textBox1.Text = textBox1.Text + hashCodes.Values[m] + " = " + str + " (0x" + hashCode.ToString("X") + ")" + Environment.NewLine;
hashCodes.RemoveAt(m);
}
// increase
digits[length - 1]++;
for (int k = length - 1; k >= 0; k--)
{
if (digits[k] >= 12)
{
if (k == 0)
break;
else
{
digits[k] -= 12;
digits[k - 1]++;
}
}
}
if ((digits[0] >= 12) || (hashCodes.Count == 0)) break;
}
if (hashCodes.Count == 0) break;
}
Excellent stuff! Thank you for this very interesting code snippit!
WP7 diag codes
martani said:
Actually the code is a little misleading, if you see closely, the enum HashCodeTable is used nowhere.
Click to expand...
Click to collapse
This is because the compiler optimized out the switch statement and compiled the constants into the IL code for the hash codes.
Within the main switch statement where keypad entries are evaluated there are ~112 codes and I've reversed all of them. Writing hash algorithms is not straightforward and it's quite a simple one, since my app captured 2-3-4 variants of keycodes for the same hash value.
Regarding the most interesting entries at the top of the enum the ADMIN_ entries...those hash values are not handled by the application, maybe Samsung has another diag app or a different app which is using the same method.
The other thing I can think of is there are APIs in the diag app which one is sending the hash of a keycode to the given driver...I tried that but the ADMIN stuff did not worked that way either :-((
If anyone is interested I can post the resolved codes, but not sure if I can post it in the forum or not ;-)
Regsitry entry to enable SLDR mode
I found this definition in B44C7A84-5068-4b43-A1E5-F870A80F6FF8.rgu:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\UsbFn]
...
"OsMode"=dword:0 ; 0 for Main OS, 1 for SLDR
....
Is the download mode == SLDR mode?
Since maybe we can set this entry "somehow", and upon next reboot we will get into download mode so we can flash the device?
So the question is, what is SLDR mode? Secure Loader mode? I don't know this, a more pro in this area should help out ;-)
UPDATE
I was able to read the value (0) and write it back (0). Did not tried to write 1 there
Hey guys. I know this thread is about programmatically enter downloadmode, but I wanted to try the 301k resistor trick and I can confirm it works on Samsung Omnia 7.
I used this guide. If you're gonna do that too, then you should pay attention to these things:
- The guide refers to pin 4 and 5 being closest to the headphone socket. But on the omnia 7, the headphone and micro-usb sockets are the other way around if you compare it to the Galaxy S. The guide is for the Galaxy S, so you should really pay attention to which pins you solder the resistor(s). This is the best picture on how you should solder the resistor(s).
- Many micro-usb cables have no wire for pin 4. Some connectors don't even have a pin 4. You should first verify that your connector has all 5 pins. If you only have 4 wires, then you have to dismantle the connector and solder directly on the back of the connector.
I switched off my Omnia 7. I plugged in my jig and it went to downloadmode immediately.
It's late now, so I will see tomorrow what I will be going to flash on it. There quite a few roms and I'm not sure which one I should use. I have to figure that out first.
If anyone has questions about how to make a jig, just ask. I know how to make one now.
You should post pictures, how to make such a cable. Thanks
FromOuterSpace said:
You should post pictures, how to make such a cable. Thanks
Click to expand...
Click to collapse
The picture I linked to in my previous post look pretty clear to me. It shows what pins you have to use. The guide I linked to contain all the other necessary details. If you have any specific questions about something that is still not clear, you can ask me.

GPS Problems with my Defy

Hi there.
I've read through the Forum now and i just have a few questions now about my GPS Connection.
First i never had an actual fixed position. So every time i try to get my Position it takes very long till Apps like GPS Status oder GPS Test have 1 or 2 Satellites. Right now i have my Defy at the Window with clear sky for about 6 hours while GPS Status running and there are only 2 Satellites but no fix.
I also made an reset of the GPS Data and downloaded the actual AGPS Data with "GPS Status" but nothing really helps.
Do you have any other suggestions?
As my Phone finds some few Sats i dont think its an hardware issue or am i wrong?
BTW: Im using Pays 5.1 Rom
Greetz
Chris
Look in your location.cfg file. It's in /system/etc/
What's does it say under hslp_address?
Jokerchris2000 said:
Hi there.
I've read through the Forum now and i just have a few questions now about my GPS Connection.
First i never had an actual fixed position. So every time i try to get my Position it takes very long till Apps like GPS Status oder GPS Test have 1 or 2 Satellites. Right now i have my Defy at the Window with clear sky for about 6 hours while GPS Status running and there are only 2 Satellites but no fix.
I also made an reset of the GPS Data and downloaded the actual AGPS Data with "GPS Status" but nothing really helps.
Do you have any other suggestions?
As my Phone finds some few Sats i dont think its an hardware issue or am i wrong?
BTW: Im using Pays 5.1 Rom
Greetz
Chris
Click to expand...
Click to collapse
there are two config files can solve your problem,
Use RE replace the two files, you can solve the proble
/data/location/location.cfg
/etc/location.cfg
find the two files in bbs.
hi,
it's easy: go edit the SUPL address
These are the hslp lines:
hslp_address = supl1s.motorola.com:7275
default_hslp_address = supl1s.motorola.com:7275
This is in my complete location.cfg:
[LCS FDB]
DL_DB_FEATURE_ID_LOCATION_AVAILABLE = 1
DL_DB_FEATURE_ID_LOCATION_ON_OFF_AVAILABLE = 1
DL_DB_FEATURE_ID_LOCATION_STATE = 1
[LCS SEEM]
DL_LCS_CAPABILITY_MSBASED_AGPS = 1
DL_LCS_CAPABILITY_MSASSIST_AGPS = 1
DL_LCS_CAPABILITY_CONV_AGPS = 1
DL_LCS_CAPABILITY_MSBASED_OTDOA = 0
DL_LCS_CAPABILITY_MSASSIST_OTDOA = 0
DL_LCS_CAPABILITY_CELLID = 1
DL_LCS_NETWORK_3GPP = 1
DL_LCS_NETWORK_X1 = 0
DL_LCS_NOTIFY_VERIFY_CAPABILITY = 1
DL_LCS_SS_MOLR_CAPABILITY = 0
DL_LCS_X1_ERROR_RETRY_PROVISIONING = 0
DL_LCS_NETWORK_SUPL = 1
DL_LCS_SUPL_SECURITY_ON = 1
DL_LCS_WHITELIST_ENABLED = 0
DL_LCS_SUPL_TRACK_ENH = 1
DL_LCS_PREF_POSMETHOD = 0
DL_LCS_SUPL_MT_TEST = 0
DL_LCS_SUPL_FALLBACK_TO_3GPP = 0
DL_LCS_SUPL_DEBUG_INDICATIONS = 0
DL_LCS_SUPL_MT_OFF = 1
DL_LCS_SUPL_CARRIER_INDEPENDENT = 1
DL_LCS_3GPP_USER_STATUS_OVERRIDE = 1
hslp_address = supl1s.motorola.com:7275
default_hslp_address = supl1s.motorola.com:7275
http_post_address = https://supl1fp.motorola.com:7272
DL_LCS_DEFAULT_DATA_PROFILE = CingularWap
DL_LCS_SUPL_SESSION_PREP_TIMER_LEN = 1
3GPP_LOG_FLEX_ENABLED = 1
SHIM_LOG_FLEX_ENABLED = 1
SUPL_LOG_FLEX_ENABLED = 1
DL_LCS_CAPABILITY_NOTVER_UPGRADE = 0
DL_LCS_SUPL_VERSION = 1
DL_LCS_CAPABILITY_MO_MSB_SUPL = 1
DL_LCS_CAPABILITY_MO_MSA_SUPL = 1
DL_LCS_SUPL2_DATA_INACTIVITY_CLOSE_TIMER = 300
DL_LCS_SUPL_FALLBACK_SERVER = 0
fallback_hslp_address = supl.google.com:7276
DL_LCS_SUPL_FALLBACK_SECURITY_ON = 0
DL_LCS_SUPL_FALLBACK_CARRIER_INDEPENDENT = 0
DL_LCS_FORCE_PURE_MSA = 1
[GPS DRV]
leap_seconds = 15
ref_pos_unc_valid = 1
ref_pos_semi_major_unc = 83
ref_pos_semi_minor_unc = 83
ref_pos_altitude_unc = 47
ref_time_unc_valid = 1
ref_time_unc = 145
[CAIDL]
ACTIVE_TRANS_OFFSET = 1000
MIN_WAKEUP_OFFSET = 3000
MAX_WAKEUP_OFFSET = 10000
WAKEUP_OFFSET_PCT = 10
DRV_RSP_INTERVAL = 1000
STOP_TIMEOUT = 2000
APP_REQ_GUARD_OFFSET = 1000
DRV_RSP_GUARD_OFFSET = 4000
SUPL_TRACK_ENH_TIMEOUT = 60000
ASSIST_GATE_TIMEOUT = 20000
IDLING_TIMEOUT = 5000
MIN_EARLY_RANGES = 6
LOC_LOG_LEVEL = 4
DRV_LOG_TO_SP = 0
DRV_LOG_LEVEL = 0
DISABLE_START_DRV_FROM_SP_BOOT = 1
IS_VALID_LAST_DRV_TCXO = 0
LAST_DRV_TCXO = 0
HW_AFC = 1
TTF_3GPP_LATENCY_OFFSET = 1000
INJECT_TCXO = 0
MIN_RANGES_USEFUL_COARSE = 16
LOC_LEARNING = 1
LOC_LEARNING_MAX_SIZE = 50
VCTXO_UNC_VALUE = 299
SHARED_TCXO_ENABLED = 1
NO_FIX_EARLY_WAKEUP = 60000
MIN_NAV_REQ_INTERVAL = 3600000
HTTP_POST_INTERVAL = 30
HTTP_POST_RETRY_INTERVAL = 60
HTTP_POST_RETRY_MAX = 4
LBS_PERSISTENT_COLD_START = 0
DL_LCS_NMEA_HAL = 0
LAST_SECURE_GPS_TIME = 0
LAST_SECURE_GPS_TIME_THRESHOLD = 1209600
MIN_EARLY_RANGES_HOLDOFF_S = 9
Beach_Head said:
Look in your location.cfg file. It's in /system/etc/
What's does it say under hslp_address?
Click to expand...
Click to collapse
Sent from my MB525 using XDA App
From where can i get the origina files?
[email protected] said:
there are two config files can solve your problem,
Use RE replace the two files, you can solve the proble
/data/location/location.cfg
/etc/location.cfg
find the two files in bbs.
Click to expand...
Click to collapse
Ok after a little bit of research i've edited the locations.cfg files in /data/locations, /etc/ and /system/etc/
I've changed the server to supl.google.com:7276 in all the files.
But still i dont get a GPS Fix...
Jokerchris2000 said:
Ok after a little bit of research i've edited the locations.cfg files in /data/locations, /etc/ and /system/etc/
I've changed the server to supl.google.com:7276 in all the files.
But still i dont get a GPS Fix...
Click to expand...
Click to collapse
maybe u can try flashing another firmware, chinese2.2(need GMS update), uk2.2, tmobile(usa)2.2 etc.
it should work.
tommy1992 said:
maybe u can try flashing another firmware, chinese2.2(need GMS update), uk2.2, tmobile(usa)2.2 etc.
it should work.
Click to expand...
Click to collapse
Tried some of these Roms but with no one i get a gps fix.
Dunno what to do....
Faulty Hardware?
I had the same problem with my Samsung Galaxy S.
Sent from my MB525 using XDA App
I had the same problem as you, try in the evening and go outside, not on window.
stapuv said:
I had the same problem as you, try in the evening and go outside, not on window.
Click to expand...
Click to collapse
Did it worked then for u? What exactly was your method and how long did it take?
Jokerchris2000 said:
Did it worked then for u? What exactly was your method and how long did it take?
Click to expand...
Click to collapse
i now first time when i try activate my igo aplication it didn't work and I thought i have to take the phone to warranty, but it didn't work inside the house only outside .... try.
Satfix needs up to 5 minutes outside or in the car. After that time it should work.
It´s the same with eclair (original) and froyo (3.4.2.-155, deodexed, rooted).
Have you tried to active the A-GPS support (Menu>Settings>Location&security and you should check Use wireless networks). By doing so it will help your device to "find" the GPS satellites in a shorter time.
Jeah i tried really everything.
Finally i think it must be a hardware defect. Cause still after 1-2 hours outside i only get 2 satellites... Change location.cfg, reset and downloaded A-GPS data, tried in fligh safe mode as someone suggested, had all the wireless stuff on etc.
Still no Fix.
Now i think i have to find a way to get back to a 2.1 ROM. Im Currently on 3.4.3-11
Just got 9/10 satellites in 10 sec on Pays-rom v5.0 in cold start.
In cold start gps you need to have 3G/Wifi enabled and available to download your current gps data. So your GPS might work at home but slower or not at all in areas where 3G/Wifi is n/a. You can simulate this in GPS Status: disable GPS, 3G and Wifi --> reset your GPS data in GPS Status and try to get a fix. After a few minutes I had 0/7 but no fix Took more than 5 min to get one. Resetted GPS data again --> disabled/enabled GPS -->Enabled WiFi and/or 3G --> downloaded GPS data in GPS Status --> voilà: GPS fix in 10 sec again.

Categories

Resources