void autoiso() { ev_t limit; ec_t ec = EC_ZERO; ev_t ev = EV_ZERO; iso_t newiso; switch (DPData.ae) { case AE_MODE_M: if (DPData.tv_val != TV_VAL_BULB) { // M mode: set ISO to match exposure ec = - (status.measured_ec - persist.ev_comp); // Normalize an apply new ISO if (ec != EC_ZERO) { if (settings.autoiso_relaxed) ec = (ec - 1) / 3; newiso = DPData.iso + ec; newiso = CLAMP(newiso, settings.autoiso_miniso, settings.autoiso_maxiso); newiso = EV_ROUND(newiso); send_to_intercom(IC_SET_ISO, newiso); } } return; case AE_MODE_P: case AE_MODE_AV: // P / Av mode: raise ISO if shutter time is lower than limit ev = status.measured_tv; limit = settings.autoiso_mintv; break; case AE_MODE_TV: // Tv mode: raise ISO if apperture is larger than lens' max plus offset ev = status.measured_av; limit = DPData.avo + settings.autoiso_maxav; break; default: return; } // Decide whether we need to change current ISO if (ev != EC_ZERO) { if (ev < limit) ec = (limit - ev) + EV_CODE(1, 0); else if (ev >= limit + EV_CODE(1, 0)) ec = (limit - ev); } // Normalize an apply new ISO if (ec != EC_ZERO) { newiso = DPData.iso + ec; newiso = CLAMP(newiso, settings.autoiso_miniso, settings.autoiso_maxiso); newiso = EV_TRUNC(newiso); send_to_intercom(IC_SET_ISO, newiso); } }
static void parse_user_command_lsu_in(char *str) { char *oldstack, *job_id; player *p; char empty_string[2]; empty_string[0] = 0; oldstack = stack; /*Format will be job_id */ job_id = str; if (!job_id || !*job_id) { log("error", "Bad format in lsu from intercom.\n"); return; } send_to_intercom(NULL, "%c%c%s:x:%c", REPLY_IS, COMMAND_LSU, job_id, (char) INCOMPLETE_MESSAGE); p = make_dummy_intercom_player(); lsu(p, empty_string); send_to_intercom(NULL, "%c", (char) END_MESSAGE); stack = oldstack; return; }
void viewfinder_end() { switch (status.vf_status) { case(VF_STATUS_ISO): switch (DPData.ae) { case AE_MODE_M: case AE_MODE_TV: // Restore previous state send_to_intercom(IC_SET_CF_EMIT_FLASH, vf_DPData.cf_emit_aux); send_to_intercom(IC_SET_TV_VAL, vf_DPData.tv_val); break; case AE_MODE_P: case AE_MODE_AV: send_to_intercom(IC_SET_BURST_COUNTER, 9); break; default: break; } break; case(VF_STATUS_MSM): msm_release(); break; default: break; } status.vf_status = VF_STATUS_NONE; }
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 intercom_site_move(player * p, char *str) { char *site = 0, *port = 0; char *oldstack; oldstack = stack; site = str; if (p->flags & BLOCK_SU) { tell_player(p, "Please go on duty to do that.\n"); return; } if (site && *site) { port = strchr(site, ':'); if (port) *port++ = 0; } if (!port || !*port || !site || !*site) { tell_player(p, " Format: intercom announce_move sitename:portnumber\n"); return; } TELLPLAYER(p, " Informing all remote talkers of the address change to " "%s %s\n", site, port); send_to_intercom(p, "%c%s:%s", WE_ARE_MOVING, site, port); close_intercom(p, str); return; }
void do_intercom_think(player * p, char *str) { char *oldstack; oldstack = stack; if (!str || !*str) { log("error", "Zero length string passed to do_intercom_think\n"); return; } TELLPLAYER(p, " You think . o O ( %s )\n", str); sprintf(oldstack, "%s thinks . o O ( %s )\n", p->name, str); stack = end_string(oldstack); tell_room_but(p, intercom_room, oldstack); stack = oldstack; send_to_intercom(p, "%c%c%s:x:x:thinks . o O ( %s )", USER_COMMAND, COMMAND_EMOTE, p->name, str); return; }
void do_intercom_tell(player * p, char *str) { char *name, *talker, *msg, *oldstack; list_ent *l = 0; /*Assume we have a str and a space and a message, as we checked it before calling it */ name = str; msg = strchr(name, ' '); *msg++ = '\0'; if (strchr(name, ',')) { tell_player(p, " You cannot do chain tells to people and include remote" " talkers.\n"); return; } talker = strchr(name, '@'); if (talker) { l = find_list_entry(p, name); if (!l) l = find_list_entry(p, talker); *talker++ = '\0'; } if (!name || !*name || !talker || !*talker) { tell_player(p, " Badly formed remote address.\n"); return; } if (!l) l = find_list_entry(p, "@"); if (!l) l = find_list_entry(p, name); oldstack = stack; if (l) { if (l->flags & (IGNORE | BLOCK)) { sprintf(oldstack, " You cannot tell to them, as you are %sing" " %s.\n", l->flags & IGNORE ? "ignor" : "block", l->name); stack = end_string(oldstack); tell_player(p, oldstack); return; } } send_to_intercom(p, "%c%c%s:%s:%s:%s", USER_COMMAND, COMMAND_TELL, p->name, talker, name, msg); command_type = 0; return; }
void viewfinder_change_iso(iso_t iso) { // Set new ISO send_to_intercom(IC_SET_ISO, iso); // Display new ISO viewfinder_display_iso(iso); }
void do_intercom_emote(player * p, char *str) { char *oldstack; oldstack = stack; if (!str || !*str) { log("error", "Zero length string passed to do_intercom_emote\n"); return; } if (*str == '\'') TELLPLAYER(p, " You emote: %s%s\n", p->name, str); else TELLPLAYER(p, " You emote: %s %s\n", p->name, str); if (*str == '\'') sprintf(oldstack, "%s%s\n", p->name, str); else sprintf(oldstack, "%s %s\n", p->name, str); stack = end_string(oldstack); tell_room_but(p, intercom_room, oldstack); stack = oldstack; send_to_intercom(p, "%c%c%s:x:x:%s", USER_COMMAND, COMMAND_EMOTE, p->name, str); return; }
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; }
void intercom_update_servers(player * p, char *str) { tell_player(p, " Requesting talker lists from all connected talkers.\n"); send_to_intercom(p, "%c", REQUEST_SERVER_LIST); return; }
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; }
void open_intercom(player * p, char *str) { if (p->flags & BLOCK_SU) { tell_player(p, "Please go on duty to do that.\n"); return; } send_to_intercom(p, "%c%s:", OPEN_ALL_LINKS, p->name); }
static void parse_user_command_finger_in(char *str) { char *oldstack, *job_id, *name = 0; player *p; oldstack = stack; /*Format will be job_id:name */ job_id = str; if (job_id && *job_id) { name = strchr(job_id, ':'); if (name) *name++ = '\0'; } if (!name || !*name || !job_id || !*job_id) { log("error", "Bad format in finger from intercom.\n"); return; } if (!strcasecmp(name, "me")) { send_to_intercom(NULL, "%c%c%s:me", REPLY_IS, NO_SUCH_PLAYER, job_id); return; } if (!strcasecmp(name, "friends")) { send_to_intercom(NULL, "%c%c%s:friends", REPLY_IS, NO_SUCH_PLAYER, job_id); return; } send_to_intercom(NULL, "%c%c%s:x:%c", REPLY_IS, COMMAND_FINGER, job_id, (char) INCOMPLETE_MESSAGE); p = make_dummy_intercom_player(); newfinger(p, name); send_to_intercom(NULL, "%c", (char) END_MESSAGE); stack = oldstack; return; }
void unbar_talker(player * p, char *str) { if (!*str) { tell_player(p, " Format: unbar <name>\n"); return; } send_to_intercom(p, "%c%s:%s", UNBAR_LINK, p->name, str); return; }
void intercom_ping(player * p, char *str) { if (!*str) { tell_player(p, " Format: ping <talker>\n"); return; } send_to_intercom(p, "%c%s:%s", OPEN_LINK, p->name, str); return; }
void delete_intercom_server(player * p, char *str) { if (!*str) { tell_player(p, " Format: delete_server <name|alias>\n"); return; } send_to_intercom(p, "%c%s:%s", DELETE_LINK, p->name, str); return; }
void intercom_unhide(player * p, char *str) { if (!*str) { tell_player(p, " Format: intercom unhide <talker>\n"); return; } send_to_intercom(p, "%c%s:%s", UNHIDE_ENTRY, p->name, str); return; }
static void parse_user_command_examine_in(char *str) { char *oldstack, *job_id, *name = 0; player *p; oldstack = stack; /*Format will be job_id:name */ job_id = str; if (job_id && *job_id) { name = strchr(job_id, ':'); if (name) *name++ = '\0'; } if (!name || !*name || !job_id || !*job_id) { log("error", "Bad format in examine from intercom.\n"); return; } if (!strcasecmp(name, "me")) { send_to_intercom(NULL, "%c%c%s:me", REPLY_IS, NO_SUCH_PLAYER, job_id); return; } /*We know they are here, and exist, so we can examine, otherwise end */ send_to_intercom(NULL, "%c%c%s:x:%c", REPLY_IS, COMMAND_EXAMINE, job_id, (char) INCOMPLETE_MESSAGE); p = make_dummy_intercom_player(); newexamine(p, name); send_to_intercom(NULL, "%c", (char) END_MESSAGE); stack = oldstack; return; }
void add_intercom_server(player * p, char *str) { char *name, *abbr, *addr, *port, *oldstack; name = str; abbr = 0; addr = 0; port = 0; if (*name) { abbr = strchr(name, ':'); if (abbr) { *abbr++ = '\0'; if (*abbr) { addr = strchr(abbr, ':'); if (addr) { *addr++ = '\0'; if (*addr) { port = strchr(addr, ':'); if (port) *port++ = '\0'; } } } } } if (!port || !*port || !*addr || !*abbr || !name || !*name) { tell_player(p, "Format: add_server " "<name>:<abbreviation>:<address>:<port>\n"); return; } oldstack = stack; sprintf(oldstack, " Sending request to intercom to add %s to the database, " "at address %s %s, abbreviated to %s.\n", name, addr, port, abbr); stack = end_string(oldstack); tell_player(p, oldstack); stack = oldstack; send_to_intercom(p, "%c%s:%s:%s:%s:%s:O", ADD_NEW_LINK, p->name, name, abbr, addr, port); return; }
void display_brightness() { if (settings.button_disp) switch (FLAG_GUI_MODE) { case GUIMODE_OFF: send_to_intercom(IC_SET_LCD_BRIGHTNESS, 1); press_button(IC_BUTTON_DISP); break; case GUIMODE_OLC: if (DPData.lcd_brightness < 7) send_to_intercom(IC_SET_LCD_BRIGHTNESS, 1 + DPData.lcd_brightness); else press_button(IC_BUTTON_DISP); break; default: press_button(IC_BUTTON_DISP); break; } else press_button(IC_BUTTON_DISP); }
void do_intercom_who(player * p, char *str) { /*Sanity check */ if (!*str || *str != '@' || !*(str + 1)) { log("error", "Intercom who called with invalid arg"); return; } send_to_intercom(p, "%c%c%s:%s:%s:%s", USER_COMMAND, COMMAND_WHO, p->name, str + 1, "x", "x"); return; }
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 dump_memory() { char filename[20] = "A:/12345678.MEM"; time_t t; struct tm tm; time(&t); localtime_r(&t, &tm); sprintf(filename, "A:/%02d%02d%02d%02d.MEM", tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); debug_log("Dumping memory to %s.\n", filename); int file = FIO_OpenFile(filename, O_CREAT | O_WRONLY , 644); if (file == -1) { debug_log("ERROR: can't open file for writing (%s)", filename); beep(); beep(); } else { int addr=0; int power_off_state = DPData.auto_power_off; send_to_intercom(IC_SET_AUTO_POWER_OFF, false); while (addr<0x800000) { // dump 8MB of RAM char buf[0x800]; // i don't know why, but if we try to pass the mem address (addr) directly to // FIO_WriteFile, we get zero-filled file... so we need local buffer as a proxy // note: do not increase the size of the local buffer too much, because it is in the stack LEDBLUE ^= 2; memcpy(buf, (void*)addr, 0x800); FIO_WriteFile(file, buf, 0x800); addr += 0x800; } FIO_CloseFile(file); send_to_intercom(IC_SET_AUTO_POWER_OFF, power_off_state); } beep(); }
void intercom_locate_name(player * p, char *str) { /*Sanity check */ if (!str || !*str) { tell_player(p, " Format: intercom locate <name>\n"); return; } send_to_intercom(p, "%c%c%s:x:%s:x", USER_COMMAND, COMMAND_LOCATE, p->name, str); return; }
void list_intercom_servers(player * p, char *str) { if (str && *str) { if (!strcasecmp(str, "hidden") && p->residency & PSU) { send_to_intercom(p, "%c%c%s:", SHOW_LINKS, LIST_HIDDEN, p->name); return; } if (!strcasecmp(str, "up")) { send_to_intercom(p, "%c%c%s:", SHOW_LINKS, LIST_UP, p->name); return; } if (isalpha(*str)) { send_to_intercom(p, "%c%c%s:", SHOW_LINKS, tolower(*str), p->name); } } send_to_intercom(p, "%c%c%s:", SHOW_LINKS, LIST_ALL, p->name); return; }
void intercom_banish(player * p, char *str) { if (!*str) { tell_player(p, " Format: banish <name|alias>\n"); return; } if (p->flags & BLOCK_SU) { tell_player(p, "Please go on duty to do that.\n"); return; } send_to_intercom(p, "%c%s:%s", BANISH_SITE, p->name, str); return; }
void kill_intercom() { if (intercom_fd > 0) send_to_intercom(NULL, "%c", INTERCOM_DIE); intercom_fd = -1; if (!(sys_flags & SHUTDOWN) && (!current_player)) log("error", "Shutting down intercom server.\n"); if (intercom_pid > 1) /*if (kill(intercom_pid, SIGHUP) < 0) */ kill(intercom_pid, SIGKILL); intercom_pid = -1; return; }
void do_intercom_say(player * p, char *str) { char *ptr, *oldstack; const char *method; oldstack = stack; ptr = strchr(str, 0); ptr--; if (ptr < str) { log("error", "Zero length string passed to do_intercom_say\n"); return; } switch (*ptr) { case '!': method = "exclaim"; break; case '?': method = "ask"; break; default: method = "say"; break; } TELLPLAYER(p, " You %s '%s'\n", method, str); sprintf(oldstack, "%s %ss '%s'\n", p->name, method, str); stack = end_string(oldstack); tell_room_but(p, intercom_room, oldstack); stack = oldstack; send_to_intercom(p, "%c%c%s:x:x:%s", USER_COMMAND, COMMAND_SAY, p->name, str); return; }
static void parse_user_command_who_in(char *str) { char *oldstack; player *scan; int count = 0; if (!str || !*str) return; oldstack = stack; scan = flatlist_start; while (scan) { if (scan->location) { sprintf(stack, "%s%s:", scan->location == intercom_room ? "*" : "", scan->name); stack = strchr(stack, 0); count++; } scan = scan->flat_next; } if (count > 0) { stack--; *stack = 0; } sprintf(stack, "\nThere %s currently %d user%s connected to ", count != 1 ? "are" : "is", count, count != 1 ? "s" : ""); stack = end_string(stack); send_to_intercom(NULL, "%c%c%s:x:%s", REPLY_IS, COMMAND_WHO, str, oldstack); stack = oldstack; return; }