L'API c++ pour Linux est-elle completement fonctionnelle ?

Posted in General by Sebastien Devaux Tue Nov 01 2016 12:07:04 GMT+0000 (UTC)·7·Viewed 362 times

Bonjour, J'ai été ravi de trouver une API C++ pour ma Slate 2 qui vient just d'arriver. Une petite question quand même : est-ce que c'est sensé marcher ? Parce que ça fait des choses mais c'est pour le moment assez décevant. MAis si ce n'ai pas prêt, je ne pert pas de temps et j'attends que ça avance un peu (je peut éventuellement aider un peu si besoin, au moiins tester des choses). Un résumé de mes essais : - Config de test : Debian 8 x86_64 (Linux tethys 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux) - J'ai tenté de faire un petit programme de test pour capturé et logger sur la sortie standard les evenements et afficher les infos de la slate mais je n'arrive qu'à capturer des evenement PEN_32 et rien d'autre, et ça ne semble pas très réactif (j suspecte que j'en rate un bon paquet même si c'est assez difficile d'en être sûr). Mon programme de test : #include "ISKN_API.h" #include <iostream> #include <unistd.h> using namespace std; using namespace ISKN_API; class MyListener: public Listener { private: SlateManager* _mgr; Device* _device; bool _connected; public: MyListener() { _connected=false; _mgr=new SlateManager(CL_USB); _device=&(_mgr->getDevice()); _mgr->registerListener(this); cout << "Connecting..." << endl; bool res=_mgr->connect(); if (res) { cout << "Connected." << endl; } else { cout << "failed to connect" << endl; } } virtual ~MyListener() { _mgr->disconnect(); cout << "Disconnected" << endl; } bool isConnected() { return _connected; } void processEvent(Event &e, unsigned int timecode) { switch (e.Type) { case EVT_STATUS: cout << "Status" << endl; break; case EVT_DESCRIPTION: cout << "Description" << endl; break; case EVT_SOFTWARE: cout << "Software" << endl; break; case EVT_HARDWARE: cout << "Hardware" << endl; break; case EVT_PEN_3D: { Vector3D po=e.Pen3D.getPosition(); cout << "Pen 3D X=" <<po.X << " Y=" << po.Y << " Z=" << po.Z <<endl; } break; default: cout << "Event: "<< e.Type<<" t="<<timecode<<endl; break; } } void connectionStatusChanged(bool connected) { cout << "Connected: "<<connected<<endl; _connected=connected; if (connected) { bool res; res=_mgr->request(REQ_DESCRIPTION); cout << "request="<<res<<endl; res=_mgr->subscribe(AUTO_STATUS | AUTO_SOFTWARE_EVENTS | AUTO_HARDWARE_EVENTS | AUTO_PEN_3D); cout << "subscribe="<<res<<endl; } } void printDeviceInfo() { cout << "Device info: "<<_device->getDeviceName()<<" " <<_device->getFirmwareVersion()<<" " <<_device->getFreeDiskSpace()<<" " <<_device->getBatteryCharge()<<endl; } void getFiles() { vector<FileInfo> files; cout << "File count="<<files.size()<<endl; _device->getFiles(files); cout << "File count="<<files.size()<<endl; _device->importFile(1); } }; int main(int args,char ** argv) { MyListener evHandler; sleep(1); if (!evHandler.isConnected()) { cout << "Can't connect." << endl; return 0; } sleep(3); evHandler.printDeviceInfo(); sleep(30); return 0; } La sortie obtenue : sdevaux@tethys:~/temp/ISKN_API-0.2/ISKN_API/x64_Linux_GCC$ make run LD_LIBRARY_PATH=./lib bin/iskn Connecting... Connected: 1 request=1 subscribe=1 Connected. Device info: 0 0 Pen 3D X=111.6 Y=119.76 Z=-1.74 Pen 3D X=110.81 Y=120.65 Z=-1.85 Pen 3D X=109.8 Y=121.42 Z=-1.98 Pen 3D X=108.69 Y=122.21 Z=-2.15 Pen 3D X=99.41 Y=125.99 Z=-2.95 Pen 3D X=97.71 Y=127.22 Z=-3.21 Pen 3D X=84.21 Y=130.4 Z=-0.63 Pen 3D X=81.31 Y=129.31 Z=1.65 Pen 3D X=78.7 Y=127.22 Z=4.46 Pen 3D X=75.77 Y=125.09 Z=7.57 Disconnected
Sebastien Devaux
Nov 1, 2016

Le copié/collé de mon code n'est pas terrible, y'a moyen de le mettre en pièce jointe ?

steven valsesia
Nov 2, 2016

Bonjour,

Je vois que vous avez réussi à faire fonctionner l'API.
Qu'est-ce que vous aimeriez recevoir comme informations ?

Steven for iskn team

Sebastien Devaux
Nov 2, 2016

Bonjour,

Sur Linux j'ai réussi à voir quelques événement Pen3D mais à peine plus. Au final j'aimerai au minimum me faire une petite commande shell pour télécharger les pages dessinée en autonome vers des fichiers SVG, donc j'ai voulu jouer avec getFilesNumber(), getFileInfo et importFile() mais comme je récupère invariablement 0 avec getFilesNumber(), je ne peux pas arriver à grand chose. Ayant remarqué que getDeviceName() ne me donne rien non plus, je me demande si tout cela est bien fonctionnel.
J'ai depuis compilé et essayé MagicBeep (dans les exemples Qt), ça se compile plutôt bien et ça se lance. Les événements Pen3D sont traités, mais comme avec mon programme, je ne récupère pas le nom du device.
J'ai faits des essais linké aussi bien avec libISKN_APId.so que libISKN_API.so (je suppose que l'une est en debug et pas l'autre) mais ça ne semble pas avoir la moindre influence.

J'ai également fait un essai de l'exemple MagicBeep sur Android, et là ça marche un peu mieux, je récupère bien le nom du device et la version du firmware, par contre ma première tentative avec getFilesNumber() et getFileInfo() n'a rien donné (l'appli à plantée je n'ai pas encore approfondi pour voir ce qu'il se passe).

