The TeleAuto camera plugin


Qu'allez vous trouver sur cette page ?

Cette page vous explique comment programmer sous Delphi un plugin qui vous permettra de piloter votre camera CCD à partir de TeleAuto Version 2.96 et supérieures. Pour l'instant ce plugin à toutes les fonctions nécessaires pour écrire des plugins pour les caméra déjà pilotées par TeleAuto.
Si les fonctions disponibles ne sont pas suffisantes pour piloter votre caméra ou si vous avez besoin de renseignements, n'hésistez pas à contacter Philippe. 

Modifications apportées à ce document :

27 février 2004 pour la version 2.97 :

  • Ajout des fonctions PluginHasCfgWindow et PluginShowCfgWindow pour afficher une fenêtre de configuration spécifique à la caméra. TeleAuto affiche alors un bouton supplémentaire dans sa fenêtre de configuration. Ce bouton permet d'appeler cette fenêtre.La function PluginHasCfgWindow permet à TeleAuto de savoir si le plugin permet d'afficher une fenêtre de configuration spécifique. La fonction PluginShowCfgWindow permet à TeleAuto d'appeler cette fenêtre.

11 novembre 2003 pour la version 2.96 :

  • Modification de la fonction PluginOpen qui renvoit maintenant un booleen pour savoir si l'ouverture c'est bien passée

11 aout 2003 pour la version 2.96 :

  • Ajout de la fonction PluginIs16Bits qui permet de gérer les caméras à convertisseur 16 bits

1 juillet 2002 pour la version 2.8 :

  • La fonction PluginGetCCDDate devient PluginGetCCDDateBegin.
  • La fonction PluginGetCCDTime devient PluginGetCCDTimeBegin.
  • Ajout de la fonction PluginGetCCDDateEnd qui permet de donner à TeleAuto la date de fin de la prise de vue.
  • Ajout de la fonction PluginGetCCDTimeEnd qui permet de donner à TeleAuto l'heure de fin de la prise de vue.
  • Ajout des fonctions PluginIsUsedUnderNT et PluginIsNotUsedUnderNT qui permet à TeleAuto de signaler au plugin si il est utilisé sous NT/2000/XP. Ceci permet de sauter le masquage des interruptions qui provoquerais une erreur sous ces OS.
  • Ajout de la fonction PluginSetHourServer qui permet d'avoir accés à la fonction GetHour interne à TeleAuto. Cette fonction fait appel au serveur d'heure choisi pas l'utilisateur de TeleAuto.
23 mars 2002 pour la version 2.7 :
  • Ajout de la fonction PluginSetPCMinusUT qui permet de connaitre la difference de temps entre l'heure du PC et l'heure TU entrée dans la fenêtre de configuration.
  • Ajout d'un exemple complet de plugin pour Hisis 22 14 bits avec code source.


20 décembre 2001 pour la version 2.66c : 

  • PluginGetXPixelSize et PluginGetYPixelSize doivent retourner une valeur réelle.
  • Ajout des fonctions PluginGetNbplan et PluginGetTypeData.
  • Ajout de la taille de l'image à dans PluginReadCCD.
  • Exemple de lecture d'une image en couleur dans PluginTestCCD.
Voir ci-dessous pour la description de ces fonctions.

Quel est l'interêt d'avoir un plugin Camera dans TeleAuto ?

La programmation des interfaces avec le matériel en général et avec les caméras CCD en particulier et extrèmement délicat et nécéssite presque obligatoirement de posséder la Caméra CCD en question. Les auteurs de TeleAuto n'étant pas assez fortunés pour acheter toutes les caméras que les utilisateurs voudraient voir intégrer dans TeleAuto, le plugin a été adopté. 
Cette méthode permettra de simplifier les choses puisque les utilisateurs programmeurs pourront intégrer eux même leur caméra. Les auteurs n'auront plus a s'occuper d'écrire et maintenir les drivers pour d'autres caméras. Ceci est un avantage car l'écriture d'un tel driver est très aléatoire sans avoir la caméra branchée au PC. De plus il est nésessaire, de tester chaque caméras à chaque mises à jour de la partie CCD de TeleAuto. Au prix d'un petit travail de programmation, les utilisateurs auront l'assurance de voir leur caméra correctement fonctionner et mise à jour dans TeleAuto, chose impossible à garantir pour les auteurs. 

