static int camera_summary(Camera *camera, CameraText *summary, GPContext *context) { if (!camera->pl->init_done) digi_init (camera->port, camera->pl); snprintf (summary->text, 100, ("Your USB camera seems to have an SQ905C chipset.\n" "The total number of pictures in it is %i\n"), camera->pl->nb_entries); return GP_OK; }
static int file_list_func(CameraFilesystem *fs, const char *folder, CameraList *list, void *data, GPContext *context) { Camera *camera = data; int n; if(!camera->pl->init_done) digi_init (camera->port, camera->pl); GP_DEBUG ("List files in %s\n", folder); n = camera->pl->nb_entries; gp_list_populate(list, "pict%03i.ppm", n); return GP_OK; }
void arch_init(void) { int t; if (SDL_Init(SDL_INIT_VIDEO) < 0) Error("SDL library initialisation failed: %s.",SDL_GetError()); key_init(); digi_select_system( GameArg.SndDisableSdlMixer ? SDLAUDIO_SYSTEM : SDLMIXER_SYSTEM ); if (!GameArg.SndNoSound) digi_init(); mouse_init(); if (!GameArg.CtlNoJoystick) joy_init(); if ((t = gr_init(0)) != 0) Error("Graphics initialization failed: %u",t); atexit(arch_close); }
static int get_file_func(CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, void *user_data, GPContext *context) { int status = GP_OK; Camera *camera = user_data; int w, h, b; int k, next; unsigned char comp_ratio; unsigned char lighting; unsigned char *data = NULL; unsigned char *p_data = NULL; unsigned char *ppm; unsigned char *ptr; unsigned char gtable[256]; int size; if (!camera->pl->init_done) digi_init (camera->port, camera->pl); /* Get the entry number of the photo on the camera */ k = gp_filesystem_number (camera->fs, "/", filename, context); if (GP_FILE_TYPE_EXIF ==type) return GP_ERROR_FILE_EXISTS; if (GP_FILE_TYPE_RAW!=type && GP_FILE_TYPE_NORMAL != type && GP_FILE_TYPE_PREVIEW != type) { return GP_ERROR_NOT_SUPPORTED; } next = camera->pl->last_fetched_entry +1; while (next < k) { b = digi_get_data_size (camera->pl, next); data = malloc(b); if(!data) return GP_ERROR_NO_MEMORY; digi_read_picture_data (camera->port, data, b, next); free(data); next ++; } comp_ratio = digi_get_comp_ratio (camera->pl, k); w = digi_get_picture_width (camera->pl, k); switch (w) { case 176: h = 144; break; case 640: h = 480; break; case 320: h = 240; break; default: h = 288; break; } lighting = camera->pl->catalog[k*0x10+0x0b]; b = digi_get_data_size (camera->pl, k); if (!b) { GP_DEBUG("Photo number %i deleted?\n",k+1); camera->pl->last_fetched_entry = k; return GP_OK; } data = malloc (w*h); if(!data) return GP_ERROR_NO_MEMORY; GP_DEBUG("Fetch entry %i\n", k); digi_read_picture_data (camera->port, data, b, k); camera->pl->last_fetched_entry = k; if (GP_FILE_TYPE_RAW == type) { /* type is GP_FILE_TYPE_RAW */ size = b; gp_file_set_mime_type (file, GP_MIME_RAW); gp_file_append(file, (char *)data, size); /* Save photo's catalog entry as a footer for the raw file */ gp_file_append(file, (char *)camera->pl->catalog + k * 0x10, 0x10); /* Reset camera when done, for more graceful exit. */ if (k +1 == camera->pl->nb_entries) { digi_rewind (camera->port, camera->pl); } free(data); return(GP_OK); } /* * Now put the data into a PPM image file. */ ppm = malloc (w * h * 3 + 256); /* room for data + header */ if (!ppm) { status = GP_ERROR_NO_MEMORY; goto end; } snprintf ((char *)ppm, 64, "P6\n" "# CREATOR: gphoto2, SQ905C library\n" "%d %d\n" "255\n", w, h); size = strlen ((char *)ppm); ptr = ppm + size; size = size + (w * h * 3); GP_DEBUG ("size = %i\n", size); p_data = malloc(w * h); if (!p_data) { status = GP_ERROR_NO_MEMORY; goto end; } if(comp_ratio) { digi_decompress (p_data, data, w, h); } else memcpy(p_data, data, w * h); gp_ahd_decode(p_data, w , h , ptr, BAYER_TILE_BGGR); free(p_data); digi_postprocess(w, h, ptr); if (lighting < 0x40) { GP_DEBUG( "Low light condition. Using default gamma. \ No white balance.\n"); gp_gamma_fill_table (gtable, .65); gp_gamma_correct_single(gtable,ptr,w*h); } else
static void init(void) { IRQ_ENABLE; kdbg_init(); timer_init(); /* Initialize serial port, we are going to use it to show APRS messages*/ ser_init(&g_serial, SER_UART0); ser_setbaudrate(&g_serial, SER_DEFAULT_BAUD_RATE); // For some reason BertOS sets the serial // to 7 bit characters by default. We set // it to 8 instead. UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); // see ATMEGA328P datasheet P197, Table 20-11. UCSZn Bits Settings // initialize the reader that wraps the serial serialreader_init(&g_serialreader, &g_serial); // Load settings first settings_load(); /* * Init afsk demodulator. We need to implement the macros defined in hw_afsk.h, which * is the hardware abstraction layer. * We do not need transmission for now, so we set transmission DAC channel to 0. */ afsk_init(&g_afsk, ADC_CH, DAC_CH); /* * Here we initialize AX25 context, the channel (KFile) we are going to read messages * from and the callback that will be called on incoming messages. */ ax25_init(&g_ax25, &g_afsk.fd, ax25_msg_callback); g_ax25.pass_through = false; // Initialize the kiss module // NOTE - use shared memory buffer #if MOD_KISS kiss_init(&g_serialreader,&g_ax25); #endif #if MOD_BEACON // Initialize the beacon module beacon_init(beacon_mode_exit_callback); #endif // Initialize the digi module #if MOD_DIGI digi_init(); #endif #if MOD_RADIO // Initialize the soft serial and radio radio_init(4310400); //TODO read from settings #endif // Initialize GPS NMEA/GPRMC parser #if MOD_TRACKER tracker_init(); #endif #if MOD_CONSOLE ////////////////////////////////////////////////////////////// // Initialize the console & commands console_init(); console_add_command(PSTR("MODE"),cmd_switch_mode); // setup tnc run mode #if MOD_KISS console_add_command(PSTR("KISS"),cmd_enter_kiss_mode); // enable KISS mode #endif #endif }