Skip to content

Commit

Permalink
Introducing pslr_utils
Browse files Browse the repository at this point in the history
  • Loading branch information
blemasle authored and asalamon74 committed Apr 5, 2021
1 parent dab20aa commit 008737c
Show file tree
Hide file tree
Showing 10 changed files with 144 additions and 62 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ cli: $(CLI_TARGET)
gui: $(GUI_TARGET)

MANS = pktriggercord-cli.1 pktriggercord.1
SRCOBJNAMES = pslr pslr_enum pslr_scsi pslr_log pslr_lens pslr_model pktriggercord-servermode
SRCOBJNAMES = pslr pslr_enum pslr_scsi pslr_log pslr_lens pslr_model pktriggercord-servermode pslr_utils
OBJS = $(SRCOBJNAMES:=.o) $(JSONDIR)/js0n.o
WIN_DLLS_DIR=win_dlls
SOURCE_PACKAGE_FILES = Makefile Changelog COPYING INSTALL BUGS $(MANS) pentax_scsi_protocol.md pentax.rules samsung.rules $(SRCOBJNAMES:=.h) $(SRCOBJNAMES:=.c) pslr_scsi_linux.c pslr_scsi_win.c pslr_scsi_openbsd.c exiftool_pentax_lens.txt pktriggercord.c pktriggercord-cli.c pktriggercord.ui pentax_settings.json $(SPECFILE) android_scsi_sg.h rad10/ src/
Expand Down
1 change: 1 addition & 0 deletions android/jni/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ LOCAL_SRC_FILES := ../../src/external/js0n/js0n.c \
../../pslr_model.c \
../../pslr_scsi.c \
../../pslr.c \
../../pslr_utils.c \
../../pktriggercord-servermode.c \
../../pktriggercord-cli.c
DEFINES := -DANDROID -DVERSION=\"$(VERSION)\" -DPKTDATADIR=\".\"
Expand Down
4 changes: 1 addition & 3 deletions pktriggercord-cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,15 @@
#else
#include <unistd.h>
#include <getopt.h>
#include <sys/time.h>
#endif
#include <fcntl.h>
#include <ctype.h>
#include <time.h>
#include <stdarg.h>
#include <math.h>

#include "pslr.h"
#include "pktriggercord-servermode.h"
#include "pslr_log.h"
#include "pslr_utils.h"

#ifdef WIN32
#define FILE_ACCESS O_WRONLY | O_CREAT | O_TRUNC | O_BINARY
Expand Down
43 changes: 1 addition & 42 deletions pktriggercord-servermode.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,50 +46,9 @@
#include "pslr_log.h"
#include "pslr.h"
#include "pslr_lens.h"
#include "pslr_utils.h"
#include "pktriggercord-servermode.h"

double timeval_diff_sec(struct timeval *t2, struct timeval *t1) {
//DPRINT("tv2 %ld %ld t1 %ld %ld\n", t2->tv_sec, t2->tv_usec, t1->tv_sec, t1->tv_usec);
return (t2->tv_usec - t1->tv_usec) / 1000000.0 + (t2->tv_sec - t1->tv_sec);
}

pslr_rational_t parse_shutter_speed(char *shutter_speed_str) {
char C;
float F = 0;
pslr_rational_t shutter_speed = {0, 0};
if (sscanf(shutter_speed_str, "%d/%d%c", &shutter_speed.nom, &shutter_speed.denom, &C) == 2) {
// noop
} else if ((sscanf(shutter_speed_str, "%d%c", &shutter_speed.nom, &C)) == 1) {
shutter_speed.denom = 1;
} else if ((sscanf(shutter_speed_str, "%f%c", &F, &C)) == 1) {
F = F * 1000;
shutter_speed.denom = 1000;
shutter_speed.nom = F;
} else {
shutter_speed.nom = 0;
shutter_speed.denom = 0;
}
return shutter_speed;
}

pslr_rational_t parse_aperture(char *aperture_str) {
char C;
float F = 0;
pslr_rational_t aperture = {0, 0};
if (sscanf(aperture_str, "%f%c", &F, &C) != 1) {
F = 0;
}
/*It's unlikely that you want an f-number > 100, even for a pinhole.
On the other hand, the fastest lens I know of is a f:0.8 Zeiss*/
if (F > 100 || F < 0.8) {
F = 0;
}
aperture.nom = F * 10;
aperture.denom = 10;

return aperture;
}

