eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2012-06-19 12:36 pm
Entry tags:

УРА!

Таки нашел я нормальную библиотеку для чертовой камеры U16M.
Нашел я ее, как ни странно, на сайте разработчиков (предлагающих на главной купить это дело за 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" (оказывается, вещи-то совершенно разные и инициализируются по-разному).



Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org