The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#########################################################################################
# Package       HiPi::Apps::Control::Data::Utils
# Description:  
# Created       Thu Feb 28 09:19:58 2013
# SVN Id        $Id: Utils.pm 1076 2013-03-13 08:55:10Z Mark Dootson $
# Copyright:    Copyright (c) 2013 Mark Dootson
# Licence:      This work is free software; you can redistribute it and/or modify it 
#               under the terms of the GNU General Public License as published by the 
#               Free Software Foundation; either version 3 of the License, or any later 
#               version.
#########################################################################################

package HiPi::Apps::Control::Data::Utils;

#########################################################################################
use 5.14.0;
use strict;
use warnings;
use Wx qw( wxTheApp );
use HiPi::Apps::Control::Constant qw( :padpin );
use HiPi::Constant qw( :raspberry );

our $VERSION = '0.22';

sub get_pin_data {
    my ($rpipin, $gpiopin) = @_;
    my $gpio = wxTheApp->devmem;
    my $data;
    given( $gpiopin ) {
        when( [ DNC_PIN_3V3 ] ) {
            $data = {
                    label    => '3V3',
                    function => '3V3',
                    padnum   => $rpipin,
                    gpionum  => DNC_PIN_3V3,
                    value    => -1,
                    interrupts => RPI_INT_NONE,
                    colouter => [ 192, 0, 0 ],
                    colinner => [ 255, 255,255 ],
                    fsel     => -1,
                    powerpin => 1,
            };
        }
        when( [ DNC_PIN_5V0 ] ) {
            $data = {
                    label    => '5V0',
                    function => '5V0',
                    padnum   => $rpipin,
                    gpionum  => DNC_PIN_5V0,
                    value    => -1,
                    interrupts => RPI_INT_NONE,
                    colouter => [ 255, 0, 0 ],
                    colinner => [ 255, 255,255 ],
                    fsel     => -2,
                    powerpin => 1,
            };
        }
        when( [ DNC_PIN_GND ] ) {
            $data = {
                    label    => 'GND',
                    function => 'GND',
                    padnum   => $rpipin,
                    gpionum  => DNC_PIN_GND,
                    value    => -1,
                    interrupts => RPI_INT_NONE,
                    colouter => [ 80, 80, 80 ],
                    colinner => [ 255, 255,255 ],
                    fsel     => -3,
                    powerpin => 1,
                };
        }
        default {
            my $function  = $gpio->gpio_fget_name($gpiopin);
            my $fsel = $gpio->gpio_fget($gpiopin);
            my $value     = -1;
            my $interrupts = RPI_INT_NONE;
            my $label = $function;
            my $colouter = [ 127, 127, 127 ];
            my $colinner = [ 255, 255, 255 ];
            if( $function =~ /^(INPUT|OUTPUT)$/ ) {
                $value = $gpio->gpio_lev($gpiopin);
                $label = 'GPIO ' . $gpiopin;
                # for output
                $colouter = [ 127, 255, 127 ];
                $colinner = ( $value ) ? [ 255, 0, 0 ] : [ 255, 255, 255 ] ;
            }
            if( $function eq 'INPUT' ) {
                $interrupts = $gpio->gpio_get_eds($gpiopin);
                $colouter = [ 127, 127, 255 ];
            } elsif( $function =~ /^SPI\d/) {
                $colouter = [ 255, 0, 255 ];
                $colinner = [ 255, 255,255 ];
            } elsif( $function =~ /^I2C\d/) {
                $colouter = [ 100, 200, 255 ];
                $colinner = [ 255, 255,255 ];
            } elsif( $function =~ /^UART\d/) {
                $colouter = [ 255, 255, 0 ];
                $colinner = [ 255, 255,255 ];
            }
            $data = {
                    label    => $label,
                    function => $function,
                    fsel     => $fsel,
                    padnum   => $rpipin,
                    gpionum  => $gpiopin,
                    value    => $value,
                    interrupts => $interrupts,
                    colinner => $colinner,
                    colouter => $colouter,
                    powerpin => 0,
            };
        }
    }
    return $data;
}



1;