π
<-
Chat plein-écran
[^]

connectivity kit?

Re: connectivity kit?

Unread postby parisse » 28 Jul 2020, 14:44

M4x1m3 wrote:"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: Select all
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: Select all
const int16_t translated_keys[] =...

qui devrait etre mis a jour comme suit:
Code: Select all
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: Select all
#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: Select all
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?
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 3.9%
 
Posts: 2069
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: connectivity kit?

Unread postby parisse » 29 Jul 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: Select all
  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: Select all
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: Select all
  (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?
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 3.9%
 
Posts: 2069
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: connectivity kit?

Unread postby M4x1m3 » 29 Jul 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: Select all
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.

"Regression testing"? What's that? If it compiles, it is good, if it boots up it is perfect.
User avatar
M4x1m3Programmeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 61.5%
 
Posts: 108
Joined: 13 Oct 2019, 21:10
Location: Bas-Rhin (67)
Gender: Male
Calculator(s):
Class: 1ere année DUT Informatique
GitHub: M4xi1m3

Re: connectivity kit?

Unread postby parisse » 29 Jul 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.
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 3.9%
 
Posts: 2069
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Previous

Return to Programmation native (C/C++/...)

Who is online

Users browsing this forum: No registered users and 4 guests

-
Search
-
Featured topics
L'OS 5.5 de la TI-83 Premium CE / 84 Plus CE supprime l'assembleur - la plupart des jeux et certains programme ne fonctionneront plus
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Comparaisons des meilleurs prix pour acheter sa calculatrice !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
453 utilisateurs:
>447 invités
>1 membre
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)