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 :
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 #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;
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 ..
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; }
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 !!![]()
Partager