Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
Java JNI оберткаДобрый день, есть ли JNI обертка для библиотек к модулю E-502-P-EU-D ? |
|||
|
||||
|
Re: Java JNI оберткаЗдравствуйте. |
|||
|
||||
|
Re: Java JNI оберткаНашел самый простой способ использования библиотек из Java. Было бы очень неплохо получить поддержку интерфейса E502Api от производителя (по сути это только сопровождение одного интерфейса с описанием методов и константы). Пример Java кода приведен ниже. 1. в ОС должна быть установлена библиотека e502api для вот этой строки E502Api e502 = (E502Api) Native.loadLibrary("e502api", E502Api.class); 2. Maven deps 3. Java import com.sun.jna.Library; /** public int value; t_x502_streams(int value) { public enum t_x502_mode { public int value; t_x502_mode(int value) { public enum t_x502_lch_mode { public int value; t_x502_lch_mode(int value) { public int value; t_x502_adc_range(int value) { public enum t_x502_ref_freq { public int value; t_x502_ref_freq(int value) { public enum t_x502_proc_flags { public int value; t_x502_proc_flags(int value) { public interface E502Api extends Library { int E502_UsbGetSerialList(long[] serials, int size, int flags, PointerType devcnt); long X502_Create(); int E502_OpenUsb(long handle, String serial); int X502_SetMode(long handle, int mode); int X502_Close(long handle); // ============================== int X502_SetLChannelCount(long hnd, int lch_cnt); int X502_SetLChannel(long hnd, int lch, int phy_ch, int mode, int range, int avg); int X502_SetRefFreq(long hnd, int freq); int X502_SetAdcFreq(long hnd, double[] f_acq, double[] f_frame); // ============================== int X502_StreamsEnable(long handle, int streams); int X502_StreamsDisable(long hnd, int streams); int X502_StreamsStart(long handle); int X502_StreamsStop(long hnd); int X502_ProcessData(long hnd, public static void main(String[] args) throws Exception { // long serial = serials[0]; long handle = e502.X502_Create(); e502.X502_SetMode(handle, t_x502_mode.X502_MODE_FPGA.value); {//configure channels //первый логический канал соответствует измерению 1 канала относительно общей земли //второй логический канал соответствует измерению 16 канала //третий логический канал - измерение 17-го канала e502.X502_SetRefFreq(handle, t_x502_ref_freq.X502_REF_FREQ_2000KHZ.value); double[] facq = new double[]{20000}; e502.X502_Configure(handle, 0); boolean a = true; while (a) { double[] adc_data = new double[1000]; System.out.println(System.currentTimeMillis() + " : " + readWordsAmount + " : " + adc_data_size[0]); e502.X502_StreamsStop(handle); e502.X502_Close(handle); |
|||
|
||||
|
Re: Java JNI оберткаСпасибо за пример! Мы можем включить на его основе поддержку E502/L502 в Java, но для этого нужно сперва самим посмотреть код, проверить сборку, включить все недостающие функции как L502, так и E502, чтобы дальше его можно было сопровождать. Я посмотрю код, только детально смогу это сделать где-то через неделю или две, тогда постараюсь включить поддержку в штатный наш SDK. |
|||
|
||||
|
Re: Java JNI оберткаАлексей L Card пишет:
Отлично, Спасибо. |
|||
|
||||
|
Re: Java JNI оберткаДобрый день, Параметры среды: После обновления прошивки, на приведенном выше примере, а именно в месте double[] facq = new double[]{20000}; получаю код "-7" В т.ч. при попытке установить соединение через IP (E502 напрямую соединен кабелем с компьютером, пинг проходит, файрвола нет) В чем может быть проблема ? |
|||
|
||||
|
Re: Java JNI оберткаЗдравствуйте. Честно говоря не до конца понятно как описанное может быть связано именно с обновлением прошивки. Возможно были какие-то еще изменения в системе? работало до этого у Вас на той же машине? |
|||
|
||||
|
Re: Java JNI оберткаДобрый день, ответы по тексту: Алексей: Честно говоря не до конца понятно как описанное может быть связано именно с обновлением прошивки. Возможно были какие-то еще изменения в системе? Алексей: работало до этого у Вас на той же машине? Алексей: Функция X502_SetAdcFreq библиотеки возвращает -7 только если передать нулевой указатель в качестве facq (кстати не до конца понятно зачем массив на 20000 точек). Сергей: double[] facq = new double[]{20000}; - это массив из одного элемента со значением 20000 (мануалка по мэппингу типов JNA (JAVA <-> C ) https://github.com/java-native-access/j … appings.md ) Алексей: Код -155 соответствует ошибке открытия TCP-соединения. Сергей: перепроверю соответствия типов, может быть тут лоханулся. Уточните правильно ли я понял информацию про t_x502_hnd: ? Спасибо. |
|||
|
||||
|
Re: Java JNI оберткаДа, насчет размеров 8 и 4 - так. Думаю лучше всего использовать тип Pointer вместо t_x502_hnd |
|||
|
||||
|
Re: Java JNI оберткаАлексей L Card пишет:
Понял, если бы была С тут бы вопрос скорее всего не возник. В случае с JNA (Java) скорее всего придется два интерфейса поддерживать для 32 бит и 64 бит. Спасибо за детали. |
|||
|
||||
|
Re: Java JNI оберткаНу в Java вроде тоже есть Pointer (в вашей таблице - последняя строка) |
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск