#!/usr/bin/env perl

use strict;
use warnings;

use v5.16;
use feature qw<switch>;

use Config;
use Cwd qw<getcwd abs_path>;
use File::stat;

# report if the card says a firmware update is needed.
my $modver = `modinfo blackmagic | grep '^version: '`; chomp $modver;
if ($modver ne "") {
	$modver =~ s/^version: +//;
}

my $report = '';
my $needs_update = 0;

if ($modver =~ m/^12\./) {
	$report = `DesktopVideoUpdateTool -l`;
	foreach my $line (split(/\n/,$report)) {
		# Available Devices:
		#  * DeckLink SDI (T230100)
		#       Firmware is out of date
		if ($line =~ m/Firmware is out of date/i) {
			$needs_update = 1;
		}
	}
}
elsif ($modver =~ m/^(9|10|11)\./) {
	$report = `BlackmagicFirmwareUpdater status`;
	foreach my $line (split(/\n/,$report)) {
		# ex: "0:	/dev/blackmagic/dv0 [DeckLink SDI]	0xff	PLEASE_UPDATE"
		if ($line =~ m/PLEASE_UPDATE/i) {
			$needs_update = 1;
		}
	}
}

if ($report ne "") {
	print "Decklink card status:\n";
	print "$report\n";
}

if ($needs_update) {
	print "NOTICE: One or more cards need a firmware update.\n";
	print "\n";
	exit 1; # needs update
}

exit 0; # no update

