Gambas France BETA


Pas de compte ? Incription

[GB2]Port Parallèle (Mise en œuvre).[GB2]

À propos de ce code

Exemple de Mise en œuvre, du Port Parallèle,
avec une petite Animation, donc sans prétention.
Il faut être SuperUtilisateur pour lancer l"Application.
Donc, après avoir vérifier la Permission d'Exécution,
dans les propriétés de < gb2parport.gambas >,
Utiliser la Ligne de commande ci-dessous,
en Terminal, ou Lanceur (Application).

< gksu /chemin/absolu/vers/gb2parport.gambas >

Par contre,il y a un Problème,
sur le PORT physique en Gambas3.
Personnellement, J'y arrive avec des petites Routines en C.
Mais en GB2, c'est bien plus efficace.(Pour l'Instant!...)
Reverrai cela, quand j'aurai du temps à y consacrer.

En attendant, Avis aux Débogueurs.

Reivillo.

PS: Lire attentivement les Commentaire de Flachy Joe.

Code source

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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
' Gambas class file
PUBLIC PORT_DATA AS INTEGER = &H378 ' PORT de BASE avec &H378,&H278 ou &H3bc.
PUBLIC PORT_STAT AS INTEGER = PORT_DATA + 1 ' PORT de STATUT.
PUBLIC PORT_CTRL AS INTEGER = PORT_DATA + 2 ' PORT de CONTROLE.
PUBLIC hPort AS File
PUBLIC PicLEDS AS OBJECT[8] 'Déclaration pour la Construction des LEDS, pour TEST et ANIMATIONS.
PUBLIC ColorLEDS AS Integer[] = [&HDFFFBF&, &H80FF00&] ' Couleur Rouge [&H00FFDFDF&, &H00FF0000&]

PUBLIC SUB Form_Open()

BuildFrameLEDS ' Seulement, pour TEST et ANIMATIONS.

ME.X = (Desktop.Width - ME.W) / 2
ME.Y = 0
OpenInit_PORT

END

PUBLIC SUB Form_Close() ' Ferme les PORTS, puis l'Application.

Write_PORT(PORT_DATA, 0)
CLOSE #hPort

END

PUBLIC SUB OpenInit_PORT() ' Ouverture et Initialisation des PORTS.

hPort = OPEN "/dev/port" FOR READ WRITE
Write_PORT(PORT_CTRL, 0)
Write_PORT(PORT_DATA, 0)
OnOff_LEDS

END

PUBLIC SUB Write_PORT(PORT AS INTEGER, iValue AS BYTE) ' Ecriture sur un PORT.

SEEK #hPort, PORT
WRITE #hPort, iValue

END

PUBLIC FUNCTION Read_PORT(PORT AS INTEGER) AS BYTE ' Lecture sur un PORT.

DIM iValue AS BYTE = 0

SEEK #hPort, PORT
READ #hPort, iValue

RETURN iValue

END

'====================================================================
' Ci - Dessous CODE, pour TEST, et ANIMATIONS.
'====================================================================
PUBLIC SUB BuildFrameLEDS()

DIM iFor AS INTEGER = 0

FOR iFor = 0 TO 7 'Construction de la Frame de LEDS
PicLEDS[iFor] = NEW PictureBox(Frame4) AS "PicLEDSchange"
WITH PicLEDS[iFor]
.x = 45 + (iFor * 28)
.y = 18
.h = 12
.w = 24
'.Tag = 7 - iFor
.Tag = "LEDS," & Str$(7 - iFor)
.Border = Border.Plain
.Background = ColorLEDS[0]
END WITH
NEXT
StartStop.ForeColor = Color.DarkGreen

END

PUBLIC SUB RND_Click() ' Valide/Invalide le Générateur Pseudo-Aléatoire.

IF LAST.Value THEN
DATA.Enabled = FALSE
Timer1.Enabled = TRUE
StartStop.Text = "Stop"
StartStop.ForeColor = Color.Red
ELSE
DATA.Enabled = TRUE
ENDIF

END

PUBLIC SUB StartStop_Click() ' Démarre/Arrête l'Animation.

