コード例 #1
0
ファイル: luascript.c プロジェクト: emlyn/chdk
void lua_script_error_ptp(int runtime, const char *err) {
    if(runtime) {
        ptp_script_write_error_msg(PTP_CHDK_S_ERRTYPE_RUN, err);
        script_end();
    } else {
        ptp_script_write_error_msg(PTP_CHDK_S_ERRTYPE_COMPILE, err);
        lua_script_reset();
    }
}
コード例 #2
0
ファイル: kbd.c プロジェクト: barryk/CHDK-SD1200
static int lua_script_start( char const* script )
{
  L = lua_open();
  luaL_openlibs( L );
  register_lua_funcs( L );

  Lt = lua_newthread( L );
  lua_setfield( L, LUA_REGISTRYINDEX, "Lt" );
  if( luaL_loadstring( Lt, script ) != 0 ) {
    script_console_add_line( lua_tostring( Lt, -1 ) );
    lua_script_reset( L );
    return 0;
  }
  lua_sethook(Lt, lua_count_hook, LUA_MASKCOUNT, 1000 );
  return 1;
}
コード例 #3
0
ファイル: kbd.c プロジェクト: barryk/CHDK-SD1200
void script_end()
{
    script_print_screen_end();
    if( L ) {
      lua_script_reset( L );
    }
    else {
      ubasic_end();
    }
	md_close_motion_detector();
	shot_histogram_set(0);
    if (conf.alt_prevent_shutdown != ALT_PREVENT_SHUTDOWN_NO) {
        disable_shutdown();
    }
    kbd_key_release_all();
    state_kbd_script_run = 0;
    vid_bitmap_refresh();
}
コード例 #4
0
ファイル: luascript.c プロジェクト: emlyn/chdk
void lua_script_error(lua_State *Lt,int runtime)
{
    const char *err = lua_tostring( Lt, -1 );
    script_console_add_line( err );
    if(lua_script_is_ptp) {
#ifdef CAM_CHDK_PTP
        lua_script_error_ptp(runtime,err);
#endif
    } else {
        if(runtime) {
            if(conf.debug_lua_restart_on_error) {
                lua_script_reset();
                script_start_gui(0);
            } else {
                script_wait_and_end();
            }
        } else {
            script_print_screen_end();
            script_wait_and_end();
        }
    }
}
コード例 #5
0
ファイル: kbd.c プロジェクト: barryk/CHDK-SD1200
void process_script()
{
    long t;
    int Lres;

    // process stack operations
    if (kbd_int_stack_ptr){
	switch (KBD_STACK_PREV(1)){

	case SCRIPT_MOTION_DETECTOR:
			if(md_detect_motion()==0){
				kbd_int_stack_ptr-=1;
 				if (L)
 				{
 					  // We need to recover the motion detector's
 					  // result from ubasic variable 0 and push
 					  // it onto the thread's stack. -- AUJ
 					  lua_pushnumber( Lt, ubasic_get_variable(0) );
 				}
			}
			return;

	case SCRIPT_PRESS:
	    kbd_key_press(KBD_STACK_PREV(2));
	    kbd_int_stack_ptr-=2; // pop op.
	    return;
	case SCRIPT_RELEASE:
	    kbd_key_release(KBD_STACK_PREV(2));
	    kbd_int_stack_ptr-=2; // pop op.
	    return;
	case SCRIPT_SLEEP:
	    t = get_tick_count();
	    // FIXME take care if overflow occurs
	    if (delay_target_ticks == 0){
		/* setup timer */
		delay_target_ticks = t+KBD_STACK_PREV(2);
	    } else {
		if (delay_target_ticks <= t){
		    delay_target_ticks = 0;
		    kbd_int_stack_ptr-=2; // pop sleep op.
		}
	    }
	    return;
	case SCRIPT_PR_WAIT_SAVE:
	    state_shooting_progress = SHOOTING_PROGRESS_NONE;
	    state_expos_recalculated = 0;
	    histogram_stop();

	    kbd_int_stack_ptr-=1; // pop op.
	    return;
	case SCRIPT_WAIT_SAVE:{
	    if (state_shooting_progress == SHOOTING_PROGRESS_DONE)
		kbd_int_stack_ptr-=1; // pop op.
	    return;
	}
	case SCRIPT_WAIT_FLASH:{
	    if (shooting_is_flash_ready())
		kbd_int_stack_ptr-=1; // pop op.
	    return;
	}
	case SCRIPT_WAIT_EXPHIST:{
	    if (state_expos_recalculated) {
		kbd_int_stack_ptr-=1; // pop op.
		state_expos_under = under_exposed;
		state_expos_over = over_exposed;
	    }
	    return;
	}
	case SCRIPT_PR_WAIT_EXPHIST: {
	    if (shooting_in_progress() || mvideo) {
		state_expos_recalculated = 0;
		histogram_restart();
		kbd_int_stack_ptr-=1; // pop op.
	    }
	    return;
	}
        case SCRIPT_WAIT_CLICK: {
            t = get_tick_count();
	    if (delay_target_ticks == 0){
		/* setup timer */
		delay_target_ticks = t+((KBD_STACK_PREV(2))?KBD_STACK_PREV(2):86400000);
	    } else {
                kbd_last_clicked = kbd_get_clicked_key();
                if (kbd_last_clicked || delay_target_ticks <= t) {
                    if (!kbd_last_clicked) 
                        kbd_last_clicked=0xFFFF;
        	    delay_target_ticks = 0;
                    kbd_int_stack_ptr-=2; // pop op.
                }
	    }
	    return;
	}
	default:
	    /*finished();*/
	    script_end();
	}
    }

 	if (state_kbd_script_run != 3)
 	{
 		if( L ) {
 			int top;
 			if (state_lua_kbd_first_call_to_resume)
 			{
 				state_lua_kbd_first_call_to_resume = 0;
 				top = 0;
 			}
 			else
 			{
 				top = lua_gettop(Lt);
 			}
 		   Lres = lua_resume( Lt, top );
 
 		  if (Lres != LUA_YIELD && Lres != 0) {
 				script_console_add_line( lua_tostring( Lt, -1 ) );
 				if(conf.debug_lua_restart_on_error){
					lua_script_reset( L );
					script_start(0);
				} else {
					wait_and_end();
				}
 				return;
 		  }
 
 		  if (Lres != LUA_YIELD) {
 			script_console_add_line(lang_str(LANG_CONSOLE_TEXT_FINISHED));
 		script_end();
 		  }    
 		} 
 		else {
 		  ubasic_run();
 		  if (ubasic_finished()) {
 		script_console_add_line(lang_str(LANG_CONSOLE_TEXT_FINISHED));
 		script_end();
 		  }    
 	}
    }
}