1 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
3 import android.util.Log;
4 import android.util.SparseIntArray;
6 import androidx.annotation.NonNull;
7 import androidx.annotation.Nullable;
8 import androidx.collection.SparseArrayCompat;
9 import androidx.fragment.app.FragmentActivity;
11 import net.osdn.gokigen.gr2control.R;
12 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
13 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.FujiXReplyMessageReceiver;
14 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
15 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.SetPropertyValue;
16 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXBatteryMode;
17 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXCameraProperties;
18 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFSSControl;
19 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFilmSimulation;
20 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFlashMode;
21 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFocusingMode;
22 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXImageAspectMode;
23 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXImageFormatMode;
24 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXShootingMode;
25 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXTimerMode;
26 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXWhiteBalanceMode;
27 import net.osdn.gokigen.gr2control.liveview.ICameraStatusUpdateNotify;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Locale;
33 class FujiXStatusHolder
35 private final String TAG = toString();
36 private final FragmentActivity activity;
37 private final IFujiXCommandPublisher publisher;
38 private static final boolean logcat = true;
39 private SparseIntArray statusHolder;
40 private SparseArrayCompat<String> statusNameArray;
42 FujiXStatusHolder(@NonNull FragmentActivity activity, @NonNull IFujiXCommandPublisher publisher)
44 statusHolder = new SparseIntArray();
47 this.activity = activity;
48 this.publisher = publisher;
49 statusNameArray = new SparseArrayCompat<>();
50 prepareStatusNameArray();
53 private void prepareStatusNameArray()
55 statusNameArray.clear();
56 statusNameArray.append(IFujiXCameraProperties.BATTERY_LEVEL, IFujiXCameraProperties.BATTERY_LEVEL_STR);
57 statusNameArray.append(IFujiXCameraProperties.WHITE_BALANCE, IFujiXCameraProperties.WHITE_BALANCE_STR);
58 statusNameArray.append(IFujiXCameraProperties.APERTURE, IFujiXCameraProperties.APERTURE_STR);
59 statusNameArray.append(IFujiXCameraProperties.FOCUS_MODE, IFujiXCameraProperties.FOCUS_MODE_STR);
60 statusNameArray.append(IFujiXCameraProperties.SHOOTING_MODE, IFujiXCameraProperties.SHOOTING_MODE_STR);
61 statusNameArray.append(IFujiXCameraProperties.FLASH, IFujiXCameraProperties.FLASH_STR);
62 statusNameArray.append(IFujiXCameraProperties.EXPOSURE_COMPENSATION, IFujiXCameraProperties.EXPOSURE_COMPENSATION_STR);
63 statusNameArray.append(IFujiXCameraProperties.SELF_TIMER, IFujiXCameraProperties.SELF_TIMER_STR);
64 statusNameArray.append(IFujiXCameraProperties.FILM_SIMULATION, IFujiXCameraProperties.FILM_SIMULATION_STR);
65 statusNameArray.append(IFujiXCameraProperties.IMAGE_FORMAT, IFujiXCameraProperties.IMAGE_FORMAT_STR);
66 statusNameArray.append(IFujiXCameraProperties.RECMODE_ENABLE, IFujiXCameraProperties.RECMODE_ENABLE_STR);
67 statusNameArray.append(IFujiXCameraProperties.F_SS_CONTROL, IFujiXCameraProperties.F_SS_CONTROL_STR);
68 statusNameArray.append(IFujiXCameraProperties.ISO, IFujiXCameraProperties.ISO_STR);
69 statusNameArray.append(IFujiXCameraProperties.MOVIE_ISO, IFujiXCameraProperties.MOVIE_ISO_STR);
70 statusNameArray.append(IFujiXCameraProperties.FOCUS_POINT, IFujiXCameraProperties.FOCUS_POINT_STR);
71 statusNameArray.append(IFujiXCameraProperties.DEVICE_ERROR, IFujiXCameraProperties.DEVICE_ERROR_STR);
72 statusNameArray.append(IFujiXCameraProperties.IMAGE_FILE_COUNT, IFujiXCameraProperties.IMAGE_FILE_COUNT_STR);
73 statusNameArray.append(IFujiXCameraProperties.SDCARD_REMAIN_SIZE, IFujiXCameraProperties.SDCARD_REMAIN_SIZE_STR);
74 statusNameArray.append(IFujiXCameraProperties.FOCUS_LOCK, IFujiXCameraProperties.FOCUS_LOCK_STR);
75 statusNameArray.append(IFujiXCameraProperties.MOVIE_REMAINING_TIME, IFujiXCameraProperties.MOVIE_REMAINING_TIME_STR);
76 statusNameArray.append(IFujiXCameraProperties.SHUTTER_SPEED, IFujiXCameraProperties.SHUTTER_SPEED_STR);
77 statusNameArray.append(IFujiXCameraProperties.IMAGE_ASPECT, IFujiXCameraProperties.IMAGE_ASPECT_STR);
78 statusNameArray.append(IFujiXCameraProperties.BATTERY_LEVEL_2, IFujiXCameraProperties.BATTERY_LEVEL_2_STR);
79 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF00, IFujiXCameraProperties.UNKNOWN_DF00_STR);
80 statusNameArray.append(IFujiXCameraProperties.PICTURE_JPEG_COUNT, IFujiXCameraProperties.PICTURE_JPEG_COUNT_STR);
81 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D400, IFujiXCameraProperties.UNKNOWN_D400_STR);
82 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D401, IFujiXCameraProperties.UNKNOWN_D401_STR);
83 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D52F, IFujiXCameraProperties.UNKNOWN_D52F_STR);
84 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D245, IFujiXCameraProperties.UNKNOWN_D245_STR);
85 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF41, IFujiXCameraProperties.UNKNOWN_DF41_STR);
86 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF26, IFujiXCameraProperties.UNKNOWN_DF26_STR);
87 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF27, IFujiXCameraProperties.UNKNOWN_DF27_STR);
90 void updateValue(@Nullable ICameraStatusUpdateNotify notifier, int id, byte data0, byte data1, byte data2, byte data3)
94 int value = ((((int) data3) & 0xff) << 24) + ((((int) data2) & 0xff) << 16) + ((((int) data1) & 0xff) << 8) + (((int) data0) & 0xff);
95 int currentValue = statusHolder.get(id, -1);
96 //logcat(String.format(Locale.US, " STATUS [id: 0x%04x] 0x%08x(%d) -> 0x%08x(%d)", id, currentValue, currentValue, value, value));
97 if ((notifier != null) && (currentValue != value))
99 statusHolder.put(id, value);
100 //logcat(String.format(Locale.US," STATUS UPDATE [id: 0x%04x] 0x%08x(%d) -> 0x%08x(%d)", id, currentValue, currentValue, value, value));
101 updateDetected(notifier, id, currentValue, value);
110 private void updateDetected(@NonNull ICameraStatusUpdateNotify notifier, int id, int previous, int current)
114 //String idName = statusNameArray.get(id, "Unknown");
115 //logcat(String.format(Locale.US, " << UPDATE STATUS >> id: 0x%04x[%s] 0x%08x(%d) -> 0x%08x(%d)", id, idName, previous, previous, current, current));
118 case IFujiXCameraProperties.FOCUS_LOCK:
119 updateFocusedStatus(notifier, previous, current);
121 case IFujiXCameraProperties.SHOOTING_MODE:
122 updatedTakeMode(notifier, previous, current);
124 case IFujiXCameraProperties.BATTERY_LEVEL:
125 case IFujiXCameraProperties.BATTERY_LEVEL_2:
126 updateBatteryLevel(notifier, previous, current);
128 case IFujiXCameraProperties.FOCUS_MODE:
129 updateFocusMode(notifier, previous, current);
131 case IFujiXCameraProperties.APERTURE:
132 updateAperture(notifier, previous, current);
134 case IFujiXCameraProperties.SHUTTER_SPEED:
135 updateShutterSpeed(notifier, previous, current);
137 case IFujiXCameraProperties.WHITE_BALANCE:
138 updateWhiteBalance(notifier, previous, current);
140 case IFujiXCameraProperties.EXPOSURE_COMPENSATION:
141 updateExposureCompensation(notifier, previous, current);
143 case IFujiXCameraProperties.ISO:
144 updateIsoSensitivity(notifier, previous, current);
146 case IFujiXCameraProperties.DEVICE_ERROR:
147 updateDeviceError(notifier, previous, current);
149 case IFujiXCameraProperties.SELF_TIMER:
150 updateSelfTimer(notifier, previous, current);
152 case IFujiXCameraProperties.SDCARD_REMAIN_SIZE:
153 updateSdCardRemainSize(notifier, previous, current);
155 case IFujiXCameraProperties.MOVIE_REMAINING_TIME:
156 updateMovieRemainTime(notifier, previous, current);
158 case IFujiXCameraProperties.FOCUS_POINT:
159 updateFocusPoint(notifier, previous, current);
161 case IFujiXCameraProperties.F_SS_CONTROL:
162 updateFSSControl(notifier, previous, current);
164 case IFujiXCameraProperties.IMAGE_ASPECT:
165 updateImageAspect(notifier, previous, current);
167 case IFujiXCameraProperties.FILM_SIMULATION:
168 updateFilmSimulation(notifier, previous, current);
170 case IFujiXCameraProperties.FLASH:
171 updateFlashMode(notifier, previous, current);
173 case IFujiXCameraProperties.IMAGE_FORMAT:
174 updateImageFormat(notifier, previous, current);
176 case IFujiXCameraProperties.UNKNOWN_D245:
177 case IFujiXCameraProperties.UNKNOWN_DF41:
178 case IFujiXCameraProperties.UNKNOWN_DF26:
179 case IFujiXCameraProperties.UNKNOWN_DF27:
181 updateUnknownValue(id, previous, current);
191 private void updateImageFormat(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
196 case IFujiXImageFormatMode.IMAGE_FORMAT_RAW:
199 case IFujiXImageFormatMode.IMAGE_FORMAT_FINE:
202 case IFujiXImageFormatMode.IMAGE_FORMAT_NORMAL:
205 case IFujiXImageFormatMode.IMAGE_FORMAT_FINE_RAW:
208 case IFujiXImageFormatMode.IMAGE_FORMAT_NORMAL_RAW:
212 value = "UNKNOWN : " + current;
215 logcat(" Image Format : " + value);
218 private void updateFlashMode(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
223 case IFujiXFlashMode.FLASH_AUTO:
226 case IFujiXFlashMode.FLASH_OFF:
229 case IFujiXFlashMode.FLASH_FILL:
232 case IFujiXFlashMode.FLASH_REDEYE_AUTO:
233 value = "REDEYE_AUTO";
235 case IFujiXFlashMode.FLASH_REDEYE_FILL:
236 value = "REDEYE_FILL";
238 case IFujiXFlashMode.FLASH_EXTERNAL_SYNC:
239 value = "EXTERNAL_SYNC";
241 case IFujiXFlashMode.FLASH_ON:
244 case IFujiXFlashMode.FLASH_REDEYE:
247 case IFujiXFlashMode.FLASH_REDEYE_ON:
250 case IFujiXFlashMode.FLASH_REDEYE_SYNC:
251 value = "REDEYE_SYNC";
253 case IFujiXFlashMode.FLASH_REDEYE_REAR:
254 value = "REDEYE_REAR";
256 case IFujiXFlashMode.FLASH_SLOW_SYNC:
259 case IFujiXFlashMode.FLASH_REAR_SYNC:
262 case IFujiXFlashMode.FLASH_COMMANDER:
265 case IFujiXFlashMode.FLASH_DISABLE:
268 case IFujiXFlashMode.FLASH_ENABLE:
272 value = " UNKNOWN : " + current;
275 logcat(" FLASH MODE : " + value);
278 private void updateFilmSimulation(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
283 case IFujiXFilmSimulation.FILM_SIMULATION_PROVIA:
286 case IFujiXFilmSimulation.FILM_SIMULATION_VELVIA:
289 case IFujiXFilmSimulation.FILM_SIMULATION_ASTIA:
292 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME:
295 case IFujiXFilmSimulation.FILM_SIMULATION_SEPIA:
298 case IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_HI:
301 case IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_STD:
304 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_Y_FILTER:
307 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_R_FILTER:
310 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_G_FILTER:
313 case IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_CHROME:
314 value = "CLASSIC CHROME";
316 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS:
319 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS_Y:
322 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS_R:
325 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS_G:
328 case IFujiXFilmSimulation.FILM_SIMULATION_ETERNA:
331 case IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE:
332 value = "CLASSIC NEGATIVE";
335 value = "??? " + current;
338 logcat(" FILM SIMULATION : " + value);
341 private void updateImageAspect(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
346 case IFujiXImageAspectMode.IMAGE_ASPECT_S_3x2:
349 case IFujiXImageAspectMode.IMAGE_ASPECT_S_16x9:
352 case IFujiXImageAspectMode.IMAGE_ASPECT_S_1x1:
355 case IFujiXImageAspectMode.IMAGE_ASPECT_M_3x2:
358 case IFujiXImageAspectMode.IMAGE_ASPECT_M_16x9:
361 case IFujiXImageAspectMode.IMAGE_ASPECT_M_1x1:
364 case IFujiXImageAspectMode.IMAGE_ASPECT_L_3x2:
367 case IFujiXImageAspectMode.IMAGE_ASPECT_L_16x9:
370 case IFujiXImageAspectMode.IMAGE_ASPECT_L_1x1:
374 value = "? " + current;
377 logcat(" Image Aspect : " + value);
381 private void updateFSSControl(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
386 case IFujiXFSSControl.F_SS_CTRL_BOTH:
389 case IFujiXFSSControl.F_SS_CTRL_F:
392 case IFujiXFSSControl.F_SS_CTRL_SS:
395 case IFujiXFSSControl.F_SS_CTRL_NONE:
399 value = "? " + current;
402 logcat(" F_SS : " + value);
405 private void updateUnknownValue(int id, int previous, int current)
407 logcat(String.format(Locale.US,"<< UPDATE UNKNOWN STATUS >> id: 0x%04x 0x%08x(%d) -> 0x%08x(%d)", id, previous, previous, current, current));
410 private void updateFocusPoint(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
412 logcat(String.format(Locale.ENGLISH, " Focus Point : %x ", current));
415 private void updateMovieRemainTime(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
417 logcat(" MOVIE REMAIN : " + current);
420 private void updateSdCardRemainSize(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
422 logcat(" SDCARD REMAIN : " + current);
425 private void updateSelfTimer(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
432 case IFujiXTimerMode.TIMER_OFF:
436 case IFujiXTimerMode.TIMER_1SEC:
440 case IFujiXTimerMode.TIMER_2SEC:
444 case IFujiXTimerMode.TIMER_5SEC:
448 case IFujiXTimerMode.TIMER_10SEC:
462 logcat(" SELF TIMER IS OFF (" + value + ")");
466 logcat(" SELF TIMER IS " + value + " sec.");
470 private void updateDeviceError(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
474 notifier.updateWarning("ERROR " + current);
478 private void updateIsoSensitivity(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
483 iso = "" + (0x0000ffff & current);
489 notifier.updateIsoSensitivity(iso);
492 private void updateExposureCompensation(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
494 String exposureCompensation = "";
497 float value = ((float) current / 1000.0f);
498 exposureCompensation = String.format(Locale.ENGLISH, "%+1.1f", value);
504 notifier.updatedExposureCompensation(exposureCompensation);
507 private void updateWhiteBalance(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
514 case IFujiXWhiteBalanceMode.WHITE_BALANCE_AUTO:
517 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FINE:
520 case IFujiXWhiteBalanceMode.WHITE_BALANCE_INCANDESCENT:
521 value = "Incandescent";
523 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FLUORESCENT_1:
524 value = "Fluorescent 1";
526 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FLUORESCENT_2:
527 value = "Fluorescent 2";
529 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FLUORESCENT_3:
530 value = "Fluorescent 3";
532 case IFujiXWhiteBalanceMode.WHITE_BALANCE_SHADE:
535 case IFujiXWhiteBalanceMode.WHITE_BALANCE_UNDERWATER:
536 value = "Underwater";
538 case IFujiXWhiteBalanceMode.WHITE_BALANCE_TEMPERATURE:
541 case IFujiXWhiteBalanceMode.WHITE_BALANCE_CUSTOM:
553 notifier.updatedWBMode(value);
556 private void updateShutterSpeed(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
558 String shutterSpeed = "--";
561 if ((0x80000000 & current) != 0)
563 int value = 0x0fffffff & current;
564 shutterSpeed = ("1/" + (value / 1000));
568 shutterSpeed = (current + "");
575 notifier.updatedShutterSpeed(shutterSpeed);
578 private void updateAperture(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
580 String aperature = "---";
583 float value = ((float) current / 100.0f);
584 aperature = String.format(Locale.ENGLISH, "%1.1f", value);
590 notifier.updatedAperture(aperature);
593 private void updateFocusMode(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
598 if (current == IFujiXFocusingMode.FOCUS_MANUAL)
602 else if (current == IFujiXFocusingMode.FOCUS_CONTINUOUS_AUTO)
606 else if (current == IFujiXFocusingMode.FOCUS_SINGLE_AUTO)
612 mode = mode + current;
614 logcat(" Focus Mode : " + mode);
617 private void updateFocusedStatus(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
622 notifier.updateFocusedStatus(true, true);
627 notifier.updateFocusedStatus(false, false);
631 private void updatedTakeMode(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
636 case IFujiXShootingMode.SHOOTING_MANUAL:
639 case IFujiXShootingMode.SHOOTING_PROGRAM:
642 case IFujiXShootingMode.SHOOTING_APERTURE:
645 case IFujiXShootingMode.SHOOTING_SHUTTER:
648 case IFujiXShootingMode.SHOOTING_CUSTOM:
651 case IFujiXShootingMode.SHOOTING_AUTO:
655 mode = mode + current;
658 notifier.updatedTakeMode(mode);
661 private void updateBatteryLevel(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
664 if ((current == IFujiXBatteryMode.BATTERY_CRITICAL) || (current == IFujiXBatteryMode.BATTERY_126S_CRITICAL))
668 else if (current == IFujiXBatteryMode.BATTERY_126S_ONE_BAR)
672 else if ((current == IFujiXBatteryMode.BATTERY_ONE_BAR) || (current == IFujiXBatteryMode.BATTERY_126S_TWO_BAR))
676 else if (current == IFujiXBatteryMode.BATTERY_126S_THREE_BAR)
680 else if ((current == IFujiXBatteryMode.BATTERY_TWO_BAR) || (current == IFujiXBatteryMode.BATTERY_126S_FOUR_BAR))
684 else // if ((current == IFujiXBatteryMode.BATTERY_FULL) || (current == IFujiXBatteryMode.BATTERY_126S_FULL))
688 notifier.updateRemainBattery(level);
693 * 認識したカメラのステータス名称のリストを応答する
696 private List<String> getAvailableStatusNameList()
698 ArrayList<String> selection = new ArrayList<>();
701 for (int index = 0; index < statusHolder.size(); index++)
703 int key = statusHolder.keyAt(index);
704 selection.add(statusNameArray.get(key, String.format(Locale.US, "0x%04x", key)));
715 List<String> getAvailableItemList(String listKey)
717 if ((listKey == null)||(listKey.isEmpty()))
720 return (getAvailableStatusNameList());
722 if (listKey.matches(ICameraStatus.EFFECT))
724 return (getAvailableEffectItemList());
726 if (listKey.matches(ICameraStatus.AE))
728 return (new ArrayList<>());
730 if (listKey.matches(ICameraStatus.WHITE_BALANCE))
732 return (getAvailableWhiteBalanceItemList());
734 if (listKey.matches(ICameraStatus.ISO_SENSITIVITY))
736 return (getAvailableIsoSensitivityItemList());
740 ///// 選択可能なステータスの一覧を取得する : でも以下はアイテム名の一覧... /////
742 ArrayList<String> selection = new ArrayList<>();
745 for (int index = 0; index < statusHolder.size(); index++)
747 int key = statusHolder.keyAt(index);
748 selection.add(statusNameArray.get(key));
756 return (new ArrayList<>());
759 private List<String> getAvailableEffectItemList()
761 // EFFECTの選択肢をリストにして返す : Film Simulation にした。
762 ArrayList<String> selection = new ArrayList<>();
763 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PROVIA_STR);
764 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_VELVIA_STR);
765 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ASTIA_STR);
766 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_STR);
767 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_SEPIA_STR);
768 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_HI_STR);
769 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_STD_STR);
770 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_Y_FILTER_STR);
771 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_R_FILTER_STR);
772 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_G_FILTER_STR);
773 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_CHROME_STR);
774 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_STR);
775 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_Y_STR);
776 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_R_STR);
777 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_G_STR);
778 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ETERNA_STR);
779 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE_STR);
783 private List<String> getAvailableWhiteBalanceItemList()
785 // WHITE BALANCEの選択肢をリストにして返す
786 ArrayList<String> selection = new ArrayList<>();
788 String[] items = activity.getResources().getStringArray(R.array.fuji_x_white_balance);
789 for (String item : items)
796 private List<String> getAvailableIsoSensitivityItemList()
798 // ISO感度設定の選択肢をリストにして返す
799 ArrayList<String> selection = new ArrayList<>();
804 private String getCurrentEffectStatus()
806 // EFFECTの現在状態を応答する : FILM Simulationにした
809 int value = statusHolder.get(IFujiXCameraProperties.FILM_SIMULATION);
810 List<String> itemList = getAvailableEffectItemList();
811 if ((value >= IFujiXFilmSimulation.FILM_SIMULATION_MIN)&&(value < itemList.size()))
813 return (itemList.get(value - 1));
823 private String getCurrentWhiteBalanceStatus()
825 // White Balanceの現在状態を取得する
828 int value = statusHolder.get(IFujiXCameraProperties.WHITE_BALANCE);
829 String[] items = activity.getResources().getStringArray(R.array.fuji_x_white_balance);
830 String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_white_balance_value);
832 for (String itemValue : itemValues)
834 int itemValueInt = Integer.parseInt(itemValue);
835 if (itemValueInt == value)
837 return (items[index]);
849 private String getCurrentIsoSensitivityStatus()
852 String isoValue = "";
855 int value = statusHolder.get(IFujiXCameraProperties.ISO);
856 int iso = ((0x0000ffff & value));
857 int auto = ((0xffff0000 & value));
860 isoValue = "A (" + iso + ")";
874 private void setEffectItem(String value)
879 List<String> itemList = getAvailableEffectItemList();
880 for (String item : itemList)
882 if (item.matches(value))
885 publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set Film Simulation", true), IFujiXCameraProperties.FILM_SIMULATION, 4, index));
897 private void setCurrentWhiteBalanceStatus(String value)
901 String[] items = activity.getResources().getStringArray(R.array.fuji_x_white_balance);
902 String[] itemValues = activity.getResources().getStringArray(R.array.fuji_x_white_balance_value);
904 for (String item : items)
906 if (item.matches(value))
909 String itemValue = itemValues[index];
910 int itemValueInt = Integer.parseInt(itemValue);
911 publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set White Balance", true), IFujiXCameraProperties.WHITE_BALANCE, 4, itemValueInt));
923 private void setCurrentIsoSensitivityStatus(String value)
930 String getItemStatus(String key)
932 if (key.matches(ICameraStatus.EFFECT))
934 return (getCurrentEffectStatus());
936 if (key.matches(ICameraStatus.WHITE_BALANCE))
938 return (getCurrentWhiteBalanceStatus());
940 if (key.matches(ICameraStatus.ISO_SENSITIVITY))
942 return (getCurrentIsoSensitivityStatus());
944 if (key.matches(ICameraStatus.TAKE_MODE))
950 int strIndex = key.indexOf("x");
951 Log.v(TAG, "getItemStatus() : " + key + " [" + strIndex + "]");
954 key = key.substring(strIndex + 1);
957 int id = Integer.parseInt(key, 16);
958 int value = statusHolder.get(id);
959 logcat("getItemStatus() value : " + value + " key : " + key + " [" + id + "]");
969 for (int index = 0; index < statusNameArray.size(); index++)
971 int id = statusNameArray.keyAt(index);
972 String strKey = statusNameArray.valueAt(index);
973 if (key.contentEquals(strKey))
975 int value = statusHolder.get(id);
984 return ("? [" + key + "]");
987 void setItemStatus(@NonNull String key, @NonNull String value)
993 Log.v(TAG, "setStatus(" + key + ", " + value + ")");
995 if (key.matches(ICameraStatus.EFFECT))
997 setEffectItem(value);
1000 if (key.matches(ICameraStatus.WHITE_BALANCE))
1002 setCurrentWhiteBalanceStatus(value);
1005 if (key.matches(ICameraStatus.ISO_SENSITIVITY))
1007 setCurrentIsoSensitivityStatus(value);
1015 e.printStackTrace();
1020 private void dumpStatus()
1024 Log.v(TAG, " - - - status - - - ");
1025 for (int index = 0; index < statusHolder.size(); index++)
1027 int key = statusHolder.keyAt(index);
1028 int value = statusHolder.get(key);
1029 Log.v(TAG, String.format("id : 0x%x value : %d (0x%x) ", key, value, value));
1031 Log.v(TAG, " - - - status - - - ");
1035 e.printStackTrace();
1039 private void logcat(String message)
1043 Log.v(TAG, message);