/* Official CoreSDKLib harness v2: use ThermalSDK high-level (which works), * but ALSO read raw temperature via CoreSDKLib MAG_GetTemperatureData_Raw * using the channel that ThermalSDK created. To find the channel, we * brute-force 0..4 after ThermalSDK Start(). */ #define _WIN32_WINNT 0x0601 #include #include #include #include typedef void (CALLBACK *INewIRFrame)(const unsigned char *, int, int, int); typedef bool (CALLBACK *fn_Start_t)(void); typedef void (CALLBACK *fn_Stop_t)(void); typedef void (CALLBACK *fn_SetNewIRFrameDelegate_t)(INewIRFrame); typedef int (CALLBACK *MAG_GetTemperatureDataRaw_t)(int, int *, int, int); typedef int (CALLBACK *MAG_GetOutputBMPdataRGB24_t)(int, unsigned char *, int, int); typedef int (CALLBACK *MAG_GetFilteredRaw_t)(int, unsigned short *, int); typedef int (CALLBACK *MAG_GetFrameStatisticalData_t)(int, void *); static volatile int g_frames; static void CALLBACK onIR(const unsigned char *buf, int w, int h, int ch) { (void)buf; (void)w; (void)h; (void)ch; g_frames++; } int main(void) { const char *dir = "C:\\Project\\MAG160C\\IR_Camera_SDK-1.0.1\\windows\\windows\\app"; SetDllDirectoryA(dir); HMODULE t = LoadLibraryA("ThermalSDK.dll"); HMODULE c = LoadLibraryA("CoreSDKLib.dll"); printf("ThermalSDK=%p CoreSDKLib=%p\n", (void*)t, (void*)c); if (!t || !c) return 1; fn_Start_t T_Start = (fn_Start_t)GetProcAddress(t, "Start"); fn_Stop_t T_Stop = (fn_Stop_t)GetProcAddress(t, "Stop"); fn_SetNewIRFrameDelegate_t T_Set = (fn_SetNewIRFrameDelegate_t)GetProcAddress(t, "SetNewIRFrameDelegate"); MAG_GetTemperatureDataRaw_t G_TempRaw = (MAG_GetTemperatureDataRaw_t)GetProcAddress(c, "MAG_GetTemperatureData_Raw"); MAG_GetOutputBMPdataRGB24_t G_BMP = (MAG_GetOutputBMPdataRGB24_t)GetProcAddress(c, "MAG_GetOutputBMPdataRGB24"); MAG_GetFilteredRaw_t G_FRaw = (MAG_GetFilteredRaw_t)GetProcAddress(c, "MAG_GetFilteredRaw"); printf("Start=%p TempRaw=%p BMP24=%p FilteredRaw=%p\n", (void*)T_Start, (void*)G_TempRaw, (void*)G_BMP, (void*)G_FRaw); T_Set(onIR); printf("Start()...\n"); fflush(stdout); BOOL ok = T_Start(); printf("Start=%d\n", ok); fflush(stdout); Sleep(3000); printf("frames=%d\n", g_frames); /* try channels 0..4 for TempRaw */ static int tempdata[20000]; static unsigned short fraw[20000]; for (int chan = 0; chan < 5; ++chan) { memset(tempdata, 0, sizeof(tempdata)); int rc = G_TempRaw(chan, tempdata, 1, 1); printf("chan %d: TempRaw rc=%d t[0]=%d t[500]=%d t[9600]=%d\n", chan, rc, tempdata[0], tempdata[500], tempdata[9600]); if (rc && tempdata[0] != 0) { /* save */ FILE *f = fopen("official_tempraw.bin", "wb"); if (f) { fwrite(tempdata, 4, 19200, f); fclose(f); } printf(" saved official_tempraw.bin\n"); break; } memset(fraw, 0, sizeof(fraw)); int rc2 = G_FRaw(chan, fraw, 19200); printf(" FilteredRaw rc=%d f[0]=%d f[500]=%d\n", rc2, fraw[0], fraw[500]); if (rc2 && fraw[0] != 0) { FILE *f = fopen("official_fraw.bin", "wb"); if (f) { fwrite(fraw, 2, 19200, f); fclose(f); } printf(" saved official_fraw.bin\n"); break; } } T_Stop(); printf("done\n"); return 0; }