Driver Hitec HTS-Navi

Administrateur
Imprimer

Sur les radios de dernière génération, les fonctions de télémétries sont devenues monnaie courante. Des marques telles que Hitec, Spektrum, FrSky, et même Futaba avec la 18MZ s'y sont mis.

Je vous propose donc un driver Windows permettant de remonter l'intégralité de ces informations via la plateforme Sensors de Windows 7 ou  les API IOCTL de windows.

 

A ma connaissance, seul Hitec propose une interface USB avec le HTS-Navi.
Tout comme Hitec, Spektrum fourni aussi un équivalent pour iPhone, mais la connectique employée restreint sont utilisation.

Ce driver est principalement destiné aux développeurs en herbe. Il peut être utilisé dans le cadre du projet ADS, à condition toutefois d'y adjoindre les capteurs nécessaire à la mise en oeuvre d'une centrale inertielle.

La procédure d'installation est disponible ici.

 


 

 

 


Voici la définition des API internes au driver:


unit HTSNavi.HTSNavi;
interface
Uses
  Windows;
Const
  CLASS_HTSNaviDriver: TGUID = '{C694385E-F46D-43A2-9377-6E65ECE838D7}';
  HTSNaviDeviceIdentifier      = 'USB\VID_1E1A&PID_0029';
  HTSNaviDeviceIdentifier_Rev1 = HTSNaviDeviceIdentifier + '&REV_0001';
  MAX_GPS_SENSOR      = 1;
  MAX_TEMP_SENSOR     = 4;
  MAX_RPM_SENSOR      = 2;
  MAX_CURRENT_SENSOR  = 1;
  MAX_VOLTAGE_SENSOR  = 1;
  MAX_FUEL_SENSOR     = 1;
Var
  //IOCTL for Driver (subject to changes)
  IOCTL_HTSNAVI_LINK: DWORD;
  IOCTL_HTSNAVI_UPDATE: DWORD;
  IOCTL_HTSNAVI_GET_DATA: DWORD;
  IOCTL_HTSNAVI_GET_UPDATERATE: DWORD;
  IOCTL_HTSNAVI_SET_UPDATERATE: DWORD;
  IOCTL_HTSNAVI_SETUP_DEVICE: DWORD;
  IOCTL_HTSNAVI_GET_CONFIG_DESCRIPTOR: DWORD;
Type
  THTSNaviGPSData = Record
    Time: TSystemTime; //UTC
    Level: UCHAR; //%
    Longitude, Latitude: Double; //°
    Altitude: Single; //m
    Speed: Single; //km/h
    Heading: Single; //°
  End;
  THTSNaviSensorData = Record
    Connected: BOOL;
    RxVoltage: Single; //V
    GPS: Array[0..MAX_GPS_SENSOR - 1] of THTSNaviGPSData;
    RPM: Array[0..MAX_RPM_SENSOR - 1] of WORD; // 1/10
    Temp: Array[0..MAX_TEMP_SENSOR - 1] of SHORT; //°C
    FuelLevel: Array[0..MAX_FUEL_SENSOR - 1] of UCHAR; //%
    Current: Array[0..MAX_CURRENT_SENSOR - 1] of Single; //A
    Voltage: Array[0..MAX_VOLTAGE_SENSOR - 1] of Single; //V
  End;
implementation
Uses
  JwaWinIoctl;
Const
  IOCTL_HTSNAVI             = $8000;
  IOCTL_HTSNAVI_INDEX       = $800;
Initialization
  IOCTL_HTSNAVI_LINK                    := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 1, METHOD_BUFFERED, FILE_WRITE_ACCESS);
  IOCTL_HTSNAVI_UPDATE                  := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 2, METHOD_BUFFERED, FILE_READ_ACCESS);
  IOCTL_HTSNAVI_GET_DATA                := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 3, METHOD_BUFFERED, FILE_READ_ACCESS);
  IOCTL_HTSNAVI_GET_UPDATERATE          := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 4, METHOD_BUFFERED, FILE_READ_ACCESS);
  IOCTL_HTSNAVI_SET_UPDATERATE          := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 5, METHOD_BUFFERED, FILE_WRITE_ACCESS);
  IOCTL_HTSNAVI_SETUP_DEVICE            := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 6, METHOD_BUFFERED, FILE_READ_ACCESS Or FILE_WRITE_ACCESS);
  IOCTL_HTSNAVI_GET_CONFIG_DESCRIPTOR   := CTL_CODE(IOCTL_HTSNAVI, IOCTL_HTSNAVI_INDEX + 7, METHOD_BUFFERED, FILE_READ_ACCESS);
end.

Le code source est disponible sur la page des téléchargement.