Здравствуйте! Разрабатываем приложение, в котором необходимо использовать данные с LTR27. Почему - то после выполнения команд LTR27_Recv() и LTR27_ProcessData() возвращается массив нулей. В то же время, LTR27 metr отображает наличие ненулевого сигнала. В чем может быть причина?
#include "include/LTR27.h"
#include <iostream>
void LTR27::openConnection(JNIEnv *env, const char *crateSN, int slotNumber) {
error = LTR27_Init(&hltr27);
checkError(env, error);
WORD slot;
switch (slotNumber) {
case 1:
slot = CC_MODULE1;
break;
case 2:
slot = CC_MODULE2;
break;
case 3:
slot = CC_MODULE3;
break;
case 4:
slot = CC_MODULE4;
break;
case 5:
slot = CC_MODULE5;
break;
case 6:
slot = CC_MODULE6;
break;
case 7:
slot = CC_MODULE7;
break;
case 8:
slot = CC_MODULE8;
break;
case 9:
slot = CC_MODULE9;
break;
case 10:
slot = CC_MODULE10;
break;
case 11:
slot = CC_MODULE11;
break;
case 12:
slot = CC_MODULE12;
break;
case 13:
slot = CC_MODULE13;
break;
case 14:
slot = CC_MODULE14;
break;
case 15:
slot = CC_MODULE15;
break;
case 16:
slot = CC_MODULE16;
break;
default:
slot = CC_MODULE1;
}
if (!error) {
error = LTR27_Open(&hltr27, SADDR_DEFAULT, LTRD_PORT_DEFAULT, crateSN, slot);
checkError(env, error);
}
}
void LTR27::checkConnection(JNIEnv *env) {
error = LTR27_IsOpened(&hltr27);
checkError(env, error);
}
void LTR27::initialize(JNIEnv *env, int *moduleSettings) {
error = LTR27_GetConfig(&hltr27);
checkError(env, error);
if (!error) {
error = LTR27_GetDescription(&hltr27, LTR27_ALL_DESCRIPTION);
initializeModule(moduleSettings);
}
if (!error) {
error = LTR27_SetConfig(&hltr27);
checkError(env, error);
}
}
void LTR27::initializeModule(int *moduleSettings) {
hltr27.FrequencyDivisor = moduleSettings[0];
// Copy calibration coefficients
for (int i = 0; i < LTR27_MEZZANINE_NUMBER; i++) {
for (int j = 0; j < 4; j++) {
hltr27.Mezzanine[i].CalibrCoeff[j] = hltr27.ModuleInfo.Mezzanine[i].Calibration[j];
}
}
}
void LTR27::getFrequency(JNIEnv *env, jobject obj) {
double frequency = defineFrequency();
jclass jcls = (*env).GetObjectClass(obj);
jfieldID fid = (*env).GetFieldID(jcls, "frequency", "D");
(*env).SetDoubleField(obj, fid, frequency);
}
int LTR27::defineFrequency() {
double maxFrequency = 1000;
double frequency = maxFrequency / (double) (hltr27.FrequencyDivisor + 1);
return frequency;
}
void LTR27::start(JNIEnv *env) {
error = LTR27_ADCStart(&hltr27);
checkError(env, error);
}
void LTR27::write(JNIEnv *env, jdoubleArray data, jdoubleArray timeMarks) {
int dataLength = (*env).GetArrayLength(data);
rawData = (DWORD *) malloc(dataLength * sizeof(DWORD));
tMarks = (DWORD *) malloc(dataLength * sizeof(DWORD));
tout = 1000;
jdouble *pData = (*env).GetDoubleArrayElements(data, 0);
jdouble *pTimeMarks = (*env).GetDoubleArrayElements(timeMarks, 0);
DWORD received = LTR27_Recv(&hltr27, rawData, tMarks, size, tout);
error = LTR27_ProcessData(&hltr27, rawData, pData, &received, 1, 1);
for (int i = 0; i < dataLength; i++) {
std::cout << "data[ " << i << "] value: " << pData[i] << std::endl;
}
(*env).ReleaseDoubleArrayElements(data, pData, 0);
(*env).ReleaseDoubleArrayElements(timeMarks, pTimeMarks, 0);
std::free(rawData);
std::free(tMarks);
}
void LTR27::stop(JNIEnv *env) {
error = LTR27_ADCStop(&hltr27);
checkError(env, error);
}
void LTR27::closeConnection(JNIEnv *env) {
error = LTR27_Close(&hltr27);
checkError(env, error);
}
void LTR27::checkError(JNIEnv *env, int error) {
if (error) {
const char *errorString = LTR27_GetErrorString(error);
status = (*env).NewStringUTF(errorString);
} else {
status = (*env).NewStringUTF("Операция успешно выполнена");
}
}