0 Members and 3 Guests are viewing this topic.
Will you do the same for other calculator models?
Quote from: Streetwalker on August 09, 2013, 03:47:51 amQuote from: Lionel Debroux on August 09, 2013, 03:29:48 amAn app store would indeed be nice, but who will do the work of setting it up, maintaining it in the long-term, and sifting through old programs for re-packaging them ?Maybe Linux style repos ? This way devs maintain their stuff themselves and it's pretty easy to set up (you just need an HTTP server and there are plenty of free hosts). Why not a simple Web UI for submitting and updating apps?
Quote from: Lionel Debroux on August 09, 2013, 03:29:48 amAn app store would indeed be nice, but who will do the work of setting it up, maintaining it in the long-term, and sifting through old programs for re-packaging them ?Maybe Linux style repos ? This way devs maintain their stuff themselves and it's pretty easy to set up (you just need an HTTP server and there are plenty of free hosts).
An app store would indeed be nice, but who will do the work of setting it up, maintaining it in the long-term, and sifting through old programs for re-packaging them ?
Great! If you want to, I could help
But if I click on tworld.pcs.tns again, it says 1.3.0 would be newer than my installed version 1.3.0, but in the log file it states otherwise xD
The installed version of tworld (1.3.0) is newer than the one you are trying to install (1.3.0). Continue?
checking if the package is newer than the installed version... no
The [great, in my option] idea of an Nspire App-Store has been in mind of several people for quite some time, yet nothing has been done on that path It could be coupled with some remote control software to automatically extract/isntall/launch whatever. nRemote for example can do that quite easily with its "script" support.
Anyways, great work Compu, that will surely help people installing their programs. I think there should be (if not already present) a way to decide if the installation is done in a specified folder (for in-dev programs that still don't support to be in any folder or don't support their dependencies to be in random folders, or for programs that must be in startup) or in a folder that the user would choose (for programs that can be run from any folder and that the user would like to put in the Game folder for example).
Quote from: Hayleia on August 09, 2013, 09:33:26 amAnyways, great work Compu, that will surely help people installing their programs. I think there should be (if not already present) a way to decide if the installation is done in a specified folder (for in-dev programs that still don't support to be in any folder or don't support their dependencies to be in random folders, or for programs that must be in startup) or in a folder that the user would choose (for programs that can be run from any folder and that the user would like to put in the Game folder for example).Thanks!Selecting a folder should be pretty easy to add.
Quote from: Vogtinator on August 09, 2013, 09:09:07 amWhy not a simple Web UI for submitting and updating apps?That's what I was thinking of + a command-line client that downloads packages and sends them to the calc (I guess that would be possible with libti*?).
Why not a simple Web UI for submitting and updating apps?
Quote from: Vogtinator on August 09, 2013, 09:09:07 amGreat! If you want to, I could help Sure, why not
Quote from: adriweb on August 09, 2013, 09:27:37 amThe [great, in my option] idea of an Nspire App-Store has been in mind of several people for quite some time, yet nothing has been done on that path It could be coupled with some remote control software to automatically extract/isntall/launch whatever. nRemote for example can do that quite easily with its "script" support.Thanks, I will take a look at nRemote, but if it doesn't work on Linux as Vogtinator says, it probably won't be an option.
Sorry, I may have used too much parentheses or used a not understandable enough English, so there is a part of my request that you didn't see.-I was indeed asking for a "folder selection menu" or something.-But also a way for developers to force the "unpacking folder", so that a program that must be put in "startup" will always be put in startup (doesn't ask the user where to unpack), or so that a program that is still in-dev and that must be ran from the Ndless folder (and nowhere else) will be unpacked in the Ndless folder.
I just tried to read the libticalcs2 HTML-documentation and it seems so outdated, that "nspire" isn't mentioned one singe time.But as tilp runs fine and some files in src begin with nsp_*, I think it's the right library in the right version.So is tilp the only reliable source for documentation?And I wonder why there are four libti* librarys. In my opinion it would have made more sense to combine them into one libticalcs..
I'll try setting up a small application which sends a file to the calculator and maybe even executes it.
Even with WINE it doesn't. It needs the navnet device driver installed. TINCL shows a splash screen and then it exits with "Connectivity Library is missing".
How should the calculator and the App Store play together? Should the store extract the archive and send all the files or should the appstore send the package to the calculator and start pacspire to install it? The latter sounds better in my opinion, but I think it'll get close to impossible, as pacspire can't communicate with the appstore in any ways except screenshots and files (and that only if no ndless app is running!)
But doesn't nRemote use the mysterious NavNet.jar to interface with the Nspire windows driver?That would make it completely useless to me, as I'm using Linux.
Quote from: Vogtinator on August 09, 2013, 09:30:18 amBut doesn't nRemote use the mysterious NavNet.jar to interface with the Nspire windows driver?That would make it completely useless to me, as I'm using Linux.Same here. libti* supports this functionality though as Lionel stated a few posts up.
So is tilp the only reliable source for documentation?
And I wonder why there are four libti* libraries.
In my opinion it would have made more sense to combine them into one libticalcs.
Even with WINE it doesn't.
Remember the main point here, whatever the choice : it has to be extremely simple for the user (no installation would be great)
One of the NavNet JARs (don't remember which one) contains the 3-byte key code definitions. Adriweb, remind us which one
BTW, libticalcs contained support for Nspire remote control before nRemote was released, though I used a beta version of nRemote in a Windows VM to debug and fix my implementation of the feature through sniffing USB packets.
You don't need the 3-Byte key code definition. You can just send ascii, as shown in my code
private static final byte[] ESC_KEY_BYTES = { 27, -106, 0 }; private static final byte[] CTRL_ESC_KEY_BYTES = { 0, -17, 0 }; private static final byte[] TAB_KEY_BYTES = { 9, -107, 0 }; private static final byte[] SHIFT_TAB_KEY_BYTES = { 124, -107, 0 }; private static final byte[] CTRL_TAB_KEY_BYTES = { 0, -19, 0 }; private static final byte[] HOME_KEY_BYTES = { 0, -3, 0 }; private static final byte[] CTRL_HOME_KEY_BYTES = { 0, -2, 0 }; private static final byte[] MENU_KEY_BYTES = { 0, 54, 0 }; private static final byte[] CTRL_MENU_KEY_BYTES = { 0, -50, 0 }; private static final byte[] MOUSE_CONTEXT_MENU_KEY_BYTES = { 0, -96, 0 }; private static final byte[] CLICK_KEY_BYTES = { 0, -83, 0 }; private static final byte[] CTRL_CLICK_KEY_BYTES = { 0, -84, 0 }; private static final byte[] SHIFT_GRAB_KEY_BYTES = { 0, -7, 0 }; private static final byte[] LEFT_KEY_BYTES = { 0, 7, 0 }; private static final byte[] SHIFT_LEFT_KEY_BYTES = { 0, -15, 0 }; private static final byte[] SHIFT_HOLD_LEFT_KEY_BYTES = { 0, 7, 3 }; private static final byte[] CTRL_LEFT_KEY_BYTES = { 0, -38, 0 }; private static final byte[] RIGHT_KEY_BYTES = { 0, 39, 0 }; private static final byte[] SHIFT_RIGHT_KEY_BYTES = { 0, -14, 0 }; private static final byte[] SHIFT_HOLD_RIGHT_KEY_BYTES = { 0, 39, 3 }; private static final byte[] CTRL_RIGHT_KEY_BYTES = { 0, -37, 0 }; private static final byte[] UP_KEY_BYTES = { 0, 23, 0 }; private static final byte[] SHIFT_UP_KEY_BYTES = { 0, -13, 0 }; private static final byte[] SHIFT_HOLD_UP_KEY_BYTES = { 0, 23, 3 }; private static final byte[] CTRL_UP_KEY_BYTES = { 0, -36, 0 }; private static final byte[] DOWN_KEY_BYTES = { 0, 55, 0 }; private static final byte[] SHIFT_DOWN_KEY_BYTES = { 0, -12, 0 }; private static final byte[] SHIFT_HOLD_DOWN_KEY_BYTES = { 0, 55, 3 }; private static final byte[] CTRL_DOWN_KEY_BYTES = { 0, -35, 0 }; private static final byte[] EQUAL_KEY_BYTES = { 61, 117, 0 }; private static final byte[] CTRL_EQUAL_KEY_BYTES = { 0, -23, 0 }; private static final byte[] SUCH_THAT_KEY_BYTES = { 124, -19, 0 }; private static final byte[] A_KEY_BYTES = { 97, 102, 0 }; private static final byte[] SHIFT_A_KEY_BYTES = { 65, 102, 0 }; private static final byte[] CTRL_A_KEY_BYTES = { 97, 102, 0 }; private static final byte[] B_KEY_BYTES = { 98, 70, 0 }; private static final byte[] SHIFT_B_KEY_BYTES = { 66, 70, 0 }; private static final byte[] CTRL_B_KEY_BYTES = { 2, -79, 0 }; private static final byte[] C_KEY_BYTES = { 99, 38, 0 }; private static final byte[] SHIFT_C_KEY_BYTES = { 67, 38, 0 }; private static final byte[] CTRL_C_KEY_BYTES = { 3, -78, 0 }; private static final byte[] FLAG_KEY_BYTES = { 0, -89, 0 }; private static final byte[] CTRL_FLAG_KEY_BYTES = { 0, -8, 0 }; private static final byte[] LESS_THAN_KEY_BYTES = { 60, -90, 0 }; private static final byte[] CTRL_LESS_THAN_KEY_BYTES = { 0, -49, 0 }; private static final byte[] D_KEY_BYTES = { 100, -123, 0 }; private static final byte[] SHIFT_D_KEY_BYTES = { 68, -123, 0 }; private static final byte[] CTRL_D_KEY_BYTES = { 4, -77, 0 }; private static final byte[] E_KEY_BYTES = { 101, 101, 0 }; private static final byte[] SHIFT_E_KEY_BYTES = { 69, 101, 0 }; private static final byte[] CTRL_E_KEY_BYTES = { 5, -76, 0 }; private static final byte[] F_KEY_BYTES = { 102, 69, 0 }; private static final byte[] SHIFT_F_KEY_BYTES = { 70, 69, 0 }; private static final byte[] CTRL_F_KEY_BYTES = { 6, -75, 0 }; private static final byte[] G_KEY_BYTES = { 103, 37, 0 }; private static final byte[] SHIFT_G_KEY_BYTES = { 71, 37, 0 }; private static final byte[] CTRL_G_KEY_BYTES = { 7, -74, 0 }; private static final byte[] TILDE_KEY_BYTES = { 39, -11, 0 }; private static final byte[] CTRL_TILDE_KEY_BYTES = { 36, 5, 0 }; private static final byte[] GREATER_THAN_KEY_BYTES = { 62, -122, 0 }; private static final byte[] CTRL_GREATER_THAN_KEY_BYTES = { 0, -34, 0 }; private static final byte[] H_KEY_BYTES = { 104, -124, 0 }; private static final byte[] SHIFT_H_KEY_BYTES = { 72, -124, 0 }; private static final byte[] CTRL_H_KEY_BYTES = { 8, -73, 0 }; private static final byte[] I_KEY_BYTES = { 105, 100, 0 }; private static final byte[] SHIFT_I_KEY_BYTES = { 73, 100, 0 }; private static final byte[] CTRL_I_KEY_BYTES = { 9, -72, 0 }; private static final byte[] J_KEY_BYTES = { 106, 68, 0 }; private static final byte[] SHIFT_J_KEY_BYTES = { 74, 68, 0 }; private static final byte[] CTRL_J_KEY_BYTES = { 10, -71, 0 }; private static final byte[] K_KEY_BYTES = { 107, 36, 0 }; private static final byte[] SHIFT_K_KEY_BYTES = { 75, 36, 0 }; private static final byte[] CTRL_K_KEY_BYTES = { 11, -70, 0 }; private static final byte[] QUOTE_KEY_BYTES = { 34, -95, 0 }; private static final byte[] IMAGINARY_KEY_BYTES = { 0, -94, 0 }; private static final byte[] CTRL_IMAGINARY_KEY_BYTES = { 0, -95, 0 }; private static final byte[] L_KEY_BYTES = { 108, -125, 0 }; private static final byte[] SHIFT_L_KEY_BYTES = { 76, -125, 0 }; private static final byte[] CTRL_L_KEY_BYTES = { 12, -69, 0 }; private static final byte[] M_KEY_BYTES = { 109, 99, 0 }; private static final byte[] SHIFT_M_KEY_BYTES = { 77, 99, 0 }; private static final byte[] CTRL_M_KEY_BYTES = { 13, -68, 0 }; private static final byte[] N_KEY_BYTES = { 110, 67, 0 }; private static final byte[] SHIFT_N_KEY_BYTES = { 78, 67, 0 }; private static final byte[] CTRL_N_KEY_BYTES = { 14, -67, 0 }; private static final byte[] O_KEY_BYTES = { 111, 35, 0 }; private static final byte[] SHIFT_O_KEY_BYTES = { 79, 35, 0 }; private static final byte[] CTRL_O_KEY_BYTES = { 15, -66, 0 }; private static final byte[] COLON_KEY_BYTES = { 58, 1, 0 }; private static final byte[] CTRL_COLON_KEY_BYTES = { 59, 2, 0 }; private static final byte[] EXP_KEY_BYTES = { 0, -92, 0 }; private static final byte[] P_KEY_BYTES = { 112, -126, 0 }; private static final byte[] SHIFT_P_KEY_BYTES = { 80, -126, 0 }; private static final byte[] CTRL_P_KEY_BYTES = { 16, -65, 0 }; private static final byte[] Q_KEY_BYTES = { 113, 98, 0 }; private static final byte[] SHIFT_Q_KEY_BYTES = { 81, 98, 0 }; private static final byte[] CTRL_Q_KEY_BYTES = { 17, -64, 0 }; private static final byte[] R_KEY_BYTES = { 114, 66, 0 }; private static final byte[] SHIFT_R_KEY_BYTES = { 82, 66, 0 }; private static final byte[] CTRL_R_KEY_BYTES = { 18, -63, 0 }; private static final byte[] S_KEY_BYTES = { 115, 34, 0 }; private static final byte[] SHIFT_S_KEY_BYTES = { 83, 34, 0 }; private static final byte[] CTRL_S_KEY_BYTES = { 19, -62, 0 }; private static final byte[] QUESTION_MARK_KEY_BYTES = { 63, 3, 0 }; private static final byte[] CTRL_QUESTION_MARK_KEY_BYTES = { 0, -53, 0 }; private static final byte[] PI_KEY_BYTES = { 0, -93, 0 }; private static final byte[] CTRL_PI_KEY_BYTES = { 0, -12, 0 }; private static final byte[] T_KEY_BYTES = { 116, -127, 0 }; private static final byte[] SHIFT_T_KEY_BYTES = { 84, -127, 0 }; private static final byte[] CTRL_T_KEY_BYTES = { 20, -61, 0 }; private static final byte[] U_KEY_BYTES = { 117, 97, 0 }; private static final byte[] SHIFT_U_KEY_BYTES = { 85, 97, 0 }; private static final byte[] CTRL_U_KEY_BYTES = { 21, -60, 0 }; private static final byte[] V_KEY_BYTES = { 118, 65, 0 }; private static final byte[] SHIFT_V_KEY_BYTES = { 86, 65, 0 }; private static final byte[] CTRL_V_KEY_BYTES = { 22, -59, 0 }; private static final byte[] W_KEY_BYTES = { 119, 33, 0 }; private static final byte[] SHIFT_W_KEY_BYTES = { 87, 33, 0 }; private static final byte[] CTRL_W_KEY_BYTES = { 23, -58, 0 }; private static final byte[] COMMA_KEY_BYTES = { 44, -96, 0 }; private static final byte[] THETA_KEY_BYTES = { -120, 6, 0 }; private static final byte[] X_KEY_BYTES = { 120, -128, 0 }; private static final byte[] SHIFT_X_KEY_BYTES = { 88, -128, 0 }; private static final byte[] CTRL_X_KEY_BYTES = { 24, -57, 0 }; private static final byte[] Y_KEY_BYTES = { 121, 96, 0 }; private static final byte[] SHIFT_Y_KEY_BYTES = { 89, 96, 0 }; private static final byte[] CTRL_Y_KEY_BYTES = { 25, -56, 0 }; private static final byte[] Z_KEY_BYTES = { 122, 64, 0 }; private static final byte[] SHIFT_Z_KEY_BYTES = { 90, 64, 0 }; private static final byte[] CTRL_Z_KEY_BYTES = { 26, -55, 0 }; private static final byte[] SPACE_KEY_BYTES = { 32, 32, 0 }; private static final byte[] CTRL_SPACE_KEY_BYTES = { 0, -51, 0 }; private static final byte[] NEW_LINE_KEY_BYTES = { 0, 10, 0 }; private static final byte[] CTRL_KEY_BYTES = { 0, -86, 4 }; private static final byte[] SHIFT_KEY_BYTES = { 0, -85, 3 }; private static final byte[] CTRL_SHIFT_KEY_BYTES = { 0, -85, 7 }; private static final byte[] BACK_SPACE_KEY_BYTES = { 8, 21, 0 }; private static final byte[] SHIFT_BACK_SPACE_KEY_BYTES = { 8, 21, 0 }; private static final byte[] CTRL_BACK_SPACE_KEY_BYTES = { 0, -29, 4 }; private static final byte[] VAR_KEY_BYTES = { 0, -81, 0 }; private static final byte[] CTRL_VAR_KEY_BYTES = { 0, -88, 0 }; private static final byte[] LEFT_PARENTHESES_KEY_BYTES = { 40, 85, 0 }; private static final byte[] CTRL_LEFT_PARENTHESES_KEY_BYTES = { 0, -25, 0}; private static final byte[] RIGHT_PARENTHESES_KEY_BYTES = { 41, 53, 0 }; private static final byte[] CTRL_RIGHT_PARENTHESES_KEY_BYTES = { 0, -27,0 }; private static final byte[] CATALOG_KEY_BYTES = { 0, -111, 0 }; private static final byte[] CTRL_CATALOG_KEY_BYTES = { 0, -18, 0 }; private static final byte[] POWER_KEY_BYTES = { 94, -109, 0 }; private static final byte[] CTRL_POWER_KEY_BYTES = { 0, -21, 0 }; private static final byte[] SIN_KEY_BYTES = { 0, 116, 0 }; private static final byte[] CTRL_SIN_KEY_BYTES = { 0, -24, 0 }; private static final byte[] COS_KEY_BYTES = { 0, 84, 0 }; private static final byte[] CTRL_COS_KEY_BYTES = { 0, -26, 0 }; private static final byte[] TAN_KEY_BYTES = { 0, 52, 0 }; private static final byte[] CTRL_TAN_KEY_BYTES = { 0, -28, 0 }; private static final byte[] SLASH_KEY_BYTES = { 47, 20, 0 }; private static final byte[] CTRL_SLASH_KEY_BYTES = { 0, -30, 0 }; private static final byte[] SQUARE_KEY_BYTES = { 0, -109, 0 }; private static final byte[] CTRL_SQUARE_KEY_BYTES = { 0, -110, 0 }; private static final byte[] SEVEN_KEY_BYTES = { 55, 113, 0 }; private static final byte[] CTRL_SEVEN_KEY_BYTES = { 0, -41, 0 }; private static final byte[] EIGHT_KEY_BYTES = { 56, 81, 0 }; private static final byte[] CTRL_EIGHT_KEY_BYTES = { 0, -40, 0 }; private static final byte[] NINE_KEY_BYTES = { 57, 49, 0 }; private static final byte[] CTRL_NINE_KEY_BYTES = { 0, -39, 0 }; private static final byte[] TIMES_KEY_BYTES = { 42, 19, 0 }; private static final byte[] CTRL_TIMES_KEY_BYTES = { 0, -31, 0 }; private static final byte[] TEN__POWER_KEY_BYTES = { 0, -20, 0 }; private static final byte[] CTRL_TEN_POWE_KEY_BYTES = { 0, -108, 0 }; private static final byte[] FOUR_KEY_BYTES = { 52, 114, 0 }; private static final byte[] CTRL_FOUR_KEY_BYTES = { 0, -44, 0 }; private static final byte[] FIVE_KEY_BYTES = { 53, 82, 0 }; private static final byte[] CTRL_FIVE_KEY_BYTES = { 0, -43, 0 }; private static final byte[] SIX_KEY_BYTES = { 54, 50, 0 }; private static final byte[] CTRL_SIX_KEY_BYTES = { 0, -42, 0 }; private static final byte[] MINUS_KEY_BYTES = { 45, 18, 0 }; private static final byte[] CTRL_MINUS_KEY_BYTES = { 0, -32, 0 }; private static final byte[] E_POWER_KEY_BYTES = { 0, -54, 0 }; private static final byte[] CTRL_E_POWER_KEY_BYTES = { 0, -87, 0 }; private static final byte[] ONE_KEY_BYTES = { 49, 115, 0 }; private static final byte[] CTRL_ONE_KEY_BYTES = { 0, -47, 0 }; private static final byte[] TWO_KEY_BYTES = { 50, 83, 0 }; private static final byte[] CTRL_TWO_KEY_BYTES = { 0, -46, 0 }; private static final byte[] THREE_KEY_BYTES = { 51, 51, 0 }; private static final byte[] CTRL_THREE_KEY_BYTES = { 0, -45, 0 }; private static final byte[] PLUS_KEY_BYTES = { 43, 17, 0 }; private static final byte[] CTRL_PLUS_KEY_BYTES = { 0, -33, 0 }; private static final byte[] ON_KEY_BYTES = { 0, 11, 0 }; private static final byte[] CTRL_ON_KEY_BYTES = { 0, -16, 0 }; private static final byte[] ZERO_KEY_BYTES = { 48, 80, 0 }; private static final byte[] CTRL_ZERO_KEY_BYTES = { 0, -48, 0 }; private static final byte[] POINT_KEY_BYTES = { 46, 112, 0 }; private static final byte[] NEG_KEY_BYTES = { -79, 48, 0 }; private static final byte[] CTRL_NEG_KEY_BYTES = { 0, -82, 0 }; private static final byte[] ENTER_KEY_BYTES = { 13, 16, 0 }; private static final byte[] CTRL_ENTER_KEY_BYTES = { 0, -90, 0 };
Quote from: Vogtinator on August 09, 2013, 09:30:18 amBut doesn't nRemote use the mysterious NavNet.jar to interface with the Nspire windows driver?That would make it completely useless to me, as I'm using Linux.Quote from: Streetwalker on August 09, 2013, 09:32:53 amQuote from: Vogtinator on August 09, 2013, 09:30:18 amBut doesn't nRemote use the mysterious NavNet.jar to interface with the Nspire windows driver?That would make it completely useless to me, as I'm using Linux.Same here. libti* supports this functionality though as Lionel stated a few posts up. Yes sure, but at least it will function directly and more quickly (no install time, I mean) for those on windows (and mac) with TINC[L]S installed, with no need of filter driver and such because of that crappy windows roadblock...For Linux obviously libti* is the choice as it's easy to use there (and, well, is the only one).Remember the main point here, whatever the choice : it has to be extremely simple for the user (no installation would be great)
And, also, let's not forget that if such App-Store project comes to life, it'll have to be for all .tns of course (there are tons of TI activities that could use this, but also Lua scripts, and duh, the ndless programs (especially those with external resources), so if it ever gets popular (who knows ), the majority of users will be PC, then Mac, then Linux (and the order of file type will be TI BASIC things, then the Lua stuff, then the ndless stuff...)
Also, it'd be good to have such a program linked to the major community repos (ticalc, omni, tiplanet, cemetech...)
QuoteSo is tilp the only reliable source for documentation?The documentation of libti* was already incomplete / partially outdated when I became the maintainer, and (with the help of contributors) I have focused more on the code (which needs bugfixes, feature expansion and hardening) than on the documentation (all the more libti* have relatively few users, and documentation of the API has pretty little user-visible effect, eh ?), so yeah, the source code of the libraries and testcases is your best bet. You're coders as well, after all
Have a look at libticalcs (calc_xx -> calc_nsp -> nsp_cmd -> nsp_vpkt -> nsp_rpkt) and the testcase, libticables (link_xxx -> link_usb) and the testcase, TILP (especially tilp_calcs.c), titools. The testcases and titools are about as bare-bones as you can get.
#define TRYF(x) { int aaa_; if((aaa_ = (x))) return aaa_; }
QuoteAnd I wonder why there are four libti* libraries.Actually, for the combination of TI-Z80, TI-68k and Nspire, four libraries is not enough There's a clear need for a fifth library on top of the four current ones, so as to consolidate some code currently duplicated, with variations, across clients (TILP, TIEmu, TilEm, titools). I started creating it locally, though it contains pretty little.The whole libti* framework looks complex and seems to have deep nesting of functions, but after a while maintaining the code base, I realized that for the purposes of presenting a single, mildly abstracted API to clients (instead of at least three sets of APIs with significant overlap, due to TI-Z80/TI-68k/Nspire, DBUS/DUSB/NSP, and some commonalities between TI-Z80 and TI-68k), it's not easy to do simpler. Just follow the call chains I outlined above - there's a use for each file, in the complete framework QuoteIn my opinion it would have made more sense to combine them into one libticalcs.It's equally clear that for the narrower purposes of interacting with the sole Nspire series, four libraries are far too much, and you're completely right about a single library making sense:* libticonv deals with character conversion, which is necessary on TI-Z80 and TI-68k models, but the Nspire uses Unicode (and conversions can be handled more directly by other frameworks);* libtifiles deals with file types... but the Nspire has very few of them, unlike the TI-Z80 and TI-68k series;
* libticables deals with multiple cables... most of which don't work on modern computers due to lack of the physical interfaces, and the Nspire uses a single cable type;* libticalcs deals with the raw DBUS, DUSB and NSP protocols and transport protocols built on top of them.
On my Github, you'll find a one-off experiment of a few hours, where I fused libticonv, libtifiles, libticables, libticalcs and tilp into a single code base (I probably should have let libti* on the one side and tilp on the other side, but oh well), shaved most code related to TI-Z80 and TI-68k calculators. Doing so slashed the size of the code base by more than half (~78K RLOC -> <35K RLOC). I didn't bother thoroughly purging the code base, there remain some bits directly aimed at TI-Z80 or TI-68k series and some APIs which are not necessary for dealing with the Nspire series.I didn't merge developments from mainline since I created that one-off experiment. With several months of full-time paid work, it would be possible to make a fresh API, simplified from the current one while keeping the good bits, tailored to Nspire interaction, replacing Glib with C++11/STL, making a whole new Qt UI on top of it (GTK+ is falling out of favor), making a solid up-to-date documentation, etc... but who can afford that kind of luxury, all the more it's for the benefit of relatively few users ? At least, I cannot
QuoteEven with WINE it doesn't.USB support in Wine is in the "TODO" group, anyway.
QuoteRemember the main point here, whatever the choice : it has to be extremely simple for the user (no installation would be great)Well, the "no installation" part is not going to happen, especially on Windows, due to the "everything USB needs a driver, which in turns requires admin privileges for installing" behaviour. On the day the two main FLOSS Web browsers (Firefox and Chrome) start providing an interface to USB peripherals on the host (notwithstanding the severe security problems), maybe...
Vogtinator:get_event() will be helpful. (http://hackspire.unsads.com/wiki/index.php/Libndls#Keyboard )It receives keystrokes AND you can receive files while waiting for an event to happen. Pretty awesome and it should solve many problems Test attached. It waits for an event and prints the event data (through serial). If you send a file while waiting, it will be received successfully. (Press ESC to close)
Oh, I don't think sending keys is a good solution. What if the user presses a key manually or disconnects the calc?
The problem is more the other direction.. How do you get feedback from the calc(whether the installation has finished successfully, the ndless version..)?Reading a logfile (after executing pacspire) would -again- be slow as hell.