Comment se présente le plugin Camera ?

C'est une librairie dynamique (.dll) écrite dans le language de votre choix et ayant le nom de votre choix. Essayez tout de même de choisir un nom personnalisé permettant d'avoir une dll différente par type de caméra. Par exemple préférez 'ST7.dll' à 'Plugin.dll'. 

Cette librairie doit mettre à disposition de TeleAuto toutes les procédures et fonctions listées dans la suite de cette page. 
Cette librairie doit être placée dans le même répertoire que l'exécutable TeleAuto.exe et doit être déclarée dans l'onglet 'Caméra' de la fenêtre de configuration de TeleAuto. Pour se faire, cliquez sur le type de caméra 'Plugin' et indiquez le nom de la librairie. 

Quelles sont les procédures et fonctions qui doivent être présents dans la librairie plugin ?

Voici la liste des procédures et fonctions à coder dans la libraire. Chaque déclaration de procédure et de fonction dans ce chapitre est suivie d'une explication sur ce que vous devez y programmer. La forme est ici celle de Delphi. Veillez voir plus loin dans cette page pour avoir des informations sur l'écriture dans d'autres languages. 

procedure PluginSetPort(_Adress:Word); cdecl;
Cette procédure permet à TeleAuto d'envoyer au plugin la valeur de l'adresse du port paralléle choisie par l'utilisateur. 
Si cette valeur est stoquée dans la variable Adress de la librairie, cette procédure est exactement : 

procedure PluginSetPort(_Adress:Word); cdecl; 
begin 
Adress:=_Adress; 
end; 

function PluginSetWindow(_x1,_y1,_x2,_y2:Integer):Boolean; cdecl;
Cette procédure permet à TeleAuto d'envoyer au plugin les dimensions de la fenêtre d'acquisition choisie par l'utilisateur pour l'acqusition. 
Attention, ces valeurs sont les valeurs dans un équivalent en Binning 1x1. 
Si ces valeurs sont stoquées dans les variables x1,y1,x2,y2 (attention, on a x1<x2 et y1<y2) de la librairie, cette procédure est exactement : 

function PluginSetWindow(_x1,_y1,_x2,_y2:Integer):Boolean; cdecl; 
begin 
if (_x1>0) and (_x2>0) and (_x1<PluginGetXSize+1) and (_x2<PluginGetXSize+1) and 
   (_y1>0) and (_y2>0) and (_y1<PluginGetYSize+1) and (_y2<PluginGetYSize+1) and 
   (_x2>_x1) and (_y2>_y1) then 
   begin 
   x1:=_x1; 
   y1:=_y1; 
   x2:=_x2; 
   y2:=_y2; 
   Result:=True; 
   end 
else Result:=False; 
end; 

function PluginSetBinning(_Binning:Integer):Boolean; cdecl;
Cette procédure permet à TeleAuto d'envoyer au plugin le binning choisi par l'utilisateur pour l'acquisition. 
Si cette valeur est stoquée dans la variable Binning de la librairie et que les binning possibles sont 1x1,2x2,3x3,4x4, cette procédure est exactement : 

function PluginSetBinning(_Binning:Integer):Boolean; cdecl; 
begin 
if (_Binning=1) or (_Binning=2) or (_Binning=3) or (_Binning=4) then
   begin 
   Binning:=_Binning; 
   Result:=True; 
   end 
else Result:=False; 
end; 

function PluginSetPose(_Pose:Double):Boolean; cdecl;
Cette procédure permet à TeleAuto d'envoyer au plugin le temps de pose en secondes choisi par l'utilisateur pour l'acquisition. 

function PluginSetPose(_Pose:Double):Boolean; cdecl; 
begin 
if (_Pose>0) and (_Pose<50331.645) then 
   begin 
   Pose:=_Pose; 
   Result:=True; 
   end 
else Result:=False; 
end; 

function PluginSetEmptyingDelay(_EmptyingDelay:Double):Boolean; cdecl;
Cette procédure permet à TeleAuto d'envoyer au plugin le délai de vidage de la matrice CCD en secondes choisi par l'utilisateur pour l'acquisition. 
Cette fonction est utilisée dans les cameras Hisis22 pour synchroniser l'acquisition avec TeleAuto. 

