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?