π
<-
Chat plein-écran
[^]

connectivity kit?

Re: connectivity kit?

Message non lude parisse » 28 Juil 2020, 14:44

M4x1m3 a écrit:"le support de DFU a été enlevé des apps externes", je ne suis pas sure, je dirais plutôt qu'il n'a jamais été là ? C'est quelque chose qu'on peut rajouter si besoin oui.

zardam l'avait enleve par rapport a ma version de Delta, la raison etant (si je me rappelle bien) que si on reflashe la calc, ca necessite de faire un reset, mais pour un utilisateur lambda, l'inconvenient de devoir faire un reset a la main est minime par rapport aux avantages de pouvoir echanger des fichiers sans avoir a quitter KhiCAS. Ma fonction getkey_raw est maintenant
Code: Tout sélectionner
int getkey_raw(bool allow_suspend){
  int key=-1;
  size_t t1=Ion::Timing::millis();
  for (;;){
    int timeout=10000;
    alphawasactive_=Ion::Events::isAlphaActive();
    Ion::Events::Event event=Ion::Events::getEvent(&timeout);
    auto ctx=KDIonContext::sharedContext();
    KDRect save=ctx->m_clippingRect;
    KDPoint o=ctx->m_origin;
    ctx->setClippingRect(KDRect(0,0,320,240));
    ctx->setOrigin(KDPoint(0,18));
    KDRect rect(90,63,140,75);
    if (event==Ion::Events::None){
      size_t t2=Ion::Timing::millis();
      if (t2-t1>2*TICKS_PER_MINUTE){
   // KDIonContext::sharedContext()->pushRectUniform(rect,64934 /* Palette::YellowDark*/);
   event=Ion::Events::OnOff;
      }
    }
    else
      t1=Ion::Timing::millis();
    if (event == Ion::Events::USBPlug) {
      statusline(0,0);
      // KDIonContext::sharedContext()->pushRectUniform(rect,33333);
      if (Ion::USB::isPlugged()) {
   if (GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) {
     Ion::LED::setColor(KDColorBlack);
     Ion::LED::updateColorWithPlugAndCharge();
     GlobalPreferences::sharedGlobalPreferences()->setExamMode(GlobalPreferences::ExamMode::Off);
     // displayExamModePopUp(false);
   } else {
     Ion::USB::enable();
   }
   Ion::Backlight::setBrightness(GlobalPreferences::sharedGlobalPreferences()->brightnessLevel());
      } else {
   Ion::USB::disable();
      }
    }
    if (event == Ion::Events::USBEnumeration || event == Ion::Events::USBPlug || event == Ion::Events::BatteryCharging) {
      Ion::LED::updateColorWithPlugAndCharge();
    }
    if (event == Ion::Events::USBEnumeration
   ) {
      KDIonContext::sharedContext()->pushRectUniform(rect,64934 /* Palette::YellowDark*/);
      if (Ion::USB::isPlugged()) {
   /* Just after a software update, the battery timer does not have time to
    * fire before the calculator enters DFU mode. As the DFU mode blocks the
    * event loop, we update the battery state "manually" here.
    * We do it before switching to USB application to redraw the battery
    * pictogram. */
   // updateBatteryState();
   KDIonContext::sharedContext()->pushRectUniform(rect,22222);
   auto ctx=KDIonContext::sharedContext();
   int y=58;
   ctx->drawString("Connecte ! ", KDPoint(100,y), KDFont::LargeFont, 65535, 0);
   y+=18;
   ctx->drawString(" DFU mode  ", KDPoint(100,y), KDFont::LargeFont, 65535, 0);
   y+=18;
   ctx->drawString("Back quitte", KDPoint(100,y), KDFont::LargeFont, 65535, 0);
   y-=18;
   Ion::USB::DFU();
   KDIonContext::sharedContext()->pushRectUniform(rect,44444);
   ctx->drawString("Deconnecte!", KDPoint(100,y), KDFont::LargeFont, 65535, 0);
   // Update LED when exiting DFU mode
   Ion::LED::updateColorWithPlugAndCharge();
      } else {
   /* Sometimes, the device gets an ENUMDNE interrupts when being unplugged
    * from a non-USB communicating host (e.g. a USB charger). The interrupt
    * must me cleared: if not the next enumeration attempts will not be
    * detected. */
   Ion::USB::clearEnumerationInterrupt();
      }
    }
    if (event.isKeyboardEvent()) {
      // m_backlightDimmingTimer.reset();
      // m_suspendTimer.reset();
      Ion::Backlight::setBrightness(GlobalPreferences::sharedGlobalPreferences()->brightnessLevel());
    }
    ctx->setClippingRect(save);
    ctx->setOrigin(o);

    if (event==Ion::Events::Shift || event==Ion::Events::Alpha){
      statusline(0,0);
      continue;
    }
    if (event.isKeyboardEvent()){
      key=event.id();
      if (key==17 || key==4 || key==5 || key==52)
   reset_kbd();
     
      if (allow_suspend && (key==7 || key==8) ){ // power
   Ion::Power::suspend(true);
   numworks_fill_rect(0,0,320,240,65535);
   Ion::Backlight::setBrightness(GlobalPreferences::sharedGlobalPreferences()->brightnessLevel());
   AppsContainer::sharedAppsContainer()->reloadTitleBarView();
   //AppsContainer::sharedAppsContainer()->redrawWindow();
   statusline(1,0);
   //continue;
      }
      else
   statusline(0,0);
      break;
    }
  }
  return key;
}


