Envoie de donnée sur port série

p0236 Messages postés 54 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 avril 2006 - 29 juin 2004 à 11:31
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 - 29 juin 2004 à 16:19
:question) :question) :question) :question) :question) :question) :question) :question) :question) :question) :question)

Je voulais savoir comment envoyer des données plus grande sur le port série :

Je m'explique :
Pour ecrire sur le port série, j'utilise ceci :
SerialPort portSerie;
OutputStream outputStream;
InputStream inputStream;

Pour ecrire sur le port , j'utilise ceci :
outputStream.write(commande);

Mes commandes sont du style :
final byte[] STANDBY_OFF = {0x020, 0x004, 0x024};

Les donnees premieres données sont les données utiles, et le troisieme est le checksum.

Je voulais donc savoir s'il etait possible d'envoyer des données plus grande que le type byte, car avec celui ci le
checksum ne peut depasser 0X7F.

Je voudrai pour faire :
final byte[] CMD= {0x021, 0x023, 0x040, 0x084};

Il faut prendre en compte le fait que write ne peut envoye que des byte[].

Est ce que qq'un connait une autre méthode????

:question) :question) :question) :question) :question) :question) :question) :question) :question) :question) :question)

6 réponses

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juin 2004 à 12:42
le byte est entre -128 et +127

tu fait ca avec un ou logique : tu calcul en int et tu fait

byte b=0;
i=truc+machin;
b|=i;
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juin 2004 à 12:44
apres pour recuperer if faut faire un 0x100-not(i) si i<0

il me semble mais c'est a tester
0
p0236 Messages postés 54 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 avril 2006
29 juin 2004 à 13:58
ton calcul marche, mais il ne regle pas mon soucis, pour des valeurs allant jusqu'à 7F (127), il marche bien mais des que ca depasse, bing ca plante

tu n'a pas une autre idée

:question) :question) :question) :question) :question) :question) :question) :question) :question) :question) :question)
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juin 2004 à 14:15
soit tu fait:
byte[] b={0x53, 0x40, 0x00};

int i=b[0]+b[1];
if (i>127)i=127-b;
b[3]=(byte)i;

soit au lieu de faire un + tu fait un xor. comme c'est bit a bit il ne t'embetera pas pour le signe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
p0236 Messages postés 54 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 avril 2006
29 juin 2004 à 15:35
désolé mais ca ne marche toujours pas !!!!
Je ne peux qu'ecrire sur le port serie avec
 write 
????

Il n'y aurait pas autre chose
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juin 2004 à 16:19
normallement ca ne peut que marcher!

Enfin pour un CRC fait des operation de bit a bit et pas du calcul!
0
Rejoignez-nous