Le serveur de liaison du robot a complètement été recodé.
Les files de commandes sont gérés par deux FIFO mais il n'y a pas d'ordre de priorité dans le traitement.
Il me reste a coder la couche d'abstraction pour les sockets l2cap/udp/tcp.


Le serveur fait la liaison entre les connections 'haut niveau' et le contrôle 'bas niveau'.
                +----------+            /- IR Sensors
Bluetooth ----->|          |           /
                |  Arobot  |---> RS232<
                | Abstract |           \
TCP ----------->|  Layout  |            \- Servo/Motors
                |  Server  |
                |          |---> Webcam
UDP ----------->|          |
                +----------+
Protocole de communication :
Le protocole est basé sur une structure de donnée de 3 octets :
typedef struct proto_s {
  unsigned char cmd;
  unsigned char value_1;
  unsigned char value_2;
} proto_t;

le champ cmd peut avoir comme valeur :
  • C : on traite une donnée provenant d'un capteur. Dans ce cas, value_1 vaut l'index du capteur et value_2 sa valeur (ou 0 si on fait une requête).
  • X : on envoie les données correspondant au pilotage de la camera. value_1 correspond à l'axe X et value_2 à l'axe Y avec (angle en degres) = (int)(((float)((float)value_x / 255)) * 180).
  • G : on envoie les données correspondant au moteurs. value_1 correspond au moteur gauche et value_2 au moteur droit avec marche arrière < value_x = 128 < marche avant.
  • L : on allume (ou non) le pointeur laser. value_1 correspond à l'état (marche:1 ou arrêt:0) du laser et value_2 n'est pas utilisé.



Video :