Entry tags:
УРА!
Таки нашел я нормальную библиотеку для чертовой камеры U16M.
Нашел я ее, как ни странно, на сайте разработчиков (предлагающих на главной купить это дело за 100 баксов), а между тем, исходники-то — вот они.
Сразу предупреждаю: файлы apogee-devel… не помогут (там вообще хрен знает что), зато в директории old-versions лежит файлик apogee-driver-source-3.7.0.tgz, который я и использовал.

Так как "сама по себе" эта библиотека устанавливаться "не хочет" (ей, видите ли, swig подавай, да и вообще как-то там все через одно место), я взял cmake'овский файлик из старой библиотеки и подправил его с учетом "обновок":
Запустил cmake . && make && su -c "make install" и — вуаля! Библиотечка скомпилировалась и даже устанавилась!!!
Далее свой многострадальный TEST.c:
я скомпилировал с этой библиотекой (надо будет чуть дописать прокладку между плюсами и сями, чтобы иметь возможность пользоваться всеми функциями библиотеки, а не парой-тройкой, как по умолчанию):
И (о чудо!) она заработала и даже считала мне данные с матрицы, да еще как! Данные-таки менялись в зависимости от освещенности камеры.
Я счастлив. Буду дописывать прокладки, как появится время. А сейчас Гриша хочет замерить глубину посадки матрицы (чтобы заказать крепеж для камеры), так что надо будет из моей старой утилитки для работы с матрицей FLI выковярять функцию записи фитсов и пока в минимальном режиме попробовать поработать (надо-то всего лишь поперемещать камеру по оптической скамье, периодически делая съемки сходящегося пучка от оптики, проецирующей изображение освещенной диафрагмы, и из простейшей линейной аппроксимации расстояние/диаметр изображения вывести глубину посадки матрицы).
Кстати, да: оказалось, что предыдущие версии не работали, как я ни бился (и не заработали бы), т.к. на самом деле у камеры сенсор KAF16803D9, а эти говнюки писали, что там KAF16803, без "D9" (оказывается, вещи-то совершенно разные и инициализируются по-разному).
Нашел я ее, как ни странно, на сайте разработчиков (предлагающих на главной купить это дело за 100 баксов), а между тем, исходники-то — вот они.
Сразу предупреждаю: файлы apogee-devel… не помогут (там вообще хрен знает что), зато в директории old-versions лежит файлик apogee-driver-source-3.7.0.tgz, который я и использовал.

