Programmes Clients pourl'utilisation des Boitiers Alpha-Kilo |
KAPS2C Conception
Le Grand Chateau Route de la Chartreuse 01150 SAINT SORLIN Tél: 04 74 35 74 84 |
Les boitiers sont créés à partir d'un module micro-module USB DLP-245PB. Celui-ci comprend le controleur USB "FT245BM" de FTDI et un microprocesseur "PIC 16F877" de MicroChip.
| Retour Sommaire | Retour Accueil |
L'accès aux données des boitiers Alpha-Kilo se fait donc par le bus USB. Le constructeur du controleur "FT245BM" fournit, pour Windows, une librairie de fonctions détaillées FTD2XX dans le document suivant.
Ce module est connecté au bus du micro-processeur PIC 16F877, et les échanges se font par un buffer fifo. La librairie exploite la fonction bit-bang pour lire et écrire des données dans le micro-processeur.
Le micro-module DLP-245PB, intégrant le controleur FT245BM et le micro-processeur 16F877, est fourni avec un ensemble de fonctions permettant les échanges entre le PC et le micro-processeur. Le protocole particulier TOKEN I/O ( document original à consulter ici ) pour ces échanges a été étendu pour les fonctions des boitiers Alpha-Kilo.![]()
Protocol d'échange TOKEN I/O
Chaque séquence de commande contient les informations suivantes :Le micro-processeur retourne la réponse suivante :
- Octet 0: Nombre d'octets de la séquence
- Octet 1: Réference de la commande
- Octet 2…n-1: Octets de paramêtres ou de données
- Octet n: Checksum
La checksum est calculée par un OU exclusif sur chacun des octets de la séquence.
- SI la commande est admise par le micro-processeur ( checksum correcte, fonction connue, ...) le premier octet du retour est 0x55
suivi par les données de résultat
- octet 0: Aquittement de la commande
- octet 1...n-1: octets de données retournés
- octet n: Checksum
calculée par un OU exclusif sur chacun des octets de la réponse.- SINON
- octet 0: Code d'erreur
sans autres information
Exemple : Positionnement à 1 de la sortie A1 du micro-processeurSéquence de commande
0x03 - soit 3 octets pour cette séquence ( l'octet de checksum n'est pas compté )
0xA6 - commande de positionnement d'une sortie
0x29 – numero de la sortie concernée
0x01 – état de la sortie
0x8D – Checksum pour les 4 octets précédentsRéponse du micro-processeur
Si OK
0x55
sinon
0x81 (erreur de checksum par exemple) ou tout autre code ou même pas de retour en cas d'anomalie grave du micro-processeur ( le time-out de lecture du port USB interviendra dans ce cas ).Programme client en C++
Le squellete d'une application client sous Windows VisualC serait celle-ci
Initialisation et ouverture
.
.
LoadDLL();//attempt to open an attached FTDI device
// ouverture du boitier Radio
FT_STATUS status = OpenEx((PVOID)"K_Rad",FT_OPEN_BY_DESCRIPTION);if(status)//fail - no module
{
AfxMessageBox("Error: Could not open a device");
}
else//pass - module opened
{
}
SetTimeouts(500, 500);
.
.
.
Envoi d'une commande au micro-processeur
SendCommandString(unsigned char *com_str, int num_bytes) {
//load Xmit buffer, add checksum, send and receive ACK (0x55)
Purge(FT_PURGE_RX || FT_PURGE_TX);
SetTimeouts(500, 500);tx[0] = num_bytes;
int pos=1;
for(int x=0; x<num_bytes; x++)
tx[pos++] = com_str[x];//calculate checksum and append to command string
checksum=0;
for(x=0; x<pos; x++)
checksum ^= tx[x];
tx[pos++] = checksum;FT_STATUS status = Write(tx, pos, &ret_bytes);
if(status != FT_OK)
{
//AfxMessageBox("Driver error writing to DLP module. ");
return 0;//error
}//just read in the one character we are expecting
status = Read(rx, 1, &ret_bytes);
if(status != FT_OK)
{
//AfxMessageBox("DLP module not responding to commands.");
return 0;//error
}if(ret_bytes < 1)
{
AfxMessageBox("Timeout occurred");
return 0;//error
}unsigned char ret = rx[0];
if(ret == 0x55)
return 1;//pass
else
{
//AfxMessageBox("DLP module not responding to commands.");
return 0;//error
}
}
Séquence d'échange de données
.
.
.
unsigned char tx[100], rx[100];
DWORD ret_bytes;UpdateData(TRUE);
m_ID = "";
UpdateData(FALSE);
UpdateWindow();Purge(FT_PURGE_RX || FT_PURGE_TX);
SetTimeouts(100, 100);//****** send command to read input pin
int pos=0;
tx[pos++] = 0xA7;//Return Board ID command
int res = SendCommandString(tx, pos);//return: 0=fail, 1=pass
if(res==0)//error
{
AfxMessageBox("DLP module not responding to commands.(1284)");
return;
}//read the data back in
FT_STATUS status = Read(rx, 5, &ret_bytes);
if(status != FT_OK)
{
AfxMessageBox("DLP module not responding to commands.");
return;
}
.
.
.
| Retour Sommaire | Retour Accueil |
Le programmeur dispose de deux types d'outillage pour simuler l'échange d'information avec les boitiers Alpha-Kilo. Le premier outil consiste à utiliser le programme DLPtest fournit par le constructeur du micro-module (version 1 gratuite, version 2 licence payante ). Le second, les programmes de test spécifique à chaque boitier AlphaKilo-Test.Programmes DLPtest
Ils présentent l'interface suivante![]()
Ils permettent de sélectionner un boitier avec le bouton Search suivant le modeIl suffit alors d'ouvrir le port avec le bouton Open ( attention la méthode d'accès installée pour les boitiers Alpha-Kilo est méthode DLL ), et ensuite d'inscrire les commandes à lancer en direction du boitier
- par numero de serie ( Serial # )
- par description ( Description )
- par numero de device USB ( Device #)
L'exemple Send 1 A7 A6 ( Xmit=3) va retourné dans la boite Receive Data les octets retournés par le boitier.La version 2.0 est plus complète et permet de reconfigurer les paramêtre USB du controleur FT245BM, à utiliser avec précaution !!!
Programme de test Alpha-Kilo
Les interfaces sont adaptées à chaque type de boitier, mais présentent dans tous les cas que les données brutes.![]()
Les boutons ne représentent que les fonctions disponibles que vous trouverez décrite dans le chapître suivant.
| Retour Sommaire | Retour Accueil |
Pour les boitiers Alpha-Kilo, nous avons gardé la compatibilité avec le firmware d'origine. Nous avons ajouté de nouvelles fonctions et invalidé la plupart de celles décrites dans la documentation du firmware.Les boitiers répondent donc à :
La fonction d'identification retourne le nom du type de boitier. ATTENTION: Ce nom est spécifique à l'application contenue dans le micro-processeur, à ne pas confonde avec l'identifiant USB qui appartient à la configuration du module USB "FT245BM". Elles sont généralement identiques, mais leur valeurs sont initialisées par des procédures différentes comme le décrit la notice de conception.
- La fonction identification ( code 0xA7)
lecture de l'identifiant de l'application incluse dans le boitier- La fonction lecture des registres ( code 0xA4 )
lecture des registres de l'application du boitier- La fonction préchargement ( code 0xA3 )
affectation de valeur dans les registres du boitier- La fonction initialisation ( code 0xA2 )
changement des paramêtres de fonctionnement du boitierLes données échangées par les fonctions d'accès aux registres diffèrent suivant le type du boitier. Nous détaillons ceux-ci dans les chapitres suivants.
La fonction d'initialisation est bien-sûr adaptée au type du boitier. Elle entrainent un changement du comportement du boitier.
Le chapitre Commandes ci-après détaille le contenu des séquences échangées.
Boitier Console
Fonction Identification
A la requête identification le boitier répond la chaine de caractère "K_Con"Fonction lecture des registres
Le boitier retourne le contenu de 12 registres + checksum
Les 12 registres correspondent à :La lecture se fait par l'appel de la fonction Lecture des registres, appelée dans le cas de l'interface de test par l'appui du bouton "Rcpt"Reg0 : position trim Reg1 : non instrumenté Reg2 : non instrumenté Reg3 : non instrumenté Reg4 : non instrumenté Reg5 : pas de l'hélice Reg6 : réchaufage carburateur Reg7 : position palonnier Reg8 : puissance GAZ Reg9 : position inclinaison Reg10 : position profondeur Reg11 : 16 capteurs TOR
- bit15 : frein ON=0 OFF=1
- bit14 : volet capot Ouvert=0 fermé=1
- bit13 : réchauffage carbu ON=0 OFF=1
- bit12 : démarreur ON=0 OFF=1
- bit11 : non instrumenté
- bit10 : non instrumenté
- bit 9 : contact magnéto 2
- bit 8 : contact magnéto 1
- bit 7 : baisser volet OUI=0 NON=1
- bit 6 : lever volet OUI=0 NON=1
- bit 5 : rentrer train OUI=0 NON=1
- bit 4 : sortir train OUI=0 NON=1
- bit 3 : non instrumenté
- bit 2 : non instrumenté
- bit 1 : non instrumenté
- bit 0 : non instrumenté
Fonction Preload Registre
Le boitier modifie la valeur actuelle de ses registres. Un seul registre peut être modifié dans le cas du boitier Console
- Reg0 : position trim
- Reg1 : non instrumenté
- Reg2 : non instrumenté
- Reg3 : non instrumenté
- Reg4 : non instrumenté
- Reg5 : non modifiable
- Reg6 : non modifiable
- Reg7 : non modifiable
Il suffit d'introduire la nouvelle valeur souhaitée dans les paramêtres et exécuter la fonction Preload, ce qui se fait dans l'interface de test par l'appui du bouton "Preload"Fonction Initialisation
Cette opération consiste à modifier les paramêtres de fonctionnement des Registres. Dans le cas du boitier console seuls les 5 premiers registres peuvent voir leurs caractéristiques modifiées.
Cependant l'effet n'aura de résultat que pour le seul registre instrumenté ( Reg0 ).
Les registres se rapportent à des compteurs incrémentaux. Le capteur de comptage est un capteur rotatif numérique ( genre potentiomêtre ).Le programme du boitier permet de modifier le fonctionnement par défaut de ce compteur.
D'une part sur l'amplitude du comptage, d'autre part pour le traitement des butées. Le compteur peut compter/décompter :
Il suffit donc d'introduire la nouvelle valeur d'amplitude souhaitée, et de positionner dans l'octet d'état le bit du mode de fonctionnement du compteur ( 1 pour butée, 0 pour circulaire ) et d'exécuter la fonction Initialisation, faite dans l'interface de test par l'appui du bouton "Init".circulairement ( cyclique ), c'est à dire lorsque la valeur atteint le maximun de l'amplitude, celui revient au départ ( à la fin lors d'un décomptage ) avec butée, dans ce cas le compteur ne peut dépasser ses butée ( 0 et amplitude maxi ) même lorsque l'opérateur continue à actionner le capteur rotatif. Boitier Instruments
Fonction Identification
A la requête identification le boitier répond la chaine de caractère "K_Ins"Fonction lecture des registres
Le boitier retourne le contenu de 12 registres + checksum
Les 12 registres correspondent à :
- Reg0 : Altitude niveau
- Reg1 : Pression Alti 2
- Reg2 : Pression Alti 1
- Reg3 : W index
- Reg4 : R index
- Reg5 : Heading
- Reg6 : HSI
- Reg7 : VOR
- Reg8 : non instrumenté
- Reg9 : non instrumenté
- Reg10 : non intrumenté
- Reg11 : 16 capteurs TOR
La lecture se fait par l'appel de la fonction Lecture des registres, appelée dans le cas de l'interface de test par l'appui du bouton "Rcpt"
modèle design amiga modèle design PC - bit15 : non instrumenté
- bit14 : non instrumenté
- bit13 : chrono Hour/Sec ON=0 OFF=1
- bit12 : Sélecteur RMI nav1=1 nav2=0
- bit11 : Sélecteur HSI nav1=1 nav2=0
- bit10 : Sélecteur VOR nav1=1 nav2=0
- bit 9 : chrono reset ON=0 OFF=1
- bit 8 : chrono star/stop ON=0 OFF=1
- bit 7 : non instrumenté
- bit 6 : non instrumenté
- bit 5 : Sélecteur Altitude HOLD=0 nonHOLD=1
- bit 4 : Sélecteur Altitude OFF=0 nonOFF=1
- bit 3 : Sélecteur Heading OFF=0 nonOFF=1
- bit 2 : Sélecteur Heading HDG=0 nonHDG=1
- bit 1 : Sélecteur Mark OFF=0 nonOFF=1
- bit 0 : Sélecteur Mark High=0 nonHigh=1
- bit15 : Sélecteur VOR nav1=1 nav2=0
- bit14 : Sélecteur RMI nav1=1 nav2=0
- bit13 : non instrumenté
- bit12 : non instrumenté
- bit11 : non instrumenté
- bit10 : chrono Hour/Sec ON=0 OFF=1
- bit 9 : chrono reset ON=0 OFF=1
- bit 8 : chrono star/stop ON=0 OFF=1
- bit 7 : Sélecteur HSI nav1=0
- bit 6 : Sélecteur HSI nav2=0
- bit 5 : Sélecteur Mark High=0 nonHigh=1
- bit 4 : Sélecteur Mark OFF=0 nonOFF=1
- bit 3 : Sélecteur Heading HDG=0 nonHDG=1
- bit 2 : Sélecteur Heading OFF=0 nonOFF=1
- bit 1 : Sélecteur Altitude HOLD=0 nonHOLD=1
- bit 0 : Sélecteur Altitude OFF=0 nonOFF=1
Fonction Preload Registre
Le boitier modifie la valeur actuelle de ses registres. Un seul registre peut être modifié dans le cas du boitier ConsoleIl suffit d'introduire la nouvelle valeur souhaitée dans les paramêtres et exécuter la fonction Preload, ce qui se fait dans l'interface de test par l'appui du bouton "Preload"
- Reg0 : Altitude niveau
- Reg1 : Pression Alti 2
- Reg2 : Pression Alti 1
- Reg3 : W index
- Reg4 : R index
- Reg5 : Heading
- Reg6 : HSI
- Reg7 : VOR
Fonction Initialisation
Cette opération consiste à modifier les paramêtres de fonctionnement des Registres. Dans le cas du boitier Instrument seuls les 8 premiers registres peuvent voir leurs caractéristiques modifiées.Les registres se rapportent à des compteurs incrémentaux. Le capteur de comptage est un capteur rotatif numérique ( genre potentiomêtre ).
Le programme du boitier permet de modifier le fonctionnement par défaut de ce compteur.
D'une part sur l'amplitude du comptage, d'autre part pour le traitement des butées. Le compteur peut compter/décompter :
Il suffit donc d'introduire la nouvelle valeur d'amplitude souhaitée, et de positionner dans l'octet d'état le bit du mode de fonctionnement du compteur ( 1 pour butée, 0 pour circulaire ) et d'exécuter la fonction Initialisation, faite dans l'interface de test par l'appui du bouton "Init".circulairement ( cyclique ), c'est à dire lorsque la valeur atteint le maximun de l'amplitude, celui revient au départ ( à la fin lors d'un décomptage ) avec butée, dans ce cas le compteur ne peut dépasser ses butée ( 0 et amplitude maxi ) même lorsque l'opérateur continue à actionner le capteur rotatif.
Boitier Radios
Fonction Identification
A la requête identification le boitier répond la chaine de caractère "K_Rad"Fonction lecture des registres
Le boitier retourne le contenu de 14 registres + checksum
Les 14 registres correspondent à :Reg0 : V0 Com1 Fréquence active Reg1 : V1 Com2 Fréquence active Reg2 : V2 Nav1 Fréquence active Reg3 : V3 Nav2 Fréquence active Reg4 : V4 ADF Fréquence active Reg5 : V5 DME Fréquence active Reg6 : V6 TRP Fréquence active Reg7 : V0 Com1 Fréquence attente Reg8 : V1 Com2 Fréquence attente Reg9 : V2 Nav1 Fréquence attente Reg10 : V3 Nav2 Fréquence attente Reg11 : V4 ADF Fréquence attente Reg12 : V5 DME Fréquence attente Reg13 : Autres informations
La lecture se fait par l'appel de la fonction Lecture des registres, appelée dans le cas de l'interface de test par l'appui du bouton "Rcpt"
- bit15 : \
- bit14 : \
- bit13 : \
- bit12 : ) numéro de voie selectionnée
- bit11 : ) octet de 0 à 6 correspondant numero de voie
- bit10 : /
- bit 9 : /
- bit 8 : /
- bit 7 : non instrumenté
- bit 6 : BP Ident on=1 off=0BP on on=0 non on=1
- bit 5 : SE off-stdy-on Off=0 nonOff=1
- bit 4 : SE off-stdy_on On=0 nonOn=1
- bit 3 : BP Test on=1 off=0
- bit 2 : BP Commut on=1 off=0
- bit 1 : BP Escape on=1 off=0
- bit 0 : BP Valid on=1 off=0
Fonction Preload Registre
Le boitier modifie la valeur actuelle de ses registres.
- Reg0 : V0 Com1 Fréquence active
- Reg1 : V1 Com2 Fréquence active
- Reg2 : V2 Nav1 Fréquence active
- Reg3 : V3 Nav2 Fréquence active
- Reg4 : V4 ADF Fréquence active
- Reg5 : V5 DME Fréquence active
- Reg6 : V6 TRP Fréquence active
- Reg7 : V0 Com1 Fréquence attente
- Reg8 : V1 Com2 Fréquence attente
- Reg9 : V2 Nav1 Fréquence attente
- Reg10 : V3 Nav2 Fréquence attente
- Reg11 : V4 ADF Fréquence attente
- Reg12 : V5 DME Fréquence attente
- Reg13 : V6 TRP Fréquence attente
attention bien que le préchargement du Reg 6 et du Reg 13 soit opérationnel, nous conseillons d'utiliser la même valeur, car le fonctionnement du réglage transpondeur a un comportement un peu particulier, et une différence de valeur pourrait mettre dans l'embarras l'utilisateur par rapport à la doumentation d'utilisation du boitier.Il suffit d'introduire la nouvelle valeur souhaitée dans les paramêtres et exécuter la fonction Preload, ce qui se fait dans l'interface de test par l'appui du bouton "Preload"
Fonction Initialisation
Cette fonction n'est pas implémentée pour le boitier Radio.
| Retour Sommaire | Retour Accueil |
Ce paragraphe précise l'organisation des buffers d'émission de de réception.
Identification
Demande
Nb Byte byte 0 byte 1 byte 2 3 0x01 0xA7 0xA6 Réponse
Byte 0 byte 1 byte 2 byte 3 byte 4 byte 5 acquit (0x55) "K" "_" "C" "o" "n" suivant le boitier retour des chaines suivantes
- K_Con pour Console
- K_Ins pour Instrument
- K_Rad pour Radio
Lecture registre
Demande
Nb Byte Byte 1 Byte 2 Byte 3 3 0x01 0xA4 0xA3 Réponse
Byte 0 = Code retour 0x55 (échange correcte)boitier Console, et InstrumentByte 1 = 8 bits de poids faible du 1er registreboitier Radio
Byte 2 = 8 bits de poids fort du 1er registre
Byte 3 = 8 bits de poids faible du 2eme registre
Byte 4 = 8 bits de poids fort du 2eme registre
.
.
Byte 23 = 8 bits de poids faible du 12eme registre
Byte 24 = 8 bits de poids fort du 12eme registre
Byte 25 = octet checksumPréchargement
Demandeboitier Console, et Instrument
Nb Byte byte 0 byte 1 suite 19 0x11 0xA3 ci-après Byte 2 = 8 bits de poids faible du 1er registre (Reg0)boitier Radio
Byte 3 = 8 bits de poids fort du 1er registre
Byte 4 = 8 bits de poids faible du 2eme registre
Byte 5 = 8 bits de poids fort du 2eme registre
.
.
Byte 16 = 8 bits de poids faible du 8eme registre (Reg7)
Byte 17 = 8 bits de poids fort du 8eme registre
Byte 18 = octet checksum
Nb Byte Byte 0 Byte 1 suite 31 0x1D 0xA3 ci-dessous Byte 2 = 8 bits de poids faible du 1er registre (Reg0)
Byte 3 = 8 bits de poids fort du 1er registre
Byte 4 = 8 bits de poids faible du 2eme registre
Byte 5 = 8 bits de poids fort du 2eme registre
.
.
Byte 28 = 8 bits de poids faible du 8eme registre (Reg13)
Byte 29 = 8 bits de poids fort du 8eme registre
Byte 30 = octet checksum
RéponseCode retour 0x55 (échange correcte)Initialisation
Demandeboitier Console, et InstrumentRéponse
Nb Byte byte 0 byte 1 suite 20 0x12 0xA2 ci-après Byte 2 = 8 bits de poids faible du 1er registre (Reg0)boitier Radio
Byte 3 = 8 bits de poids fort du 1er registre
Byte 4 = 8 bits de poids faible du 2eme registre
Byte 5 = 8 bits de poids fort du 2eme registre
.
.
Byte 16 = 8 bits de poids faible du 8eme registre (Reg7)
Byte 17 = 8 bits de poids fort du 8eme registre
Byte 18 = 8 bits de poids faible du registre mode de fonctionnement (1 octet)
Byte 19 = octet checksumpas d'initialisation pour ce boitierCode retour 0x55 (échange correcte)
| Retour Sommaire | Retour Accueil |
Les programmes exécutables sont fournis :
Veuillez transférer ces fichiers dans le répertoire de votre choix, et les exécuter. La documentation d'utilisation se trouve dans la notice Utilisateur.- Application Console
- Application Instrument
- Application Radio
| Retour Sommaire | Retour Accueil |