Esempio n. 1
0
void
on_message_recived(orfs_message_t *message)
{

	orfs_metadata_t metadata;
	locker_t *locker;

	locker = lock_acquire(message->file_name, LOCK_STATE | LOCK_EXISTS | LOCK_OPEN_RW );
	metadata_get(message->file_name, &metadata);

	if (message->type == ORFS_MESSAGE_CREATE_MODIFY) {
		if(metadata.state == ORFS_STATE_EMPTY) {
			if(!metadata.exists) {
				enque_action(ORFS_ACTION_RECEIVE, message);
			} else {
				if(!metadata.is_open && compare_ts(metadata.ts, message->ts)<0) {
					enque_action(ORFS_ACTION_RECEIVE, message);
				} else if(metadata.is_open && compare_ts(metadata.ts, message->ts)<0) {
					enque_action(ORFS_ACTION_COC, message);
				}
			}
		} else if(metadata.state == ORFS_STATE_RECEIVE && compare_ts(metadata.message.ts, message->ts)<0) {
			remove_action(message->file_name);
			enque_action(ORFS_ACTION_RECEIVE, message);
		} else if(metadata.state == ORFS_STATE_COC && compre_ts(metadata.message.ts, message->ts)<0) {
			remove_action(metadata);
			enqueue_action(ORFS_ACTION_COC, message);
		}
	} else { // message->type = ORFS_MESSAGE_DELETE
		if ( metadata.exists) {
			if (!metadata.is_open && compare_ts(metadata.ts, message->ts)<0) {
				if (metadata.state == ORFS_STATE_EMPTY || compare_ts(metadata.message.ts, message->ts)<0) {
					remove_file(metadata);
				}
			} else if (metadata.is_open ) {
				if (metadata.state == ORFS_STATE_EMPTY && compare_ts(metadata.ts, message->ts) <0) {
					enqueue_action(ORFS_ACTION_COC, message);
				} else if (metadata.state == ORFS_STATE_COC && compare_ts(metadata.message.ts, message->ts)<0) {
					remove_action(metadata);
					enqueue_action(ORFS_ACTION_COC, message);
				} else if (!metadata.is_open && metadata.state == ORFS_STATE_RECEIVE && compare_ts(metadata.message.ts, message->ts) <0) {
					remove_action(metadata);
					remove_file(metadata);
				}
			}
		}
	}

	lock_release(locker);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
void autoiso_enable() {
	if (DPData.ae == AE_MODE_M && DPData.tv_val == TV_VAL_BULB)
		return;

	press_button(IC_BUTTON_SET);

	if (!settings.autoiso_enable) {
		settings.autoiso_enable = TRUE;
		enqueue_action(settings_write);
	}

	print_icu_info();
	beep();
}
Esempio n. 4
0
void msm_start(void) {
	if (status.msm_count > 0) {
		status.msm_active = TRUE;

		tv_t tv = ev_normalize(status.msm_tv / status.msm_count);
		av_t av = ev_normalize(status.msm_av / status.msm_count);

		av_t av_max = DPData.ef_lens_exist ? DPData.avmax : AV_MAX;
		av_t av_min = DPData.ef_lens_exist ? DPData.avo   : AV_MIN;

		msm_ae_return = DPData.ae;
		send_to_intercom(IC_SET_AE, AE_MODE_M);

		msm_tv_return = DPData.tv_val;
		msm_av_return = DPData.av_val;

		send_to_intercom(IC_SET_TV_VAL, CLAMP(tv, TV_MIN, TV_MAX));
		send_to_intercom(IC_SET_AV_VAL, CLAMP(av, av_min, av_max));

		enqueue_action(beep);
	}
}
Esempio n. 5
0
void viewfinder_change_evc(ec_t ev_comp) {
	persist.ev_comp = CLAMP(ev_comp, EV_CODE(-2, 0), EV_CODE(2,0));
	enqueue_action(persist_write);
}
Esempio n. 6
0
void start_up() {
	// Check and create our 400PLUS folder
	status.folder_exists = check_create_folder();

	// Recover persisting information
	persist_read();

	// Read settings from file
	settings_read();

	// If configured, start debug mode
	if (settings.debug_on_poweron)
		start_debug_mode();

	// If configured, restore AEB
	if (settings.persist_aeb)
		send_to_intercom(IC_SET_AE_BKT, persist.aeb);

	// Enable IR remote
	// i'm not sure where to call this? perhaps this isn't the right place.
	if (settings.remote_enable)
		remote_on();

	// Enable extended ISOs
	// Enable (hidden) CFn.8 for ISO H
	send_to_intercom(IC_SET_CF_EXTEND_ISO, 1);

	// Enable realtime ISO change
	send_to_intercom(IC_SET_REALTIME_ISO_0, 0);
	send_to_intercom(IC_SET_REALTIME_ISO_1, 0);

	// Set current language
	enqueue_action(lang_pack_init);

	// Read custom modes configuration from file
	enqueue_action(cmodes_read);

	// And optionally apply a custom mode
	enqueue_action(cmode_recall);

    // turn off the blue led after it was lighten by our hack_task_MainCtrl()
	eventproc_EdLedOff();

#ifdef MEMSPY
	debug_log("starting memspy task");
	CreateTask("memspy", 0x1e, 0x1000, memspy_task, 0);
#endif

#if 0
	debug_log("=== DUMPING DDD ===");
	printf_DDD_log( (void*)(int)(0x00007604+0x38) );

	debug_log("maindlg @ 0x%08X, handler @ 0x%08X", hMainDialog, hMainDialog->event_handler);

	debug_log("dumping");
	long *addr   = (long*) 0x7F0000;

	int file = FIO_OpenFile("A:/dump.bin", O_CREAT | O_WRONLY , 644);

	if (file != -1) {
		FIO_WriteFile(file, addr, 0xFFFF);
		FIO_CloseFile(file);
		beep();
	}
#endif
}
Esempio n. 7
0
void autoiso_disable() {
	if (settings.autoiso_enable) {
		settings.autoiso_enable = FALSE;
		enqueue_action(settings_write);
	}
}
Esempio n. 8
0
File: qexp.c Progetto: AEUG/400plus
void qexp(void) {
	int weight;

	ec_t diff, ec_tmp;

	av_t av = status.measured_av;
	tv_t tv = status.measured_tv;
	ec_t ec = status.measured_ec;

	av_t av_max = DPData.ef_lens_exist ? DPData.avmax : AV_MAX;
	av_t av_min = DPData.ef_lens_exist ? DPData.avo   : AV_MIN;

	if (status.measuring) {
		// Set lens to maximum aperture
		diff = av_min - av;

		av += diff;
		ec -= diff;

		// Set shutter to 1/60
		diff = settings.qexp_mintv - tv;

		tv += diff;
		ec -= diff;

		// If under-exposing, increase shutter speed
		if (ec < 0) {
			diff = MAX(tv + ec, TV_MIN) - tv;

			tv += diff;
			ec -= diff;
		}

		// If over-exposing, split the blame
		if (ec > 0) {
			ec_tmp = ec;

			switch (settings.qexp_weight) {
			default:
			case QEXP_WEIGHT_NONE: weight = 2; break;
			case QEXP_WEIGHT_AV  : weight = 3; break;
			case QEXP_WEIGHT_TV  : weight = 1; break;
			}

			diff = MIN(av + weight * ec_tmp / 4, av_max) - av;

			av += diff;
			ec -= diff;

			weight = 3 - weight;

			diff  = MIN(tv + weight * ec_tmp / 4, TV_MAX) - tv;

			tv += diff;
			ec -= diff;
		}

		// If still over-exposing, one of Av / Tv reached a maximum
		if (ec > 0) {
			diff = MIN(tv + ec, TV_MAX) - tv;

			tv += diff;
			ec -= diff;

			diff = MIN(av + ec, av_max) - av;

			av += diff;
			ec -= diff;
		}

		send_to_intercom(IC_SET_AV_VAL, ev_normalize(av));
		send_to_intercom(IC_SET_TV_VAL, ev_normalize(tv));

		enqueue_action(beep);
	}
}