locked
Envoie d'APDU a une carte SIM RRS feed

  • Question

  • Bonjour,


    Voila j'ai ce code la :

    public partial class Form1 : Form
        {
            private static string resultat;
            private static AutoResetEvent waithandle = new AutoResetEvent(false);
            public delegate void RILRESULTCALLBACK(uint dwCode, IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam);
            public delegate void RILNOTIFYCALLBACK(uint dwCode, IntPtr lpData, uint cbData, uint dwParam);
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                resultat = SendCMD("00A404001000000000000000000000000001234501");
                textBox1.Text = resultat;
            }
            public static string SendCMD(string cmd)
            {
                IntPtr hRil = IntPtr.Zero;
                
                string result = "";
                IntPtr hRes = RIL_Initialize(1, new RILRESULTCALLBACK(CMDResultCallback), null, 0, 0, out hRil);
    
                if (hRes != IntPtr.Zero)
                {
                    return "Failed to initialize RIL";
                }
    
                byte[] cmds = Utils.String2Byte(cmd);
    
                hRes = RIL_SendSimCmd(hRil, cmds, (uint)(cmds.Length));
    
                waithandle.WaitOne();
    
                RIL_Deinitialize(hRil);
    
                return result;
            }
            [DllImport("ril.dll")]
            private static extern IntPtr RIL_Initialize(uint dwIndex,RILRESULTCALLBACK pfnResult,RILNOTIFYCALLBACK pfnNotify,uint dwNotificationClasses,uint dwParam,out IntPtr lphRil);
            
            [DllImport("ril.dll")]
            private static extern IntPtr RIL_Deinitialize(IntPtr hRil);
    
            [DllImport("ril.dll")]
            private static extern IntPtr RIL_SendSimCmd(IntPtr hRil, byte[] lpbCommand, uint dwSize);
    
            public static void CMDResultCallback(uint dwCode, IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam)
            {
                byte[] result = new byte[cbData];
                Marshal.PtrToStructure(lpData, result);
                resultat = "Resultat : " + Utils.Byte2String(result);
                waithandle.Set();
            }
                
    
        }
    Mon probleme est que au moment de la commande RIL_Initialize(1, new RILRESULTCALLBACK(CMDResultCallback), null, 0, 0, out hRil); il est sensé y'avoir un appel asynchrone mais quand j'excute mon programme il se passe rien. Meme avec un point d'arret au niveau de la methode d'appel asynchrone il n'y passe pas. Je comprends pas pourquoi il ne ce passe rien. Es ce que quelqu'un aurai une idée ou une solution ?

    Merci d'avance,
    GJean
    lundi 21 septembre 2009 13:48

Toutes les réponses

  • Bonjour

    Je voudrais être sur de bien comprendre: après l'appel à RIL_Initialize, vous mettez un breakpoint dans CMD_ResultCallback mais il n'est jamais atteint, ce qui laisse à penser que la commande à la carte SIM n'est jamais exécutée?
    lundi 26 octobre 2009 08:16