Java - décodage hexadecimal / binaire / entier [Résolu]

antoineleclercq 7 Messages postés dimanche 1 février 2009Date d'inscription 15 avril 2012 Dernière intervention - 7 févr. 2012 à 23:08 - Dernière réponse : antoineleclercq 7 Messages postés dimanche 1 février 2009Date d'inscription 15 avril 2012 Dernière intervention
- 13 févr. 2012 à 10:13
Bonsoir à tous,

Je suis ennuyé avec le java pour le décodage de trames RS232. Pour vous replacer le problème dans son contexte, j'ai développé un réseau embarqué (SPI et CAN) dans une maquette de train avec une passerelle bluetooth. Chacun des 13 systèmes embarqués a une adresse, et chaque véhicule a un numéro.

En embarqué je travaille sur des octets et en hexadécimal sur des micro-contrôleurs, et cela pose problème au niveau de la réception sur le programme en java.

J'émets un entier qui s'incrémente toutes les secondes, donc de 0 à 255. De 0 à 127 j'affiche l'équivalent (table ascii). Par contre de 128 à 255, soit le programme plante soit j'obtiens 65530... (selon les différents tests que j'ai faits)

Voici la composition d'une trame embarquée :

- 1 octet : @ destination >> 3 bits pour le numéro de véhicule / 5 bits pour le numéro du système
- 1 octet : @ source >> 3 bits pour le numéro de véhicule / 5 bits pour le numéro du système
- 1 octet : numéro de transaction
- 1 octet : identifiant de communication (ex. : 1 feux, 2 : moteurs, etc....)
- 0..4 octets de datas
- 1 octet pour le checksum.

Je souhaiterais retrouver les mêmes valeurs qu'en embarqué, donc soit 0xXX, ou de 1 à 255 ou encore 0x10100110.

Sauf que c'est une chaîne de caractères avec les libs javax.comm.* que j'utilise. Et j'obtiens n'importe quoi...

Donc compliqué le passage de l'embarqué au PC.....

Merci d'avance pour votre aide!

Antoine
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
antoineleclercq 7 Messages postés dimanche 1 février 2009Date d'inscription 15 avril 2012 Dernière intervention - 13 févr. 2012 à 10:13
3
Merci
Bonjour,

Merci pour ces infos. J'ai changé le format de mes trames, j'ai splitté 1 octet en 2, ex.:
0xAB 0xCD -> 0x0A 0x0B 0x0C 0x0D

Le message est décodé sur l'appli java, et je retrouve la trame de départ envoyée depuis l'embarqué.

A terme, j'essaierai de faire ça plus "proprement"...

Merci antoineleclercq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de antoineleclercq
BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscription 17 août 2018 Dernière intervention - 8 févr. 2012 à 14:27
0
Merci
Hello,
ça ressemble à une histoire de signé/non signé ton problème...
Tes variables sont-elles en non-signées?

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
antoineleclercq 7 Messages postés dimanche 1 février 2009Date d'inscription 15 avril 2012 Dernière intervention - 8 févr. 2012 à 18:56
0
Merci
Justement tout est non-signé et validé en embarqué. Je vais tenter de passer de String à Bytes...
Commenter la réponse de antoineleclercq
Twinuts 5272 Messages postés dimanche 4 mai 2003Date d'inscription 3 août 2018 Dernière intervention - 8 févr. 2012 à 21:27
0
Merci
Salut,

Si ton but est de pouvoir traiter des données non signées et surtout pouvoir les manipuler ça risque d'être assez chiant. Pour faire simple en java les types sont tous signés...
Cependant il y a toujours une solution... j'ai survolé rapidement le lien mais le principal est là What is the Java equivalent of unsigned?

Bienvenue dans le monde magnifique de java ô_O





------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts
antoineleclercq 7 Messages postés dimanche 1 février 2009Date d'inscription 15 avril 2012 Dernière intervention - 8 févr. 2012 à 21:43
0
Merci
Merci de vos conseils,
Ca fait plus d'un an que je traîne ça!!! Une IHM sur PC est mieux qu'une télécommande pour commander un train!

J'ai fait une variable de type Byte, et quand je l'affiche dans le terminal, je retrouve exactement la trame envoyé par le micro-contrôleur par bluetooth...

Je dois trainer certain octet bit à bit pour mettre à jour l'IHM, je risque de me bouffer les doigts...

Pensez vous qu'un et logique me permettrait de trainer certains bits :

exemple au hasard :
if ((data[]&0x40))
update_feux();

??

Pour vous décrire l'objectif du projet :

1/
Chaque organe du train peut être commandé par 1 bit, sauf la consigne des moteurs qui est de 0 à 255 ( 0 : 0% / 255 : 100%)

2/
Je dois mettre des boutons pour commander feux, ventilos, pantographes, moteur (cf au dessus)
et des icônes de chacun de ses organes pour avoir leur statut en temps réel :
- Un speedometer en fonction de la vitesse renvoyée
- un logo des faces avant/arrière pour afficher les feux allumés
- la configuration du train (si deux locomotives sont couplées)

3/ Un diagnostic avec un téléchargement d'une EEPROM embarquée de 1024 octets contenant les défauts

4/ un affichage temps réel des consignes des systèmes de signalisation du sol.


Je suis très limité en java, si vous avez des pistes ou des conseils sur les méthodes de dèv, l'architecture de l'appli par rapport aux grandes lignes du projet, ça m'aiderait énormement !!

Merci à vous pour votre aide


Vive le développement !
Commenter la réponse de antoineleclercq
antoineleclercq 7 Messages postés dimanche 1 février 2009Date d'inscription 15 avril 2012 Dernière intervention - 9 févr. 2012 à 18:54
0
Merci
Voici un exemple de "compteur de vie" qui atteste le bon fonctionnement de la carte embarquée :

616212050000017e6364
Lifesign : 126
616212050000017f6364
Lifesign : 127
61621205000001efbfbd6364
Lifesign : -17


J'ai -17 dès que je passe au dessus de 127, soit 0x7F si je décode la trame reçue en hexadécimal...
Je ne comprends pas pourquoi je passe de 0x7F à 0xEFBFBD ....
Commenter la réponse de antoineleclercq
Twinuts 5272 Messages postés dimanche 4 mai 2003Date d'inscription 3 août 2018 Dernière intervention - 9 févr. 2012 à 21:41
0
Merci
Salut,

la solution est très simple: ICI ensuite une notion optionnel mais dans ton cas ça peut t'être utile ICI





------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.