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;
10 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
11 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.FujiXReplyMessageReceiver;
12 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
13 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.SetPropertyValue;
14 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXBatteryMode;
15 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXCameraProperties;
16 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFSSControl;
17 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFilmSimulation;
18 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFlashMode;
19 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXFocusingMode;
20 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXImageAspectMode;
21 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXImageFormatMode;
22 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXShootingMode;
23 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXTimerMode;
24 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.values.IFujiXWhiteBalanceMode;
25 import net.osdn.gokigen.gr2control.liveview.ICameraStatusUpdateNotify;
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.Locale;
31 class FujiXStatusHolder
33 private final String TAG = toString();
34 private final IFujiXCommandPublisher publisher;
35 private static final boolean logcat = true;
36 private SparseIntArray statusHolder;
37 private SparseArrayCompat<String> statusNameArray;
39 FujiXStatusHolder(@NonNull IFujiXCommandPublisher publisher)
41 statusHolder = new SparseIntArray();
44 this.publisher = publisher;
45 statusNameArray = new SparseArrayCompat<>();
46 prepareStatusNameArray();
49 private void prepareStatusNameArray()
51 statusNameArray.clear();
52 statusNameArray.append(IFujiXCameraProperties.BATTERY_LEVEL, IFujiXCameraProperties.BATTERY_LEVEL_STR);
53 statusNameArray.append(IFujiXCameraProperties.WHITE_BALANCE, IFujiXCameraProperties.WHITE_BALANCE_STR);
54 statusNameArray.append(IFujiXCameraProperties.APERTURE, IFujiXCameraProperties.APERTURE_STR);
55 statusNameArray.append(IFujiXCameraProperties.FOCUS_MODE, IFujiXCameraProperties.FOCUS_MODE_STR);
56 statusNameArray.append(IFujiXCameraProperties.SHOOTING_MODE, IFujiXCameraProperties.SHOOTING_MODE_STR);
57 statusNameArray.append(IFujiXCameraProperties.FLASH, IFujiXCameraProperties.FLASH_STR);
58 statusNameArray.append(IFujiXCameraProperties.EXPOSURE_COMPENSATION, IFujiXCameraProperties.EXPOSURE_COMPENSATION_STR);
59 statusNameArray.append(IFujiXCameraProperties.SELF_TIMER, IFujiXCameraProperties.SELF_TIMER_STR);
60 statusNameArray.append(IFujiXCameraProperties.FILM_SIMULATION, IFujiXCameraProperties.FILM_SIMULATION_STR);
61 statusNameArray.append(IFujiXCameraProperties.IMAGE_FORMAT, IFujiXCameraProperties.IMAGE_FORMAT_STR);
62 statusNameArray.append(IFujiXCameraProperties.RECMODE_ENABLE, IFujiXCameraProperties.RECMODE_ENABLE_STR);
63 statusNameArray.append(IFujiXCameraProperties.F_SS_CONTROL, IFujiXCameraProperties.F_SS_CONTROL_STR);
64 statusNameArray.append(IFujiXCameraProperties.ISO, IFujiXCameraProperties.ISO_STR);
65 statusNameArray.append(IFujiXCameraProperties.MOVIE_ISO, IFujiXCameraProperties.MOVIE_ISO_STR);
66 statusNameArray.append(IFujiXCameraProperties.FOCUS_POINT, IFujiXCameraProperties.FOCUS_POINT_STR);
67 statusNameArray.append(IFujiXCameraProperties.DEVICE_ERROR, IFujiXCameraProperties.DEVICE_ERROR_STR);
68 statusNameArray.append(IFujiXCameraProperties.IMAGE_FILE_COUNT, IFujiXCameraProperties.IMAGE_FILE_COUNT_STR);
69 statusNameArray.append(IFujiXCameraProperties.SDCARD_REMAIN_SIZE, IFujiXCameraProperties.SDCARD_REMAIN_SIZE_STR);
70 statusNameArray.append(IFujiXCameraProperties.FOCUS_LOCK, IFujiXCameraProperties.FOCUS_LOCK_STR);
71 statusNameArray.append(IFujiXCameraProperties.MOVIE_REMAINING_TIME, IFujiXCameraProperties.MOVIE_REMAINING_TIME_STR);
72 statusNameArray.append(IFujiXCameraProperties.SHUTTER_SPEED, IFujiXCameraProperties.SHUTTER_SPEED_STR);
73 statusNameArray.append(IFujiXCameraProperties.IMAGE_ASPECT, IFujiXCameraProperties.IMAGE_ASPECT_STR);
74 statusNameArray.append(IFujiXCameraProperties.BATTERY_LEVEL_2, IFujiXCameraProperties.BATTERY_LEVEL_2_STR);
75 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF00, IFujiXCameraProperties.UNKNOWN_DF00_STR);
76 statusNameArray.append(IFujiXCameraProperties.PICTURE_JPEG_COUNT, IFujiXCameraProperties.PICTURE_JPEG_COUNT_STR);
77 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D400, IFujiXCameraProperties.UNKNOWN_D400_STR);
78 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D401, IFujiXCameraProperties.UNKNOWN_D401_STR);
79 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D52F, IFujiXCameraProperties.UNKNOWN_D52F_STR);
80 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_D245, IFujiXCameraProperties.UNKNOWN_D245_STR);
81 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF41, IFujiXCameraProperties.UNKNOWN_DF41_STR);
82 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF26, IFujiXCameraProperties.UNKNOWN_DF26_STR);
83 statusNameArray.append(IFujiXCameraProperties.UNKNOWN_DF27, IFujiXCameraProperties.UNKNOWN_DF27_STR);
86 void updateValue(@Nullable ICameraStatusUpdateNotify notifier, int id, byte data0, byte data1, byte data2, byte data3)
90 int value = ((((int) data3) & 0xff) << 24) + ((((int) data2) & 0xff) << 16) + ((((int) data1) & 0xff) << 8) + (((int) data0) & 0xff);
91 int currentValue = statusHolder.get(id, -1);
92 //logcat(String.format(Locale.US, " STATUS [id: 0x%04x] 0x%08x(%d) -> 0x%08x(%d)", id, currentValue, currentValue, value, value));
93 if ((notifier != null) && (currentValue != value))
95 statusHolder.put(id, value);
96 //logcat(String.format(Locale.US," STATUS UPDATE [id: 0x%04x] 0x%08x(%d) -> 0x%08x(%d)", id, currentValue, currentValue, value, value));
97 updateDetected(notifier, id, currentValue, value);
106 private void updateDetected(@NonNull ICameraStatusUpdateNotify notifier, int id, int previous, int current)
110 //String idName = statusNameArray.get(id, "Unknown");
111 //logcat(String.format(Locale.US, " << UPDATE STATUS >> id: 0x%04x[%s] 0x%08x(%d) -> 0x%08x(%d)", id, idName, previous, previous, current, current));
114 case IFujiXCameraProperties.FOCUS_LOCK:
115 updateFocusedStatus(notifier, previous, current);
117 case IFujiXCameraProperties.SHOOTING_MODE:
118 updatedTakeMode(notifier, previous, current);
120 case IFujiXCameraProperties.BATTERY_LEVEL:
121 case IFujiXCameraProperties.BATTERY_LEVEL_2:
122 updateBatteryLevel(notifier, previous, current);
124 case IFujiXCameraProperties.FOCUS_MODE:
125 updateFocusMode(notifier, previous, current);
127 case IFujiXCameraProperties.APERTURE:
128 updateAperture(notifier, previous, current);
130 case IFujiXCameraProperties.SHUTTER_SPEED:
131 updateShutterSpeed(notifier, previous, current);
133 case IFujiXCameraProperties.WHITE_BALANCE:
134 updateWhiteBalance(notifier, previous, current);
136 case IFujiXCameraProperties.EXPOSURE_COMPENSATION:
137 updateExposureCompensation(notifier, previous, current);
139 case IFujiXCameraProperties.ISO:
140 updateIsoSensitivity(notifier, previous, current);
142 case IFujiXCameraProperties.DEVICE_ERROR:
143 updateDeviceError(notifier, previous, current);
145 case IFujiXCameraProperties.SELF_TIMER:
146 updateSelfTimer(notifier, previous, current);
148 case IFujiXCameraProperties.SDCARD_REMAIN_SIZE:
149 updateSdCardRemainSize(notifier, previous, current);
151 case IFujiXCameraProperties.MOVIE_REMAINING_TIME:
152 updateMovieRemainTime(notifier, previous, current);
154 case IFujiXCameraProperties.FOCUS_POINT:
155 updateFocusPoint(notifier, previous, current);
157 case IFujiXCameraProperties.F_SS_CONTROL:
158 updateFSSControl(notifier, previous, current);
160 case IFujiXCameraProperties.IMAGE_ASPECT:
161 updateImageAspect(notifier, previous, current);
163 case IFujiXCameraProperties.FILM_SIMULATION:
164 updateFilmSimulation(notifier, previous, current);
166 case IFujiXCameraProperties.FLASH:
167 updateFlashMode(notifier, previous, current);
169 case IFujiXCameraProperties.IMAGE_FORMAT:
170 updateImageFormat(notifier, previous, current);
172 case IFujiXCameraProperties.UNKNOWN_D245:
173 case IFujiXCameraProperties.UNKNOWN_DF41:
174 case IFujiXCameraProperties.UNKNOWN_DF26:
175 case IFujiXCameraProperties.UNKNOWN_DF27:
177 updateUnknownValue(id, previous, current);
187 private void updateImageFormat(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
192 case IFujiXImageFormatMode.IMAGE_FORMAT_RAW:
195 case IFujiXImageFormatMode.IMAGE_FORMAT_FINE:
198 case IFujiXImageFormatMode.IMAGE_FORMAT_NORMAL:
201 case IFujiXImageFormatMode.IMAGE_FORMAT_FINE_RAW:
204 case IFujiXImageFormatMode.IMAGE_FORMAT_NORMAL_RAW:
208 value = "UNKNOWN : " + current;
211 logcat(" Image Format : " + value);
214 private void updateFlashMode(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
219 case IFujiXFlashMode.FLASH_AUTO:
222 case IFujiXFlashMode.FLASH_OFF:
225 case IFujiXFlashMode.FLASH_FILL:
228 case IFujiXFlashMode.FLASH_REDEYE_AUTO:
229 value = "REDEYE_AUTO";
231 case IFujiXFlashMode.FLASH_REDEYE_FILL:
232 value = "REDEYE_FILL";
234 case IFujiXFlashMode.FLASH_EXTERNAL_SYNC:
235 value = "EXTERNAL_SYNC";
237 case IFujiXFlashMode.FLASH_ON:
240 case IFujiXFlashMode.FLASH_REDEYE:
243 case IFujiXFlashMode.FLASH_REDEYE_ON:
246 case IFujiXFlashMode.FLASH_REDEYE_SYNC:
247 value = "REDEYE_SYNC";
249 case IFujiXFlashMode.FLASH_REDEYE_REAR:
250 value = "REDEYE_REAR";
252 case IFujiXFlashMode.FLASH_SLOW_SYNC:
255 case IFujiXFlashMode.FLASH_REAR_SYNC:
258 case IFujiXFlashMode.FLASH_COMMANDER:
261 case IFujiXFlashMode.FLASH_DISABLE:
264 case IFujiXFlashMode.FLASH_ENABLE:
268 value = " UNKNOWN : " + current;
271 logcat(" FLASH MODE : " + value);
274 private void updateFilmSimulation(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
279 case IFujiXFilmSimulation.FILM_SIMULATION_PROVIA:
282 case IFujiXFilmSimulation.FILM_SIMULATION_VELVIA:
285 case IFujiXFilmSimulation.FILM_SIMULATION_ASTIA:
288 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME:
291 case IFujiXFilmSimulation.FILM_SIMULATION_SEPIA:
294 case IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_HI:
297 case IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_STD:
300 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_Y_FILTER:
303 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_R_FILTER:
306 case IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_G_FILTER:
309 case IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_CHROME:
310 value = "CLASSIC CHROME";
312 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS:
315 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS_Y:
318 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS_R:
321 case IFujiXFilmSimulation.FILM_SIMULATION_ACROS_G:
324 case IFujiXFilmSimulation.FILM_SIMULATION_ETERNA:
327 case IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE:
328 value = "CLASSIC NEGATIVE";
331 value = "??? " + current;
334 logcat(" FILM SIMULATION : " + value);
337 private void updateImageAspect(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
342 case IFujiXImageAspectMode.IMAGE_ASPECT_S_3x2:
345 case IFujiXImageAspectMode.IMAGE_ASPECT_S_16x9:
348 case IFujiXImageAspectMode.IMAGE_ASPECT_S_1x1:
351 case IFujiXImageAspectMode.IMAGE_ASPECT_M_3x2:
354 case IFujiXImageAspectMode.IMAGE_ASPECT_M_16x9:
357 case IFujiXImageAspectMode.IMAGE_ASPECT_M_1x1:
360 case IFujiXImageAspectMode.IMAGE_ASPECT_L_3x2:
363 case IFujiXImageAspectMode.IMAGE_ASPECT_L_16x9:
366 case IFujiXImageAspectMode.IMAGE_ASPECT_L_1x1:
370 value = "? " + current;
373 logcat(" Image Aspect : " + value);
377 private void updateFSSControl(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
382 case IFujiXFSSControl.F_SS_CTRL_BOTH:
385 case IFujiXFSSControl.F_SS_CTRL_F:
388 case IFujiXFSSControl.F_SS_CTRL_SS:
391 case IFujiXFSSControl.F_SS_CTRL_NONE:
395 value = "? " + current;
398 logcat(" F_SS : " + value);
401 private void updateUnknownValue(int id, int previous, int current)
403 logcat(String.format(Locale.US,"<< UPDATE UNKNOWN STATUS >> id: 0x%04x 0x%08x(%d) -> 0x%08x(%d)", id, previous, previous, current, current));
406 private void updateFocusPoint(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
408 logcat(String.format(Locale.ENGLISH, " Focus Point : %x ", current));
411 private void updateMovieRemainTime(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
413 logcat(" MOVIE REMAIN : " + current);
416 private void updateSdCardRemainSize(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
418 logcat(" SDCARD REMAIN : " + current);
421 private void updateSelfTimer(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
428 case IFujiXTimerMode.TIMER_OFF:
432 case IFujiXTimerMode.TIMER_1SEC:
436 case IFujiXTimerMode.TIMER_2SEC:
440 case IFujiXTimerMode.TIMER_5SEC:
444 case IFujiXTimerMode.TIMER_10SEC:
458 logcat(" SELF TIMER IS OFF (" + value + ")");
462 logcat(" SELF TIMER IS " + value + " sec.");
466 private void updateDeviceError(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
470 notifier.updateWarning("ERROR " + current);
474 private void updateIsoSensitivity(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
479 iso = "" + (0x0000ffff & current);
485 notifier.updateIsoSensitivity(iso);
488 private void updateExposureCompensation(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
490 String exposureCompensation = "";
493 float value = ((float) current / 1000.0f);
494 exposureCompensation = String.format(Locale.ENGLISH, "%+1.1f", value);
500 notifier.updatedExposureCompensation(exposureCompensation);
503 private void updateWhiteBalance(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
510 case IFujiXWhiteBalanceMode.WHITE_BALANCE_AUTO:
513 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FINE:
516 case IFujiXWhiteBalanceMode.WHITE_BALANCE_INCANDESCENT:
517 value = "Incandescent";
519 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FLUORESCENT_1:
520 value = "Fluorescent 1";
522 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FLUORESCENT_2:
523 value = "Fluorescent 2";
525 case IFujiXWhiteBalanceMode.WHITE_BALANCE_FLUORESCENT_3:
526 value = "Fluorescent 3";
528 case IFujiXWhiteBalanceMode.WHITE_BALANCE_SHADE:
531 case IFujiXWhiteBalanceMode.WHITE_BALANCE_UNDERWATER:
532 value = "Underwater";
534 case IFujiXWhiteBalanceMode.WHITE_BALANCE_TEMPERATURE:
537 case IFujiXWhiteBalanceMode.WHITE_BALANCE_CUSTOM:
549 notifier.updatedWBMode(value);
552 private void updateShutterSpeed(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
554 String shutterSpeed = "--";
557 if ((0x80000000 & current) != 0)
559 int value = 0x0fffffff & current;
560 shutterSpeed = ("1/" + (value / 1000));
564 shutterSpeed = (current + "");
571 notifier.updatedShutterSpeed(shutterSpeed);
574 private void updateAperture(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
576 String aperature = "---";
579 float value = ((float) current / 100.0f);
580 aperature = String.format(Locale.ENGLISH, "%1.1f", value);
586 notifier.updatedAperture(aperature);
589 private void updateFocusMode(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
594 if (current == IFujiXFocusingMode.FOCUS_MANUAL)
598 else if (current == IFujiXFocusingMode.FOCUS_CONTINUOUS_AUTO)
602 else if (current == IFujiXFocusingMode.FOCUS_SINGLE_AUTO)
608 mode = mode + current;
610 logcat(" Focus Mode : " + mode);
613 private void updateFocusedStatus(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
618 notifier.updateFocusedStatus(true, true);
623 notifier.updateFocusedStatus(false, false);
627 private void updatedTakeMode(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
632 case IFujiXShootingMode.SHOOTING_MANUAL:
635 case IFujiXShootingMode.SHOOTING_PROGRAM:
638 case IFujiXShootingMode.SHOOTING_APERTURE:
641 case IFujiXShootingMode.SHOOTING_SHUTTER:
644 case IFujiXShootingMode.SHOOTING_CUSTOM:
647 case IFujiXShootingMode.SHOOTING_AUTO:
651 mode = mode + current;
654 notifier.updatedTakeMode(mode);
657 private void updateBatteryLevel(@NonNull ICameraStatusUpdateNotify notifier, int previous, int current)
660 if ((current == IFujiXBatteryMode.BATTERY_CRITICAL) || (current == IFujiXBatteryMode.BATTERY_126S_CRITICAL))
664 else if (current == IFujiXBatteryMode.BATTERY_126S_ONE_BAR)
668 else if ((current == IFujiXBatteryMode.BATTERY_ONE_BAR) || (current == IFujiXBatteryMode.BATTERY_126S_TWO_BAR))
672 else if (current == IFujiXBatteryMode.BATTERY_126S_THREE_BAR)
676 else if ((current == IFujiXBatteryMode.BATTERY_TWO_BAR) || (current == IFujiXBatteryMode.BATTERY_126S_FOUR_BAR))
680 else // if ((current == IFujiXBatteryMode.BATTERY_FULL) || (current == IFujiXBatteryMode.BATTERY_126S_FULL))
684 notifier.updateRemainBattery(level);
689 * 認識したカメラのステータス名称のリストを応答する
692 private List<String> getAvailableStatusNameList()
694 ArrayList<String> selection = new ArrayList<>();
697 for (int index = 0; index < statusHolder.size(); index++)
699 int key = statusHolder.keyAt(index);
700 selection.add(statusNameArray.get(key, String.format(Locale.US, "0x%04x", key)));
711 List<String> getAvailableItemList(String listKey)
713 if ((listKey == null)||(listKey.isEmpty()))
716 return (getAvailableStatusNameList());
719 if (listKey.matches(ICameraStatus.EFFECT))
721 return (getAvailableEffectItemList());
724 ///// 選択可能なステータスの一覧を取得する : でも以下はアイテム名の一覧... /////
725 ArrayList<String> selection = new ArrayList<>();
728 for (int index = 0; index < statusHolder.size(); index++)
730 int key = statusHolder.keyAt(index);
731 selection.add(statusNameArray.get(key));
741 private List<String> getAvailableEffectItemList()
743 // EFFECTの選択肢をリストにして返す : Film Simulation にした。
744 ArrayList<String> selection = new ArrayList<>();
745 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PROVIA_STR);
746 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_VELVIA_STR);
747 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ASTIA_STR);
748 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_STR);
749 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_SEPIA_STR);
750 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_HI_STR);
751 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_PRO_NEG_STD_STR);
752 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_Y_FILTER_STR);
753 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_R_FILTER_STR);
754 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_MONOCHROME_G_FILTER_STR);
755 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_CHROME_STR);
756 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_STR);
757 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_Y_STR);
758 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_R_STR);
759 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ACROS_G_STR);
760 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_ETERNA_STR);
761 selection.add(IFujiXFilmSimulation.FILM_SIMULATION_CLASSIC_NEGATIVE_STR);
765 private String getCurrentEffectStatus()
767 // EFFECTの現在状態を応答する : FILM Simulationにした
770 int value = statusHolder.get(IFujiXCameraProperties.FILM_SIMULATION);
771 List<String> itemList = getAvailableEffectItemList();
772 if ((value >= IFujiXFilmSimulation.FILM_SIMULATION_MIN)&&(value < itemList.size()))
774 return (itemList.get(value - 1));
784 private void setEffectItem(String value)
789 List<String> itemList = getAvailableEffectItemList();
790 for (String item : itemList)
792 if (item.matches(value))
795 publisher.enqueueCommand(new SetPropertyValue(new FujiXReplyMessageReceiver(" Set Film Simulation", true), IFujiXCameraProperties.FILM_SIMULATION, 4, index));
808 String getItemStatus(String key)
810 if (key.matches(ICameraStatus.EFFECT))
812 return (getCurrentEffectStatus());
816 int strIndex = key.indexOf("x");
817 Log.v(TAG, "getItemStatus() : " + key + " [" + strIndex + "]");
820 key = key.substring(strIndex + 1);
823 int id = Integer.parseInt(key, 16);
824 int value = statusHolder.get(id);
825 logcat("getItemStatus() value : " + value + " key : " + key + " [" + id + "]");
835 for (int index = 0; index < statusNameArray.size(); index++)
837 int id = statusNameArray.keyAt(index);
838 String strKey = statusNameArray.valueAt(index);
839 if (key.contentEquals(strKey))
841 int value = statusHolder.get(id);
850 return ("? [" + key + "]");
853 void setItemStatus(@NonNull String key, @NonNull String value)
859 Log.v(TAG, "setStatus(" + key + ", " + value + ")");
862 if (key.matches(ICameraStatus.EFFECT))
864 setEffectItem(value);
877 private void dumpStatus()
881 Log.v(TAG, " - - - status - - - ");
882 for (int index = 0; index < statusHolder.size(); index++)
884 int key = statusHolder.keyAt(index);
885 int value = statusHolder.get(key);
886 Log.v(TAG, String.format("id : 0x%x value : %d (0x%x) ", key, value, value));
888 Log.v(TAG, " - - - status - - - ");
896 private void logcat(String message)