Timer1.Delay = DELAY.Value
IF LAST.Text = "Start" THEN
LAST.Text = "Stop"
StartStop.ForeColor = Color.Red
DELAY.Enabled = FALSE
Timer1.Start
ELSE
LAST.Text = "Start"
Timer1.Stop
DELAY.Enabled = TRUE
StartStop.ForeColor = Color.DarkGreen
ENDIF
DATA_Change

END

PUBLIC SUB DATA_Change() ' Ecriture/Lecture PORT_DATA.

Write_PORT(PORT_DATA, DATA.Value)
DATA.Value = Read_PORT(PORT_DATA)
Show_DATA.Text = DATA.Value
OnOff_LEDS

END

PUBLIC SUB Timer1_Timer() ' Animation.

IF RND.value THEN
DATA.Value = Int(Rnd(256)) ' Génération de BITS Pseudo-Aléatoire.
ELSE
DATA.Value = (Read_PORT(PORT_DATA)) XOR &HFF ' Inverse les BITS sur la SORTIE.
ENDIF
DATA_Change

END

PUBLIC SUB OnOff_LEDS() ' Actualisation des LEDS.

DIM iFor AS INTEGER = 0
DIM iData AS BYTE = DATA.Value

FOR iFor = 7 TO 0 STEP -1
PicLEDS[iFor].Background = ColorLEDS[iData AND &H01]
iData = Lsr(iData, 1) ' Décalage d'un BIT, vers la Droite.
NEXT

END

PUBLIC SUB PicLEDSchange_MouseDown() ' Change l'Etat des LEDS.

DIM sArElem AS String[]

sArElem = Split(LAST.Tag, " , \n")
SELECT sArElem[0]
CASE "LEDS"
DATA.Value = BChg(DATA.Value, sArElem[1]) ' Inverse l'état de la LED Cliquée
CASE "LSB"
DATA.Value = sArElem[1] ' Toutes les LEDS, Eteintes.
CASE "MSB"
DATA.Value = sArElem[1] ' Toutes les LEDS, Allumées.
CASE "QUIT"
ME.Close
END SELECT

END

Commentaires

Commentaire de Flachy Joe, Le 15/5/2014 à 19:11:52
Salut,
merci pour le partage.

Pour info, plutôt que de lancer l'application avec les droits super utilisateurs, on peut ajuster les droits sur le fichier /dev/port, exemple (sur debian) :
flachy@bidulographe:~$ ls -l /dev/port
crw-r----- 1 root kmem 1, 4 mai 15 18:31 /dev/port

on ajoute le droit de lecture et écriture à tout le monde :
flachy@bidulographe:~$ sudo chmod a+rw /dev/port
florian@biduloscope:~$ ls -l /dev/port
crw-rw-rw- 1 root kmem 1, 4 mai 15 18:31 /dev/port


Dans un cas comme dans l'autre, il semblerait que l'utilisation du fichier /dev/port est un risque pour la sécurité du système (selon http://www.tldp.org/HOWTO/IO-Port-Programming-2.html ) et il vaudrait mieux utiliser les fichier /dev/lp*
Commentaire de Reivillo, Le 15/5/2014 à 22:01:19
Bonsoir Flachy Joe.

Merci pour tes Commentaires.
J'ai fait comme cela, car je trouvais plus simple pour un débutant.

Maintenant, grâce à toi, il aura le choix.

À propos pendant que je te tiens.
Depuis la dernière mise à jour de Gambas3 < 3.5.3 >,
les Popups d'aide dans l'IDE, sont en Anglais!...

Chez toi aussi ?

Si tu as une astuces, ou une Idée,
pour y remédier, suis preneur.

Merci.
Reivillo.
Commentaire de Flachy Joe, Le 16/5/2014 à 18:15:37
Salut,
La langue des bulles d'aide semble être définie par la liste déroulante du navigateur d'aide (menu ?).
Si ça ne fonctionne pas, essaye de vider le cache (menu Outils, Préférences, Aide et Applications).

Bonne continuation.

PS : les MP ne fonctionnent plus !?