2013-02-07 4 views
1

Je travaille sur un projet plus important, dont la partie est de créer un logiciel pour le scanner Motorola MC9596, mais je suis bloqué avec la transmission de données par GPRS via un serveur FTP.Composer RAS à partir du périphérique WinCE

Pour cela j'utilise OpenNETCF.

Le problème est que je n'arrive pas à établir la connexion avec l'entrée que j'ai créée. Cela signifie qu'il ya 2 entrées dans le répertoire de l'appareil, test1 - généré par le dispositif, lorsque j'ai configuré la connexion sur l'appareil manuellement et test2, qui a été créé à l'aide programatically:

private const string CONNAME = "test2"; 
private const string PHONENR = "~GPRS!xxx.xxx-xxxxxxxx.eu"; 
private const string USER = "xx"; 
private const string PWD = "xx"; 
private const string DEVICE_TYPE = "modem"; 
private const string DEVICE_NAME = "Cellular Line"; 

private void createConnectionEntry() 
{ 
    RasEntry rasEnt = new RasEntry() 
    { 
     Name = CONNAME, 
     CountryCode = 0, 
     AreaCode = "", 
     PhoneNumber = PHONENR, 
     DeviceName = DEVICE_NAME, 
     DeviceType = DEVICE_TYPE, 
     IPAddress = "0.0.0.0", 
     IPAddressDns = "0.0.0.0" 
    }; 

    /*rasEnt.Options |= (int)ConnectionOptions.UseCountryAndAreaCodes; 
    rasEnt.Options |= (int)ConnectionOptions.UseLogonCredentials;*/ 
    rasEnt.Options = 4194304; 

    RasDialParams dialParams = new RasDialParams() 
    { 
     UserName = USER, 
     Password = PWD, 
    }; 

    cEntry = Ras.CreateEntry(rasEnt, dialParams); 
} 

Note « rasEnt.Options = 4194304 », ce qui était codé en dur, pour avoir une copie exacte des paramètres générés par l'appareil en configurant la connexion manuellement. Strange est, que si je compare 2 entrées en mode débogage, les deux sont égaux - ce qui signifie que toutes les propriétés sont égales, la seule différence est Nom. Je suis sûr à ce sujet, utilisé aussi la réflexion, pour comparer des objets.

Je compose avec connexion:

RasError re = cEntry.Dial(false, new RasDialParams(CONNAME, USER, PWD)); 

Dans le cas où je reçois Test1 "succès", en cas d'erreur Test2 "inconnue".

Pourriez-vous m'aider s'il vous plaît avec ce vilain problème?

+0

Où est l'APN dans vos paramètres? –

+0

J'ai ajouté plus de détails au code source. – HoGo

+0

Que se passe-t-il si vous supprimez test1 et test2, puis recréer seulement test2? Est-ce que test2 fonctionne alors? –

Répondre

1

Pour l'instant je me suis terminé avec l'ajout manuel des entrées de registre nécessaires - juste vérifié la différence dans le registre avant et après la création de la connexion. Pas une solution propre, mais n'en a pas trouvé d'autre. Il semble fonctionner stable, je peux composer la connexion créée de cette façon. Je verrai, si c'est OK en phase productive.

0

Le problème principal est de composer le code: Pendant que j'essayais j'ai fait face à d'autres problèmes. Bien que le code ci-dessus de Hogo, beaucoup aidé, mais il y a quelques conseils qui seraient utiles pour le codage sans tracas:

Tout d'abord les conseils suivants vous oblige à composer votre connexion manuellement et tester votre internet en exécutant un site Web sur votre Internet Explorer. Si Internet fonctionne, alors vous êtes bon d'aller le composer à travers le code.

Pour le faire manuellement:

Faire une nouvelle connexion nommée « GPRS » à l'aide « Réseau et connexions commutées » (utilisez ce lien: http://www.e-consystems.com/gprs.asp). Si vous utilisez airtel SIM changer baudarate de 19200 à 115200. Connectez-le et vérifiez si internet fonctionne.