function PluginSetEmptyingDelay(_EmptyingDelay:Double):Boolean; cdecl; 
begin 
if (_EmptyingDelay>0) then 
   begin 
   EmptyingDelay:=_EmptyingDelay; 
   Result:=True; 
   end 
else Result:=False; 
end; 

function PluginSetReadingDelay(_ReadingDelay:Double):Boolean; cdecl;
Cette procédure permet à TeleAuto d'envoyer au plugin le délai à introduire à la lecture de la matrice CCD choisi par l'utilisateur pour l'acquisition. 
Cette valeur est utilisée pour les caméras Hisis22 ou elle indique le nombre de nop à ajouter pour ralentir la lecture du CCD sur les vieux port parallèles. 

function PluginSetReadingDelay(_ReadingDelay:Double):Boolean; cdecl; 
begin 
if (_ReadingDelay>0) then 
   begin 
   ReadingDelay:=_ReadingDelay; 
   Result:=True; 
   end 
else Result:=False; 
end; 

function PluginSetShutterCloseDelay(Delay:Double):Boolean; cdecl;
Cette fonction permet à TeleAuto d'envoyer au plugin le délai de fermeture de l'obturateur de la matrice CCD choisi par l'utilisateur. 
Cette fonction et utilisée pour l'Audine avec obturateur R. David. Elle permet de ne pas envoyer l'ordre d'ouverture si le temps de pose est inférieur à ce délai. 

function PluginSetShutterCloseDelay(Delay:Double):Boolean; cdecl; 
begin 
if (Delay>0) then 
   begin 
   ShutterCloseDelay:=Delay; 
   Result:=True; 
   end 
else Result:=False; 
end; 

function PluginIsConnectedAndOK:Boolean; cdecl;
Cette fonction doit tester si la caméra est connectée et en état de marche et retourner True si c'est le cas, False dans le cas contraire. 
Elle est appelée par TeleAuto à chaque connection de la caméra. 
function PluginIsConnectedAndOK:Boolean; cdecl; 
begin 
Result:=True; 
end; 

function PluginOpen:Boolean; cdecl;
Cette procédure doit contenir le code d'initialisation de la caméra éventuellement nécessaire. Elle peut rester vide. 
Elle est appelée par TeleAuto à chaque connection de la caméra.  et retourne True si tout c'est bien passé

procedure PluginOpen; cdecl; 
begin 
Result:=True;

end; 

procedure PluginClose; cdecl;
Cette procédure doit contenir le code de fermeture de la camera éventuellement nécessaire. Elle peut rester vide. 
Elle est appelée par TeleAuto à sa fermeture. 

procedure PluginClose; cdecl; 
begin 

end; 

function PluginStartPose:Boolean; cdecl;
Cette fonction doit lancer l'aquisition de l'image. Elle est appellée par TeleAuto pour lancer l'acquisition. 
Le variables globales déclarées dans la librairie doivent être utilisées ici pour prendre l'image demandée par l'utilisateur. 
Dans la librairie donnée en exemple plus loin elle sont : 
// Variables provided by the TeleAuto user to setup the CD camera 
    Adress:Word;                   // The adress of the paralel port used by the camera 
    x1,y1,x2,y2:Integer;           // The window to acquire in equivalent binning 1x1 
    Binning:Integer;               // Binning used 
    Pose:Double;                   // The pose in seconds 
    EmptyingDelay:Double;          // Delay needed to empty the CCD (Hisis cameras) 
    ReadingDelay:Double;           // Reading delay (Hisis cameras) 
    ShutterCloseDelay:Double;      // Closing delay of the shutter 
Cette fonction doit retourner True, si tout c'est passé correctement. 

function PluginStartPose:Boolean; cdecl; 
begin 
Result:=True; 
end; 

function PluginStopPose:Boolean; cdecl;
Cette fonction doit contenir le code permettant d'arrêter l'aquisition avant le delai normal donné par SetPose. 
Elle et appellée par TeleAuto quand l'utilisateur appuie sur le bouton 'Stop' pour arrêter la pose avant sa fin. 
Cette fonction doit retourner True, si tout c'est passé correctement. 

function PluginStopPose:Boolean; cdecl; 
begin 
Result:=True; 
end; 

function PluginReadCCD(TabImgInt:PTabImgInt; ImgSx,ImgSy:Integer):Boolean; cdecl;
Cette fonction doit contenir le code permettant de lire la CCD et de mettre son contenu dans la variable TabImgInt de type PTabImgInt déclaré dans la librairie donnée en exemple plus loin :

