diff --git a/stash/constant_div_generator.c b/stash/constant_div_generator.c deleted file mode 100644 index 1b3f545b..00000000 --- a/stash/constant_div_generator.c +++ /dev/null @@ -1,213 +0,0 @@ -/* Optimal divide-by-contstant code generator - * Advanced RISC Machines - * */ - - -#include -#include - -#define BANNER "generated by divc 1.02 (Advanced RISC Machines)" -#define DATE "27 Jan 94" - -#define DIVIDE_BY_2_MINUS_1 0 -#define DIVIDE_BY_2_PLUS_1 1 - - -typedef unsigned int uint; - - -uint log2uni( uint n ) -{ - uint bit, pow, logn; - - for( bit = 0, pow = 1; bit < 31; bit++, pow <<= 1 ) - { - if( n == pow ) logn = bit; - } - - return( logn ); -} - - -int powerof2( int n ) -{ - return( n == ( n & (-n) ) ); -} - - -void dodiv2m1( uint logd, uint logmsb ) -{ - /* Output instructions to do division by 2^n - 1 */ - printf( "\tMOV a1, a1, lsr #1\n" ); - - while( logd < 32 ) - { - printf( "\tADD a1, a1, a1, lsr #%d\n", logd ); - logd <<= 1; - } - printf( "\tMOV a1, a1, lsr #%d\n", logmsb - 1 ); -} - - -void dodiv2p1( uint logd, uint logmsb ) -{ - /* Output instructions to do division by 2^n + 1 */ - printf( "\tSUB a1, a1, a1, lsr #%d\n", logd ); - - while( logd < 16 ) - { - logd <<= 1; - printf( "\tADD a1, a1, a1, lsr #%d\n", logd ); - } - - printf( "\tMOV a1, a1, lsr #%d\n", logmsb ); -} - - -void loada4( uint type, uint lsb, uint msb ) -{ - /* Constant is too big to be used as an immediate constant, */ - /* so load it into register a4. */ - printf( "\tMOV a4, #0x%x\n", msb ); - - switch( type ) - { - case DIVIDE_BY_2_MINUS_1: - printf( "\tSUB a4, a4, #0x%x\n", lsb ); - break; - - case DIVIDE_BY_2_PLUS_1: - printf( "\tADD a4, a4, #0x%x\n", lsb ); - break; - - default: - fputs( "Internal error", stderr ); - } -} - - -void divideby2( uint type, uint n, uint lsb, uint msb ) -{ - uint loglsb; - uint logmsb; - uint usinga4; - - loglsb = log2uni( lsb ); - logmsb = log2uni( msb ); - - printf( "; %s [%s]\n\n", BANNER, DATE ); - printf( "\tAREA |div%d$code|, CODE, READONLY\n\n", n ); - printf( "\tEXPORT udiv%d\n\n", n ); - printf( "udiv%d\n", n ); - printf( "; takes argument in a1\n" ); - printf( "; returns quotient in a1, remainder in a2\n" ); - printf( "; cycles could be saved if only divide or remainder is required\n" ); - - usinga4 = ( n >> loglsb ) > 255; - if( usinga4 ) - { - loada4( type, lsb, msb ); - printf( "\tSUB a2, a1, a4\n" ); - } - else - { - printf( "\tSUB a2, a1, #%d\n", n ); - } - - /* 1/n as a binary number consists of a simple repeating pattern */ - /* The multiply by 1/n is expanded as a sequence of ARM instructions */ - /* (there is a rounding error which must be corrected later) */ - switch( type ) - { - case DIVIDE_BY_2_MINUS_1: - dodiv2m1( logmsb - loglsb, logmsb ); - /* Now do multiply-by-n */ - printf( "\tRSB a3, a1, a1, asl #%d\n", logmsb - loglsb ); - break; - - case DIVIDE_BY_2_PLUS_1: - dodiv2p1( logmsb - loglsb, logmsb ); - /* Now do multiply-by-n */ - printf( "\tADD a3, a1, a1, asl #%d\n", logmsb - loglsb ); - break; - - default: - fputs( "Internal error", stderr ); - } - - /* Subtract from adjusted original to obtain remainder */ - printf( "\tSUBS a2, a2, a3, asl #%d\n", loglsb ); - - /* Apply corrections */ - printf( "\tADDPL a1, a1, #1\n" ); - if( usinga4 ) - { - printf( "\tADDMI a2, a2, a4\n" ); - } - else - { - printf( "\tADDMI a2, a2, #%d\n", n ); - } - - /* Additional test required for divide-by-3, as result could be */ - /* off by 2 lsb due to accumulated rounding errors. */ - if( n == 3 ) - { - printf( "\tCMP a2, #3\n" ); - printf( "\tADDGE a1, a1, #1\n" ); - printf( "\tSUBGE a2, a2, #3\n" ); - } - - printf( "\tMOV pc, lr\n\n" ); - printf( "\tEND\n" ); -} - - -int main( int argc, char *argv[] ) -{ - if( argc != 2 ) - { - printf( "Usage: divc \n" ); - printf( "Generates optimal ARM code for divide-by-constant\n" ); - printf( "where is one of (2^n-2^m) or (2^n+2^m) eg. 10\n" ); - printf( "Advanced RISC Machines [%s]\n", DATE ); - } - else - { - int num; - - num = atoi( argv[ 1 ] ); - if( num <= 1 ) - { - fprintf( stderr, "%d is not sensible\n", num ); - } - else - { - uint lsb = 1; - - /* find least-significant bit */ - while( ( num & lsb ) == 0 ) - { - lsb <<= 1; - } - - if( powerof2( num ) ) - { - fprintf( stderr, "%d is an easy case\n", num ); - } - else if( powerof2( num + lsb ) ) - { - divideby2( DIVIDE_BY_2_MINUS_1, num, lsb, num + lsb ); - } - else if( powerof2( num - lsb ) ) - { - divideby2( DIVIDE_BY_2_PLUS_1, num, lsb, num - lsb ); - } - else - { - fprintf( stderr, "%d is not one of (2^n-2^m) or (2^n+2^m)\n", num ); - } - } - } - return( 0 ); -} diff --git a/stash/gpio.s b/stash/gpio.s deleted file mode 100644 index c6c94b0d..00000000 --- a/stash/gpio.s +++ /dev/null @@ -1,4159 +0,0 @@ -@ this is the gpio library as assmebler. Just as an idea of all the things needed. The c is at the end. - .arch armv6 - .eabi_attribute 27, 3 - .eabi_attribute 28, 1 - .fpu vfp - .eabi_attribute 20, 1 - .eabi_attribute 21, 1 - .eabi_attribute 23, 3 - .eabi_attribute 24, 1 - .eabi_attribute 25, 1 - .eabi_attribute 26, 2 - .eabi_attribute 30, 6 - .eabi_attribute 18, 4 - .file "gpio.c" - .text -.Ltext0: - .cfi_sections .debug_frame - .local gGpioMap - .comm gGpioMap,4,4 - .local pcbRev - .comm pcbRev,4,4 - .section .rodata - .align 2 -.LC2: - .ascii "/dev/mem\000" - .align 2 -.LC3: - .ascii "gpio.c\000" - .align 2 -.LC4: - .ascii "open() failed. /dev/mem. errno %s.\000" - .align 2 -.LC5: - .ascii "mmap() failed. errno: %s.\000" - .align 2 -.LC6: - .ascii "close() failed. errno: %s.\000" - .align 2 -.LC7: - .ascii "/proc/cpuinfo\000" - .align 2 -.LC8: - .ascii "r\000" - .align 2 -.LC9: - .ascii "Revision\000" - .align 2 -.LC10: - .ascii "did not find revision in cpuinfo.\000" - .align 2 -.LC11: - .ascii "can't open /proc/cpuinfo. errno: %s.\000" - .text - .align 2 - .global gpioSetup - .type gpioSetup, %function -gpioSetup: -.LFB0: - .file 1 "gpio.c" - .loc 1 45 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 32 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {r4, fp, lr} -.LCFI0: - .cfi_def_cfa_offset 12 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - .cfi_offset 4, -12 - add fp, sp, #8 -.LCFI1: - .cfi_def_cfa 11, 4 - sub sp, sp, #44 - .loc 1 46 0 - mov r3, #0 - str r3, [fp, #-20] - .loc 1 47 0 - mov r3, #1 - str r3, [fp, #-16] - .loc 1 49 0 - ldr r0, .L13 - mov r1, #2 - bl open - str r0, [fp, #-20] - ldr r3, [fp, #-20] - cmp r3, #0 - bge .L2 - .loc 1 51 0 - ldr r3, .L13+4 - ldr r4, [r3, #0] - bl __errno_location - mov r3, r0 - ldr r3, [r3, #0] - mov r0, r3 - bl strerror - mov r3, r0 - str r3, [sp, #0] - mov r0, r4 - ldr r1, .L13+8 - mov r2, #51 - ldr r3, .L13+12 - bl dbgPrint - .loc 1 52 0 - mov r3, #5 - str r3, [fp, #-16] - b .L3 -.L2: - .loc 1 55 0 - ldr r3, [fp, #-20] - str r3, [sp, #0] - ldr r3, .L13+16 - str r3, [sp, #4] - mov r0, #0 - mov r1, #156 - mov r2, #3 - mov r3, #1 - bl mmap - mov r2, r0 - ldr r3, .L13+20 - str r2, [r3, #0] - ldr r3, .L13+20 - ldr r3, [r3, #0] - cmn r3, #1 - bne .L4 - .loc 1 62 0 - ldr r3, .L13+4 - ldr r4, [r3, #0] - bl __errno_location - mov r3, r0 - ldr r3, [r3, #0] - mov r0, r3 - bl strerror - mov r3, r0 - str r3, [sp, #0] - mov r0, r4 - ldr r1, .L13+8 - mov r2, #62 - ldr r3, .L13+24 - bl dbgPrint - .loc 1 63 0 - mov r3, #5 - str r3, [fp, #-16] - b .L3 -.L4: - .loc 1 67 0 - ldr r0, [fp, #-20] - bl close - mov r3, r0 - cmp r3, #0 - beq .L5 - .loc 1 69 0 - ldr r3, .L13+4 - ldr r4, [r3, #0] - bl __errno_location - mov r3, r0 - ldr r3, [r3, #0] - mov r0, r3 - bl strerror - mov r3, r0 - str r3, [sp, #0] - mov r0, r4 - ldr r1, .L13+8 - mov r2, #69 - ldr r3, .L13+28 - bl dbgPrint - .loc 1 70 0 - mov r3, #5 - str r3, [fp, #-16] - b .L3 -.L5: -.LBB2: - .loc 1 75 0 - ldr r2, .L13+32 - ldr r3, .L13+36 - mov r0, r2 - mov r1, r3 - bl fopen - str r0, [fp, #-24] - .loc 1 76 0 - ldr r3, [fp, #-24] - cmp r3, #0 - beq .L6 -.LBB3: - .loc 1 78 0 - mov r3, #0 - str r3, [fp, #-40] - .loc 1 82 0 - b .L7 -.L9: - .loc 1 84 0 - ldr r3, [fp, #-40] - mov r0, r3 - ldr r1, .L13+40 - bl strstr - mov r2, r0 - ldr r3, [fp, #-40] - cmp r2, r3 - bne .L7 -.LBB4: - .loc 1 86 0 - ldr r3, [fp, #-40] - mov r0, r3 - mov r1, #58 - bl strchr - str r0, [fp, #-32] - .loc 1 87 0 - ldr r3, [fp, #-32] - cmp r3, #0 - beq .L7 -.LBB5: - .loc 1 89 0 - ldr r3, [fp, #-32] - add r3, r3, #1 - mov r0, r3 - mov r1, #0 - mov r2, #16 - bl strtol - str r0, [fp, #-36] - .loc 1 91 0 - ldr r3, [fp, #-36] - cmp r3, #3 - bgt .L8 - .loc 1 93 0 - ldr r3, .L13+44 - mov r2, #1 - str r2, [r3, #0] - b .L7 -.L8: - .loc 1 98 0 - ldr r3, .L13+44 - mov r2, #2 - str r2, [r3, #0] -.L7: -.LBE5: -.LBE4: - .loc 1 82 0 discriminator 1 - sub r2, fp, #40 - sub r3, fp, #44 - mov r0, r2 - mov r1, r3 - ldr r2, [fp, #-24] - bl getline - str r0, [fp, #-28] - ldr r3, [fp, #-28] - cmp r3, #0 - bge .L9 - .loc 1 103 0 - ldr r3, .L13+44 - ldr r3, [r3, #0] - cmp r3, #0 - beq .L10 - .loc 1 105 0 - mov r3, #0 - str r3, [fp, #-16] - b .L11 -.L10: - .loc 1 109 0 - ldr r3, .L13+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L13+8 - mov r2, #109 - ldr r3, .L13+48 - bl dbgPrint - .loc 1 110 0 - mov r3, #5 - str r3, [fp, #-16] -.L11: - .loc 1 113 0 - ldr r3, [fp, #-40] - cmp r3, #0 - beq .L12 - .loc 1 115 0 - ldr r3, [fp, #-40] - mov r0, r3 - bl free -.L12: - .loc 1 117 0 - ldr r0, [fp, #-24] - bl fclose - b .L3 -.L6: -.LBE3: - .loc 1 121 0 - ldr r3, .L13+4 - ldr r4, [r3, #0] - bl __errno_location - mov r3, r0 - ldr r3, [r3, #0] - mov r0, r3 - bl strerror - mov r3, r0 - str r3, [sp, #0] - mov r0, r4 - ldr r1, .L13+8 - mov r2, #121 - ldr r3, .L13+52 - bl dbgPrint - .loc 1 122 0 - mov r3, #5 - str r3, [fp, #-16] -.L3: -.LBE2: - .loc 1 126 0 - ldr r3, [fp, #-16] - .loc 1 127 0 - mov r0, r3 - sub sp, fp, #8 - ldmfd sp!, {r4, fp, pc} -.L14: - .align 2 -.L13: - .word .LC2 - .word stderr - .word .LC3 - .word .LC4 - .word 538968064 - .word gGpioMap - .word .LC5 - .word .LC6 - .word .LC7 - .word .LC8 - .word .LC9 - .word pcbRev - .word .LC10 - .word .LC11 - .cfi_endproc -.LFE0: - .size gpioSetup, .-gpioSetup - .section .rodata - .align 2 -.LC12: - .ascii "gGpioMap was NULL. Ensure gpioSetup() was called su" - .ascii "ccessfully.\000" - .align 2 -.LC13: - .ascii "mummap() failed. errno %s.\000" - .text - .align 2 - .global gpioCleanup - .type gpioCleanup, %function -gpioCleanup: -.LFB1: - .loc 1 135 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 8 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {r4, fp, lr} -.LCFI2: - .cfi_def_cfa_offset 12 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - .cfi_offset 4, -12 - add fp, sp, #8 -.LCFI3: - .cfi_def_cfa 11, 4 - sub sp, sp, #20 - .loc 1 136 0 - mov r3, #1 - str r3, [fp, #-16] - .loc 1 138 0 - ldr r3, .L19 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L16 - .loc 1 140 0 - ldr r3, .L19+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L19+8 - mov r2, #140 - ldr r3, .L19+12 - bl dbgPrint - .loc 1 141 0 - mov r3, #4 - str r3, [fp, #-16] - b .L17 -.L16: - .loc 1 144 0 - ldr r3, .L19 - ldr r3, [r3, #0] - mov r0, r3 - mov r1, #156 - bl munmap - mov r3, r0 - cmp r3, #0 - beq .L18 - .loc 1 146 0 - ldr r3, .L19+4 - ldr r4, [r3, #0] - bl __errno_location - mov r3, r0 - ldr r3, [r3, #0] - mov r0, r3 - bl strerror - mov r3, r0 - str r3, [sp, #0] - mov r0, r4 - ldr r1, .L19+8 - mov r2, #146 - ldr r3, .L19+16 - bl dbgPrint - .loc 1 147 0 - mov r3, #5 - str r3, [fp, #-16] - b .L17 -.L18: - .loc 1 152 0 - ldr r3, .L19 - mov r2, #0 - str r2, [r3, #0] - .loc 1 153 0 - mov r3, #0 - str r3, [fp, #-16] -.L17: - .loc 1 155 0 - ldr r3, [fp, #-16] - .loc 1 156 0 - mov r0, r3 - sub sp, fp, #8 - ldmfd sp!, {r4, fp, pc} -.L20: - .align 2 -.L19: - .word gGpioMap - .word stderr - .word .LC3 - .word .LC12 - .word .LC13 - .cfi_endproc -.LFE1: - .size gpioCleanup, .-gpioCleanup - .section .rodata - .align 2 -.LC14: - .ascii "gGpioMap was NULL. Ensure gpioSetup() called succes" - .ascii "sfully.\000" - .align 2 -.LC15: - .ascii "eFunction was out of range. %d\000" - .align 2 -.LC16: - .ascii "gpioValidatePin() failed. Ensure pin %d is valid.\000" - .text - .align 2 - .global gpioSetFunction - .type gpioSetFunction, %function -gpioSetFunction: -.LFB2: - .loc 1 165 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 16 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} -.LCFI4: - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - add fp, sp, #4 -.LCFI5: - .cfi_def_cfa 11, 4 - sub sp, sp, #24 - str r0, [fp, #-16] - str r1, [fp, #-20] - .loc 1 166 0 - mov r3, #1 - str r3, [fp, #-8] - .loc 1 168 0 - ldr r3, .L26 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L22 - .loc 1 170 0 - ldr r3, .L26+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L26+8 - mov r2, #170 - ldr r3, .L26+12 - bl dbgPrint - .loc 1 171 0 - mov r3, #4 - str r3, [fp, #-8] - b .L23 -.L22: - .loc 1 174 0 - ldr r3, [fp, #-20] - cmp r3, #7 - bls .L24 - .loc 1 176 0 - ldr r3, .L26+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-20] - str r2, [sp, #0] - mov r0, r3 - ldr r1, .L26+8 - mov r2, #176 - ldr r3, .L26+16 - bl dbgPrint - .loc 1 177 0 - mov r3, #3 - str r3, [fp, #-8] - b .L23 -.L24: - .loc 1 180 0 - ldr r0, [fp, #-16] - bl gpioValidatePin - str r0, [fp, #-8] - ldr r3, [fp, #-8] - cmp r3, #0 - beq .L25 - .loc 1 182 0 - ldr r3, .L26+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-16] - str r2, [sp, #0] - mov r0, r3 - ldr r1, .L26+8 - mov r2, #182 - ldr r3, .L26+20 - bl dbgPrint - b .L23 -.L25: - .loc 1 189 0 - ldr r3, .L26 - ldr r1, [r3, #0] - ldr r3, [fp, #-16] - ldr r2, .L26+24 - smull r0, r2, r2, r3 - mov r2, r2, asr #2 - mov r3, r3, asr #31 - rsb r3, r3, r2 - mov r2, r3 - mov r2, r2, asl #2 - add r0, r1, r2 - ldr r2, .L26 - ldr r2, [r2, #0] - mov r3, r3, asl #2 - add r3, r2, r3 - ldr ip, [r3, #0] - ldr r1, [fp, #-16] - ldr r3, .L26+24 - smull r2, r3, r3, r1 - mov r2, r3, asr #2 - mov r3, r1, asr #31 - rsb r2, r3, r2 - mov r3, r2 - mov r3, r3, asl #2 - add r3, r3, r2 - mov r3, r3, asl #1 - rsb r2, r3, r1 - mov r3, r2 - mov r3, r3, asl #1 - add r3, r3, r2 - mov r2, #7 - mov r3, r2, asl r3 - mvn r3, r3 - and r3, ip, r3 - str r3, [r0, #0] - .loc 1 192 0 - ldr r3, .L26 - ldr r1, [r3, #0] - ldr r3, [fp, #-16] - ldr r2, .L26+24 - smull r0, r2, r2, r3 - mov r2, r2, asr #2 - mov r3, r3, asr #31 - rsb r3, r3, r2 - mov r2, r3 - mov r2, r2, asl #2 - add r0, r1, r2 - ldr r2, .L26 - ldr r2, [r2, #0] - mov r3, r3, asl #2 - add r3, r2, r3 - ldr ip, [r3, #0] - ldr r1, [fp, #-16] - ldr r3, .L26+24 - smull r2, r3, r3, r1 - mov r2, r3, asr #2 - mov r3, r1, asr #31 - rsb r2, r3, r2 - mov r3, r2 - mov r3, r3, asl #2 - add r3, r3, r2 - mov r3, r3, asl #1 - rsb r2, r3, r1 - mov r3, r2 - mov r3, r3, asl #1 - add r3, r3, r2 - ldr r2, [fp, #-20] - mov r3, r2, asl r3 - orr r3, ip, r3 - str r3, [r0, #0] - .loc 1 194 0 - mov r3, #0 - str r3, [fp, #-8] -.L23: - .loc 1 197 0 - ldr r3, [fp, #-8] - .loc 1 198 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, pc} -.L27: - .align 2 -.L26: - .word gGpioMap - .word stderr - .word .LC3 - .word .LC14 - .word .LC15 - .word .LC16 - .word 1717986919 - .cfi_endproc -.LFE2: - .size gpioSetFunction, .-gpioSetFunction - .section .rodata - .align 2 -.LC17: - .ascii "state %d should have been %d or %d\000" - .text - .align 2 - .global gpioSetPin - .type gpioSetPin, %function -gpioSetPin: -.LFB3: - .loc 1 209 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 16 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} -.LCFI6: - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - add fp, sp, #4 -.LCFI7: - .cfi_def_cfa 11, 4 - sub sp, sp, #32 - str r0, [fp, #-16] - str r1, [fp, #-20] - .loc 1 210 0 - mov r3, #1 - str r3, [fp, #-8] - .loc 1 212 0 - ldr r3, .L34 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L29 - .loc 1 214 0 - ldr r3, .L34+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L34+8 - mov r2, #214 - ldr r3, .L34+12 - bl dbgPrint - .loc 1 215 0 - mov r3, #4 - str r3, [fp, #-8] - b .L30 -.L29: - .loc 1 218 0 - ldr r0, [fp, #-16] - bl gpioValidatePin - str r0, [fp, #-8] - ldr r3, [fp, #-8] - cmp r3, #0 - beq .L31 - .loc 1 220 0 - ldr r3, .L34+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-16] - str r2, [sp, #0] - mov r0, r3 - ldr r1, .L34+8 - mov r2, #220 - ldr r3, .L34+16 - bl dbgPrint - b .L30 -.L31: - .loc 1 223 0 - ldr r3, [fp, #-20] - cmp r3, #1 - bne .L32 - .loc 1 227 0 - ldr r3, .L34 - ldr r3, [r3, #0] - add r3, r3, #28 - mov r1, #1 - ldr r2, [fp, #-16] - mov r2, r1, asl r2 - str r2, [r3, #0] - .loc 1 228 0 - mov r3, #0 - str r3, [fp, #-8] - b .L30 -.L32: - .loc 1 231 0 - ldr r3, [fp, #-20] - cmp r3, #0 - bne .L33 - .loc 1 235 0 - ldr r3, .L34 - ldr r3, [r3, #0] - add r3, r3, #40 - mov r1, #1 - ldr r2, [fp, #-16] - mov r2, r1, asl r2 - str r2, [r3, #0] - .loc 1 236 0 - mov r3, #0 - str r3, [fp, #-8] - b .L30 -.L33: - .loc 1 241 0 - ldr r3, .L34+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-20] - str r2, [sp, #0] - mov r2, #0 - str r2, [sp, #4] - mov r2, #1 - str r2, [sp, #8] - mov r0, r3 - ldr r1, .L34+8 - mov r2, #241 - ldr r3, .L34+20 - bl dbgPrint - .loc 1 242 0 - mov r3, #3 - str r3, [fp, #-8] -.L30: - .loc 1 245 0 - ldr r3, [fp, #-8] - .loc 1 246 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, pc} -.L35: - .align 2 -.L34: - .word gGpioMap - .word stderr - .word .LC3 - .word .LC12 - .word .LC16 - .word .LC17 - .cfi_endproc -.LFE3: - .size gpioSetPin, .-gpioSetPin - .section .rodata - .align 2 -.LC18: - .ascii "Parameter state was NULL.\000" - .align 2 -.LC19: - .ascii "gpioValidatePin() failed. Pin %d isn't valid.\000" - .text - .align 2 - .global gpioReadPin - .type gpioReadPin, %function -gpioReadPin: -.LFB4: - .loc 1 256 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 16 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} -.LCFI8: - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - add fp, sp, #4 -.LCFI9: - .cfi_def_cfa 11, 4 - sub sp, sp, #24 - str r0, [fp, #-16] - str r1, [fp, #-20] - .loc 1 257 0 - mov r3, #1 - str r3, [fp, #-8] - .loc 1 259 0 - ldr r3, .L43 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L37 - .loc 1 261 0 - ldr r3, .L43+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L43+8 - ldr r2, .L43+12 - ldr r3, .L43+16 - bl dbgPrint - .loc 1 262 0 - mov r3, #4 - str r3, [fp, #-8] - b .L38 -.L37: - .loc 1 265 0 - ldr r3, [fp, #-20] - cmp r3, #0 - bne .L39 - .loc 1 267 0 - ldr r3, .L43+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L43+8 - ldr r2, .L43+20 - ldr r3, .L43+24 - bl dbgPrint - .loc 1 268 0 - mov r3, #4 - str r3, [fp, #-8] - b .L38 -.L39: - .loc 1 271 0 - ldr r0, [fp, #-16] - bl gpioValidatePin - str r0, [fp, #-8] - ldr r3, [fp, #-8] - cmp r3, #0 - beq .L40 - .loc 1 273 0 - ldr r3, .L43+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-16] - str r2, [sp, #0] - mov r0, r3 - ldr r1, .L43+8 - ldr r2, .L43+28 - ldr r3, .L43+32 - bl dbgPrint - b .L38 -.L40: - .loc 1 279 0 - ldr r3, .L43 - ldr r3, [r3, #0] - add r3, r3, #52 - ldr r2, [r3, #0] - mov r1, #1 - ldr r3, [fp, #-16] - mov r3, r1, asl r3 - and r3, r2, r3 - cmp r3, #0 - beq .L41 - .loc 1 281 0 - ldr r3, [fp, #-20] - mov r2, #1 - str r2, [r3, #0] - b .L42 -.L41: - .loc 1 286 0 - ldr r3, [fp, #-20] - mov r2, #0 - str r2, [r3, #0] -.L42: - .loc 1 289 0 - mov r3, #0 - str r3, [fp, #-8] -.L38: - .loc 1 292 0 - ldr r3, [fp, #-8] - .loc 1 293 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, pc} -.L44: - .align 2 -.L43: - .word gGpioMap - .word stderr - .word .LC3 - .word 261 - .word .LC12 - .word 267 - .word .LC18 - .word 273 - .word .LC19 - .cfi_endproc -.LFE4: - .size gpioReadPin, .-gpioReadPin - .section .rodata - .align 2 -.LC20: - .ascii "resistorOption value: %d was out of range.\000" - .text - .align 2 - .global gpioSetPullResistor - .type gpioSetPullResistor, %function -gpioSetPullResistor: -.LFB5: - .loc 1 303 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 24 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} -.LCFI10: - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - add fp, sp, #4 -.LCFI11: - .cfi_def_cfa 11, 4 - sub sp, sp, #32 - str r0, [fp, #-24] - str r1, [fp, #-28] - .loc 1 304 0 - mov r3, #1 - str r3, [fp, #-8] - .loc 1 307 0 - ldr r3, .L50 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L46 - .loc 1 309 0 - ldr r3, .L50+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L50+8 - ldr r2, .L50+12 - ldr r3, .L50+16 - bl dbgPrint - .loc 1 310 0 - mov r3, #4 - str r3, [fp, #-8] - b .L47 -.L46: - .loc 1 313 0 - ldr r0, [fp, #-24] - bl gpioValidatePin - str r0, [fp, #-8] - ldr r3, [fp, #-8] - cmp r3, #0 - beq .L48 - .loc 1 315 0 - ldr r3, .L50+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-24] - str r2, [sp, #0] - mov r0, r3 - ldr r1, .L50+8 - ldr r2, .L50+20 - ldr r3, .L50+24 - bl dbgPrint - b .L47 -.L48: - .loc 1 318 0 - ldr r3, [fp, #-28] - cmp r3, #2 - bls .L49 - .loc 1 320 0 - ldr r3, .L50+4 - ldr r3, [r3, #0] - ldr r2, [fp, #-28] - str r2, [sp, #0] - mov r0, r3 - ldr r1, .L50+8 - mov r2, #320 - ldr r3, .L50+28 - bl dbgPrint - .loc 1 321 0 - mov r3, #3 - str r3, [fp, #-8] - b .L47 -.L49: - .loc 1 326 0 - mov r3, #0 - str r3, [fp, #-16] - .loc 1 327 0 - mov r3, #1000 - str r3, [fp, #-12] - .loc 1 330 0 - ldr r3, .L50 - ldr r3, [r3, #0] - add r3, r3, #148 - ldr r2, [fp, #-28] - str r2, [r3, #0] - .loc 1 332 0 - sub r3, fp, #16 - mov r0, r3 - mov r1, #0 - bl nanosleep - .loc 1 334 0 - ldr r3, .L50 - ldr r3, [r3, #0] - add r3, r3, #152 - mov r1, #1 - ldr r2, [fp, #-24] - mov r2, r1, asl r2 - str r2, [r3, #0] - .loc 1 336 0 - sub r3, fp, #16 - mov r0, r3 - mov r1, #0 - bl nanosleep - .loc 1 337 0 - ldr r3, .L50 - ldr r3, [r3, #0] - add r3, r3, #148 - mov r2, #0 - str r2, [r3, #0] - .loc 1 338 0 - ldr r3, .L50 - ldr r3, [r3, #0] - add r3, r3, #152 - mov r2, #0 - str r2, [r3, #0] - .loc 1 340 0 - mov r3, #0 - str r3, [fp, #-8] -.L47: - .loc 1 344 0 - ldr r3, [fp, #-8] - .loc 1 345 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, pc} -.L51: - .align 2 -.L50: - .word gGpioMap - .word stderr - .word .LC3 - .word 309 - .word .LC12 - .word 315 - .word .LC19 - .word .LC20 - .cfi_endproc -.LFE5: - .size gpioSetPullResistor, .-gpioSetPullResistor - .section .rodata - .align 2 -.LC21: - .ascii "Parameter gpioNumberScl is NULL.\000" - .align 2 -.LC22: - .ascii "Parameter gpioNumberSda is NULL.\000" - .text - .align 2 - .global gpioGetI2cPins - .type gpioGetI2cPins, %function -gpioGetI2cPins: -.LFB6: - .loc 1 357 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 16 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} -.LCFI12: - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - add fp, sp, #4 -.LCFI13: - .cfi_def_cfa 11, 4 - sub sp, sp, #16 - str r0, [fp, #-16] - str r1, [fp, #-20] - .loc 1 358 0 - mov r3, #1 - str r3, [fp, #-8] - .loc 1 360 0 - ldr r3, .L58 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L53 - .loc 1 362 0 - ldr r3, .L58+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L58+8 - ldr r2, .L58+12 - ldr r3, .L58+16 - bl dbgPrint - .loc 1 363 0 - mov r3, #4 - str r3, [fp, #-8] - b .L54 -.L53: - .loc 1 366 0 - ldr r3, [fp, #-16] - cmp r3, #0 - bne .L55 - .loc 1 368 0 - ldr r3, .L58+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L58+8 - mov r2, #368 - ldr r3, .L58+20 - bl dbgPrint - .loc 1 369 0 - mov r3, #4 - str r3, [fp, #-8] - b .L54 -.L55: - .loc 1 372 0 - ldr r3, [fp, #-20] - cmp r3, #0 - bne .L56 - .loc 1 374 0 - ldr r3, .L58+4 - ldr r3, [r3, #0] - mov r0, r3 - ldr r1, .L58+8 - ldr r2, .L58+24 - ldr r3, .L58+28 - bl dbgPrint - .loc 1 375 0 - mov r3, #4 - str r3, [fp, #-8] - b .L54 -.L56: - .loc 1 378 0 - ldr r3, .L58+32 - ldr r3, [r3, #0] - cmp r3, #1 - bne .L57 - .loc 1 380 0 - ldr r3, [fp, #-16] - mov r2, #1 - str r2, [r3, #0] - .loc 1 381 0 - ldr r3, [fp, #-20] - mov r2, #0 - str r2, [r3, #0] - .loc 1 382 0 - mov r3, #0 - str r3, [fp, #-8] - b .L54 -.L57: - .loc 1 385 0 - ldr r3, .L58+32 - ldr r3, [r3, #0] - cmp r3, #2 - bne .L54 - .loc 1 387 0 - ldr r3, [fp, #-16] - mov r2, #3 - str r2, [r3, #0] - .loc 1 388 0 - ldr r3, [fp, #-20] - mov r2, #2 - str r2, [r3, #0] - .loc 1 389 0 - mov r3, #0 - str r3, [fp, #-8] -.L54: - .loc 1 392 0 - ldr r3, [fp, #-8] - .loc 1 393 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, pc} -.L59: - .align 2 -.L58: - .word gGpioMap - .word stderr - .word .LC3 - .word 362 - .word .LC12 - .word .LC21 - .word 374 - .word .LC22 - .word pcbRev - .cfi_endproc -.LFE6: - .size gpioGetI2cPins, .-gpioGetI2cPins - .section .rodata - .align 2 -.LC23: - .ascii "InvalidError\000" - .text - .align 2 - .global gpioErrToString - .type gpioErrToString, %function -gpioErrToString: -.LFB7: - .loc 1 406 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 8 - @ frame_needed = 1, uses_anonymous_args = 0 - @ link register save eliminated. - str fp, [sp, #-4]! -.LCFI14: - .cfi_def_cfa_offset 4 - .cfi_offset 11, -4 - add fp, sp, #0 -.LCFI15: - .cfi_def_cfa_register 11 - sub sp, sp, #12 - str r0, [fp, #-8] - .loc 1 409 0 - ldr r3, [fp, #-8] - cmp r3, #11 - bls .L61 - .loc 1 411 0 - ldr r3, .L63 - b .L62 -.L61: - .loc 1 416 0 - ldr r3, .L63+4 - ldr r2, [fp, #-8] - ldr r3, [r3, r2, asl #2] -.L62: - .loc 1 418 0 - mov r0, r3 - add sp, fp, #0 - ldmfd sp!, {fp} - bx lr -.L64: - .align 2 -.L63: - .word .LC23 - .word errorString.3344 - .cfi_endproc -.LFE7: - .size gpioErrToString, .-gpioErrToString - .section .rodata - .align 2 -.LC24: - .ascii "[%s:%d] \000" - .align 2 -.LC25: - .ascii "\012\000" - .text - .align 2 - .global dbgPrint - .type dbgPrint, %function -dbgPrint: -.LFB8: - .loc 1 440 0 - .cfi_startproc - @ args = 4, pretend = 4, frame = 32 - @ frame_needed = 1, uses_anonymous_args = 1 - str r3, [sp, #-4]! -.LCFI16: - .cfi_def_cfa_offset 4 - .cfi_offset 3, -4 - stmfd sp!, {fp, lr} -.LCFI17: - .cfi_def_cfa_offset 12 - .cfi_offset 14, -8 - .cfi_offset 11, -12 - add fp, sp, #4 -.LCFI18: - .cfi_def_cfa 11, 8 - sub sp, sp, #36 - str r0, [fp, #-28] - str r1, [fp, #-32] - str r2, [fp, #-36] - .loc 1 442 0 - mov r3, #0 - str r3, [fp, #-12] - .loc 1 443 0 - mov r3, #0 - str r3, [fp, #-16] - .loc 1 445 0 - ldr r3, [fp, #-28] - cmp r3, #0 - beq .L66 - .loc 1 447 0 - ldr r3, .L71 - ldr r0, [fp, #-28] - mov r1, r3 - ldr r2, [fp, #-32] - ldr r3, [fp, #-36] - bl fprintf - str r0, [fp, #-16] - ldr r3, [fp, #-16] - cmp r3, #0 - bge .L67 - .loc 1 449 0 - ldr r3, [fp, #-16] - b .L68 -.L67: - .loc 1 451 0 - ldr r2, [fp, #-12] - ldr r3, [fp, #-16] - add r3, r2, r3 - str r3, [fp, #-12] - .loc 1 453 0 - add r3, fp, #8 - str r3, [fp, #-20] - .loc 1 454 0 - ldr r0, [fp, #-28] - ldr r1, [fp, #4] - ldr r2, [fp, #-20] - bl vfprintf - str r0, [fp, #-16] - ldr r3, [fp, #-16] - cmp r3, #0 - bge .L69 - .loc 1 456 0 - ldr r3, [fp, #-16] - b .L68 -.L69: - .loc 1 458 0 - ldr r2, [fp, #-12] - ldr r3, [fp, #-16] - add r3, r2, r3 - str r3, [fp, #-12] - .loc 1 461 0 - ldr r3, .L71+4 - ldr r0, [fp, #-28] - mov r1, r3 - bl fprintf - str r0, [fp, #-16] - ldr r3, [fp, #-16] - cmp r3, #0 - bge .L70 - .loc 1 463 0 - ldr r3, [fp, #-16] - b .L68 -.L70: - .loc 1 465 0 - ldr r2, [fp, #-12] - ldr r3, [fp, #-16] - add r3, r2, r3 - str r3, [fp, #-12] -.L66: - .loc 1 468 0 - ldr r3, [fp, #-12] -.L68: - .loc 1 469 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, lr} - add sp, sp, #4 - bx lr -.L72: - .align 2 -.L71: - .word .LC24 - .word .LC25 - .cfi_endproc -.LFE8: - .size dbgPrint, .-dbgPrint - .section .rodata - .align 2 -.LC0: - .word 0 - .word 1 - .word 4 - .word 7 - .word 8 - .word 9 - .word 10 - .word 11 - .word 14 - .word 15 - .word 17 - .word 18 - .word 21 - .word 22 - .word 23 - .word 24 - .word 25 - .align 2 -.LC1: - .word 2 - .word 3 - .word 4 - .word 7 - .word 8 - .word 9 - .word 10 - .word 11 - .word 14 - .word 15 - .word 17 - .word 18 - .word 22 - .word 23 - .word 24 - .word 25 - .word 27 - .text - .align 2 - .type gpioValidatePin, %function -gpioValidatePin: -.LFB9: - .loc 1 481 0 - .cfi_startproc - @ args = 0, pretend = 0, frame = 88 - @ frame_needed = 1, uses_anonymous_args = 0 - stmfd sp!, {fp, lr} -.LCFI19: - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 11, -8 - add fp, sp, #4 -.LCFI20: - .cfi_def_cfa 11, 4 - sub sp, sp, #88 - str r0, [fp, #-88] - .loc 1 482 0 - mov r3, #2 - str r3, [fp, #-8] - .loc 1 483 0 - mov r3, #0 - str r3, [fp, #-12] - .loc 1 490 0 - ldr r3, .L81 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L74 - .loc 1 492 0 - ldr r3, .L81+4 - ldr r3, [r3, #0] - cmp r3, #0 - bne .L75 - .loc 1 494 0 - mov r3, #3 - str r3, [fp, #-8] - b .L74 -.L75: - .loc 1 497 0 - ldr r3, .L81+4 - ldr r3, [r3, #0] - cmp r3, #1 - bne .L76 -.LBB6: - .loc 1 499 0 - ldr r3, .L81+8 - sub r1, fp, #80 - mov r2, r3 - mov r3, #68 - mov r0, r1 - mov r1, r2 - mov r2, r3 - bl memcpy - .loc 1 500 0 - ldr r2, .L81+12 - sub r3, fp, #80 - mov r1, r2 - mov r2, r3 - mov r3, #68 - mov r0, r1 - mov r1, r2 - mov r2, r3 - bl memcpy - .loc 1 501 0 - ldr r3, .L81 - mov r2, #17 - str r2, [r3, #0] - b .L74 -.L76: -.LBE6: - .loc 1 503 0 - ldr r3, .L81+4 - ldr r3, [r3, #0] - cmp r3, #2 - bne .L74 -.LBB7: - .loc 1 505 0 - ldr r3, .L81+16 - sub r1, fp, #80 - mov r2, r3 - mov r3, #68 - mov r0, r1 - mov r1, r2 - mov r2, r3 - bl memcpy - .loc 1 506 0 - ldr r2, .L81+12 - sub r3, fp, #80 - mov r1, r2 - mov r2, r3 - mov r3, #68 - mov r0, r1 - mov r1, r2 - mov r2, r3 - bl memcpy - .loc 1 507 0 - ldr r3, .L81 - mov r2, #17 - str r2, [r3, #0] -.L74: -.LBE7: - .loc 1 511 0 - mov r3, #0 - str r3, [fp, #-12] - b .L77 -.L80: - .loc 1 513 0 - ldr r2, [fp, #-88] - ldr r3, .L81+12 - ldr r1, [fp, #-12] - ldr r3, [r3, r1, asl #2] - cmp r2, r3 - bne .L78 - .loc 1 515 0 - mov r3, #0 - str r3, [fp, #-8] - .loc 1 516 0 - b .L79 -.L78: - .loc 1 511 0 - ldr r3, [fp, #-12] - add r3, r3, #1 - str r3, [fp, #-12] -.L77: - .loc 1 511 0 is_stmt 0 discriminator 1 - ldr r2, [fp, #-12] - ldr r3, .L81 - ldr r3, [r3, #0] - cmp r2, r3 - bcc .L80 -.L79: - .loc 1 520 0 is_stmt 1 - ldr r3, [fp, #-8] - .loc 1 521 0 - mov r0, r3 - sub sp, fp, #4 - ldmfd sp!, {fp, pc} -.L82: - .align 2 -.L81: - .word pinCnt.3360 - .word pcbRev - .word .LC0 - .word validPins.3359 - .word .LC1 - .cfi_endproc -.LFE9: - .size gpioValidatePin, .-gpioValidatePin - .local pinCnt.3360 - .comm pinCnt.3360,4,4 - .local validPins.3359 - .comm validPins.3359,68,4 - .section .rodata - .align 2 -.LC26: - .ascii "OK\000" - .align 2 -.LC27: - .ascii "ERROR_DEFAULT\000" - .align 2 -.LC28: - .ascii "ERROR_INVALID_PIN_NUMBER\000" - .align 2 -.LC29: - .ascii "ERROR_RANGE\000" - .align 2 -.LC30: - .ascii "ERROR_NULL\000" - .align 2 -.LC31: - .ascii "ERROR_EXTERNAL\000" - .align 2 -.LC32: - .ascii "ERROR_NOT_INITIALISED\000" - .align 2 -.LC33: - .ascii "ERROR_ALREADY_INITIALISED\000" - .align 2 -.LC34: - .ascii "ERROR_I2C_NACK\000" - .align 2 -.LC35: - .ascii "ERROR_I2C\000" - .align 2 -.LC36: - .ascii "ERROR_I2C_CLK_TIMEOUT\000" - .align 2 -.LC37: - .ascii "ERROR_INVALID_BSC\000" - .data - .align 2 - .type errorString.3344, %object - .size errorString.3344, 48 -errorString.3344: - .word .LC26 - .word .LC27 - .word .LC28 - .word .LC29 - .word .LC30 - .word .LC31 - .word .LC32 - .word .LC33 - .word .LC34 - .word .LC35 - .word .LC36 - .word .LC37 - .text -.Letext0: - .file 2 "/usr/lib/gcc/arm-linux-gnueabihf/4.6/include/stddef.h" - .file 3 "/usr/include/arm-linux-gnueabihf/bits/types.h" - .file 4 "/usr/include/stdio.h" - .file 5 "/usr/include/libio.h" - .file 6 "/usr/lib/gcc/arm-linux-gnueabihf/4.6/include/stdarg.h" - .file 7 "" - .file 8 "/usr/include/stdint.h" - .file 9 "../include/rpiGpio.h" - .file 10 "/usr/include/time.h" - .section .debug_info,"",%progbits -.Ldebug_info0: - .4byte 0x8d5 - .2byte 0x2 - .4byte .Ldebug_abbrev0 - .byte 0x4 - .uleb128 0x1 - .4byte .LASF128 - .byte 0x1 - .4byte .LASF129 - .4byte .LASF130 - .4byte .Ltext0 - .4byte .Letext0 - .4byte .Ldebug_line0 - .uleb128 0x2 - .4byte .LASF8 - .byte 0x2 - .byte 0xd4 - .4byte 0x30 - .uleb128 0x3 - .byte 0x4 - .byte 0x7 - .4byte .LASF0 - .uleb128 0x3 - .byte 0x1 - .byte 0x8 - .4byte .LASF1 - .uleb128 0x3 - .byte 0x2 - .byte 0x7 - .4byte .LASF2 - .uleb128 0x3 - .byte 0x4 - .byte 0x7 - .4byte .LASF3 - .uleb128 0x3 - .byte 0x1 - .byte 0x6 - .4byte .LASF4 - .uleb128 0x3 - .byte 0x2 - .byte 0x5 - .4byte .LASF5 - .uleb128 0x4 - .byte 0x4 - .byte 0x5 - .ascii "int\000" - .uleb128 0x3 - .byte 0x8 - .byte 0x5 - .4byte .LASF6 - .uleb128 0x3 - .byte 0x8 - .byte 0x7 - .4byte .LASF7 - .uleb128 0x2 - .4byte .LASF9 - .byte 0x3 - .byte 0x38 - .4byte 0x61 - .uleb128 0x2 - .4byte .LASF10 - .byte 0x3 - .byte 0x8d - .4byte 0x85 - .uleb128 0x3 - .byte 0x4 - .byte 0x5 - .4byte .LASF11 - .uleb128 0x2 - .4byte .LASF12 - .byte 0x3 - .byte 0x8e - .4byte 0x6f - .uleb128 0x2 - .4byte .LASF13 - .byte 0x3 - .byte 0x95 - .4byte 0x85 - .uleb128 0x5 - .byte 0x4 - .uleb128 0x2 - .4byte .LASF14 - .byte 0x3 - .byte 0xb4 - .4byte 0x5a - .uleb128 0x6 - .byte 0x4 - .4byte 0xb5 - .uleb128 0x3 - .byte 0x1 - .byte 0x8 - .4byte .LASF15 - .uleb128 0x2 - .4byte .LASF16 - .byte 0x4 - .byte 0x31 - .4byte 0xc7 - .uleb128 0x7 - .4byte .LASF47 - .byte 0x98 - .byte 0x5 - .2byte 0x10f - .4byte 0x288 - .uleb128 0x8 - .4byte .LASF17 - .byte 0x5 - .2byte 0x110 - .4byte 0x5a - .byte 0x2 - .byte 0x23 - .uleb128 0 - .uleb128 0x8 - .4byte .LASF18 - .byte 0x5 - .2byte 0x115 - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x8 - .4byte .LASF19 - .byte 0x5 - .2byte 0x116 - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0x8 - .4byte .LASF20 - .byte 0x5 - .2byte 0x117 - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0x8 - .4byte .LASF21 - .byte 0x5 - .2byte 0x118 - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0x8 - .4byte .LASF22 - .byte 0x5 - .2byte 0x119 - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0x8 - .4byte .LASF23 - .byte 0x5 - .2byte 0x11a - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0x8 - .4byte .LASF24 - .byte 0x5 - .2byte 0x11b - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0x8 - .4byte .LASF25 - .byte 0x5 - .2byte 0x11c - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0x8 - .4byte .LASF26 - .byte 0x5 - .2byte 0x11e - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .uleb128 0x8 - .4byte .LASF27 - .byte 0x5 - .2byte 0x11f - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .uleb128 0x8 - .4byte .LASF28 - .byte 0x5 - .2byte 0x120 - .4byte 0xaf - .byte 0x2 - .byte 0x23 - .uleb128 0x2c - .uleb128 0x8 - .4byte .LASF29 - .byte 0x5 - .2byte 0x122 - .4byte 0x2eb - .byte 0x2 - .byte 0x23 - .uleb128 0x30 - .uleb128 0x8 - .4byte .LASF30 - .byte 0x5 - .2byte 0x124 - .4byte 0x2f1 - .byte 0x2 - .byte 0x23 - .uleb128 0x34 - .uleb128 0x8 - .4byte .LASF31 - .byte 0x5 - .2byte 0x126 - .4byte 0x5a - .byte 0x2 - .byte 0x23 - .uleb128 0x38 - .uleb128 0x8 - .4byte .LASF32 - .byte 0x5 - .2byte 0x12a - .4byte 0x5a - .byte 0x2 - .byte 0x23 - .uleb128 0x3c - .uleb128 0x8 - .4byte .LASF33 - .byte 0x5 - .2byte 0x12c - .4byte 0x7a - .byte 0x2 - .byte 0x23 - .uleb128 0x40 - .uleb128 0x8 - .4byte .LASF34 - .byte 0x5 - .2byte 0x130 - .4byte 0x3e - .byte 0x2 - .byte 0x23 - .uleb128 0x44 - .uleb128 0x8 - .4byte .LASF35 - .byte 0x5 - .2byte 0x131 - .4byte 0x4c - .byte 0x2 - .byte 0x23 - .uleb128 0x46 - .uleb128 0x8 - .4byte .LASF36 - .byte 0x5 - .2byte 0x132 - .4byte 0x2f7 - .byte 0x2 - .byte 0x23 - .uleb128 0x47 - .uleb128 0x8 - .4byte .LASF37 - .byte 0x5 - .2byte 0x136 - .4byte 0x307 - .byte 0x2 - .byte 0x23 - .uleb128 0x48 - .uleb128 0x8 - .4byte .LASF38 - .byte 0x5 - .2byte 0x13f - .4byte 0x8c - .byte 0x2 - .byte 0x23 - .uleb128 0x50 - .uleb128 0x8 - .4byte .LASF39 - .byte 0x5 - .2byte 0x148 - .4byte 0xa2 - .byte 0x2 - .byte 0x23 - .uleb128 0x58 - .uleb128 0x8 - .4byte .LASF40 - .byte 0x5 - .2byte 0x149 - .4byte 0xa2 - .byte 0x2 - .byte 0x23 - .uleb128 0x5c - .uleb128 0x8 - .4byte .LASF41 - .byte 0x5 - .2byte 0x14a - .4byte 0xa2 - .byte 0x2 - .byte 0x23 - .uleb128 0x60 - .uleb128 0x8 - .4byte .LASF42 - .byte 0x5 - .2byte 0x14b - .4byte 0xa2 - .byte 0x2 - .byte 0x23 - .uleb128 0x64 - .uleb128 0x8 - .4byte .LASF43 - .byte 0x5 - .2byte 0x14c - .4byte 0x25 - .byte 0x2 - .byte 0x23 - .uleb128 0x68 - .uleb128 0x8 - .4byte .LASF44 - .byte 0x5 - .2byte 0x14e - .4byte 0x5a - .byte 0x2 - .byte 0x23 - .uleb128 0x6c - .uleb128 0x8 - .4byte .LASF45 - .byte 0x5 - .2byte 0x150 - .4byte 0x30d - .byte 0x2 - .byte 0x23 - .uleb128 0x70 - .byte 0 - .uleb128 0x2 - .4byte .LASF46 - .byte 0x6 - .byte 0x28 - .4byte 0x293 - .uleb128 0x9 - .4byte .LASF48 - .byte 0x4 - .byte 0x7 - .byte 0 - .4byte 0x2ad - .uleb128 0xa - .4byte .LASF131 - .4byte 0xa2 - .byte 0x2 - .byte 0x23 - .uleb128 0 - .byte 0x1 - .byte 0 - .uleb128 0xb - .4byte .LASF132 - .byte 0x5 - .byte 0xb4 - .uleb128 0x9 - .4byte .LASF49 - .byte 0xc - .byte 0x5 - .byte 0xba - .4byte 0x2eb - .uleb128 0xc - .4byte .LASF50 - .byte 0x5 - .byte 0xbb - .4byte 0x2eb - .byte 0x2 - .byte 0x23 - .uleb128 0 - .uleb128 0xc - .4byte .LASF51 - .byte 0x5 - .byte 0xbc - .4byte 0x2f1 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xc - .4byte .LASF52 - .byte 0x5 - .byte 0xc0 - .4byte 0x5a - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0 - .uleb128 0x6 - .byte 0x4 - .4byte 0x2b4 - .uleb128 0x6 - .byte 0x4 - .4byte 0xc7 - .uleb128 0xd - .4byte 0xb5 - .4byte 0x307 - .uleb128 0xe - .4byte 0x30 - .byte 0 - .byte 0 - .uleb128 0x6 - .byte 0x4 - .4byte 0x2ad - .uleb128 0xd - .4byte 0xb5 - .4byte 0x31d - .uleb128 0xe - .4byte 0x30 - .byte 0x27 - .byte 0 - .uleb128 0x6 - .byte 0x4 - .4byte 0x323 - .uleb128 0xf - .4byte 0xb5 - .uleb128 0x2 - .4byte .LASF53 - .byte 0x4 - .byte 0x50 - .4byte 0x288 - .uleb128 0x2 - .4byte .LASF54 - .byte 0x4 - .byte 0x67 - .4byte 0xa4 - .uleb128 0x2 - .4byte .LASF55 - .byte 0x8 - .byte 0x34 - .4byte 0x30 - .uleb128 0x10 - .byte 0x4 - .byte 0x9 - .byte 0x3f - .4byte 0x39f - .uleb128 0x11 - .ascii "OK\000" - .sleb128 0 - .uleb128 0x12 - .4byte .LASF56 - .sleb128 1 - .uleb128 0x12 - .4byte .LASF57 - .sleb128 2 - .uleb128 0x12 - .4byte .LASF58 - .sleb128 3 - .uleb128 0x12 - .4byte .LASF59 - .sleb128 4 - .uleb128 0x12 - .4byte .LASF60 - .sleb128 5 - .uleb128 0x12 - .4byte .LASF61 - .sleb128 6 - .uleb128 0x12 - .4byte .LASF62 - .sleb128 7 - .uleb128 0x12 - .4byte .LASF63 - .sleb128 8 - .uleb128 0x12 - .4byte .LASF64 - .sleb128 9 - .uleb128 0x12 - .4byte .LASF65 - .sleb128 10 - .uleb128 0x12 - .4byte .LASF66 - .sleb128 11 - .uleb128 0x12 - .4byte .LASF67 - .sleb128 12 - .byte 0 - .uleb128 0x2 - .4byte .LASF68 - .byte 0x9 - .byte 0x42 - .4byte 0x349 - .uleb128 0x10 - .byte 0x4 - .byte 0x9 - .byte 0x45 - .4byte 0x3bf - .uleb128 0x11 - .ascii "low\000" - .sleb128 0 - .uleb128 0x12 - .4byte .LASF69 - .sleb128 1 - .byte 0 - .uleb128 0x2 - .4byte .LASF70 - .byte 0x9 - .byte 0x48 - .4byte 0x3aa - .uleb128 0x10 - .byte 0x4 - .byte 0x9 - .byte 0x4b - .4byte 0x3e5 - .uleb128 0x12 - .4byte .LASF71 - .sleb128 0 - .uleb128 0x12 - .4byte .LASF72 - .sleb128 1 - .uleb128 0x12 - .4byte .LASF73 - .sleb128 2 - .byte 0 - .uleb128 0x2 - .4byte .LASF74 - .byte 0x9 - .byte 0x4f - .4byte 0x3ca - .uleb128 0x10 - .byte 0x4 - .byte 0x9 - .byte 0x55 - .4byte 0x435 - .uleb128 0x12 - .4byte .LASF75 - .sleb128 0 - .uleb128 0x12 - .4byte .LASF76 - .sleb128 1 - .uleb128 0x12 - .4byte .LASF77 - .sleb128 4 - .uleb128 0x12 - .4byte .LASF78 - .sleb128 5 - .uleb128 0x12 - .4byte .LASF79 - .sleb128 6 - .uleb128 0x12 - .4byte .LASF80 - .sleb128 7 - .uleb128 0x12 - .4byte .LASF81 - .sleb128 3 - .uleb128 0x12 - .4byte .LASF82 - .sleb128 2 - .uleb128 0x12 - .4byte .LASF83 - .sleb128 0 - .uleb128 0x12 - .4byte .LASF84 - .sleb128 7 - .byte 0 - .uleb128 0x2 - .4byte .LASF85 - .byte 0x9 - .byte 0x60 - .4byte 0x3f0 - .uleb128 0x10 - .byte 0x4 - .byte 0x9 - .byte 0x8f - .4byte 0x45b - .uleb128 0x12 - .4byte .LASF86 - .sleb128 0 - .uleb128 0x12 - .4byte .LASF87 - .sleb128 1 - .uleb128 0x12 - .4byte .LASF88 - .sleb128 2 - .byte 0 - .uleb128 0x2 - .4byte .LASF89 - .byte 0x9 - .byte 0x93 - .4byte 0x440 - .uleb128 0x6 - .byte 0x4 - .4byte 0x5a - .uleb128 0x9 - .4byte .LASF90 - .byte 0x8 - .byte 0xa - .byte 0x78 - .4byte 0x495 - .uleb128 0xc - .4byte .LASF91 - .byte 0xa - .byte 0x7a - .4byte 0x97 - .byte 0x2 - .byte 0x23 - .uleb128 0 - .uleb128 0xc - .4byte .LASF92 - .byte 0xa - .byte 0x7b - .4byte 0x85 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0 - .uleb128 0x13 - .byte 0x1 - .4byte .LASF98 - .byte 0x1 - .byte 0x2c - .byte 0x1 - .4byte 0x39f - .4byte .LFB0 - .4byte .LFE0 - .4byte .LLST0 - .4byte 0x54b - .uleb128 0x14 - .4byte .LASF93 - .byte 0x1 - .byte 0x2e - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -24 - .uleb128 0x15 - .ascii "rtn\000" - .byte 0x1 - .byte 0x2f - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .uleb128 0x16 - .4byte .LBB2 - .4byte .LBE2 - .uleb128 0x14 - .4byte .LASF94 - .byte 0x1 - .byte 0x4b - .4byte 0x54b - .byte 0x2 - .byte 0x91 - .sleb128 -28 - .uleb128 0x16 - .4byte .LBB3 - .4byte .LBE3 - .uleb128 0x14 - .4byte .LASF95 - .byte 0x1 - .byte 0x4e - .4byte 0xaf - .byte 0x2 - .byte 0x91 - .sleb128 -44 - .uleb128 0x14 - .4byte .LASF96 - .byte 0x1 - .byte 0x4f - .4byte 0x333 - .byte 0x2 - .byte 0x91 - .sleb128 -32 - .uleb128 0x15 - .ascii "foo\000" - .byte 0x1 - .byte 0x50 - .4byte 0x25 - .byte 0x2 - .byte 0x91 - .sleb128 -48 - .uleb128 0x16 - .4byte .LBB4 - .4byte .LBE4 - .uleb128 0x15 - .ascii "rev\000" - .byte 0x1 - .byte 0x56 - .4byte 0xaf - .byte 0x2 - .byte 0x91 - .sleb128 -36 - .uleb128 0x16 - .4byte .LBB5 - .4byte .LBE5 - .uleb128 0x14 - .4byte .LASF97 - .byte 0x1 - .byte 0x59 - .4byte 0x85 - .byte 0x2 - .byte 0x91 - .sleb128 -40 - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .uleb128 0x6 - .byte 0x4 - .4byte 0xbc - .uleb128 0x13 - .byte 0x1 - .4byte .LASF99 - .byte 0x1 - .byte 0x86 - .byte 0x1 - .4byte 0x39f - .4byte .LFB1 - .4byte .LFE1 - .4byte .LLST1 - .4byte 0x57d - .uleb128 0x15 - .ascii "rtn\000" - .byte 0x1 - .byte 0x88 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .byte 0 - .uleb128 0x13 - .byte 0x1 - .4byte .LASF100 - .byte 0x1 - .byte 0xa4 - .byte 0x1 - .4byte 0x39f - .4byte .LFB2 - .4byte .LFE2 - .4byte .LLST2 - .4byte 0x5c5 - .uleb128 0x17 - .4byte .LASF101 - .byte 0x1 - .byte 0xa4 - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .uleb128 0x17 - .4byte .LASF102 - .byte 0x1 - .byte 0xa4 - .4byte 0x435 - .byte 0x2 - .byte 0x91 - .sleb128 -24 - .uleb128 0x15 - .ascii "rtn\000" - .byte 0x1 - .byte 0xa6 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .byte 0 - .uleb128 0x13 - .byte 0x1 - .4byte .LASF103 - .byte 0x1 - .byte 0xd0 - .byte 0x1 - .4byte 0x39f - .4byte .LFB3 - .4byte .LFE3 - .4byte .LLST3 - .4byte 0x60d - .uleb128 0x17 - .4byte .LASF101 - .byte 0x1 - .byte 0xd0 - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .uleb128 0x17 - .4byte .LASF104 - .byte 0x1 - .byte 0xd0 - .4byte 0x3bf - .byte 0x2 - .byte 0x91 - .sleb128 -24 - .uleb128 0x15 - .ascii "rtn\000" - .byte 0x1 - .byte 0xd2 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .byte 0 - .uleb128 0x13 - .byte 0x1 - .4byte .LASF105 - .byte 0x1 - .byte 0xff - .byte 0x1 - .4byte 0x39f - .4byte .LFB4 - .4byte .LFE4 - .4byte .LLST4 - .4byte 0x656 - .uleb128 0x17 - .4byte .LASF101 - .byte 0x1 - .byte 0xff - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .uleb128 0x17 - .4byte .LASF104 - .byte 0x1 - .byte 0xff - .4byte 0x656 - .byte 0x2 - .byte 0x91 - .sleb128 -24 - .uleb128 0x18 - .ascii "rtn\000" - .byte 0x1 - .2byte 0x101 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .byte 0 - .uleb128 0x6 - .byte 0x4 - .4byte 0x3bf - .uleb128 0x19 - .byte 0x1 - .4byte .LASF106 - .byte 0x1 - .2byte 0x12e - .byte 0x1 - .4byte 0x39f - .4byte .LFB5 - .4byte .LFE5 - .4byte .LLST5 - .4byte 0x6b7 - .uleb128 0x1a - .4byte .LASF101 - .byte 0x1 - .2byte 0x12e - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -28 - .uleb128 0x1a - .4byte .LASF107 - .byte 0x1 - .2byte 0x12e - .4byte 0x3e5 - .byte 0x2 - .byte 0x91 - .sleb128 -32 - .uleb128 0x18 - .ascii "rtn\000" - .byte 0x1 - .2byte 0x130 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .uleb128 0x1b - .4byte .LASF108 - .byte 0x1 - .2byte 0x131 - .4byte 0x46c - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .byte 0 - .uleb128 0x19 - .byte 0x1 - .4byte .LASF109 - .byte 0x1 - .2byte 0x164 - .byte 0x1 - .4byte 0x39f - .4byte .LFB6 - .4byte .LFE6 - .4byte .LLST6 - .4byte 0x703 - .uleb128 0x1a - .4byte .LASF110 - .byte 0x1 - .2byte 0x164 - .4byte 0x466 - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .uleb128 0x1a - .4byte .LASF111 - .byte 0x1 - .2byte 0x164 - .4byte 0x466 - .byte 0x2 - .byte 0x91 - .sleb128 -24 - .uleb128 0x18 - .ascii "rtn\000" - .byte 0x1 - .2byte 0x166 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .byte 0 - .uleb128 0x19 - .byte 0x1 - .4byte .LASF112 - .byte 0x1 - .2byte 0x195 - .byte 0x1 - .4byte 0x31d - .4byte .LFB7 - .4byte .LFE7 - .4byte .LLST7 - .4byte 0x743 - .uleb128 0x1a - .4byte .LASF113 - .byte 0x1 - .2byte 0x195 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .uleb128 0x1b - .4byte .LASF114 - .byte 0x1 - .2byte 0x197 - .4byte 0x743 - .byte 0x5 - .byte 0x3 - .4byte errorString.3344 - .byte 0 - .uleb128 0xd - .4byte 0x31d - .4byte 0x753 - .uleb128 0xe - .4byte 0x30 - .byte 0xb - .byte 0 - .uleb128 0x19 - .byte 0x1 - .4byte .LASF115 - .byte 0x1 - .2byte 0x1b7 - .byte 0x1 - .4byte 0x5a - .4byte .LFB8 - .4byte .LFE8 - .4byte .LLST8 - .4byte 0x7dc - .uleb128 0x1a - .4byte .LASF116 - .byte 0x1 - .2byte 0x1b7 - .4byte 0x54b - .byte 0x2 - .byte 0x91 - .sleb128 -36 - .uleb128 0x1a - .4byte .LASF117 - .byte 0x1 - .2byte 0x1b7 - .4byte 0x31d - .byte 0x2 - .byte 0x91 - .sleb128 -40 - .uleb128 0x1a - .4byte .LASF95 - .byte 0x1 - .2byte 0x1b7 - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -44 - .uleb128 0x1a - .4byte .LASF118 - .byte 0x1 - .2byte 0x1b7 - .4byte 0x31d - .byte 0x2 - .byte 0x91 - .sleb128 -4 - .uleb128 0x1c - .uleb128 0x1b - .4byte .LASF119 - .byte 0x1 - .2byte 0x1b9 - .4byte 0x328 - .byte 0x2 - .byte 0x91 - .sleb128 -28 - .uleb128 0x18 - .ascii "rtn\000" - .byte 0x1 - .2byte 0x1ba - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -20 - .uleb128 0x1b - .4byte .LASF120 - .byte 0x1 - .2byte 0x1bb - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -24 - .byte 0 - .uleb128 0x1d - .4byte .LASF133 - .byte 0x1 - .2byte 0x1e0 - .byte 0x1 - .4byte 0x39f - .4byte .LFB9 - .4byte .LFE9 - .4byte .LLST9 - .4byte 0x884 - .uleb128 0x1a - .4byte .LASF101 - .byte 0x1 - .2byte 0x1e0 - .4byte 0x5a - .byte 0x3 - .byte 0x91 - .sleb128 -92 - .uleb128 0x18 - .ascii "rtn\000" - .byte 0x1 - .2byte 0x1e2 - .4byte 0x39f - .byte 0x2 - .byte 0x91 - .sleb128 -12 - .uleb128 0x1b - .4byte .LASF121 - .byte 0x1 - .2byte 0x1e3 - .4byte 0x5a - .byte 0x2 - .byte 0x91 - .sleb128 -16 - .uleb128 0x1b - .4byte .LASF122 - .byte 0x1 - .2byte 0x1e7 - .4byte 0x884 - .byte 0x5 - .byte 0x3 - .4byte validPins.3359 - .uleb128 0x1b - .4byte .LASF123 - .byte 0x1 - .2byte 0x1e8 - .4byte 0x33e - .byte 0x5 - .byte 0x3 - .4byte pinCnt.3360 - .uleb128 0x1e - .4byte .LBB6 - .4byte .LBE6 - .4byte 0x869 - .uleb128 0x1b - .4byte .LASF124 - .byte 0x1 - .2byte 0x1f3 - .4byte 0x894 - .byte 0x3 - .byte 0x91 - .sleb128 -84 - .byte 0 - .uleb128 0x16 - .4byte .LBB7 - .4byte .LBE7 - .uleb128 0x1b - .4byte .LASF125 - .byte 0x1 - .2byte 0x1f9 - .4byte 0x899 - .byte 0x3 - .byte 0x91 - .sleb128 -84 - .byte 0 - .byte 0 - .uleb128 0xd - .4byte 0x33e - .4byte 0x894 - .uleb128 0xe - .4byte 0x30 - .byte 0x10 - .byte 0 - .uleb128 0xf - .4byte 0x884 - .uleb128 0xf - .4byte 0x884 - .uleb128 0x14 - .4byte .LASF126 - .byte 0x1 - .byte 0x23 - .4byte 0x8af - .byte 0x5 - .byte 0x3 - .4byte gGpioMap - .uleb128 0x6 - .byte 0x4 - .4byte 0x8b5 - .uleb128 0x1f - .4byte 0x33e - .uleb128 0x14 - .4byte .LASF127 - .byte 0x1 - .byte 0x26 - .4byte 0x45b - .byte 0x5 - .byte 0x3 - .4byte pcbRev - .uleb128 0x20 - .4byte .LASF134 - .byte 0x4 - .byte 0xa7 - .4byte 0x2f1 - .byte 0x1 - .byte 0x1 - .byte 0 - .section .debug_abbrev,"",%progbits -.Ldebug_abbrev0: - .uleb128 0x1 - .uleb128 0x11 - .byte 0x1 - .uleb128 0x25 - .uleb128 0xe - .uleb128 0x13 - .uleb128 0xb - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x1b - .uleb128 0xe - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x10 - .uleb128 0x6 - .byte 0 - .byte 0 - .uleb128 0x2 - .uleb128 0x16 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x3 - .uleb128 0x24 - .byte 0 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3e - .uleb128 0xb - .uleb128 0x3 - .uleb128 0xe - .byte 0 - .byte 0 - .uleb128 0x4 - .uleb128 0x24 - .byte 0 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3e - .uleb128 0xb - .uleb128 0x3 - .uleb128 0x8 - .byte 0 - .byte 0 - .uleb128 0x5 - .uleb128 0xf - .byte 0 - .uleb128 0xb - .uleb128 0xb - .byte 0 - .byte 0 - .uleb128 0x6 - .uleb128 0xf - .byte 0 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x7 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x8 - .uleb128 0xd - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x9 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0xa - .uleb128 0xd - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xa - .uleb128 0x34 - .uleb128 0xc - .byte 0 - .byte 0 - .uleb128 0xb - .uleb128 0x16 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0 - .byte 0 - .uleb128 0xc - .uleb128 0xd - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0xd - .uleb128 0x1 - .byte 0x1 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0xe - .uleb128 0x21 - .byte 0 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2f - .uleb128 0xb - .byte 0 - .byte 0 - .uleb128 0xf - .uleb128 0x26 - .byte 0 - .uleb128 0x49 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x10 - .uleb128 0x4 - .byte 0x1 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x11 - .uleb128 0x28 - .byte 0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x1c - .uleb128 0xd - .byte 0 - .byte 0 - .uleb128 0x12 - .uleb128 0x28 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x1c - .uleb128 0xd - .byte 0 - .byte 0 - .uleb128 0x13 - .uleb128 0x2e - .byte 0x1 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x27 - .uleb128 0xc - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x40 - .uleb128 0x6 - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x14 - .uleb128 0x34 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x15 - .uleb128 0x34 - .byte 0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x16 - .uleb128 0xb - .byte 0x1 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .byte 0 - .byte 0 - .uleb128 0x17 - .uleb128 0x5 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x18 - .uleb128 0x34 - .byte 0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x19 - .uleb128 0x2e - .byte 0x1 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x27 - .uleb128 0xc - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x40 - .uleb128 0x6 - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x1a - .uleb128 0x5 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x1b - .uleb128 0x34 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0 - .byte 0 - .uleb128 0x1c - .uleb128 0x18 - .byte 0 - .byte 0 - .byte 0 - .uleb128 0x1d - .uleb128 0x2e - .byte 0x1 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x27 - .uleb128 0xc - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x40 - .uleb128 0x6 - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x1e - .uleb128 0xb - .byte 0x1 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x1f - .uleb128 0x35 - .byte 0 - .uleb128 0x49 - .uleb128 0x13 - .byte 0 - .byte 0 - .uleb128 0x20 - .uleb128 0x34 - .byte 0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x3c - .uleb128 0xc - .byte 0 - .byte 0 - .byte 0 - .section .debug_loc,"",%progbits -.Ldebug_loc0: -.LLST0: - .4byte .LFB0-.Ltext0 - .4byte .LCFI0-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI0-.Ltext0 - .4byte .LCFI1-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 12 - .4byte .LCFI1-.Ltext0 - .4byte .LFE0-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST1: - .4byte .LFB1-.Ltext0 - .4byte .LCFI2-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI2-.Ltext0 - .4byte .LCFI3-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 12 - .4byte .LCFI3-.Ltext0 - .4byte .LFE1-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST2: - .4byte .LFB2-.Ltext0 - .4byte .LCFI4-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI4-.Ltext0 - .4byte .LCFI5-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 8 - .4byte .LCFI5-.Ltext0 - .4byte .LFE2-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST3: - .4byte .LFB3-.Ltext0 - .4byte .LCFI6-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI6-.Ltext0 - .4byte .LCFI7-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 8 - .4byte .LCFI7-.Ltext0 - .4byte .LFE3-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST4: - .4byte .LFB4-.Ltext0 - .4byte .LCFI8-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI8-.Ltext0 - .4byte .LCFI9-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 8 - .4byte .LCFI9-.Ltext0 - .4byte .LFE4-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST5: - .4byte .LFB5-.Ltext0 - .4byte .LCFI10-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI10-.Ltext0 - .4byte .LCFI11-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 8 - .4byte .LCFI11-.Ltext0 - .4byte .LFE5-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST6: - .4byte .LFB6-.Ltext0 - .4byte .LCFI12-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI12-.Ltext0 - .4byte .LCFI13-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 8 - .4byte .LCFI13-.Ltext0 - .4byte .LFE6-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST7: - .4byte .LFB7-.Ltext0 - .4byte .LCFI14-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI14-.Ltext0 - .4byte .LCFI15-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 4 - .4byte .LCFI15-.Ltext0 - .4byte .LFE7-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 -.LLST8: - .4byte .LFB8-.Ltext0 - .4byte .LCFI16-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI16-.Ltext0 - .4byte .LCFI17-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 4 - .4byte .LCFI17-.Ltext0 - .4byte .LCFI18-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 12 - .4byte .LCFI18-.Ltext0 - .4byte .LFE8-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 8 - .4byte 0 - .4byte 0 -.LLST9: - .4byte .LFB9-.Ltext0 - .4byte .LCFI19-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 0 - .4byte .LCFI19-.Ltext0 - .4byte .LCFI20-.Ltext0 - .2byte 0x2 - .byte 0x7d - .sleb128 8 - .4byte .LCFI20-.Ltext0 - .4byte .LFE9-.Ltext0 - .2byte 0x2 - .byte 0x7b - .sleb128 4 - .4byte 0 - .4byte 0 - .section .debug_aranges,"",%progbits - .4byte 0x1c - .2byte 0x2 - .4byte .Ldebug_info0 - .byte 0x4 - .byte 0 - .2byte 0 - .2byte 0 - .4byte .Ltext0 - .4byte .Letext0-.Ltext0 - .4byte 0 - .4byte 0 - .section .debug_line,"",%progbits -.Ldebug_line0: - .section .debug_str,"MS",%progbits,1 -.LASF109: - .ascii "gpioGetI2cPins\000" -.LASF36: - .ascii "_shortbuf\000" -.LASF77: - .ascii "alt0\000" -.LASF132: - .ascii "_IO_lock_t\000" -.LASF79: - .ascii "alt2\000" -.LASF80: - .ascii "alt3\000" -.LASF81: - .ascii "alt4\000" -.LASF82: - .ascii "alt5\000" -.LASF75: - .ascii "input\000" -.LASF134: - .ascii "stderr\000" -.LASF118: - .ascii "format\000" -.LASF25: - .ascii "_IO_buf_end\000" -.LASF108: - .ascii "sleepTime\000" -.LASF23: - .ascii "_IO_write_end\000" -.LASF0: - .ascii "unsigned int\000" -.LASF55: - .ascii "uint32_t\000" -.LASF123: - .ascii "pinCnt\000" -.LASF133: - .ascii "gpioValidatePin\000" -.LASF17: - .ascii "_flags\000" -.LASF29: - .ascii "_markers\000" -.LASF65: - .ascii "ERROR_I2C_CLK_TIMEOUT\000" -.LASF113: - .ascii "error\000" -.LASF78: - .ascii "alt1\000" -.LASF122: - .ascii "validPins\000" -.LASF105: - .ascii "gpioReadPin\000" -.LASF98: - .ascii "gpioSetup\000" -.LASF120: - .ascii "tempRtn\000" -.LASF97: - .ascii "revision\000" -.LASF119: - .ascii "arguments\000" -.LASF52: - .ascii "_pos\000" -.LASF28: - .ascii "_IO_save_end\000" -.LASF121: - .ascii "index\000" -.LASF7: - .ascii "long long unsigned int\000" -.LASF117: - .ascii "file\000" -.LASF69: - .ascii "high\000" -.LASF27: - .ascii "_IO_backup_base\000" -.LASF38: - .ascii "_offset\000" -.LASF59: - .ascii "ERROR_NULL\000" -.LASF31: - .ascii "_fileno\000" -.LASF46: - .ascii "__gnuc_va_list\000" -.LASF67: - .ascii "ERROR_MAX\000" -.LASF92: - .ascii "tv_nsec\000" -.LASF8: - .ascii "size_t\000" -.LASF76: - .ascii "output\000" -.LASF20: - .ascii "_IO_read_base\000" -.LASF83: - .ascii "eFunctionMin\000" -.LASF50: - .ascii "_next\000" -.LASF100: - .ascii "gpioSetFunction\000" -.LASF58: - .ascii "ERROR_RANGE\000" -.LASF90: - .ascii "timespec\000" -.LASF15: - .ascii "char\000" -.LASF44: - .ascii "_mode\000" -.LASF49: - .ascii "_IO_marker\000" -.LASF18: - .ascii "_IO_read_ptr\000" -.LASF56: - .ascii "ERROR_DEFAULT\000" -.LASF54: - .ascii "ssize_t\000" -.LASF73: - .ascii "pullup\000" -.LASF53: - .ascii "va_list\000" -.LASF21: - .ascii "_IO_write_base\000" -.LASF66: - .ascii "ERROR_INVALID_BSC\000" -.LASF6: - .ascii "long long int\000" -.LASF114: - .ascii "errorString\000" -.LASF26: - .ascii "_IO_save_base\000" -.LASF103: - .ascii "gpioSetPin\000" -.LASF63: - .ascii "ERROR_I2C_NACK\000" -.LASF131: - .ascii "__ap\000" -.LASF9: - .ascii "__quad_t\000" -.LASF129: - .ascii "gpio.c\000" -.LASF112: - .ascii "gpioErrToString\000" -.LASF68: - .ascii "errStatus\000" -.LASF39: - .ascii "__pad1\000" -.LASF40: - .ascii "__pad2\000" -.LASF41: - .ascii "__pad3\000" -.LASF42: - .ascii "__pad4\000" -.LASF43: - .ascii "__pad5\000" -.LASF124: - .ascii "validPinsForRev1\000" -.LASF107: - .ascii "resistorOption\000" -.LASF35: - .ascii "_vtable_offset\000" -.LASF127: - .ascii "pcbRev\000" -.LASF125: - .ascii "validPinsForRev2\000" -.LASF62: - .ascii "ERROR_ALREADY_INITIALISED\000" -.LASF115: - .ascii "dbgPrint\000" -.LASF130: - .ascii "/home/pi/RaspberryPi-GPIO/src\000" -.LASF93: - .ascii "mem_fd\000" -.LASF19: - .ascii "_IO_read_end\000" -.LASF5: - .ascii "short int\000" -.LASF11: - .ascii "long int\000" -.LASF57: - .ascii "ERROR_INVALID_PIN_NUMBER\000" -.LASF85: - .ascii "eFunction\000" -.LASF64: - .ascii "ERROR_I2C\000" -.LASF96: - .ascii "linelen\000" -.LASF72: - .ascii "pulldown\000" -.LASF14: - .ascii "__ssize_t\000" -.LASF126: - .ascii "gGpioMap\000" -.LASF94: - .ascii "cpuinfo\000" -.LASF61: - .ascii "ERROR_NOT_INITIALISED\000" -.LASF71: - .ascii "pullDisable\000" -.LASF110: - .ascii "gpioNumberScl\000" -.LASF48: - .ascii "__va_list\000" -.LASF37: - .ascii "_lock\000" -.LASF91: - .ascii "tv_sec\000" -.LASF3: - .ascii "long unsigned int\000" -.LASF70: - .ascii "eState\000" -.LASF33: - .ascii "_old_offset\000" -.LASF101: - .ascii "gpioNumber\000" -.LASF47: - .ascii "_IO_FILE\000" -.LASF128: - .ascii "GNU C 4.6.3\000" -.LASF111: - .ascii "gpioNumberSda\000" -.LASF1: - .ascii "unsigned char\000" -.LASF84: - .ascii "eFunctionMax\000" -.LASF102: - .ascii "function\000" -.LASF51: - .ascii "_sbuf\000" -.LASF95: - .ascii "line\000" -.LASF22: - .ascii "_IO_write_ptr\000" -.LASF74: - .ascii "eResistor\000" -.LASF99: - .ascii "gpioCleanup\000" -.LASF13: - .ascii "__time_t\000" -.LASF104: - .ascii "state\000" -.LASF87: - .ascii "pcbRev1\000" -.LASF88: - .ascii "pcbRev2\000" -.LASF10: - .ascii "__off_t\000" -.LASF106: - .ascii "gpioSetPullResistor\000" -.LASF4: - .ascii "signed char\000" -.LASF2: - .ascii "short unsigned int\000" -.LASF89: - .ascii "tPcbRev\000" -.LASF86: - .ascii "pcbRevError\000" -.LASF30: - .ascii "_chain\000" -.LASF16: - .ascii "FILE\000" -.LASF32: - .ascii "_flags2\000" -.LASF60: - .ascii "ERROR_EXTERNAL\000" -.LASF34: - .ascii "_cur_column\000" -.LASF12: - .ascii "__off64_t\000" -.LASF45: - .ascii "_unused2\000" -.LASF24: - .ascii "_IO_buf_base\000" -.LASF116: - .ascii "stream\000" - .ident "GCC: (Debian 4.6.3-14+rpi1) 4.6.3" - .section .note.GNU-stack,"",%progbits - - - /** - * @file - * @brief Contains source for the GPIO functionality. - * - * This is is part of https://github.com/alanbarr/RaspberryPi-GPIO - * a C library for basic control of the Raspberry Pi's GPIO pins. - * Copyright (C) Alan Barr 2012 - * - * This code was loosely based on the example code - * provided by Dom and Gert found at: - * http://elinux.org/RPi_Low-level_peripherals - * - * This program 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 - * (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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - - #include "gpio.h" - - /* Local / internal prototypes */ - static errStatus gpioValidatePin(int gpioNumber); - - /**** Globals ****/ - /** @brief Pointer which will be mmap'd to the GPIO memory in /dev/mem */ - static volatile uint32_t * gGpioMap = NULL; - - /** @brief PCB revision that executable is being run on */ - static tPcbRev pcbRev = pcbRevError; - - /** - * @brief Maps the memory used for GPIO access. This function must be called - * prior to any of the other GPIO calls. - * @return An error from #errStatus. */ - errStatus gpioSetup(void) - { - int mem_fd = 0; - errStatus rtn = ERROR_DEFAULT; - - if ((mem_fd = open("/dev/mem", O_RDWR)) < 0) - { - dbgPrint(DBG_INFO, "open() failed. /dev/mem. errno %s.", strerror(errno)); - rtn = ERROR_EXTERNAL; - } - - else if ((gGpioMap = (volatile uint32_t *)mmap(NULL, - GPIO_MAP_SIZE, - PROT_READ|PROT_WRITE, - MAP_SHARED, - mem_fd, - GPIO_BASE)) == MAP_FAILED) - { - dbgPrint(DBG_INFO, "mmap() failed. errno: %s.", strerror(errno)); - rtn = ERROR_EXTERNAL; - } - - /* Close the fd, we have now mapped it */ - else if (close(mem_fd) != OK) - { - dbgPrint(DBG_INFO, "close() failed. errno: %s.", strerror(errno)); - rtn = ERROR_EXTERNAL; - } - - else - { - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo) - { - char* line = NULL; - ssize_t linelen; - size_t foo; - - while (((linelen = getline(&line, &foo, cpuinfo)) >= 0)) - { - if (strstr(line, "Revision") == line) - { - char* rev = strstr(line, ":"); - if (rev) - { - long revision = strtol(rev + 1, NULL, 16); - - if (revision <= 3) - { - pcbRev = pcbRev1; - } - - else - { - pcbRev = pcbRev2; - } - } - } - } /* while */ - if (pcbRev != pcbRevError) - { - rtn = OK; - } - else - { - dbgPrint(DBG_INFO, "did not find revision in cpuinfo."); - rtn = ERROR_EXTERNAL; - } - - if (line) - { - free(line); - } - fclose(cpuinfo); - } - else - { - dbgPrint(DBG_INFO, "can't open /proc/cpuinfo. errno: %s.", strerror(errno)); - rtn = ERROR_EXTERNAL; - } - } - - return rtn; - } - - - /** - * @brief Unmaps the memory used for the gpio pins. This function should be - * called when finished with the GPIO pins. - * @return An error from #errStatus. */ - errStatus gpioCleanup(void) - { - errStatus rtn = ERROR_DEFAULT; - - if (gGpioMap == NULL) - { - dbgPrint(DBG_INFO, "gGpioMap was NULL. Ensure gpioSetup() was called successfully."); - rtn = ERROR_NULL; - } - - else if (munmap((void *)gGpioMap, GPIO_MAP_SIZE) != OK) - { - dbgPrint(DBG_INFO, "mummap() failed. errno %s.", strerror(errno)); - rtn = ERROR_EXTERNAL; - } - - else - { - gGpioMap = NULL; - rtn = OK; - } - return rtn; - } - - - /** - * @brief Sets the functionality of the desired pin. - * @param gpioNumber The gpio pin number to change. - * @param function The desired functionality for the pin. - * @return An error from #errStatus. */ - errStatus gpioSetFunction(int gpioNumber, eFunction function) - { - errStatus rtn = ERROR_DEFAULT; - - if (gGpioMap == NULL) - { - dbgPrint(DBG_INFO, "gGpioMap was NULL. Ensure gpioSetup() called successfully."); - rtn = ERROR_NULL; - } - - else if (function < eFunctionMin || function > eFunctionMax) - { - dbgPrint(DBG_INFO, "eFunction was out of range. %d", function); - rtn = ERROR_RANGE; - } - - else if ((rtn = gpioValidatePin(gpioNumber)) != OK) - { - dbgPrint(DBG_INFO, "gpioValidatePin() failed. Ensure pin %d is valid.", gpioNumber); - } - - else - { - /* Clear what ever function bits currently exist - this puts the pin - * into input mode.*/ - *(gGpioMap + (gpioNumber / 10)) &= ~(GPFSEL_BITS << ((gpioNumber % 10) * 3)); - - /* Set the three pins for the pin to the desired value */ - *(gGpioMap + (gpioNumber / 10)) |= (function << ((gpioNumber % 10) * 3)); - - rtn = OK; - } - - return rtn; - } - - - /** - * @brief Sets a pin to high or low. - * @details The pin should be configured as an ouput with - * gpioSetFunction() prior to this. - * @param gpioNumber The pin to set. - * @param state The desired state of the pin. - * @return An error from #errStatus.*/ - errStatus gpioSetPin(int gpioNumber, eState state) - { - errStatus rtn = ERROR_DEFAULT; - - if (gGpioMap == NULL) - { - dbgPrint(DBG_INFO, "gGpioMap was NULL. Ensure gpioSetup() was called successfully."); - rtn = ERROR_NULL; - } - - else if ((rtn = gpioValidatePin(gpioNumber)) != OK) - { - dbgPrint(DBG_INFO, "gpioValidatePin() failed. Ensure pin %d is valid.", gpioNumber); - } - - else if (state == high) - { - /* The offsets are all in bytes. Divide by sizeof uint32_t to allow - * pointer addition. */ - GPIO_GPSET0 = 0x1 << gpioNumber; - rtn = OK; - } - - else if (state == low) - { - /* The offsets are all in bytes. Divide by sizeof uint32_t to allow - * pointer addition. */ - GPIO_GPCLR0 = 0x1 << gpioNumber; - rtn = OK; - } - - else - { - dbgPrint(DBG_INFO,"state %d should have been %d or %d", state, low, high); - rtn = ERROR_RANGE; - } - - return rtn; - } - - - /** - * @brief Reads the current state of a gpio pin. - * @param gpioNumber The number of the GPIO pin to read. - * @param[out] state Pointer to the variable in which the GPIO pin state is - * returned. - * @return An error from #errStatus. */ - errStatus gpioReadPin(int gpioNumber, eState * state) - { - errStatus rtn = ERROR_DEFAULT; - - if (gGpioMap == NULL) - { - dbgPrint(DBG_INFO, "gGpioMap was NULL. Ensure gpioSetup() was called successfully."); - rtn = ERROR_NULL; - } - - else if (state == NULL) - { - dbgPrint(DBG_INFO, "Parameter state was NULL."); - rtn = ERROR_NULL; - } - - else if ((rtn = gpioValidatePin(gpioNumber)) != OK) - { - dbgPrint(DBG_INFO, "gpioValidatePin() failed. Pin %d isn't valid.", gpioNumber); - } - - else - { - /* Check if the appropriate bit is high */ - if (GPIO_GPLEV0 & (0x1 << gpioNumber)) - { - *state = high; - } - - else - { - *state = low; - } - - rtn = OK; - } - - return rtn; - } - - /** - * @brief Allows configuration of the internal resistor at a GPIO pin. - * @details The GPIO pins on the BCM2835 have the option of configuring a - * pullup, pulldown or no resistor at the pin. - * @param gpioNumber The GPIO pin to configure. - * @param resistorOption The available resistor options. - * @return An error from #errStatus. */ - errStatus gpioSetPullResistor(int gpioNumber, eResistor resistorOption) - { - errStatus rtn = ERROR_DEFAULT; - struct timespec sleepTime; - - if (gGpioMap == NULL) - { - dbgPrint(DBG_INFO, "gGpioMap was NULL. Ensure gpioSetup() was called successfully."); - rtn = ERROR_NULL; - } - - else if ((rtn = gpioValidatePin(gpioNumber)) != OK) - { - dbgPrint(DBG_INFO, "gpioValidatePin() failed. Pin %d isn't valid.", gpioNumber); - } - - else if (resistorOption < pullDisable || resistorOption > pullup) - { - dbgPrint(DBG_INFO, "resistorOption value: %d was out of range.", resistorOption); - rtn = ERROR_RANGE; - } - - else - { - sleepTime.tv_sec = 0; - sleepTime.tv_nsec = 1000 * RESISTOR_SLEEP_US; - - /* Set the GPPUD register with the desired resistor type */ - GPIO_GPPUD = resistorOption; - /* Wait for control signal to be set up */ - nanosleep(&sleepTime, NULL); - /* Clock the control signal for desired resistor */ - GPIO_GPPUDCLK0 = (0x1 << gpioNumber); - /* Hold to set */ - nanosleep(&sleepTime, NULL); - GPIO_GPPUD = 0; - GPIO_GPPUDCLK0 = 0; - - rtn = OK; - } - - - return rtn; - } - - /** - * @brief Get the correct I2C pins. - * @details The different revisions of the PI have their I2C - * ports on different GPIO - * pins which require different BSC modules. - * @param[out] gpioNumberScl Integer to be populated with scl gpio number. - * @param[out] gpioNumberSda Integer to be populated with sda gpio number. - * @todo TODO Does this need to be public or internal only? - * @return An error from #errStatus. */ - errStatus gpioGetI2cPins(int * gpioNumberScl, int * gpioNumberSda) - { - errStatus rtn = ERROR_DEFAULT; - - if (gGpioMap == NULL) - { - dbgPrint(DBG_INFO, "gGpioMap was NULL. Ensure gpioSetup() was called successfully."); - rtn = ERROR_NULL; - } - - else if (gpioNumberScl == NULL) - { - dbgPrint(DBG_INFO, "Parameter gpioNumberScl is NULL."); - rtn = ERROR_NULL; - } - - else if (gpioNumberSda == NULL) - { - dbgPrint(DBG_INFO, "Parameter gpioNumberSda is NULL."); - rtn = ERROR_NULL; - } - - else if (pcbRev == pcbRev1) - { - *gpioNumberScl = REV1_SCL; - *gpioNumberSda = REV1_SDA; - rtn = OK; - } - - else if (pcbRev == pcbRev2) - { - *gpioNumberScl = REV2_SCL; - *gpioNumberSda = REV2_SDA; - rtn = OK; - } - - return rtn; - } - - - #undef ERROR - /** Redefining to replace macro with x as a string, i.e. "x". For use in - * gpioErrToString() */ - #define ERROR(x) #x, - - /** - * @brief Debug function which converts an error from errStatus to a string. - * @param error Error from #errStatus. - * @return String representation of errStatus parameter error. */ - const char * gpioErrToString(errStatus error) - { - static const char * errorString[] = { ERRORS }; - - if (error < 0 || error >= ERROR_MAX) - { - return "InvalidError"; - } - - else - { - return errorString[error]; - } - } - - - /** - * @brief Debug function wrapper for fprintf(). - * @details Allows file and line information to be added easier - * to output strings. #DBG_INFO is a macro which is useful - * to call as the "first" parameter to this function. Note - * this function will add on a newline to the end of a format - * string so one is generally not required in \p format. - * @param[in] stream Output stream for strings, e.g. stderr, stdout. - * @param[in] file Name of file to be printed. Should be retrieved with __FILE__. - * @param line Line number to print. Should be retrieved with __LINE__. - * @param[in] format Formatted string in the format which printf() would accept. - * @param ... Additional arguments - to fill in placeholders in parameter - * \p format. - * @return This function uses the printf() family functions and the - * returned integer is what is returned from these calls: If - * successful the number or characters printed is returned, - * if unsuccessful a negative value. - */ - int dbgPrint(FILE * stream, const char * file, int line, const char * format, ...) - { - va_list arguments; - int rtn = 0; - int tempRtn = 0; - - if (stream != NULL) - { - if ((tempRtn = fprintf(stream,"[%s:%d] ", file, line)) < 0) - { - return tempRtn; - } - rtn += tempRtn; - - va_start(arguments, format); - if ((tempRtn = vfprintf(stream, format, arguments)) < 0) - { - return tempRtn; - } - rtn += tempRtn; - va_end(arguments); - - if ((tempRtn = fprintf(stream,"\n")) < 0) - { - return tempRtn; - } - rtn += tempRtn; - - } - return rtn; - } - - /****************************** Internal Functions ******************************/ - - /** - * @brief Internal function which Validates that the pin - * \p gpioNumber is valid for the Raspberry Pi. - * @details The first time this function is called it will perform - * some basic initalisation on internal variables. - * @param gpioNumber The pin number to check. - * @return An error from #errStatus. */ - static errStatus gpioValidatePin(int gpioNumber) - { - errStatus rtn = ERROR_INVALID_PIN_NUMBER; - int index = 0; - /* TODO REV1 and REV2 have the same pincount. REV2 technically has more if - * P5 is supported. If there is a REV3 the size of this array will need to - * be addressed. */ - static uint32_t validPins[REV2_PINCNT] = {0}; - static uint32_t pinCnt = 0; - - if (pinCnt == 0) - { - if (pcbRev == pcbRevError) - { - rtn = ERROR_RANGE; - } - - else if (pcbRev == pcbRev1) - { - const uint32_t validPinsForRev1[REV1_PINCNT] = REV1_PINS; - memcpy(validPins, validPinsForRev1, sizeof(validPinsForRev1)); - pinCnt = REV1_PINCNT; - } - else if (pcbRev == pcbRev2) - { - const uint32_t validPinsForRev2[REV2_PINCNT] = REV2_PINS; - memcpy(validPins, validPinsForRev2, sizeof(validPinsForRev2)); - pinCnt = REV2_PINCNT; - } - } - - for (index = 0; index < pinCnt; index++) - { - if (gpioNumber == validPins[index]) - { - rtn = OK; - break; - } - } - - return rtn; - } - - diff --git a/stash/optimisations.rb b/stash/optimisations.rb deleted file mode 100644 index 769581a0..00000000 --- a/stash/optimisations.rb +++ /dev/null @@ -1,82 +0,0 @@ -module Risc - # Passes, or BlockPasses, could have been procs that just get each block passed. - # Instead they are proper objects in case they want to save state. - # The idea is - # - reduce noise in the main code by having this code seperately (aspect/concern style) - # - abstract the iteration - # - allow not yet written code to hook in - - class RemoveStubs - def run block - block.codes.dup.each_with_index do |kode , index| - next unless kode.is_a? StackInstruction - if kode.registers.empty? - block.codes.delete(kode) - puts "deleted stack instruction in #{b.name}" - end - end - end - end - - # Operators eg a + b , must assign their result somewhere and as such create temporary variables. - # but if code is c = a + b , the generated instructions would be more like tmp = a + b ; c = tmp - # SO if there is an move instruction just after a logic instruction where the result of the logic - # instruction is moved straight away, we can undo that mess and remove one instruction. - class LogicMoveReduction - def run block - org = block.codes.dup - org.each_with_index do |kode , index| - n = org[index+1] - next if n.nil? - next unless kode.is_a? LogicInstruction - next unless n.is_a? MoveInstruction - # specific arm instructions, don't optimize as don't know what the extra mean - # small todo. This does not catch condition_code that are not :al - next if (n.attributes.length > 3) or (kode.attributes.length > 3) - if kode.result == n.from - puts "Logic reduction #{kode} removes #{n}" - kode.result = n.to - block.codes.delete(n) - end - end - end - end - - # Sometimes there are double moves ie mov a, b and mov b , c . We reduce that to move a , c - # (but don't check if that improves register allocation. Yet ?) - class MoveMoveReduction - def run block - org = block.codes.dup - org.each_with_index do |kode , index| - n = org[index+1] - next if n.nil? - next unless kode.is_a? MoveInstruction - next unless n.is_a? MoveInstruction - # specific arm instructions, don't optimize as don't know what the extra mean - # small todo. This does not catch condition_code that are not :al - next if (n.attributes.length > 3) or (kode.attributes.length > 3) - if kode.to == n.from - puts "Move reduction #{kode}: removes #{n} " - kode.to = n.to - block.codes.delete(n) - end - end - end - end - - #As the name says, remove no-ops. Currently mov x , x supported - class NoopReduction - def run block - block.codes.dup.each_with_index do |kode , index| - next unless kode.is_a? MoveInstruction - # specific arm instructions, don't optimize as don't know what the extra mean - # small todo. This does not catch condition_code that are not :al - next if (kode.attributes.length > 3) - if kode.to == kode.from - block.codes.delete(kode) - puts "deleted noop move in #{block.name} #{kode}" - end - end - end - end -end diff --git a/stash/parfait/test_type.rb b/stash/parfait/test_type.rb deleted file mode 100644 index b068f8c6..00000000 --- a/stash/parfait/test_type.rb +++ /dev/null @@ -1,58 +0,0 @@ -require_relative 'helper' - -class TestTypeRT < MiniTest::Test - include ParfaitTests - - def test_main - @main = "return 1" - check 1 - end - - def check_return_class val - end - - def test_get_type - @main = "return get_type()" - interpreter = check - assert_equal Parfait::Type , interpreter.get_register(:r0).return_value.class - end - - def test_get_class - @main = "return get_class()" - interpreter = check - assert_equal Parfait::Class , interpreter.get_register(:r0).return_value.class - end - - def test_puts_class - @main = <