Composition par code:

  1. Lorsque vous créez une connexion nommée "GPRS" manuellement, 3 registres sont effectués sous le dossier GPRS. (HKEY_CURRENT_USER \ Comm \ RasBook \ GPRS). ces dossiers ne peuvent pas être affichés normalement. Nécessite une application à installer dans le PDA qui lit les registres. Il n'est pas nécessaire de voir ce qui est à l'intérieur, si vous les téléchargez ensuite en fonction des versions de Windows.

  2. Sur 3 registres créés, seuls deux d'entre eux sont pertinents (DevCfg et Entrée). Une fois que vous avez composé et connecté manuellement à Internet, copiez les données des registres DevCfg et Entry dans un fichier texte (DevCfg.txt et Entry.txt) afin de pouvoir les copier ultérieurement. Pour copier vers/depuis des registres vers un fichier texte, utilisez: RegQueryValueEx (...), RegOpenKeyEx (..), RegSetValueEx (...) Et d'autres fonctions pertinentes (voir http://msdn.microsoft.com/en-us/library/windows/desktop/ms724911%28v=vs.85%29.aspx)

Par exemple: Lire registre et écrire dans le fichier texte:

public static bool ReadRegString(IntPtr hKey, string lpszSubKey, string lpValueName) 
    { 
     try 
     { 
      string str = ""; 
      byte[] lpData = new byte[684]; 
      uint lpcbValue = 684; 
      uint dwType = Utils.REG_BINARY; 
      IntPtr phkResult = new IntPtr(); 
      Utils.RegOpenKeyEx(hKey, lpszSubKey, 0, 0, ref phkResult); 
      if (phkResult != IntPtr.Zero) 
      { 
       int x = Utils.RegQueryValueEx(phkResult, lpValueName, 0, ref dwType, lpData, ref lpcbValue); 
       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < 684; i++) 
       { 
        if (i != 683) 
         sb.Append(lpData[i].ToString() + "|"); 
        else 
         sb.Append(lpData[i].ToString()); 
       } 
       using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(filePath)) 
       { 
        outfile.Write(sb.ToString()); 
       } 
       Utils.RegCloseKey(phkResult); 
     } 
    } 

if (Utils.ReadRegString(Utils.HKEY_CURRENT_USER, @"Comm\RasBook\GPRS", "DevCfg")) 
     { 
      textBoxSysVers.Text = "Succeeded Make Text File."; 

     } 
  1. maintenant composer avec make code nous utilisons des RASENTRY (ajouter des bibliothèques neccessary; vérifier réponse Hogo dans Making GPRS Connection programmatically using C# for windows CE 5.0?)

a) créer un objet RASENTRY

b) Copier les données du fichier texte créé "Entry.txt et DevCfg.txt" pour enregistrer les entrées et les devCfg de manière ré- férée.

c) Composez RasError re = cEntry.Dial (...)

Pour exmaple:

private const string CONNAME = "GPRS"; 
    private const string PHONENR = "*99#"; 
    private const string USER = "xx"; 
    private const string PWD = "xx"; 
    private const string DEVICE_TYPE = "modem"; 
    private const string DEVICE_NAME = "Cellular Line"; 

{ RasEntry cEntry = new RasEntry() 
    { 
     Name = CONNAME, 
     CountryCode = 91, 
     AreaCode = "120", 
     PhoneNumber = PHONENR, 
     DeviceName = DEVICE_NAME, 
     DeviceType = DEVICE_TYPE, 
     IPAddress = "0.0.0.0", 
     IPAddressDns = "0.0.0.0",Options=4194304 
    }; 

     RasDialParams dialParams = new RasDialParams() 
     { 
      UserName = USER, 
      Password = PWD, 
      EntryName = CONNAME, 
      Domain = " " 
     } 

     if (Utils.WriteRegValue(Utils.HKEY_CURRENT_USER, @"Comm\RasBook\GPRS", "DevCfg","Entry",3)) 
     { 
      RasError re = cEntry.Dial(false, new RasDialParams(CONNAME, USER, PWD)); 

      RasError rs = re; 
      textBoxInfo.Text = re.ToString() + " : Dial Status"; 
      if(rs.ToString()=="Success") 
      textBoxInfo.Text = cEntry.Status.State.ToString() + " : Dial Status"; 
     } 
    } 

public static Boolean WriteRegValue(IntPtr hKey, string lpszSubKey, string lpValueName1, string lpValueName1,uint dwType) 
    { 
     int iOper = 1; 
     filePath = @"`enter code here`\DevCfg.txt"; 
     IntPtr phkResult = new IntPtr(); 
     Utils.RegOpenKeyEx(hKey, lpszSubKey, 0, 0, ref phkResult); 
     if (phkResult == IntPtr.Zero) 
     { 
      int iSecurity = 0; 
      int dwDisp = 0; 
      RegCreateKeyEx(hKey, lpszSubKey, 0, null, 0, 0, ref iSecurity, ref phkResult, ref dwDisp); 
     } 
     if (phkResult != IntPtr.Zero) 
     { 
      byte[] bytes = new byte[684]; 
      string[] text = new string[684]; 
      using (System.IO.StreamReader streamReader = new System.IO.StreamReader(filePath, Encoding.UTF8)) 
      { 
       text = streamReader.ReadToEnd().Split('|'); 
      } 
      for (int i = 0; i < 684; i++) 
      { 
       bytes[i] = Convert.ToByte(Convert.ToInt32(text[i])); 
      } 
      iOper = Utils.RegSetValueEx(phkResult, lpValueName1, 0, dwType, bytes, (uint)bytes.Length); 
      Utils.RegCloseKey(phkResult); 

}}

// similairement faire de lpValueName2

}}

La différence entre le code de hogo et ceci est que RasEntry n'est pas créé ici. Il est alimenté à partir de registres. J'ai fait face à des difficultés lors de la création d'objet et donc de la suggestion. J'espère que ça aide :)

Questions connexes