TLigInt=array[1..999999] of SmallInt
PLigInt=^TLigInt
TImgInt=array[1..999999] of PLigInt
PImgInt=^TImgInt
TTabImgInt=array[1..255] of PImgInt
PTabImgInt=^TTabImgInt
C'est la déclaration de type Image de TeleAuto.
Le type Smallint est un entier signé codé sur 2 octets . Pour envoyer à TeleAuto une image codée sur 16 bits c'est à dire dans un entier non signé sur 2 octets, il faut enlever la valeur 32768 à la valeur donnée par la caméra. TeleAuto saura grâce à la fonction PluginIs16Bits qu'il doit ajouter la valeur 32768 aux intensités de l'image. L'image sera alors stockée en mémoire dans un format à virgule flottante sur 8 octets. Pour continuer à sauver ces images dans des fichiers au format entier, signalez le dans la configuration de TeleAuto. 

Les dimensions allouée pour l'image sont indiquées par ImgSx et ImgSy, il peut être prudent de contôler le débordement. 
Cette fonction est appelée par TeleAuto aprés la fin de l'acquisition. 
Cette fonction doit retourner True, si tout c'est passé correctement. 
L'exemple suivant remplit l'image avec des 0 : 

function PluginReadCCD(TabImgInt:PTabImgInt; ImgSx,ImgSy:Integer):Boolean; cdecl;
var 
   i,j:Integer; 
begin 
Result:=True; 
for j:=1 to (y2-y1+1) div Binning do 
   for i:=1 to (x2-x1+1) div Binning do 
      TabImgInt^[1]^[j]^[i]:=0; 
end; 

procedure PluginGetCCDDateBegin(var Year,Month,Day:Word); cdecl;
Cette fonction est utilisée par TeleAuto pour connaître la date d'acquisition de l'image qui vient d'être prise. 
Attention, cette date correspond à l'instant du début de pose dans TeleAuto en Temps Universel. 
Cette fonction est appelée aprés la lecture du CCD dans TeleAuto. 

procedure PluginGetCCDDate(var Year,Month,Day:Word); cdecl; 
begin 
Year:=2001; 
Month:=7; 
Day:=25; 
end; 

procedure PluginGetCCDTimeBegin(var Hour,Min,Sec,MSec:Word); cdecl;
Cette fonction est utilisée par TeleAuto pour connaître l'heure d'acquisition de l'image qui vient d'être prise. 
Attention, cette date correspond à l'instant du début de pose dans TeleAuto en Temps Universel. 
Cette fonction est appelée aprés la lecture du CCD dans TeleAuto. 

procedure PluginGetCCDTime(var Hour,Min,Sec,MSec:Word); cdecl; 
begin 
Hour:=1; 
Min:=32; 
Sec:=21; 
MSec:=0; 
end; 

procedure PluginGetCCDDateEnd(var Year,Month,Day:Word); cdecl;
Cette fonction est utilisée par TeleAuto pour connaître la date d'acquisition de l'image qui vient d'être prise. 
Attention, cette date correspond à l'instant de fin de pose dans TeleAuto en Temps Universel. 
Cette fonction est appelée aprés la lecture du CCD dans TeleAuto. 

procedure PluginGetCCDDate(var Year,Month,Day:Word); cdecl; 
begin 
Year:=2001; 
Month:=7; 
Day:=25; 
end; 

procedure PluginGetCCDTimeEnd(var Hour,Min,Sec,MSec:Word); cdecl;
Cette fonction est utilisée par TeleAuto pour connaître l'heure d'acquisition de l'image qui vient d'être prise. 
Attention, cette date correspond à l'instant de fin de pose dans TeleAuto en Temps Universel. 
Cette fonction est appelée aprés la lecture du CCD dans TeleAuto. 

procedure PluginGetCCDTime(var Hour,Min,Sec,MSec:Word); cdecl; 
begin 
Hour:=1; 
Min:=32; 
Sec:=21; 
MSec:=0; 
end; 

function PluginGetTemperature:Double; cdecl;
Lorsque la caméra  possède un capteur de température (voir la fonction PluginHasTemperature plus loin) cette fonction est utilisée pour lire la température du capteur CCD en degrés. 
Cette fonction est appelée toutes les secondes par TeleAuto. 

