hi all,
I would like to test serial port handling in Linux with jna. Open, read and
close is working well, but I cannot install signal handler. Seems to be I am
new in jna and perhaps I made some mistake in declarations of signal handler.
Could anybody help me to install signal handler?
return value of sigaction (saRes) is 0, but signal.callback never called:(
here is the code snippet:
------------------------------------------------------------------
SignalHandler_t signal = new SignalHandler_t (){
@Override
public void callback(int signal) {
int st = 0;
CLibrary.INSTANCE.ioctl(dev, CLibrary.TIOCMGET, st);
st &= ~CLibrary.TIOCM_RTS;
CLibrary.INSTANCE.ioctl(dev, CLibrary.TIOCMSET, st);
st |= CLibrary.TIOCM_RTS;
CLibrary.INSTANCE.ioctl(dev, CLibrary.TIOCMSET, st);
}};
...
SigActionStruct saio = new SigActionStruct();
saio.sa_handler = this.signal;
CLibrary.INSTANCE.sigemptyset(saio.sa_mask);
saio.sa_flags = 0;
saio.sa_restorer = null;
int saRes = CLibrary.INSTANCE.sigaction(CLibrary.SIGIO, saio, null);
------------------------------------------------------------------
public interface SignalHandler_t extends Callback {
public void callback(int signal);
}
public interface SignalAction extends Callback {
public void callback (int a, Pointer info, Pointer p);
}
public static class SigSet_t extends Structure {
public long sig[] =
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
}
public interface SignalRestorer extends Callback {
public void callback();
}
public static class SigActionStruct extends Structure {
public SignalHandler_t sa_handler;
public SignalAction sa_sigaction;
public SigSet_t sa_mask;
public int sa_flags;
public SignalRestorer sa_restorer;
}