Tout d'abord, bonjour tout le monde.

Ensuite, je tiens à préciser que je suis loin d'être un génie en programmation, même loin de là...

Alors mon problème est le suivant :

Je dois récuppérer, par le biais de la liaison série, les coordonnées du curseur qui pointe sur la tablette.

Pour cela, je dois récuperrer 5 octets contenant diverses données, comme les boutons, et les COORDONNEES !!!

J'ai donc utiliser une strusture à recrouvrement afin de me "simplifier" la vie, mais voilà, cela ne marche pas.

Structure :

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
 
#pragma pack(1)
 
typedef struct st_tab
{
    // Octet n°1
    unsigned char  Prox        : 1;
    unsigned char  Inutile1    : 1;
    unsigned char  TB1        : 1;
    unsigned char  TB2        : 1;
    unsigned char  TB3        : 1;
    unsigned char  TB4        : 1;
    unsigned char  Inutile2    : 1;
    unsigned char  Parity1  : 1;
 
    // Octet n°2
    unsigned char CordX1    : 6;
    unsigned char Inutile3    : 1;
    unsigned char Parity2    : 1;
 
    // Octet n°3
    unsigned char CordX2    : 6;
    unsigned char Inutile4    : 1;
    unsigned char Parity3    : 1;
 
    // Octet n°4
    unsigned char CordY1    : 6;
    unsigned char Inutile5    : 1;
    unsigned char Parity4    : 1;
 
    // Octet n°5
    unsigned char CordY2    : 6;
    unsigned char Inutile6    : 1;
    unsigned char Parity5    : 1;
 
}t_tablet;
 
//Définition d'une structure de recouvrement
typedef union st_Recouvrement
{
 
    t_tablet        t_tab;            //Affectation des éléments reçus à cette structure
    unsigned char    Serie[5];        //buffer recevant les 5 octets envoyés par la tablette
}t_recouvrement;
Fonction tablette et réception
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
 
int tablette()
{
    int i;
    t_recouvrement    t_serie;
    unsigned short    Xpos,Ypos;
    for(i=0;i<5;i++)
    {
        t_serie.Serie[i]='\0';
    }
 
        for(i=0;i<5;i++)
        {
            t_serie.Serie[i] = reception();
 
            sprintf(Err,"%d",t_serie.Serie[i]);
            FctSetEdit(Err);
        }
        MsgBox("");
 
        t_serie.t_tab.TB1 = 3;
        sprintf(Err,"%d",t_serie.t_tab.TB1);
        MsgBox(Err);
 
        if(t_serie.t_tab.TB1 == 1)
        {
            InvalidateRect(hWndMain,NULL,TRUE);
            Xpos = t_serie.t_tab.CordX1 | (t_serie.t_tab.CordX2 << 6);
            Ypos = t_serie.t_tab.CordY1 | (t_serie.t_tab.CordY2 << 6);
 
            sprintf(xPos,"%d",Xpos);
            sprintf(yPos,"%d",Ypos);
            //MsgBox(xPos);
 
            InvalidateRect(hWndMain,NULL,TRUE);
 
            SetWindowText(hWndPosX,xPos);
            SetWindowText(hWndPosY,yPos);
 
            //SendMessage(hWndMain,WM_PAINT,0,0);
            InvalidateRect(hWndMain,NULL,TRUE);    // Permet de rafraichir la fenêtre pour les problèmes d'affichage
 
            // Sauvegarde des coordonnées dans le buffer de données
            sprintf(Err,"X=%s Y=%s ",xPos,yPos);
 
            strcat(Err,"\r\n");
            strcat(pt_exch.Data,Err);
            SetWindowText(hWndTabXY,pt_exch.Data);
 
            EnableWindow(hWndSend,TRUE);
        }
        else MsgBox("PAS BON");
        /*if(t_serie.t_tab.TB4 == 1)
        {
            MsgBox("Casse les BIP !!");
        }*/
    return 0;
}
 
unsigned char reception()
{
    unsigned char    recep;
    DWORD    lpdWord;
 
    //lpdWord = 1;
 
//    MsgBox("Ici Recep");
 
    if(ReadFile(hfile,&recep,1,&lpdWord,NULL) == 0)
    {
        sprintf(Err,"ReadFile a échoué avec l'erreur : %d",WSAGetLastError());
        MsgBox(Err);
        CloseHandle(hfile);
        exit(0);
    }
 
    Sleep(10);
//    MsgBox("Lecture Recep");
 
    return recep;
}
Le fonctionnement est aléatoire, un coup je récuppère bien 5 octets, un coup c'est 3, ensuite je n'arrive pas à faire tourner le programme "en boucle", c'est à dire pouvoir recevoir des coordonnées à chaque clique sur le curseur ..

Je sais que cela n'est pas des plus claires, donc si vous avez du mal a comprendre, n'hésitez pas.

Une dernière précision, je suis en API Windows et la tablette est une HIPAD plus

Merci d'avance !!