function PluginGetTemperature:Double; cdecl; 
begin 
Result:=10; 
end; 

procedure PluginSetTemperature(TargetTemperature:Double); cdecl;
Lorsque la caméra  possède un capteur de température (voir la fonction PluginHasTemperature plus loin) cette procédure est utilisée pour envoyer la température de consigne choisie par l'utilisateur vers la caméra. 
Cette procédure est appelée à tous les changements de consigne dans la fenêtre de configuration.

procedure PluginSetTemperature(TargetTemperature:Double); cdecl; 
begin 

end; 

procedure PluginSetPCMinusUT(_PCMinusUT:Double); cdecl;
Cette procédure permet de connaitre la difference de temps entre l'heure du PC et l'heure TU entrée dans la fenêtre de configuration et ainsi corriger l'heure PC lue dans le plugin pour la transformer en heure TU. Cette procedure est appelée par TeleAuto à la connexion de la caméra et à chanque changement de la différence PC-TU dans la fenêtre de configuration si la camera est connectée.

procedure PluginSetPCMinusUT(_PCMinusUT:Double); cdecl; 
begin 

end; 

procedure PluginAmpliOn; cdecl;
Lorsque la caméra permet de couper l'amplificateur de sortie du capteur CCD, cette procédure est utilisée par TeleAuto pour allumer l'amplificateur en fin de pose. 

procedure PluginAmpliOn; cdecl; 
begin 

end; 

procedure PluginAmpliOff; cdecl;
Lorsque la caméra permet de couper l'amplificateur de sortie du capteur CCD, cette procédure est utilisée par TeleAuto pour couper l'amplificateur en début de pose. 

procedure PluginAmpliOff; cdecl; 
begin 

end; 

procedure PluginShutterOpen; cdecl;
Lorsque la caméra à un obturateur, cette procédure est appelée pour ouvrir cet obturateur et le maintenir ouvert jusqu'à nouvel ordre. 
Cette procédure n'est pas encore utilisée par TeleAuto. 

procedure PluginShutterOpen; cdecl; 
begin 

end; 

procedure PluginShutterClosed; cdecl;
Lorsque la caméra à un obturateur, cette procedure est appelée pour fermer cet obturateur et le maintenir fermé jusqu'à nouvel ordre. 
Cette procédure est appelée par TeleAuto avant toute acquisition d'offset ou de noir. 

procedure PluginShutterClosed; cdecl; 
begin 

end; 

procedure PluginShutterSynchro; cdecl;
Lorsque la caméra à un obturateur, cette procedure est appelée pour synchroniser cet obturateur sur les acquisitions. 
Cette procédure est appelée par TeleAuto aprés toute acquisition d'offset ou de noir. 

procedure PluginShutterSynchro; cdecl; 
begin 

end; 

function PluginGetName:PChar; cdecl;
Cette fonction est appelée par TeleAuto pour connaître le nom de la caméra. 
Pour la ST7 : 

function PluginGetName:PChar; cdecl; 
begin 
Result:='ST7'; 
end; 

function PluginGetSaturationLevel:Integer; cdecl;
Cette fonction est appelée par TeleAuto pour connaitre le niveau de saturation de la caméra en ADU 

function PluginGetSaturationLevel:Integer; cdecl; 
begin 
Result:=32767; // To modify 
end; 

function PluginGetXSize:Integer; cdecl;
Cette fonction doit retourner la nombre de pixels d'une ligne de la matrice CCD. 
Pour les caméras à base de KAF400 elle prendrait la forme : 

function PluginGetXSize:Integer; cdecl; 
begin 
Result:=768; 
end; 

function PluginGetYSize:Integer; cdecl;
Cette fonction doit retourner la nombre de lignes de la matrice CCD. 
Pour les caméras à base de KAF400 elle prendrait la forme : 

function PluginGetYSize:Integer; cdecl; 
begin 
Result:=512; 
end; 

function PluginGetXPixelSize:Double; cdecl;
Cette fonction est appelée par TeleAuto pour connaître la taille des pixels de la caméra dans le sens des lignes en micromètres. 
Pour un KAF400 : 

function PluginGetXPixelSize:Double; cdecl; 
begin 
Result:=9; // To modify 
end; 
 

