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); }
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); }
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(); }
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); } }
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); }
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 }
void autoiso_disable() { if (settings.autoiso_enable) { settings.autoiso_enable = FALSE; enqueue_action(settings_write); } }
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); } }