Так как "сама по себе" эта библиотека устанавливаться "не хочет" (ей, видите ли, swig подавай, да и вообще как-то там все через одно место), я взял cmake'овский файлик из старой библиотеки и подправил его с учетом "обновок":
cmake_minimum_required(VERSION 2.4.7)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules/")
set(BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin")
set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include")
set(APOGEE_VERSION "2.2")
set(APOGEE_SOVERSION "2")
Include (CheckCXXSourceCompiles)
include (MacroOptionalFindPackage)
include (MacroLogFeature)
include (MacroBoolTo01)
include (CheckIncludeFiles)
find_package(USB REQUIRED)
find_package(CURL REQUIRED)
include_directories( ${CMAKE_CURRENT_BINARY_DIR})
include_directories( ${CMAKE_SOURCE_DIR})
include_directories( ${CMAKE_SOURCE_DIR}/ApogeeNet)
include_directories( ${CMAKE_SOURCE_DIR}/ApogeeUsb)
include_directories( ${CMAKE_SOURCE_DIR}/FpgaRegs)
set(AltaCommon_SRCS
${CMAKE_SOURCE_DIR}/ApnCamData_KAF6303E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI11000ML.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF4202.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2020C.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD5520.cpp
${CMAKE_SOURCE_DIR}/ApnCamData.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4710ALT.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI4020C.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1301E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4240B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI4020CLB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT0402ME3.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI11000CL.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF09000.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2001CL.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF16801E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2001ML.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI4020M.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF16803.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4720B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1301EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD5710F.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2020CL.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1001EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD7700.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4240.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_S101401107.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1001E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI4020MLB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4710B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT16000.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF0401E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2001M.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1401E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI11000C.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF0261E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD5520B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD5710B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD5710.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI11000M.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1602EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2020MLB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF0261EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI4020CL.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT4000.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF3200EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF10011105.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD3011.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT2000.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1001ENS.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF6303EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT0402ME2.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI4020ML.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2020ML.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT340.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF0401EB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD7700B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT0402ME4.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF3200E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_ASCENT0402ME.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_TH7899.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD3011B.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2020M.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1602E.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4720.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF09000X.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4710.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI2020CLB.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF09000H.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_S101401109.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF16803D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4240D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF16801ED7D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF8300.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF09000D7D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4710DD.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF16801ED9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF1001EBD9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF6302.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI16000MLD9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD7700D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF09000XD7D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF16803D7D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI16000CL.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD3011D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI16000ML.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_F3041D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAI16000CLD9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_F3041.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF0401ENSD.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF8300C.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_S101401108.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD4710D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_CCD230_42.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF6303EBD9.cpp
${CMAKE_SOURCE_DIR}/ApnCamData_KAF09000D9.cpp
${CMAKE_SOURCE_DIR}/ApnCamTable.cpp
)
add_definitions("-O2 -g -fpic -DWall -DLINUX -DALTA_STANDALONE -DHAVE_STRERROR")
########### libapogeeAltaU ###########
set(AltaU_SRCS
${CMAKE_SOURCE_DIR}/libapogee.cpp
${CMAKE_SOURCE_DIR}/ApnCamera.cpp
${CMAKE_SOURCE_DIR}/ApnCamera_USB.cpp
${CMAKE_SOURCE_DIR}/ApnCamera_Linux.cpp
${CMAKE_SOURCE_DIR}/ApogeeUsb/ApogeeUsbLinux.cpp
${CMAKE_SOURCE_DIR}/ApogeeUsb/alta2firmware.cpp
${CMAKE_SOURCE_DIR}/ApogeeUsb/ascentfirmware.cpp
${CMAKE_SOURCE_DIR}/ApogeeUsb/ApogeeUsbUpload.cpp
${CMAKE_SOURCE_DIR}/ApnFilterWheel.cpp
${AltaCommon_SRCS}
)
add_library(apogeeu SHARED ${AltaU_SRCS})
set_target_properties(apogeeu PROPERTIES VERSION ${APOGEE_VERSION} SOVERSION ${APOGEE_SOVERSION})
target_link_libraries(apogeeu ${LIBUSB_LIBRARIES})
install(TARGETS apogeeu LIBRARY DESTINATION lib${LIB_POSTFIX} )
########### libapogeeAltaE ###########
set(AltaE_SRCS
${CMAKE_SOURCE_DIR}/libapogee.cpp
${CMAKE_SOURCE_DIR}/ApnCamera.cpp
${CMAKE_SOURCE_DIR}/ApnCamera_NET.cpp
${CMAKE_SOURCE_DIR}/ApnCamera_Linux.cpp
${CMAKE_SOURCE_DIR}/ApogeeNet/ApogeeNet.cpp
${CMAKE_SOURCE_DIR}/ApogeeNet/ApogeeNetLinux.c
${AltaCommon_SRCS}
)
add_library(apogeee SHARED ${AltaE_SRCS})
set_target_properties(apogeee PROPERTIES VERSION ${APOGEE_VERSION} SOVERSION ${APOGEE_SOVERSION})
target_link_libraries(apogeee ${LIBUSB_LIBRARIES} ${CURL_LIBRARIES})
install(TARGETS apogeee LIBRARY DESTINATION lib${LIB_POSTFIX} )
install( FILES libapogee.h DESTINATION ${INCLUDE_INSTALL_DIR}/libapogee COMPONENT Devel)
Запустил cmake . && make && su -c "make install" и — вуаля! Библиотечка скомпилировалась и даже устанавилась!!!
Далее свой многострадальный TEST.c:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <math.h>
#include "libapogee.h"
int main(){
if(ApnGlueOpen(1)){
printf("Can't open, exit\n");
return 0;
}
char *sensor, *camera;
ApnGlueGetName(&sensor, &camera);
printf("camera: %s, sensor: %s\n", camera, sensor);
double temp;
int stat = ApnGlueGetTemp(&temp);
printf("stat = %d, temp=%g\n", stat, temp);
int roih, roiw, osh, osw, binh, binw, shutter;
double mintemp;
ApnGlueSetFan(0);
//ApnGlueSetFan(3);
ApnGlueGetMaxValues (NULL, &roiw, &roih, &osw, &osh, &binw, &binh,
&shutter, &mintemp);
printf("roiw=%d, roih=%d, osw=%d, osh=%d, binw=%d, binh=%d, mintemp=%g\n",
roiw, roih, osw, osh, binw, binh, mintemp);
//ApnGlueSetTemp(-30.);
/*int s = 0;
do{
stat = ApnGlueGetTemp(&temp);
printf("%ds: stat = %d, temp=%g\n", s++, stat, temp);
sleep(1);
}while(stat != 2 || fabs(temp+30) > 0.2);*/
int imW, imH;
char whynot[256];
unsigned short *buf = NULL;
if(ApnGlueSetExpGeom (1000, 1000, 0, 0, 0, 0, 1000, 1000, &imW, &imH, whynot))
printf("ERR set geom: %s\n", whynot);
else do{
double exptime = 0.03;
int L = imW*imH;
buf = (unsigned short*) calloc(L, sizeof(unsigned short));
if(ApnGlueStartExp(&exptime, 1)){
printf("Can't expose\n");
break;
}
printf("Start exp [%dx%d]: %g seconds ", imW, imH, exptime);
while(!ApnGlueExpDone()){
stat = ApnGlueGetTemp(&temp);
printf("stat = %d, temp=%g\n", stat, temp);
fflush(stdout); sleep(1);}
printf(" done\nGet image\n");
if(ApnGlueReadPixels(buf, L, whynot)){
printf("Error read: %s\n", whynot);
break;
}
printf("buf(%d, %d) = %hu\n", imW/2, imH/2, buf[L/2]);
}while(0);
free(buf);
ApnGlueSetTemp(0);
ApnGlueSetFan(0);
}
я скомпилировал с этой библиотекой (надо будет чуть дописать прокладку между плюсами и сями, чтобы иметь возможность пользоваться всеми функциями библиотеки, а не парой-тройкой, как по умолчанию):
gcc TEST.c -lm -lapogeeu -o TEST && ./TEST
И (о чудо!) она заработала и даже считала мне данные с матрицы, да еще как! Данные-таки менялись в зависимости от освещенности камеры.
Я счастлив. Буду дописывать прокладки, как появится время. А сейчас Гриша хочет замерить глубину посадки матрицы (чтобы заказать крепеж для камеры), так что надо будет из моей старой утилитки для работы с матрицей FLI выковярять функцию записи фитсов и пока в минимальном режиме попробовать поработать (надо-то всего лишь поперемещать камеру по оптической скамье, периодически делая съемки сходящегося пучка от оптики, проецирующей изображение освещенной диафрагмы, и из простейшей линейной аппроксимации расстояние/диаметр изображения вывести глубину посадки матрицы).
Кстати, да: оказалось, что предыдущие версии не работали, как я ни бился (и не заработали бы), т.к. на самом деле у камеры сенсор KAF16803D9, а эти говнюки писали, что там KAF16803, без "D9" (оказывается, вещи-то совершенно разные и инициализируются по-разному).