function PluginGetYPixelSize:Double; cdecl;
Cette fonction est appelée par TeleAuto pour connaître la taille des pixels de la caméra dans le sens des colonnes en micromètres. 
Pour un KAF400 : 

function PluginGetYPixelSize:Double; cdecl; 
begin 
Result:=9; 
end; 

function PluginGetNbplan:Integer; cdecl;
Cette fonction est appelée par TeleAuto pour connaître le nombre de plan de couleur de l'image. Peut prendre la valeur 1 pour une image noir/blanc ou 3 pour une image couleur. 

function PluginGetNbplan:Integer; cdecl;
begin
Result:=1;
end; 

function PluginGetTypeData:Integer; cdecl;
Cette fonction est appelée par TeleAuto pour connaître le type de donnée de l'image. Peut prendre la valeur 2 pour une image noir/blanc 16 bits ou 7 pour une image couleur. 

function PluginGetTypeData:Integer; cdecl;
begin
Result:=2;
end; 

function PluginIsAValidBinning(Binning:Byte):Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour connaître les valeurs de Binning qui peuvent être utilisées avec la caméra. 
Pour l'instant seuls les binnings 1x1,2x2,3x3,4x4 sont utilisés par TeleAuto. Le binning 4x4 est utilisé préférenciellement au 3x3. 
Pour une ST7 : 

function PluginIsAValidBinning(Binning:Byte):Boolean; cdecl; 
begin 
if (Binning=1) or (Binning=2) or (Binning=3) then Result:=True 
else Result:=False; 
end; 

function PluginHasTemperature:Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour savoir si la caméra à un capteur de température qui peut être lu. 
Pour une ST7, c'est le cas : 

function PluginHasTemperature:Boolean; cdecl; 
begin 
Result:=True; 
end; 

function PluginCanCutAmpli:Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour savoir si l'amplificateur de sortie du capteur CCD de la caméra peut être coupé pendant la pose. 
Pour une ST7, ce n'est pas le cas : 

function PluginCanCutAmpli:Boolean; cdecl; 
begin 
Result:=False; 
end; 

function PluginGetDelayToSwitchOffAmpli:Double; cdecl;
Cette fonction est appelée par TeleAuto pour savoir quel est le délai qu'il doit respecter entre le début de la pose et la coupure de l'amplificateur de sortie. 
Par exemple : 

function PluginGetDelayToSwitchOffAmpli:Double; cdecl; 
begin 
Result:=1; 
end; 

function PluginGetDelayToSwitchOnAmpli:Double; cdecl;
Cette fonction est appelée par TeleAuto pour savoir quel est le délai qu'il doit respecter entre l'allumage de l'amplificateur de sortie et la fin de pose. 
Par exemple : 

function PluginGetDelayToSwitchOnAmpli:Double; cdecl; 
begin 
Result:=4; 
end; 

function PluginNeedEmptyingDelay:Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour savoir si il doit fournir le délai de vidage de la matrice donné par l'utilisateur. 
Par exemple, pour la ST7 : 

function PluginNeedEmptyingDelay:Boolean; cdecl; 
begin 
Result:=False; 
end; 

function PluginNeedReadingDelay:Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour savoir si il doit fournir le délai de ralentissement de la lecture de la matrice donné par l'utilisateur. 
Par exemple, pour la ST7 : 

function PluginNeedReadingDelay:Boolean; cdecl; 
begin 
Result:=False; 
end; 

function PluginNeedCloseShutterDelay:Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour savoir si il doit fournir le délai de délai de fermeture de l'obturateur donné par l'utilisateur. 
Par exemple, pour la ST7 : 

function PluginNeedCloseShutterDelay:Boolean; cdecl; 
begin 
Result:=False; 
end; 

function PluginHasAShutter:Boolean; cdecl;
Cette fonction est appelée par TeleAuto pour savoir si la caméra a un obturateur. 
Par exemple, pour la ST7 : 

function PluginHasAShutter:Boolean; cdecl; 
begin 
Result:=True; 
end; 

procedure PluginIsUsedUnderNT; cdecl;
Cette fonction est appelée par TeleAuto pour indiquer au plugin si il est utilisé sous NT/2000/XP.
Ceci permet de sauter le masquage des interruptions qui provoquerais une erreur sous ces OS.
// Exemple :
// if not OSiSNT then asm cli end;

