IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Mobile .NET Discussion :

Transfert de fichiers entre 2 PDAs par USB.


Sujet :

Windows Mobile .NET

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut Transfert de fichiers entre 2 PDAs par USB.
    Hello,

    je dois transférer des fichiers entre 2 PDAs reliés par un cable USB.

    J'ai réussi à le faire en modifiant les paramètres de windows par l'IHM de windows. Il suffit de passer un PDA en mode host et un autre en mode client. Dans le mode client, il faut choisir l'option Mass storage et choisir le répertoire que l'on veut mappé sur PDA Host. (il y a le choix entre les repertoires Storage Card, Application, Cache Disk).

    Ce que j'aimerais, c'est arrivé à changer cette configuration dans un programme c# pour pouvoir passer d'une configuration à l'autre. Et là, je cale.

    La seule modification trouvé pour l'instant est cette clé dans la base de registre :
    LocalMachine\Drivers\BuiltIn\OTG\Settings\PortMode

    pour passer du mode client au mode host et inversement.
    Seulement, avec juste cette modification, le répertoire du PDA client ne se mappe pas.

    Quelqu'un aurait-il déjà réalisé ce genre de chose ou aurait une piste ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    pas fait mais j'ai trouvé ceci si ça peut t'aider... :
    http://nicolasbesson.blogspot.com/20...-switcher.html

    moi j'aimerais bien faire de la com série au travers du rndis, tu sais comment on fait en gros ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Hello,

    Merci pour ta réponse ! J'ai pas encore testé mais ça a l'air d'être ce que je recherche, où au moins ça me donnera des pistes !

    Pour ton prob de rndis, malheureusement je ne m'y connais pas trop en dev mobile, c'est l'un de mes premiers projets donc je n'ai pas vraiment d'idée....

    Désolé...

  4. #4
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Aie, je ne suis pas arrivé à adapter le code...

    Dans le code que tu m'as donné, si j'ai bien compris, l'idée est de chargé un driver puis de la passer à la fonction DeviceIoControl pour charger le "profil".

    Mon souci, c'est que je ne sais pas comment retrouver le driver que je cherche... Donc en attendant, j'ai adapté le code en C#, voilà comment j'ai fait (je ne sais pas si c'est juste...)

    Tout d'abord les imports pour pouvoir utiliser les fonctions DeviceIoControl et autres joyeusetés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    [DllImport("coredll.dll", EntryPoint = "DeviceIoControl", SetLastError = true)]
            [return: MarshalAs(UnmanagedType.Bool)]
            internal static extern bool DeviceIoControl(
                IntPtr hDevice,
                uint dwIoControlCode,
                byte[] lpInBuffer, // LPVOID lpInBuffer - any input data required for the IOCTL
                int nInBufferSize,
                byte[] lpOutBuffer,
                int nOutBufferSize,
                ref ulong lpBytesReturned,//ref int lpBytesReturned,
                IntPtr lpOverlapped);
     
            [DllImport("coredll.dll")]
            public static extern IntPtr FindFirstDevice(
                [In] DeviceSearchType searchType,
                [In] IntPtr searchParam,
                [In, Out] ref DEVMGR_DEVICE_INFORMATION pdi);
     
            [DllImport("coredll.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode,
                        IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes,
                        IntPtr hTemplateFile);
     
            [DllImport("coredll.dll")]
            private static extern bool CloseHandle(IntPtr handle);
    Et le passage qui ne va pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                string searchParamString = "Serial_Class";
                IntPtr pguidBus = Marshal.AllocHGlobal(searchParamString.Length);
                pguidBus = Marshal.StringToBSTR(searchParamString);
     
                DEVMGR_DEVICE_INFORMATION pdi = new DEVMGR_DEVICE_INFORMATION();
                pdi.dwSize = (uint)Marshal.SizeOf(
                    typeof(DEVMGR_DEVICE_INFORMATION));
     
                IntPtr hf = FindFirstDevice(//DeviceSearchType.
                    searchType,
                    pguidBus,
                    ref pdi);
    Là je n'arrives pas à ce que la fonction FindFirstDevice me retourne un driver...

    Du coup, j'ai avancé (peut-être) mais ça ne marche pas encore. Si ça parle à quelqu'un, je lui serais (très) reconnaissant de me donner quelques infos

    Edit : Apparemment, tous les drivers du PDA sont listés dans la base de registre (HLM\Drivers\active)

    J'ai pu donc identifier 3 drivers suceptibles de correspondre à mes besoins :
    DSK3: pour passer la carte SD en mass storage ?
    UFN1: pour activeSync ?
    OTG1 : ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    1er réussite : adaptation du code du lien fourni par pikadon !

    Grace à ça, je suis arrivé à passer l'état Hote à Client et en plus à choisir si je veux que le PDA soit utilisé avec Active Sync ou en tant que "Mass Storage". Ca donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    [DllImport("coredll.dll", EntryPoint = "DeviceIoControl", SetLastError = true)]
            [return: MarshalAs(UnmanagedType.Bool)]
            internal static extern bool DeviceIoControl(
                IntPtr hDevice,
                uint dwIoControlCode,
                IntPtr lpInBuffer, // LPVOID lpInBuffer - any input data required for the IOCTL
                int nInBufferSize,
                byte[] lpOutBuffer,
                int nOutBufferSize,
                ref uint lpBytesReturned,//ref int lpBytesReturned,
                IntPtr lpOverlapped);
     
            [DllImport("coredll.dll")]
            public static extern IntPtr FindFirstDevice(
                [In] DeviceSearchType searchType,
                [In] IntPtr searchParam,
                [In, Out] ref DEVMGR_DEVICE_INFORMATION pdi);
     
            [DllImport("coredll.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode,
                        IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes,
                        IntPtr hTemplateFile);
     
     
     
            [DllImport("coredll.dll")]
            private static extern bool CloseHandle(IntPtr handle);
     
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public struct UFN_CLIENT_NAME
            {
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
                public string szName;
            }
     
            public IntPtr GetUfnController(string name)
            {
                IntPtr hUfn = IntPtr.Zero;
                DeviceSearchType searchType =
                    DeviceSearchType.DeviceSearchByDeviceName;
                string searchParamString = "";
     
                if (searchParamString == "")
                    searchParamString = name;
     
                IntPtr pguidBus = Marshal.AllocHGlobal(searchParamString.Length);
                pguidBus = Marshal.StringToBSTR(searchParamString);
     
                DEVMGR_DEVICE_INFORMATION pdi = new DEVMGR_DEVICE_INFORMATION();
                pdi.dwSize = (uint)Marshal.SizeOf(
                    typeof(DEVMGR_DEVICE_INFORMATION));
     
                IntPtr hf = FindFirstDevice(//DeviceSearchType.
                    searchType,
                    pguidBus,
                    ref pdi);
     
               //AnalyseDevice(hf, pdi);
     
                if ((int)hf != -1) 
                {
                    hUfn = CreateFile(pdi.szBusName,
                        0x80000000,//GENERIC_READ,  // Open for reading
                        0,//FILE_SHARE_READ,        // Share for reading
                        IntPtr.Zero,//NULL,         // No security
                        3,//OPEN_EXISTING,          // Existing file only
                        0,//FILE_ATTRIBUTE_NORMAL,  // Normal file
                        IntPtr.Zero);//NULL);       // No template file
     
                    CloseHandle(hf);
                }
                else 
                {
                    MessageBox.Show("FindFirstDevice failed ! : "+Marshal.GetLastWin32Error());
                    //hUfn = (System.IntPtr)INVALID_HANDLE_VALUE;
                }
     
                return hUfn;
            }
     
    public void SwitchToMassStorage(String Mode)
            {
                UFN_CLIENT_NAME ClientName = new UFN_CLIENT_NAME();
                uint dwBytes = 0;
     
                ClientName.szName = Mode;
     
                IntPtr pClientInfo = Marshal.StringToBSTR(ClientName.szName);
     
                bool ioctl_ret;
                IntPtr getUSBfnHandle = GetUfnController("UFN*");
     
                ioctl_ret = DeviceIoControl(getUSBfnHandle,
                    IOCTL_UFN_CHANGE_CURRENT_CLIENT,
                    pClientInfo,
                    256,
                    null, // empty lpOutBuffer
                    0, // no nOutBufferSize
                    ref dwBytes,
                    IntPtr.Zero);
     
                if (ioctl_ret)
                {
                    MessageBox.Show("DeviceIoControl success !\n");
                }
                else
                {
                    MessageBox.Show("DeviceIoControl failed !\n Error: " +
                    Marshal.GetLastWin32Error());
                }
            }
    Pour pouvoir passer en mode client en mode activeSync :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SwitchToMassStorage("Serial_Class");
    Pour pouvoir passer en mode client en mode mass storage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SwitchToMassStorage("Mass_Storage_Class");
    Maintenant il reste à faire ça dans le sens inverses, passer du mode client en mode host.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Cool, j'ai pas le temps de regarder ça dans le détail(pour l'instant), mais je suis preneur de tes infos. Content que tu ais peu avancer

    j'ajoute ça :
    http://msdn.microsoft.com/en-us/library/ms894311.aspx

  7. #7
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Merci pour le soutien !

    J'étais aussi tombé sur cette page, mais c'est spécifique pour Windows CE et j'utilise WM6. Donc j'ai pas trop approfondit, peut-etre à tort ?...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    ce, ce.net, wm5&6 quelle pagaille. D'autant que les drivers peuvent être implémentés différement d'une machine à l'autre. Que de subtilités.

    J'ai 2 projets sous le coude à réaliser ; un driver pour un périphérique (carte électronique) et une communication série pc-ppc.

  9. #9
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    Bonjour,

    D'après la clé de registre, j'en déduis que la machine doit très probablement être un appareil de type MC55 de chez Motorola et que l'IHM windows mobile est USBConfig .

    Un petit bout de code de référence qui est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        #define USBCONFIG_DEVICE_KEY    TEXT("Drivers\\BuiltIn\\OTG\\Settings")
        #define USB_PORTMODE    TEXT("PortMode")
        #define USB_PORTMODE_EVENT_NAME  TEXT("USBOTG/PortModeChangeEvent")
        If you want to set the terminal to HOST mode, set the "PortMode" value to "1".
        For Client Mode,     set the "PortMode" value to "0".
        // Set the registry value
        SetRegValue(HKEY_LOCAL_MACHINE,USBCONFIG_DEVICE_KEY,USB_PORTMODE,dwUSBPortMode);
        Then Signal ("USBOTG/PortModeChangeEvent") event...
        // signal event
        hUSBEvent = CreateEvent(NULL, FALSE, FALSE, USB_PORTMODE_EVENT_NAME);
        if (NULL != hUSBEvent)
        {
        	SetEvent(hUSBEvent);
        	CloseHandle(hUSBEvent);
        	hUSBEvent = NULL;
        }
    J'ai essayé le code de Versus68 mais il me semble qu'il est incomplet alors après quelques recherches sur Internet, j'ai trouvé différentes sources en partant de la source de base qui est:
    http://nicolasbesson.blogspot.com/20...-switcher.html

    les autres sources sont:
    http://www.eggheadcafe.com/software/...ct-active.aspx
    http://groups.google.com/group/micro...b6efb9babe1b34
    http://www.tech-archive.net/Archive/.../msg00713.html
    http://www.pocketpcjunkies.com/Uwe/F...rs-at-run-time
    http://realchecko.blogspot.com/2009_11_01_archive.html

    J'ai donc facilement pu recoller les bouts de code et faire une petite maquette sur VS2008/C#/SmartDevice.
    Avec le code des sources, j'arrive au même résultat que versus68.
    Le test consiste simplement à connecter le MC55(client) à un PC(host) et regarder avec l'explorateur windows ce qui se passe;
    soit la carte mémoire du MC55 est visible dans l'explorateur soit le système de fichier du MC55 est complétement visible avec l'explorateur.

    Ensuite, j'ai repris le code de référence en c/c++
    En modifiant la clé deregistre LocalMachine\Drivers\BuiltIn\OTG\Settings\Portmode avec un éditeur de registre pour PPC (TRE ou PHMRegEdit), il est facile de commuter les deux mode Host/Client toujours d'après le code
    A partir de cette constatation, j'ai simplement traduit le code en c#.
    Cela pourrait donner cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    [DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
            public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, [In, MarshalAs(UnmanagedType.Bool)] bool bManualReset, [In, MarshalAs(UnmanagedType.Bool)] bool bIntialState, [In, MarshalAs(UnmanagedType.BStr)] string lpName);
     
     
            [DllImport("coredll.dll", SetLastError = true)]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool EventModify(IntPtr hEvent, [In, MarshalAs(UnmanagedType.U4)] int dEvent);
            public enum EventFlags
            {
                PULSE = 1,
                RESET = 2,
                SET = 3
            }
            private static bool SetEvent(IntPtr hEvent)
            {
                return EventModify(hEvent, (int)EventFlags.SET);
            }
     
     
            private RegistryKey mRegKey;
     
            private string USBCONFIG_DEVICE_KEY = @"Drivers\BuiltIn\OTG\Settings";
            private string USB_PORTMODE = "PortMode";
            private string USB_PORTMODE_EVENT_NAME = "USBOTG/PortModeChangeEvent";
     
            private void button4_Click(object sender, EventArgs e)
            {
                //If you want to set the terminal to HOST mode, set the "PortMode" value to "1".
                //For Client Mode,     set the "PortMode" value to "0".
                // Set the registry value
                //SetRegValue(HKEY_LOCAL_MACHINE,USBCONFIG_DEVICE_KEY,USB_PORTMODE,dwUSBPortMode);
                mRegKey = Registry.LocalMachine.CreateSubKey(USBCONFIG_DEVICE_KEY);
                mRegKey.SetValue(USB_PORTMODE, 1);
                //Then Signal ("USBOTG/PortModeChangeEvent") event...
                // signal event
                IntPtr hUSBEvent = CreateEvent(IntPtr.Zero, false, false, USB_PORTMODE_EVENT_NAME);
                if (null != hUSBEvent)
                {
                    SetEvent(hUSBEvent);
                    CloseHandle(hUSBEvent);
                    hUSBEvent = IntPtr.Zero;
                }
            }
     
            private void button5_Click(object sender, EventArgs e)
            {
                //If you want to set the terminal to HOST mode, set the "PortMode" value to "1".
                //For Client Mode,     set the "PortMode" value to "0".
                // Set the registry value
                //SetRegValue(HKEY_LOCAL_MACHINE,USBCONFIG_DEVICE_KEY,USB_PORTMODE,dwUSBPortMode);
                mRegKey = Registry.LocalMachine.CreateSubKey(USBCONFIG_DEVICE_KEY);
                mRegKey.SetValue(USB_PORTMODE, 0);
                //Then Signal ("USBOTG/PortModeChangeEvent") event...
                // signal event
                IntPtr hUSBEvent = CreateEvent(IntPtr.Zero, false, false, USB_PORTMODE_EVENT_NAME);
                if (null != hUSBEvent)
                {
                    SetEvent(hUSBEvent);
                    CloseHandle(hUSBEvent);
                    hUSBEvent = IntPtr.Zero;
                }
            }
    Cela fonctionne et me permet d'activer ou de désactiver le mode Host
    Veuillez me pardonner si le code n'est pas trés élégant...

    En combinant le code de changement de valeur de PortMode et le code des sources de versus68, il serait donc très facile d'interconnecter deux machines avec deux câbles et un échangeur F/F USB.
    La première permute de client à host (portmode de 0 à 1)
    la deuxième machine reste en client mais permute de "ActiveSync" à "Mass Storage"
    je ne peux malheureusement pas tester pour le moment vu que je n'ai qu'un seul MC55 avec moi

    Bon test

  10. #10
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    Bonjour,

    ayant récupéré un second MC55 (WMobile 6.1 FR) avec les cordons, j'ai pu faire le test avec l'application testUSB (projet comple en pj sous VS2008)
    j'ai procédé comme suit:
    - déployer l'application sur les deux MC55 (1 en host, l'autre en client sur storage card (mass storage))
    - ouvrir les explorateurs de fichier sur les deux MC55 et contrôler que les deux systèmes de fichiers avaient une arborescence de fichiers normales
    - interconnecter ensuite les deux MC55 avec les snap-on et l'échangeur usb F/F
    - constater que la carte mémoire ne fait plus partie du MC55 client mais est mappé sur le MC55 host avec le nom "hard disk"
    - après débranchement et un laps de temps de quelques secondes, tout redevient normal
    - a la fin, repasser toutes les machines en MC55 client avec échange de fichiers sur activesync

    La solution que je propose me semble valide fonctionnellement et matériellement et est encapsuler dans du code c#/Form

    Attention, il y a une subtilité avec la version FR et EN (mass storage semble faire référence à la carte mémoire pour la vFR et à Cache disk pour le vEN)

    OTG veut dire On The Go
    http://en.wikipedia.org/wiki/USB_On-The-Go
    http://www.usb.org/developers/onthego/
    Fichiers attachés Fichiers attachés

  11. #11
    Nouveau candidat au Club
    Homme Profil pro
    Expert Mobilité
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert Mobilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    Bonjour,

    Tout d'abord, merci pour ce travail d'excellente qualité !

    Je travaille également sur des MC55 et cela m'est grandement utile.

    Par contre j'ai voulu porter ton application sur un MC3090 en WinCE5(en) et j'ai créé une nouvelle application (en se basant sur la tienne, encore merci) avec uniquement la fonctionnalité "AS<->MS" et tout marche parfaitement avec une carte mémoire !

    Le seul hic est que je dois implémenter cette fonction pour un client et qu'aucun de ses PDA ne sera équipé de carte mémoire... je pensais donc pouvoir mettre la mémoire "Application" (cache disk?) en mass storage et je patauge...

    Si j'enlève la storage card et que j'active la fonctionnalité "mass storage, le PDA est reconnu sous Win7 en tant que périph. de stockage mais "il ne peut démarrer (code10)"

    Aurais-tu une idée pour me faire avancer ?
    Je ne comprends pas ton histoire de vFR-vEN mais je sent que tu as la réponse à mon problème...

    Merci d'avance

    PS: ci-joint ma version C# - CompactFramework 2 - WinCE5
    Fichiers attachés Fichiers attachés

  12. #12
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    Bonjour,

    Désolé mais je ne travaille pas sur MC3090 en WinCE5(en).

    Mon expertise s'est simplement limité au MC55/WiMo6.1 et dans la continuité des recherches de Pikadon et de versus68.

    Je n'ai plus de version EN d'un MC55 mais si mes souvenir sont bon alors la différence était dans l'ordre d'apparition des disques.
    "Cache Disk" apparaissait en premier...
    Ce n'est peut-être plus le cas maintenant donc à vérifier.

    Sur un MC55, si tu enlèves la carte alors dès que tu redémarres le terminal, tu auras "Applications" qui sera automatiquement sélectionné.Peut-être une piste pour toi

    Tu travailles avec un produit Motorola donc tu peux normalement utiliser l'outil "RemCapture" pour voir les effets produits en base de registre suite à la modifications de l'applet USBConfig.

    C'est les seules pistes que je peux te donner

    Bon courage

  13. #13
    Nouveau candidat au Club
    Homme Profil pro
    Expert Mobilité
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert Mobilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    Bonjour et merci pour cette réponse rapide.

    Rare sont les gens qui travaillent avec des Motorola endurcis... je pensais que tu en connaissais toute la petite famille...

    J'ai essayé ton TestUSB sur un MC55 En et Fr et je te confirme le comportement que tu as expliqué plus haut.

    Je confirme également que cela marche correctement sur des MC70 (WinMob5) et sur MC75(WinMobPro 6.1).

    Pour ce qui est de mon Pb avec le MC3090 en WinCE, je te remercie pour l'info du RemCapture mais j'avais déjà essayé de le faire jusqu'à ce que je me rende compte rapidement que c'est impossible...

    En effet, lorsque j'active la fonctionnalité "mass storage", le PDA est reconnu comme une clé USB et de ce fait activesync est déconnecté... or RemCapture passe par activeSync, impossible de faire de différence de registre... logique !

    J'ai donc développé très rapidement un petit soft (sur PDA)qui m'exporte le registre voulu, ainsi, je peux comparer les différences du registre entre "ActiveSync", "Mass Storage - Storage Card", "Mass Storage - Application" et "Mass Storage - Platform" (oui, le MC3000 en a 3).
    J'ai joint les sources, ça peut être utile à quelqu'un...

    J'ai utilisé la fonction "USBconfig" dans les paramètres de WinCE pour changer "proprement" et la seule différence observée est la valeur de clé de registre :
    [HKEY_LOCAL_MACHINE\\Drivers\USB\FunctionDrivers\Mass_Storage_Class] clé "DeviceName" :
    la valeur est "DSK1:" pour \Platform
    la valeur est "DSK2:" pour \Application
    la valeur est "DSK3:" pour \Storage Card

    En utilisant ma version de "switch" (reprennant ton code) j'ai observé des choses étrange en passant en "storage Card" (avec une SD) :
    - la clé [HKEY_LOCAL_MACHINE\\Drivers\USB\FunctionDrivers] "CurrentUsbClient"="Active Sync" alors que par USBConfig, la valeur est "Mass Storage"
    - la clé [HKEY_LOCAL_MACHINE\\Drivers\USB\FunctionDrivers\Mass_Storage_Class] "DeviceName"="DSK1:"
    - Pourtant tout marche correctement (le PDA est bien reconnu comme un disque amovible est j'ai accès à la SD)

    J'ai réitéré après avoir enlevé la SD et là c'est encore plus étrange :
    - la clé [HKEY_LOCAL_MACHINE\\Drivers\USB\FunctionDrivers] "CurrentUsbClient" n'existe plus !!!
    - la clé [HKEY_LOCAL_MACHINE\\Drivers\USB\FunctionDrivers\Mass_Storage_Class] "DeviceName"="DSK3:" (soit Storage Card)

    Je pense que le plus important est que ce "Device Name" soit sur le bon disque et c'est peut-être pour cela que "CurrentUsbClient" n'existe pas, c'est qu'il n'a certainement pas réussit à monter le DSK3 car il n'existe pas (pas de SD).

    Je continue mes investigations et si je trouve, je posterais la réponse...

    Si quelqu'un a une idée, qu'il n'hésite pas surtout !

    Crdlt
    Fichiers attachés Fichiers attachés

  14. #14
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    Oui en effet, j'ai oublié que tu fermes activesync si tu es en mass storage.
    donc RemCapture n'est pas utile.

    Dans ce cas, j'utilise TRE pour faire des exports de bdreg et je peux faire des recherches en texte

    Un outil pour voir une clé de reg, c'est bien mais il ne faut pas oublier les autres clés qui ont été modifiées surtout dans le cas d'IPC indirect

    Pour tes problèmes tu peux faire google "mc3090 usbconfig".
    Il me semble qu'il y a des liens qui pointent sur le site constructeur avec des solutions :
    http://support.symbol.com/support/se...contextType=gs

    Est-ce que ton TDS est à jour?
    Vu ce que j'ai trouvé, il y a de forte probabilité que non.
    USB Config Applet v1.0 - SPR 17589
    MC30xx USB config applet does not correctly show the current USB mode (mass storage/activesync) on opening up.
    Bonne suite

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/11/2012, 16h26
  2. [VB6] Transfert de fichiers entre deux serveurs FTP
    Par johnson95 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/10/2007, 11h30
  3. [AIX] TRansfert de fichier entre Unix et windows
    Par ludocey42 dans le forum AIX
    Réponses: 3
    Dernier message: 27/07/2007, 10h14
  4. Réponses: 5
    Dernier message: 28/06/2007, 10h17
  5. [FTP] Transfert de fichiers entre deux sites : possible ?
    Par dontDeleteMe dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2007, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo