Omnimaga

Calculator Community => Other Calc-Related Projects and Ideas => TI-Nspire => Topic started by: CiriousJoker on April 09, 2014, 01:52:14 pm

Title: Send Key event
Post by: CiriousJoker on April 09, 2014, 01:52:14 pm
I wonder how i can use keyevents (Im just starting coding and wanna learn from examples, i know how to code c++ a little)


Specifically i want to let my programm do an overlay, wait for userinput and send it to the os while being active.
I wanted to make an Overlay so i can activate my Code with a button or a mouseclick.
Something like the nClock Clock overlay but with more user interactions.


~
Title: Re: Send Key event
Post by: Streetwalrus on April 09, 2014, 02:38:32 pm
From what you said I assume you are coding in C++ for Ndless ? You didn't make that quite clear.
Title: Re: Send Key event
Post by: CiriousJoker on April 09, 2014, 03:08:03 pm
Yes im coding in c/c++ and i found the function(?) send_key_event from libndls.h
Does anyone know how to use it?
Title: Re: Send Key event
Post by: Legimet on April 10, 2014, 12:04:11 pm
Look for it in os.h. You'll have to create an s_ns_event struct. The last argument passed to the function is unknown, so I guess you'll have to experiment with it a bit.
Title: Re: Send Key event
Post by: CiriousJoker on April 10, 2014, 12:40:55 pm
Don't think im good at coding...


I found this line in os.h

_SYSCALL4(void, send_key_event, struct s_ns_event* /* eventbuf */, unsigned short /* keycode_asciicode */, BOOL /* is_key_up */, BOOL /* unknown */)


now my questions:


I wanted to make something like a notepad (Like the Scratchpad just with notes accessible by ctrl+return key(not enter, return). Is there a better way to do that? from what i noticed other ndless programs are paused when i activate my overlay (via setPixel(...)). Does setPixel block the os or my whole program? For example nClock has a little overlay that shows the time. The overlay is updated every second. In the code i found something that looks like a hook. To make an overlay, do i have to manipulate the os?



what does _SYSCALL4(...) do?
How do i use it (example code?)?
Title: Re: Send Key event
Post by: lkj on April 10, 2014, 01:18:58 pm
It's a bit easier to understand (but still not very clear) in the documentation at http://hackspire.unsads.com/wiki/index.php/Libndls#Keyboard (http://hackspire.unsads.com/wiki/index.php/Libndls#Keyboard) than in os.h. _SYSCALL4(...) is a macro to define a syscall with four arguments.

To make a program that opens when you press ctrl+return you have to use a hook like nClock does, yes.
Title: Re: Send Key event
Post by: CiriousJoker on April 10, 2014, 04:03:03 pm
Ok, is hooking easy? Is there any example?
I noticed that (in 3 different "examples") there are some "parts" which are almost in every hook example (i dont understand them anyway)

HOOK_INSTALL();
HOOK_ADDR
HOOK_VALUE

HOOK_DEFINE
(Is used in every example but the function is defined, so its not a real included function?)
HOOK_RESTORE_RETURN();
HOOK_SAVED_REGS();


In nClock the hook seems to be easier:

Code: [Select]
static const int hook_addrs[] = {0x100B66C8, 0x100B6988,  // Clickpad / Touchpad 3.1
                                 0x100EAAAC, 0x100EADC4,  // CX 3.1
                                 0x100E72CC, 0x100E75E4,  // CM 3.1
                                 0x101122b8, 0x100eb288,  // Clickpad / Touchpad 3.6
                                 0x10111cfc, 0x1011201C}; // CX 3.6


#define HOOK_ADDR (nl_osvalue((int*)hook_addrs, sizeof(hook_addrs)/sizeof(hook_addrs[0])))


static const int hook_values[] = {0xe92d47f0, 0xe92d47f0,
                                  0xE59F1030, 0xE59F1030,
                                  0xE59F1030, 0xE59F1030,
                                  0xE59F1030, 0xE59F1030,
                                  0xE59F1030, 0xE59F1030};


#define HOOK_VALUE (nl_osvalue((int*)hook_values, sizeof(hook_values)/sizeof(hook_values[0])))


HOOK_DEFINE(hook_nclock) {
    if(!*noMiniClock)
        mini_nclock(1);
    HOOK_RESTORE_RETURN(hook_nclock);
}

But i wonder what the hook_addr[] and hook_values[] is.
Is a hook_addr a ram address and hook_value is the value?


What do these lines mean?
#define HOOK_ADDR (...);
#define HOOK_VALUE(...);

What line exactly does "install" the hook (Or is it a combination of everything?)?


I know these are a lot of questions but i'd be really happy to find some answers :)