procedure PluginIsUsedUnderNT; cdecl;
begin
OSiSNT:=True;
end;

procedure PluginIsNotUsedUnderNT; cdecl;
Cette fonction est appelée par TeleAuto pour indiquer au plugin si il est utilisé sous NT/2000/XP.
Ceci permet de sauter le masquage des interruptions qui provoquerais une erreur sous ces OS.

procedure PluginIsNotUsedUnderNT; cdecl;
begin
OSiSNT:=False;
end;

procedure PluginSetHourServer(ServerAdress:Pointer); cdecl;
Cette fonction permet de connaître l'adresse de la fonction GetHour interne à TeleAuto
Elle pourra être ainsi appelé par le plugin pour connaître l'heure donnée par le serveur d'heure choisit par l'utilisateur

procedure PluginSetHourServer(ServerAdress:Pointer); cdecl;
begin
@GetHour:=ServerAdress;
end;

La déclaration de cette fonction dans le plugin est la suivante :

type
  // Prototype of the TeleAuto function you can call to have precise hour // New in version 2.8
  TGetHour = procedure (var Year,Month,Day,Hour,Min,Sec,MSec:Word);

var
  // TeleAuto function giving precise hour // New in version 2.8
  GetHour:TGetHour;

function PluginIs16Bits:Boolean; cdecl;
Cette fonction permet de signaler si la caméra pilotée posséde un convertisseur 16 bits. Dans ce cas elle doit retourner la valeur True. Cette fonction combinée à la modification des valeurs des intensités dans la fonction PluginReadCCD permet d'utiliser toute la dynamique du CCD.

function PluginIs16Bits:Boolean; cdecl;
begin
Result:=True;
end;

function PluginHasCfgWindow:Boolean; cdecl;
Cette function permet à TeleAuto de savoir si le plugin permet d'afficher une fenêtre de configuration spécifique.

function PluginHasCfgWindow:Boolean; cdecl;
// New in Version 2.97
// Here you must return true if this plugin can display a configuration window
begin
Result:=False;
end;

function PluginShowCfgWindow:Boolean; cdecl;
Cette fonction permet à TeleAuto d'appeler cette fenêtre.

function PluginShowCfgWindow:Boolean; cdecl;
// New in Version 2.97
// Here you can show the custom configuration window
begin
Result:=True;
//Here you put the code to create and display the configuration window
//See the plugin below to have an Delphi exemple
end;

Peut on avoir un exemple de plugin ?

Le voici : Exemple de code source de plugin simple pour Delphi
Vous y trouverez les exemples du chapitre précédent. 
Et ici : Le code compilé de ce même plugin qui fait une aquisition virtuelle d'images vierges. 

Et voici même un deuxième exemple beaucoup plus complet de Plugin complètement fonctionnel pour Hisis 22 14 bits :
Exemple de code source du plugin pour Hisis 22 14 bits
Code compilé du plugin pour Hisis 22 14 bits

Pour les  programmeurs C, voici un exemple de souce de plugin d'exemple en C codé par Tom Licha ( http://www.licha.de/AstroWeb ) :
Exemple de code source de plugin simple en C pour la version 2.8 de TeleAuto. Pour la version actuelle, il faut ajouter les fonctions des versions suivantes

Et si on n'utilise pas Delphi ?

Voici quelques informations qui je l'espère vous seront utiles : 

Tout d'abord les conventions d'appel des fonctions est celui du C pour faciliter l'écriture de plugins dans ce language. 
Les chaînes de caratères utilisées sont à zéro terminal toujours pour faciliter l'écriture de plugins en C. 

Concernant les types de données delphi, voici quelques informations qui devraient vous permettre de faire la correspondance avec votre langage :
 
Nom du type
Etendue
Format
Smallint  –32768..32767 Entier 16 bits signé
Integer  –2147483648..2147483647 Entier 32 bits signé
Word  0..65535 Entier 16 bits non signé
Double  5.0 x 10^–324 .. 1.7 x 10^308 Flottant 8 octets

Le type Boolean occupe un octet en mémoire. Il prends la valeur False quand sa valeur numérique équivalente est 0 et la valeur True pour toutes les autres valeurs numériques équivalentes. 

Le type PTabImgInt qui permet de stocker des images dans TeleAuto est un pointeur sur une structure contenant les lignes de l'image mises bout à bout en mémoire.