void pslr_camera_close(pslr_handle_t camhandle) {
pslr_disconnect(camhandle);
pslr_shutdown(camhandle);
Expand Down
4 changes: 0 additions & 4 deletions pktriggercord-servermode.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,4 @@ pslr_handle_t pslr_camera_connect( char *model, char *device, int timeout, char

void pslr_camera_close(pslr_handle_t camhandle);

double timeval_diff_sec(struct timeval *t2, struct timeval *t1);
pslr_rational_t parse_shutter_speed(char *shutter_speed_str);
pslr_rational_t parse_aperture(char *aperture_str);

#endif
2 changes: 1 addition & 1 deletion pktriggercord.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <math.h>
#include <getopt.h>
#include <sys/time.h>

#include "pslr.h"
#include "pslr_lens.h"
#include "pslr_log.h"
#include "pktriggercord-servermode.h"
#include "pslr_utils.h"

#ifdef WIN32
#define FILE_ACCESS O_WRONLY | O_CREAT | O_TRUNC | O_BINARY
Expand Down
10 changes: 1 addition & 9 deletions pslr.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,19 @@
#include <stdbool.h>
#include <stdarg.h>
#include <dirent.h>
#include <math.h>

#include "pslr.h"
#include "pslr_log.h"
#include "pslr_scsi.h"
#include "pslr_lens.h"
#include "pslr_utils.h"

#define POLL_INTERVAL 50000 /* Number of us to wait when polling */
#define BLKSZ 65536 /* Block size for downloads; if too big, we get
* memory allocation error from sg driver */
#define BLOCK_RETRY 3 /* Number of retries, since we can occasionally
* get SCSI errors when downloading data */

void sleep_sec(double sec) {
int i;
for (i=0; i<floor(sec); ++i) {
usleep(999999); // 1000000 is not working for Windows
}
usleep(1000000*(sec-floor(sec)));
}

ipslr_handle_t pslr;

static int ipslr_set_mode(ipslr_handle_t *p, uint32_t mode);
Expand Down
2 changes: 0 additions & 2 deletions pslr.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ typedef struct {

typedef void (*pslr_progress_callback_t)(uint32_t current, uint32_t total);

void sleep_sec(double sec);

pslr_handle_t pslr_init(char *model, char *device);
int pslr_connect(pslr_handle_t h);
int pslr_disconnect(pslr_handle_t h);
Expand Down
90 changes: 90 additions & 0 deletions pslr_utils.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
pkTriggerCord
Remote control of Pentax DSLR cameras.
Copyright (C) 2011-2020 Andras Salamon <andras.salamon@melda.info>
based on:
pslr-shoot
Command line remote control of Pentax DSLR cameras.
Copyright (C) 2009 Ramiro Barreiro <ramiro_barreiro69@yahoo.es>
With fragments of code from PK-Remote by Pontus Lidman.
<https://sourceforge.net/projects/pkremote>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU General Public License
and GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifdef RAD10
#include <windows.h>
#include <utime.h>
#include "tdbtimes.h"
#else
#include <sys/time.h>
#include <unistd.h>
#endif

#include "pslr.h"
#include "pslr_utils.h"

double timeval_diff_sec(struct timeval *t2, struct timeval *t1) {
//DPRINT("tv2 %ld %ld t1 %ld %ld\n", t2->tv_sec, t2->tv_usec, t1->tv_sec, t1->tv_usec);
return (t2->tv_usec - t1->tv_usec) / 1000000.0 + (t2->tv_sec - t1->tv_sec);
}

void sleep_sec(double sec) {
int i;
for (i=0; i<floor(sec); ++i) {
usleep(999999); // 1000000 is not working for Windows
}
usleep(1000000*(sec-floor(sec)));
}

pslr_rational_t parse_aperture(char *aperture_str) {
char C;
float F = 0;
pslr_rational_t aperture = {0, 0};
if (sscanf(aperture_str, "%f%c", &F, &C) != 1) {
F = 0;
}
/*It's unlikely that you want an f-number > 100, even for a pinhole.
On the other hand, the fastest lens I know of is a f:0.8 Zeiss*/
if (F > 100 || F < 0.8) {
F = 0;
}
aperture.nom = F * 10;
aperture.denom = 10;

return aperture;
}

pslr_rational_t parse_shutter_speed(char *shutter_speed_str) {
char C;
float F = 0;
pslr_rational_t shutter_speed = {0, 0};
if (sscanf(shutter_speed_str, "%d/%d%c", &shutter_speed.nom, &shutter_speed.denom, &C) == 2) {
// noop
} else if ((sscanf(shutter_speed_str, "%d%c", &shutter_speed.nom, &C)) == 1) {
shutter_speed.denom = 1;
} else if ((sscanf(shutter_speed_str, "%f%c", &F, &C)) == 1) {
F = F * 1000;
shutter_speed.denom = 1000;
shutter_speed.nom = F;
} else {
shutter_speed.nom = 0;
shutter_speed.denom = 0;
}
return shutter_speed;
}
48 changes: 48 additions & 0 deletions pslr_utils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
pkTriggerCord
Copyright (C) 2011-2020 Andras Salamon <andras.salamon@melda.info>
Remote control of Pentax DSLR cameras.
based on:
PK-Remote
Remote control of Pentax DSLR cameras.
Copyright (C) 2008 Pontus Lidman <pontus@lysator.liu.se>
PK-Remote for Windows
Copyright (C) 2010 Tomasz Kos
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU General Public License
and GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef PKTRIGGERCORD_COMMON_H
#define PKTRIGGERCORD_COMMON_H

#ifdef RAD10
#include <utime.h>
#else
#include <sys/time.h>
#endif
#include <time.h>
#include <math.h>

#include "pslr_model.h"

double timeval_diff_sec(struct timeval *t2, struct timeval *t1);
void sleep_sec(double sec);
pslr_rational_t parse_shutter_speed(char *shutter_speed_str);
pslr_rational_t parse_aperture(char *aperture_str);

#endif

0 comments on commit 008737c

Please sign in to comment.