Par rapport aux modifications du clavier, c'est quelque chose qu'on a délibérément décider d'enlever. Très peu d'utilisateurs d'Omega installent KhiCAS (ce qui est dommage aussi), et ça impacte le fonctionnement de tout l'OS (on a pas réussi à intégrer ça correctement sans que ça fasse des bugs à d'autres endroits).

On ne doit pas parler de la meme chose. Je parle dans extapp_api.cpp de
Code: Tout sélectionner
const int16_t translated_keys[] =...

qui devrait etre mis a jour comme suit:
Code: Tout sélectionner
const short int translated_keys[]=
  {
   // non shifted
   KEY_CTRL_LEFT,KEY_CTRL_UP,KEY_CTRL_DOWN,KEY_CTRL_RIGHT,KEY_CTRL_OK,KEY_CTRL_EXIT,
   KEY_CTRL_MENU,KEY_PRGM_ACON,KEY_PRGM_ACON,9,10,11,
   KEY_CTRL_SHIFT,KEY_CTRL_ALPHA,KEY_CTRL_XTT,KEY_CTRL_VARS,KEY_CTRL_CATALOG,KEY_CTRL_DEL,
   KEY_CHAR_EXPN,KEY_CHAR_LN,KEY_CHAR_LOG,KEY_CHAR_IMGNRY,',',KEY_CHAR_POW,
   KEY_CHAR_SIN,KEY_CHAR_COS,KEY_CHAR_TAN,KEY_CHAR_PI,KEY_CHAR_ROOT,KEY_CHAR_SQUARE,
   '7','8','9','(',')',-1,
   '4','5','6','*','/',-1,
   '1','2','3','+','-',-1,
   '0','.',KEY_CHAR_EXPN10,KEY_CHAR_ANS,KEY_CTRL_EXE,-1,
   // shifted
   KEY_SHIFT_LEFT,KEY_CTRL_PAGEUP,KEY_CTRL_PAGEDOWN,KEY_SHIFT_RIGHT,KEY_CTRL_OK,KEY_CTRL_EXIT,
   KEY_CTRL_MENU,KEY_PRGM_ACON,KEY_PRGM_ACON,9,10,11,
   KEY_CTRL_SHIFT,KEY_CTRL_ALPHA,KEY_SHIFT_ANS,KEY_CTRL_CLIP,KEY_CTRL_PASTE,KEY_CTRL_AC,
   KEY_CHAR_LBRCKT,KEY_CHAR_RBRCKT,KEY_CHAR_LBRACE,KEY_CHAR_RBRACE,'_',KEY_CHAR_STORE,
   KEY_CHAR_ASIN,KEY_CHAR_ACOS,KEY_CHAR_ATAN,'=','<','>',
   KEY_CTRL_F7,KEY_CTRL_F8,KEY_CTRL_F9,KEY_CTRL_F13,KEY_CTRL_F14,-1,
   KEY_CTRL_F4,KEY_CTRL_F5,KEY_CTRL_F6,KEY_CHAR_FACTOR,'%',-1,
   KEY_CTRL_F1,KEY_CTRL_F2,KEY_CTRL_F3,KEY_CHAR_NORMAL,'\\',-1,
   KEY_CTRL_F10,KEY_CTRL_F11,KEY_CTRL_F12,KEY_BOOK,KEY_CTRL_R,-1,
   // alpha
   KEY_CTRL_LEFT,KEY_CTRL_UP,KEY_CTRL_DOWN,KEY_CTRL_RIGHT,KEY_CTRL_OK,KEY_CTRL_EXIT,
   KEY_CTRL_MENU,KEY_PRGM_ACON,KEY_PRGM_ACON,9,10,11,
   KEY_CTRL_SHIFT,KEY_CTRL_ALPHA,':',';','"',KEY_CTRL_DEL,
   'a','b','c','d','e','f',
   'g','h','i','j','k','l',
   'm','n','o','p','q',-1,
   'r','s','t','u','v',-1,
   'w','x','y','z',' ',-1,
   '?','!',KEY_CHAR_EXPN10,KEY_CHAR_ANS,KEY_CTRL_EXE,-1,
   // alpha shifted
   KEY_SHIFT_LEFT,KEY_CTRL_PAGEUP,KEY_CTRL_PAGEDOWN,KEY_SHIFT_RIGHT,KEY_CTRL_OK,KEY_CTRL_EXIT,
   KEY_CTRL_MENU,KEY_PRGM_ACON,KEY_PRGM_ACON,9,10,11,
   KEY_CTRL_SHIFT,KEY_CTRL_ALPHA,KEY_CTRL_CUT,';','\'','%',
   'A','B','C','D','E','F',
   'G','H','I','J','K','L',
   'M','N','O','P','Q',-1,
   'R','S','T','U','V',-1,
   'W','X','Y','Z',' ',-1,
   '?','!',KEY_CHAR_EXPN10,KEY_BOOK,KEY_CTRL_EXE,-1,
  };

avec ajout de nouvelles constantes dans le .h
Code: Tout sélectionner
#define KEY_BOOK 31103
#define KEY_SELECT_LEFT       31200
#define KEY_SELECT_UP         31201
#define KEY_SELECT_DOWN       31202
#define KEY_SELECT_RIGHT      31203
#define KEY_SHUTDOWN 32109

Ceci afin d'apporter le support de la touche shift-CUT (qui fait doublon avec la touche backspace) pour acceder a la doc en ligne. J'ai aussi modifie ma fonction getkey pour permettre de marquer un debut de selection avec appui simultane sur shift et touche curseur.
Code: Tout sélectionner
int getkey(int allow_suspend){
  if (allow_suspend & 0x80000000)
    return iskeydown(allow_suspend & 0xff)?1:0;
  int k=getkey_raw(allow_suspend);
  if (k % 54 <=3){ // shift-curseur
    if (iskeydown((int) Ion::Keyboard::Key::Shift))
      return (k % 54) +31200;
  }
  // translate
  return translated_keys[k];
}

Tout ceci n'impacte aucunement les utilsateurs de Omega en-dehors des applications externes utilisant getkey (ce qui doit probablement se limiter a KhiCAS).

Sinon, pour info, la doc de KhiCAS pour Numworks est telechargee entre 100 et 200 fois par mois sur mon site, ca donne une idee du nombre d'utilisateurs potentiels actuellement. Je pense que ca pourrait etre bien mieux a la rentree car pour les eleves de prepa, la sortie simultanee de la version actuelle de KhiCAS sur Numworks et TI Nspire CX donnera une "gamme" de calculatrices allant du milieu au haut de gamme, avec support Python plus complet que les constructeurs (arit+linalg+numpy) + le CAS, et le tout compatible d'une calculatrice a l'autre, une fois regle le probleme des transferts de sessions. Mais pour le moment le support d'Omega pour KhiCAS n'est pas completement satisfaisant (cf. les points cites ci-dessus), c'est la principale raison pour laquelle je maintiens ma version de Delta.

Par rapport à fileRead, les fichiers qui ne sont pas des exécutables sont bloqués à la lecture par le driver TAR en mode examen. C'est d'ailleurs pour ça que les icônes ne s'affichent pas en mode examen sur le menu home d'Omega. Je ne vois donc pas de problème par rapport à ça.

Ok, mais que se passe-t-il si on met un attribut executable sur un fichier texte et qu'on le lit depuis KhiCAS?
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: connectivity kit?

Message non lude parisse » 29 Juil 2020, 08:04

J'ai regarde rapidement le source d'Omega et sauf erreur de ma part, les fichiers qui sont dans l'archive tar avec l'attribut executable sont accessibles en lecture en mode examen depuis une app externe. Mais je pense qu'ils ne doivent pas etre listables depuis KhiCAS donc impossible a trouver donc a lire.

Il y a un truc bizarre, parce que dans mon SDK C la fonction qui liste des fichiers a pour prototype
Code: Tout sélectionner
  int os_file_browser(const char ** filenames,int maxrecords,const char * extension);

dans nw-external-apps, elle semble bien etre appelee dans api.c avec le meme prototype
Code: Tout sélectionner
int os_file_browser(const char ** filenames, int maxrecords, const char * extension) {
  return ((int (*)(const char **, int, const char *))_api_base[84])(filenames, maxrecords, extension);
}

mais dans Omega, extapi_app.cpp, je ne vois pour correspondre que
Code: Tout sélectionner
  (void (*)(void)) extapp_fileListWithExtension,

dans un tableau apiPointers de taille 21 (bien plus petit que 85) et avec une fonction qui a un argument en plus. Ca doit forcement fonctionner autrement, mais comment?
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: connectivity kit?

Message non lude M4x1m3 » 29 Juil 2020, 10:24

Toutes les fonctions ont ce prototype dans le tableau (pour la simplicité). La fonction est définie plus haut avec le bon prototype :
Code: Tout sélectionner
int extapp_fileListWithExtension(const char ** filenames, int maxrecords, const char * extension, int storage)

Ce qui correspond bien au prototype dans extapp_api.c dans nw-external-app.

Par rapport à la taille du tableau... Je ne sais pas, ça parais bizarre effectivement. Dans la version de KhiCAS présente sur le repository de zardam, os_file_browser n'accède pas directement au tableau mais appelle extapp_api.c, qui s'occupe de chercher dans le tableau. Je ne sais pas comme ça se fait que nous ayons moins de fonctions que dans votre repo.
Image
"Regression testing"? What's that? If it compiles, it is good, if it boots up it is perfect.
Avatar de l’utilisateur
M4x1m3Programmeur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 62.6%
 
Messages: 170
Images: 12
Inscription: 13 Oct 2019, 21:10
Localisation: Bas-Rhin (67)
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: M1 Informatique
Twitter/X: M4xi1m3
GitHub: M4xi1m3

Re: connectivity kit?

Message non lude parisse » 29 Juil 2020, 10:48

En fait, il y a 2 points a elucider:
* comment on passe du prototype a 3 arguments (le mien) a celui a 4 arguments (avec le 4eme argument qui definit le type de stockage)
* comment ca peut fonctionner avec un tableau de pointeurs avec 21 entrees dans Omega, alors que dans Delta on a dans le fichier apps/external/api.cpp un tableau avec beaucoup plus de pointeurs (coupe en 2 parties), et qui correspond a nw-external-apps/api/api.c.
En particulier, la fonction GetKey qui est appele un peu partout dans l'UI de KhiCAS appelle la fonction d'indice 75 dans le tableau de pointeurs, je ne comprends pas comment ca ne crashe pas.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Précédente

Retourner vers Programmation native (C/C++/...)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1126 utilisateurs:
>1107 invités
>15 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)