123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <jni.h>
- #include "serialInterface.h"
-
- #ifdef winHelper
- #include "winSerial.c"
- #else
- #include "unixSerial.c"
- #endif
-
- JNIEXPORT jstring JNICALL Java_HelperUtility_getThePorts(JNIEnv *env, jclass class, jstring s) {
- jboolean tmp;
- char **ports = getSerialPorts((*env)->GetStringUTFChars(env, s, &tmp));
- char *string = NULL;
- int length = 0, leng2 = 0, lengthabs = 0;
-
-
-
-
- while (ports[length] != NULL) {
-
-
- while (ports[length][leng2] != '\0') {
- leng2++;
- }
-
- lengthabs += leng2;
- leng2 = 0;
- length++;
- }
- length += lengthabs;
-
-
-
- string = (char *)malloc((length + 1) * sizeof(char));
- if (string == NULL) {
- printf("JNI: Not enough memory!\n");
- return (*env)->NewStringUTF(env, NULL);
- }
-
- length = 0;
- lengthabs = 0;
- while (ports[length] != NULL) {
- leng2 = 0;
- while (ports[length][leng2] != '\0') {
- string[lengthabs++] = ports[length][leng2++];
- }
- string[lengthabs++] = '\n';
- length++;
- }
- string[lengthabs] = '\0';
-
-
-
- jstring ret = (*env)->NewStringUTF(env, string);
- return ret;
- }
-
- JNIEXPORT jshortArray JNICALL Java_HelperUtility_readDataNative(JNIEnv *env, jclass class, jint length) {
- jshortArray arr = (*env)->NewShortArray(env, length);
- int toBeRead = 0, read, i;
- char *data = (char *)malloc(length * sizeof(char));
- jshort *data2 = (jshort *)malloc(length * sizeof(jshort));
-
- while (length > 0) {
- read = serialRead(data + toBeRead, length);
- toBeRead += read;
- length -= read;
- }
-
- for (i = 0; i < (*env)->GetArrayLength(env, arr); i++) {
- data2[i] = data[i];
- }
- (*env)->SetShortArrayRegion(env, arr, 0, (*env)->GetArrayLength(env, arr), data2);
- return arr;
- }
-
- JNIEXPORT void JNICALL Java_HelperUtility_writeDataNative(JNIEnv *env, jclass class, jshortArray data, jint length) {
- int toWrite = length, written = 0, now, i;
- char *dat = (char *)malloc(length * sizeof(char));
- jshort *dat2 = (jshort *)malloc(length * sizeof(jshort));
-
- while (toWrite > 0) {
- (*env)->GetShortArrayRegion(env, data, written, length, dat2);
- for (i = 0; i < length; i++) {
- dat[i] = dat2[i];
- }
- now = serialWrite(dat, toWrite);
- written += now;
- toWrite -= now;
- }
- }
-
- JNIEXPORT void JNICALL Java_HelperUtility_closePortNative(JNIEnv * env, jclass class) {
- serialClose();
- }
-
- JNIEXPORT jboolean JNICALL Java_HelperUtility_openPortNative(JNIEnv *env, jclass class, jstring name) {
- jboolean isCopy;
- const char *path = (*env)->GetStringUTFChars(env, name, &isCopy);
- int ret = serialOpen((char *)path);
- if (ret == 0) {
- return JNI_TRUE;
- } else {
- return JNI_FALSE;
- }
- }
|