예제 #1
0
파일: memspy.c 프로젝트: aguido/400plus
static void dbg_memspy_init() { // initial state of the analyzed memory
	bmp_printf(FONT_MED, 10,10, "memspy init @ f:%x ... (l:+%x) ... t:%x", mem_spy_start, mem_spy_len, mem_spy_start + mem_spy_len * 4);
	SleepTask(1000);

	//debug_log("memspy init @ from:%x ... (len:%x) ... to:%x", mem_spy_start, mem_spy_len, mem_spy_start + mem_spy_len * 4);
	//mem_spy_len is number of int32's
	if (!dbg_memmirror) dbg_memmirror = AllocateMemory(mem_spy_len*4 + 100); // local copy of mem area analyzed
	if (!dbg_memmirror) return;
	if (!dbg_memchanges) dbg_memchanges = AllocateMemory(mem_spy_len*4 + 100); // local copy of mem area analyzed
	if (!dbg_memchanges) return;
	//if (!dbg_memlogged) dbg_memlogged = AllocateMemory(mem_spy_len*4 + 100); // is this change logged
	//if (!dbg_memlogged) return;
	int i;
	int crc = 0;
	for (i = 0; i < mem_spy_len; i++) {
		unsigned int addr = dbg_memspy_get_addr(i);
		dbg_memmirror[i] = MEMX(addr);
		dbg_memchanges[i] = 0;
		//dbg_memlogged[i] = 0;
		crc += dbg_memmirror[i];
	}
	bmp_printf(FONT_MED, 10,10, "memspy OK: %x", crc);
	//debug_log("memspy OK: %x", crc);
	_tic();
	SleepTask(1000);
}
예제 #2
0
파일: utils.c 프로젝트: AEUG/400plus
void led_flash(int duration) {
	eventproc_EdLedOn();
	SleepTask(EVENT_WAIT);

	SleepTask(duration);

	eventproc_EdLedOff();
	SleepTask(EVENT_WAIT);
}
예제 #3
0
파일: memspy.c 프로젝트: aguido/400plus
void memspy_task( void* unused )
{
	debug_log("memspy task starting.");
	while ( 1 ) {
		if (mem_spy) {
			SleepTask(10);
			LEDBLUE ^= 2;
			dbg_memspy_update();
		} else {
			SleepTask(1000);
		}
	}
	debug_log("memspy task finishing.");
}
예제 #4
0
파일: utils.c 프로젝트: AEUG/400plus
int send_to_intercom(int message, int parm) {
	int result, length = 1;

	switch (message) {
	case IC_SET_AE:
		status.ignore_msg = IC_SETTINGS_0;
		break;
	case IC_SET_AV_VAL:
	case IC_SET_TV_VAL:
		status.ignore_msg = message;
		break;
	case IC_RELEASE:
	case IC_SET_REALTIME_ISO_0:
	case IC_SET_REALTIME_ISO_1:
		length = 0;
		break;
	case IC_SET_ISO:
	case IC_SET_AF_POINT:
	case IC_SET_COLOR_TEMP:
		length = 2;
		break;
	}

	result = SendToIntercom(message, length, parm);
	SleepTask(INTERCOM_WAIT);

	return result;
}
예제 #5
0
파일: menu.c 프로젝트: AEUG/400plus
void menu_create(menu_t *menu) {
	beep();

	//GUI_Command(4,0);
	//press_button(IC_BUTTON_MENU);
	SendToMC(6, 2, 0);
	SleepTask(100);

	FLAG_GUI_MODE = 0x2D; // In theory, we do not need this, but menu_close does not work properly without it...
	//DPData.gui_mode = 0x2D; // this is not the same as FLAG_GUI_MODE, but so far i do not see what it does

	current_menu = menu;
	menu_DPData  = DPData;

	menu_destroy();
	menu_initialize();

	GUI_Lock();
	GUI_PalleteInit();

	menu_handler = dialog_create(22, menu_event_handler);
	//*(int*)((int)(menu_handler+0x58)) = (int)hack_central_handler;
	//*(int*)((int)(menu_handler+0x7C)) = (int)menu_event_handler;

	PalettePush();
	PaletteChange(current_menu->color);

	menu_event_display();

	GUI_UnLock();
	GUI_PalleteUnInit();
}
예제 #6
0
파일: utils.c 프로젝트: AEUG/400plus
void beep() {
	if (DPData.beep) {
		eventproc_RiseEvent("RequestBuzzer");
		SleepTask(EVENT_WAIT);
	}

	led_flash(BEEP_LED_LENGTH);
}
예제 #7
0
파일: utils.c 프로젝트: AEUG/400plus
int remote_on() {
	int result = eventproc_RemOn();
	// disable MLU, since it's not working correctly with IR
	send_to_intercom(IC_SET_CF_MIRROR_UP_LOCK, 0);
	SleepTask(EVENT_WAIT);

	return result;
}
예제 #8
0
파일: menu.c 프로젝트: AEUG/400plus
void menu_repeat(menu_t *menu, void (*action)(menu_t *menu, const int repeating)){
	int delay;
	int button = status.button_down;

	SleepTask(AUTOREPEAT_DELAY_UNIT);

	action(menu, false);
	delay = AUTOREPEAT_DELAY_LONG;

	do {
		SleepTask(AUTOREPEAT_DELAY_UNIT);

		if (--delay == 0) {
			action(menu, true);
			delay = AUTOREPEAT_DELAY_SHORT;
		}
	} while (status.button_down && status.button_down == button);
}
예제 #9
0
파일: msm.c 프로젝트: easyaspi314/400plus
void msm_stop(void) {
	wait_for_camera();
	SleepTask(RELEASE_WAIT);

	send_to_intercom(IC_SET_TV_VAL, msm_tv_return);
	send_to_intercom(IC_SET_AV_VAL, msm_av_return);
	send_to_intercom(IC_SET_AE,     msm_ae_return);

	enqueue_action(msm_reset);
}
예제 #10
0
파일: utils.c 프로젝트: AEUG/400plus
static void mem_dumper_task() {
	int i;

	beep();

	for (i=0; i<10; i++) {
		LEDBLUE ^= 2;
		SleepTask(500);
	}

	dump_memory();
}
예제 #11
0
파일: utils.c 프로젝트: AEUG/400plus
int shutter_release() {
	wait_for_camera();
	lock_sutter    ();

	int result = press_button(IC_BUTTON_FULL_SHUTTER);

	if (DPData.drive == DRIVE_MODE_TIMER)
		SleepTask(SELF_TIMER_MS);

	wait_for_shutter();

	return result;
}
예제 #12
0
파일: msm.c 프로젝트: easyaspi314/400plus
void msm_register(void) {
	static int  last_flag; // Last value registered can be deleted
	static tv_t last_tv;   // Last Tv value registered
	static av_t last_av;   // Last Av value registered

	int ts_start = timestamp();

	if (status.measuring) {
		if (status.msm_count < 8) {
			status.vf_status = VF_STATUS_MSM;
			send_to_intercom(IC_SET_BURST_COUNTER, status.msm_count + 1);
		}

		beep();
	}

	while (status.button_down == BUTTON_DOWN) {
		if (timestamp() - ts_start > MSM_TIMEOUT) {
			if (last_flag) {
				status.msm_count--;

				status.msm_tv -= last_tv;
				status.msm_av -= last_av;

				last_flag = FALSE;

				send_to_intercom(IC_SET_BURST_COUNTER, status.msm_count);
				beep();
			}

			return;
		}

		SleepTask(MSM_RETRY);
	}

	status.msm_count++;

	status.msm_tv += status.measured_tv;
	status.msm_av += status.measured_av;

	last_flag = TRUE;
	last_tv   = status.measured_tv;
	last_av   = status.measured_av;
}
예제 #13
0
파일: utils.c 프로젝트: AEUG/400plus
// this is a disassembled version of eventproc_release()
int shutter_release_disasm() {

	extern char * aRelSem;

	if (hRelSem == 0) {
		hRelSem = CreateBinarySemaphore(aRelSem, 0);
	}

	SendToIntercom(IC_RELEASE, 0, 0);
	SendToIntercom(0x6D, 1, 1); // set burst counter

	TakeSemaphore(hRelSem, 30000);
	DeleteSemaphore(hRelSem);
	hRelSem = 0;

	SleepTask(EVENT_WAIT); // we added this
	return 0;
}
예제 #14
0
파일: utils.c 프로젝트: AEUG/400plus
int shutter_release_bulb(int time) {
	static int first = true;

	int  button;
	long delay;

	int shutter_lag, mirror_lag;

	if (first) {
		first = false;
		shutter_lag = SHUTTER_LAG_1ST;
		mirror_lag  = MIRROR_LAG_1ST;
	} else {
		shutter_lag = SHUTTER_LAG_2ND;
		mirror_lag  = MIRROR_LAG_2ND;
	}

	if (DPData.drive == DRIVE_MODE_TIMER) {
		button = IC_BUTTON_FULL_SHUTTER;
		delay  = time + shutter_lag + mirror_lag;
	} else {
		button = IC_BUTTON_HALF_SHUTTER;
		delay  = time + shutter_lag;
	}

	wait_for_camera();
	lock_sutter    ();

	press_button(button);
	SleepTask   (delay);
	press_button(button);

	wait_for_shutter();

	return 0;
}
예제 #15
0
파일: utils.c 프로젝트: AEUG/400plus
int display_on() {
	int result = SetTurnDisplayEvent_1_after_2();
	SleepTask(EVENT_WAIT);

	return result;
}
예제 #16
0
파일: utils.c 프로젝트: AEUG/400plus
void wait_for_shutter(void) {
	while (shutter_lock)
		SleepTask(RELEASE_WAIT);
}
예제 #17
0
파일: utils.c 프로젝트: AEUG/400plus
void wait_for_camera() {
	while (! able_to_release())
		SleepTask(RELEASE_WAIT);
}
예제 #18
0
파일: memspy.c 프로젝트: aguido/400plus
void memspy_disable() {
	mem_spy=0;
	SleepTask(100);
	LEDBLUE = LEDOFF;
}
예제 #19
0
파일: utils.c 프로젝트: AEUG/400plus
int print_icu_info() {
	int result = eventproc_PrintICUInfo();
	SleepTask(EVENT_WAIT);

	return result;
}
예제 #20
0
파일: utils.c 프로젝트: AEUG/400plus
int display_off() {
	int result = SetTurnDisplayEvent_2_after_1();
	SleepTask(EVENT_WAIT);

	return result;
}
예제 #21
0
파일: utils.c 프로젝트: AEUG/400plus
int press_button(int button) {
	int result = IntercomHandlerButton(button, 0); // takes 2 args...
	SleepTask(EVENT_WAIT);

	return result;
}
예제 #22
0
파일: utils.c 프로젝트: AEUG/400plus
int remote_off() {
	int result = eventproc_RemOff();
	SleepTask(EVENT_WAIT);

	return result;
}