Hallo,
ich habe eine vorhandene C++ Library zum steuern eines Radios über /dev/ttyACM0 mit einem Android Arm Toolchain erfolgreich erstellt. Das Testprogramm rufe ich über ein Terminal auf und das funktioniert auch. Ich möchte jetzt gerne die Library mit Java ansprechen, um das Radio mit einer Android App benutzerfreundlich zu steuern.
Wie kann ich das am besten tun ?
Radiolibrary.cpp :
C
BOOL OpenRadioPort(LPCSTR port, BOOL usehardmute)
{
#ifdef _DEBUG
AllocConsole();
#endif
#ifdef WIN32
if(!hSerial)
hSerial = CreateFileA(port, GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (hSerial == INVALID_HANDLE_VALUE)
return false;
else
{
DCB dcbSerialParams ={0};
dcbSerialParams.DCBlength = sizeof(DCB);
if (!GetCommState(hSerial, &dcbSerialParams))
return false;
dcbSerialParams.BaudRate=CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
dcbSerialParams.fRtsControl=0;
dcbSerialParams.fDtrControl=0;
if (!SetCommState(hSerial, &dcbSerialParams))
{
DWORD er=GetLastError();
return false;
}
COMMTIMEOUTS timeouts={0};
timeouts.ReadIntervalTimeout=10;
timeouts.ReadTotalTimeoutConstant=10;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=10;
timeouts.WriteTotalTimeoutMultiplier=10;
if (!SetCommTimeouts(hSerial, &timeouts))
return false;
bUseHardMute=usehardmute;
if (usehardmute)
HardMute();
else
HardUnMute();
#endif
#ifdef __linux__
struct termios options;
#ifdef _LINUXDEBUG
wprintf(L"Open radio port %s\n", port);
#endif
if(hSerial<1)
hSerial = open(port, O_RDWR | O_NOCTTY | O_NDELAY);
if (hSerial == -1)
{
perror("open_port: Unable to open radio port\n");
return false;
}
else
{
fcntl(hSerial, F_SETFL, 0);
tcgetattr(hSerial, &options);
cfsetispeed(&options, B57600);
cfsetospeed(&options, B57600);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS;
/* set raw input, 1 second timeout */
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG );
options.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL);
options.c_oflag &= ~OPOST;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 1;
/* set the options */
tcsetattr(hSerial, TCSANOW, &options);
ResetHigh();
ClearInputBuffer();
//HardResetRadio();
bUseHardMute=usehardmute;
if (usehardmute)
HardMute();
else
HardUnMute();
#endif
Sleep(800);
if(!IsSysReady())
{
for (int i=0;i<2;i++)
{
if(HardResetRadio())
{
for(int x=0;x<2;x++)
{
if(IsSysReady())
{
TotalProgram = GetTotalProgram();
return true;
}
}
}
}
return false;
}
else
{
TotalProgram = GetTotalProgram();
return true;
}
}
}
BOOL CloseRadioPort(void)
{
#ifdef WIN32
if (hSerial) CloseHandle(hSerial);
#endif
#ifdef __linux__
if (hSerial) close(hSerial);
#endif
hSerial=NULL;
return true;
}
Alles anzeigen
RadioLibrary.h:
Testprogramm.cpp :