Skip to content

Instantly share code, notes, and snippets.

@noplanman
Created January 17, 2016 12:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save noplanman/9035e4d11c000b842991 to your computer and use it in GitHub Desktop.
Save noplanman/9035e4d11c000b842991 to your computer and use it in GitHub Desktop.
GPS file updater for Sony cameras. Just copy this to the root of your SD card and run it.
#!/usr/bin/perl -w
#
# Script for downloading the most recent GPS Assist Data to a Sony DSC
# Camera with built-in GPS, such as the Sony DSC-HX5V. The script must
# be called with the mount point of a memory card for the camera as
# argument.
#
# See https://github.com/henrikbrixandersen/sony-gps-assist for more
# information.
#
# Copyright (c) 2010-2012 Henrik Brix Andersen <henrik@brixandersen.dk>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
use strict;
use Digest::MD5 qw/md5_hex/;
use File::Path 2.06_05 qw/make_path/;
use LWP::UserAgent;
use File::Basename;
# Settings
my $base_url = 'http://control.d-imaging.sony.co.jp/GPS/';
my $gps_file = 'assistme.dat';
my $gps_url = $base_url . $gps_file;
my $md5_file = 'assistme.md5';
my $md5_url = $base_url . $md5_file;
# Destination directory and file
my $dest_dir = dirname(__FILE__) . '/PRIVATE/SONY/GPS/';
my $dest_file = $dest_dir . $gps_file;
# Initialize browser
my $browser = LWP::UserAgent->new;
my ($response);
# Download main file
print "Downloading '$gps_url'\n";
$response = $browser->get($gps_url);
die "Could not download '$gps_url': ", $response->status_line unless ($response->is_success);
my $content = $response->content;
# Download MD5 file
print "Downloading '$md5_url'\n";
$response = $browser->get($md5_url);
die "Could not download '$md5_url': ", $response->status_line unless ($response->is_success);
my $md5sum = $response->content;
chomp $md5sum;
$md5sum =~ s/^(\w{32}).*/$1/;
# Validate MD5
print "Verifying MD5 checksum '$md5sum'\n";
die "MD5 check failed, checksum was '" . md5_hex($content) . "'" if (md5_hex($content) ne $md5sum);
# Create destination directory if needed
unless (-d "$dest_dir") {
print "Creating directory '$dest_dir'\n";
make_path("$dest_dir") || die "Could not create directory '$dest_dir', " . $!;
}
# Write file
print "Writing data to '$dest_file'\n";
open(FILE, ">$dest_file") || die "Could not open '$dest_file' for writing, " . $!;
binmode(FILE) || die "Could not set binary mode on '$dest_file', " . $!;
print FILE $content;
close(FILE);
print "Done\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment