Example #1
0
int main( int argc, char** argv )
{
        int devfd;
        int value, ret;

#if ( defined(DIRECT_IO_ACCESS) && !defined(DJGPP) ) 
#if (defined(LINUX_ENV))
	iopl(3);
#endif
#if (defined(FreeBSD_ENV))
	int iofl;
	SET_IOPL();
#endif
#endif
	fprintf(stdout, "=== Lanner platform miscellaneous utility ===\n");;
	fprintf(stdout, PLATFORM_NAME" Status LED "CODE_VERSION"\n\n");;

#ifdef DIRECT_IO_ACCESS
	sled_gpio_init();
        printf("Set LED RED for 4 seconds...\n");
        set_led_green();
        sleep(4);
        printf("Set LED GREEN for 4 seconds...\n");
        set_led_amber();
        sleep(4);
        printf("Set LED DARK\n");
        set_led_off();
        printf("Test Finished.\n");

#if (defined(FreeBSD_ENV))
	RESET_IOPL();
#endif

#else

        devfd = open("/dev/sled_drv", O_RDONLY);
        if(devfd == -1)
        {
                printf("Can't open /dev/sled_drv\n");
                return -1;
        }
        printf("Set LED AMBER for 4 seconds...\n");
        value  =  LED_SET_STATUS_AMBER;
        ret = ioctl(devfd, IOCTL_LED_SET_STATUS, &value);
        sleep(4);
        printf("Set LED GREEN for 4 seconds...\n");
        value  =  LED_SET_STATUS_GREEN;
        ret = ioctl(devfd, IOCTL_LED_SET_STATUS, &value);
        sleep(4);
        printf("Set LED DARK\n");
        value  =  LED_SET_STATUS_OFF;
        ret = ioctl(devfd, IOCTL_LED_SET_STATUS, &value);
        printf("Test Finished.\n");
        close(devfd);
        return 0;


#endif //DIRECT_IO_ACCESS

	return 0;
}
Example #2
0
static void
update_state(void){
    static utime_t fault_song     = 0;
    static utime_t diag_last      = 0;
    static int8_t  diag_counter   = 0;

    int sw = get_switch();
    int bn = get_button();
    blinky_override = 0;

    switch( inv_state ){
    case INV_STATE_OFF:
        set_led_green(0);

        if( sw ){
            // switch was turned on
            ondelay_until = get_time() + ONDELAY;
            inv_state = INV_STATE_ONDELAY;
            blinky_override = 1;
            set_led_white(255);
            play(ivolume, "c+3"); 	// debounce delay
            printbig("STARTING...\n");
            syslog("switch on");
        }
        break;

    case INV_STATE_ONDELAY:

        if( !sw ){
            // switch was turned off
            inv_state = INV_STATE_OFF;
            play(ivolume, "a-3");
            diag_counter ++;
            diag_last = get_time();
            printbig("OFF\n");
            usleep(500000);
            print_ready();
            syslog("canceled");
        }else if( get_time() >= ondelay_until ){
            // countdown finished
            set_led_green( 255 );
            inv_state = INV_STATE_ONDELAY2;
            diag_counter = 0;
            play(ivolume, "b");
            printbig("ACTIVE\n");
            syslog("ac active");
        }else{
            // flash + chirp; 2Hz
            blinky_override = 1;
            set_led_green(127);
            set_led_white(0);
            play(ivolume, "b+5>>");
            set_led_green(0);
            set_led_white(64);
            usleep(437500);

            // reset the clock if Vi drops below 300 (per the spec)
            if( s_vi._curr < MIN_VI_SOFT ){
                ondelay_until = get_time() + ONDELAY;
            }
        }
        break;

    case INV_STATE_ONDELAY2:
        // will move to running at next zero-xing
        break;

    case INV_STATE_RUNNING:
        set_led_green( 127 );

        if( !sw ){
            // switch was turned off
            // quickly bring VH down, and stop at zero-xing
            shutdown_until = get_time() + OFFDELAY;
            inv_state = INV_STATE_SHUTTINGDOWN;
            play(ivolume, "a-3");	// debounce
            syslog("switch off");
        }
        break;

    case INV_STATE_SHUTTINGDOWN:
        set_led_green(255);

        if( get_time() >= shutdown_until ){
            if( sw ){
                // wild switch flipping
                inv_state    = INV_STATE_FAULTEDOFF;
                fault_song   = 0;
                fault_reason = "SWITCH ERR";
                syslog("switch fault");
            }else{
                // done ramping down
                inv_state = INV_STATE_OFF;
                play(ivolume, "f-3");
                printbig("AC OFF\n");
                syslog("ac disabled");
                usleep(500000);
                print_ready();
            }
        }
        break;

    case INV_STATE_FAULTED:
        set_led_green(255);
        set_led_red(255);
        // we ramp down same as a shutdown, but end in faultedoff
        shutdown_until = get_time() + OFFDELAY;
        inv_state = INV_STATE_FAULTINGDOWN;
        printadj(fault_reason);
        break;

    case INV_STATE_FAULTINGDOWN:
        set_led_green(255);
        set_led_red(255);
        if( get_time() >= shutdown_until ){
            inv_state    = INV_STATE_FAULTEDOFF;
            fault_song   = 0;
            syslog("ac disabled (fault)");
        }
        break;

    case INV_STATE_FAULTEDOFF:
        set_led_green(0);
        set_led_red(255);

        if( !sw ){
            // switch turned off, resume normal operation
            inv_state = INV_STATE_OFF;
            play(ivolume, "f-3");
            set_led_red(0);
            print_ready();
        }else if( get_time() >= fault_song ){
            // periodically, sing
            printadj(fault_reason);
            play(128, "t150[4 d+3d-3]");
            fault_song = get_time() + FAULTSONGT;
        }

        break;

    case INV_STATE_DIAG:
        menu(&guitop);
        inv_state = INV_STATE_OFF;
        print_ready();
        break;

    case INV_STATE_TEST:
        break;
    }

    if( diag_last && diag_last + 5000000 < get_time() ){
        diag_counter = 0;
        diag_last    = 0;
    }
    // toggle switch rapidly, or toggle switch once + press button
    if( (diag_mode != 2) && ((diag_counter >= 5) || (bn && diag_counter)) ){
        inv_state = INV_STATE_DIAG;
        diag_counter = 0;
        printbig("DIAG MODE\n");
        syslog("diag mode");
        play(ivolume, "g4e4f4f-3");
        // ...
    }

}