steven valsesia
Nov 3, 2016

Normalement ce genre de requêtes de poses pas de problèmes.

Est-ce que vous connaissez la version du firmware de votre Slate pour que je puisse tenter de reproduire me problème ?
A défaut, le serial number ? (marqué S/N sur le carton)

Steven for iskn team

Sebastien Devaux
Nov 3, 2016

La version du firmware est 3.0.9.0.
S/N: 22333

Pour info, pas de pb avec ImageInk sur Windows, j'arrive à dessiner normalement et à télécharger les pages faites offline.

steven valsesia
Jan 20, 2017

Désolé pour le retard, nous avons eu beaucoup de commande pour noël.

J'ai tenté de faire fonctionner le code d'exemple PaintApp avec Qt sous Linux et je n'ai eu aucun problème à le faire fonctionner. Pouvez-vous essayer de voir si il marche aussi chez vous ?

Steven for iskn team

Sebastien Devaux
Mar 19, 2017

Pas de problème pour le retard, je suis moi même assez occupé et j'ai mis tout ça de coté pour le moment.
Concernant les exemples j'ai juste compilé MagicBeep. Mon Linux debian est assez minimaliste, et je n'ai pas toutes les dépendances requises pour les autres. Mais comme ça ne démontre pas grand chose de plus que mon propre programme, ça ne m'a pas beaucoup avancé. Depuis j'ai remarqué que même avec ImageInk sous windows le taux de chargement de la batterie ne semble pas être restitué correctement (il reste invariablement à 0). Par conséquent je ne m'attend plus à pouvoir le faire sous linux. Reste que j'aimerais bien pouvoir télécharger les dessins faits en mode autonome.

  
Markdown is allowed