OSDN Git Service

ef640e32b86e9ab4865638b8bedf4887014fd6f9
[gokigen/mangle.git] / app / src / main / java / jp / osdn / gokigen / gokigenassets / camera / vendor / panasonic / status / CameraStatusListHolder.kt
1 package jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.status
2
3 import android.util.Log
4 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatus
5 import jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.IPanasonicCamera
6 import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
7 import java.util.ArrayList
8
9 class CameraStatusListHolder(private val remote: IPanasonicCamera)
10 {
11     val http = SimpleHttpClient()
12     companion object
13     {
14         private val TAG = CameraStatusListHolder::class.java.simpleName
15         private const val TIMEOUT_MS = 3000
16         private const val MAX_RETRY_COUNT = 2
17     }
18
19     /**
20      *
21      *
22      */
23     fun getAvailableItemList(key: String): List<String>
24     {
25         try
26         {
27             return (when (key) {
28                 ICameraStatus.TAKE_MODE -> getAvailableTakeMode()
29                 ICameraStatus.SHUTTER_SPEED -> getAvailableShutterSpeed()
30                 ICameraStatus.APERTURE -> getAvailableAperture()
31                 ICameraStatus.EXPREV -> getAvailableExpRev()
32                 ICameraStatus.CAPTURE_MODE -> getAvailableCaptureMode()
33                 ICameraStatus.ISO_SENSITIVITY -> getAvailableIsoSensitivity()
34                 ICameraStatus.WHITE_BALANCE -> getAvailableWhiteBalance()
35                 ICameraStatus.AE -> getAvailableMeteringMode()
36                 ICameraStatus.EFFECT -> getAvailablePictureEffect()
37                 ICameraStatus.TORCH_MODE -> getAvailableTorchMode()
38                 //ICameraStatus.BATTERY -> getAvailableRemainBattery()
39                 else -> ArrayList()
40             })
41             //Log.v(TAG, " ----- getAvailableItemList($key) ")
42             //sendCamGetSettingCmd("colormode")
43         }
44         catch (e: Exception)
45         {
46             e.printStackTrace()
47         }
48         return (ArrayList())
49     }
50
51     private fun getAvailableTakeMode() : List<String>
52     {
53         return (ArrayList())
54     }
55
56     private fun getAvailableTorchMode() : List<String>
57     {
58         return (listOf("OFF", "EXP. BRACKET", "FOCAL BRACKET", "WB BRACKET", "FOCUS BRACKET"))
59     }
60
61     private fun getAvailableShutterSpeed() : List<String>
62     {
63         return (listOf(
64             "16000" ,
65             "13000" ,
66             "10000" ,
67             "8000" ,
68             "6400" ,
69             "5000" ,
70             "4000" ,
71             "3200" ,
72             "2500" ,
73             "2000" ,
74             "1600" ,
75             "1300" ,
76             "1000" ,
77             "800" ,
78             "640" ,
79             "500" ,
80             "400" ,
81             "320" ,
82             "250" ,
83             "200" ,
84             "160" ,
85             "125" ,
86             "100" ,
87             "80" ,
88             "60" ,
89             "50" ,
90             "40" ,
91             "30" ,
92             "25" ,
93             "20" ,
94             "15" ,
95             "13" ,
96             "10" ,
97             "8" ,
98             "6" ,
99             "5" ,
100             "4" ,
101             "3.2" ,
102             "2.5" ,
103             "2" ,
104             "1.6" ,
105             "1.3" ,
106             "1s" ,
107             "1.3s" ,
108             "1.6s" ,
109             "2s" ,
110             "2.5s" ,
111             "3.2s" ,
112             "4s" ,
113             "5s" ,
114             "6s" ,
115             "8s" ,
116             "10s" ,
117             "13s" ,
118             "15s" ,
119             "20s" ,
120             "25s" ,
121             "30s" ,
122             "40s" ,
123             "50s" ,
124             "60s" ,
125             "T" ,
126         ))
127     }
128
129     private fun getAvailableAperture() : List<String>
130     {
131         return (listOf(
132             "F1.0",
133             "F1.1",
134             "F1.2",
135             "F1.4",
136             "F1.6",
137             "F1.7",
138             "F1.8",
139             "F2.0",
140             "F2.2",
141             "F2.4",
142             "F2.5",
143             "F2.8",
144             "F3.2",
145             "F3.5",
146             "F4.0",
147             "F4.5",
148             "F5.0",
149             "F5.6",
150             "F6.3",
151             "F7.1",
152             "F8.0",
153             "F9.0",
154             "F10",
155             "F11",
156             "F13",
157             "F14",
158             "F16",
159             "F18",
160             "F20",
161             "F22",
162             "F25",
163             "F29",
164             "F32",
165         ))
166     }
167
168     private fun getAvailableExpRev() : List<String>
169     {
170         return (listOf(
171             "-5.0",
172             "-4.7",
173             "-4.3",
174             "-4.0",
175             "-3.7",
176             "-3.3",
177             "-3.0",
178             "-2.7",
179             "-2.3",
180             "-2.0",
181             "-1.7",
182             "-1.3",
183             "-1.0",
184             "-0.7",
185             "-0.3",
186             "0.0",
187             "+0.3",
188             "+0.7",
189             "+1.0",
190             "+1.3",
191             "+1.7",
192             "+2.0",
193             "+2.3",
194             "+2.7",
195             "+3.0",
196             "+3.3",
197             "+3.7",
198             "+4.0",
199             "+4.3",
200             "+4.7",
201             "+5.0",
202             ))
203     }
204
205     private fun getAvailablePictureEffect() : List<String>
206     {
207         return (listOf("OFF",
208             "POP",
209             "RETR",
210             "OLD",
211             "HKEY",
212             "LKEY",
213             "SEPI",
214             "MONO",
215             "D.MONO",
216             "R.MONO",
217             "S.MONO",
218             "IART",
219             "HDYN",
220             "XPRO",
221             "TOY",
222             "TOYP",
223             "BLEA",
224             "DIOR",
225             "SOFT",
226             "FAN",
227             "STAR",
228             "1CLR",
229             "SUN"))
230     }
231
232     private fun getAvailableIsoSensitivity() : List<String>
233     {
234         return (listOf("ISO-i",
235             "AUTO",
236             "100",
237             "125",
238             "160",
239             "200",
240             "250",
241             "320",
242             "400",
243             "500",
244             "640",
245             "800",
246             "1000",
247             "1250",
248             "1600",
249             "2000",
250             "2500",
251             "3200",
252             "4000",
253             "5000",
254             "6400",
255             "8000",
256             "10000",
257             "12800",
258             "16000",
259             "20000",
260             "25600",
261             "50000",
262         ))
263     }
264
265     private fun getAvailableWhiteBalance() : List<String>
266     {
267         return (listOf("AWB",
268         "Daylight",
269         "Cloudy",
270         "Shade",
271         "Incandescent",
272         "Flash",
273         "Custom1",
274         "Custom2",
275         "Custom3",
276         "Custom4",
277         "Color Temp.",
278         "K1",
279         "K2",
280         "K3",
281         "K4",
282         "AWBc",
283         "AWBw"))
284     }
285
286     private fun getAvailableMeteringMode() : List<String>
287     {
288         return (ArrayList())
289         //return (listOf("MULTI", "CENTER", "SPOT", "HIGHLIGHT"))  // SPOT測光に切り替えると、LVがうまく取れないので...
290     }
291
292     private fun getAvailableCaptureMode() : List<String>
293     {
294         return (listOf(
295             "STD",
296             "VIVID",
297             "NATURAL",
298             "MONO",
299             "L.MONO",
300             "L.MONO D",
301             "L.MONO S",
302             "SCENERY",
303             "PORTRAIT",
304             "L.CLAS N",
305             "FLAT",
306             "CUSTOM",
307             "CUSTOM1",
308             "CUSTOM2",
309             "CUSTOM3",
310             "CUSTOM4",
311             "CINELIKE_D",
312             "CINELIKE_V",
313             "Like709",
314             "VLOG-L",
315             "VLOG-G",
316             "VLOG-GAMMA",
317         ))
318     }
319
320     fun setStatus(key: String, value: String)
321     {
322         Log.v(TAG, " setStatus(key:$key, value:$value)")
323         try
324         {
325             when (key) {
326                 ICameraStatus.TAKE_MODE -> setTakeMode(value)
327                 ICameraStatus.SHUTTER_SPEED -> setShutterSpeed(value)
328                 ICameraStatus.APERTURE -> setAperture(value)
329                 ICameraStatus.EXPREV -> setExpRev(value)
330                 ICameraStatus.CAPTURE_MODE -> setCaptureMode(value)
331                 ICameraStatus.ISO_SENSITIVITY -> setIsoSensitivity(value)
332                 ICameraStatus.WHITE_BALANCE -> setWhiteBalance(value)
333                 ICameraStatus.AE -> setMeteringMode(value)
334                 ICameraStatus.EFFECT -> setPictureEffect(value)
335                 ICameraStatus.TORCH_MODE -> setTorchMode(value)
336                 //ICameraStatus.BATTERY -> setRemainBattery(value)
337                 else -> return
338             }
339         }
340         catch (e: Exception)
341         {
342             e.printStackTrace()
343         }
344     }
345
346     private fun setTakeMode(value: String)
347     {
348         Log.v(TAG, " setTakeMode($value)")
349
350     }
351
352     private fun setTorchMode(value: String)
353     {
354         val setValue = when (value) {
355             "OFF" -> "off"
356             "EXP. BRACKET" -> "exposure"
357             "FOCAL BRACKET" -> "focal"
358             "WB BRACKET" -> "wb"
359             "FOCUS BRACKET" -> "focus"
360             else -> "off"
361         }
362         sendCamSetSettingCmd("bracket", setValue, null)
363     }
364
365     private fun setShutterSpeed(value: String)
366     {
367         val setValue = when (value) {
368             "16000" -> "3584/256"
369                 "13000" -> "3499/256"
370                 "10000" -> "3414/256"
371                 "8000" -> "3328/256"
372                 "6400" -> "3243/256"
373                 "5000" -> "3158/256"
374                 "4000" -> "3072/256"
375                 "3200" -> "2987/256"
376                 "2500" -> "2902/256"
377                 "2000" -> "2816/256"
378                 "1600" -> "2731/256"
379                 "1300" -> "2646/256"
380                 "1000" -> "2560/256"
381                 "800" -> "2475/256"
382                 "640" -> "2390/256"
383                 "500" -> "2304/256"
384                 "400" -> "2219/256"
385                 "320" -> "2134/256"
386                 "250" -> "2048/256"
387                 "200" -> "1963/256"
388                 "160" -> "1878/256"
389                 "125" -> "1792/256"
390                 "100" -> "1707/256"
391                 "80" -> "1622/256"
392                 "60" -> "1536/256"
393                 "50" -> "1451/256"
394                 "40" -> "1366/256"
395                 "30" -> "1280/256"
396                 "25" -> "1195/256"
397                 "20" -> "1110/256"
398                 "15" -> "1024/256"
399                 "13" -> "939/256"
400                 "10" -> "854/256"
401                 "8" -> "768/256"
402                 "6" -> "683/256"
403                 "5" -> "598/256"
404                 "4" -> "512/256"
405                 "3.2" -> "427/256"
406                 "2.5" -> "342/256"
407                 "2" -> "256/256"
408                 "1.6" -> "171/256"
409                 "1.3" -> "86/256"
410                 "1s" -> "0/256"
411                 "1.3s" -> "-85/256"
412                 "1.6s" -> "-170/256"
413                 "2s" -> "-256/256"
414                 "2.5s" -> "-341/256"
415                 "3.2s" -> "-426/256"
416                 "4s" -> "-512/256"
417                 "5s" -> "-597/256"
418                 "6s" -> "-682/256"
419                 "8s" -> "-768/256"
420                 "10s" -> "-853/256"
421                 "13s" -> "-938/256"
422                 "15s" -> "-1024/256"
423                 "20s" -> "-1109/256"
424                 "25s" -> "-1194/256"
425                 "30s" -> "-1280/256"
426                 "40s" -> "-1365/256"
427                 "50s" -> "-1450/256"
428                 "60s" -> "-1536/256"
429                 "T" -> "256/256"
430                 else -> "1792/256"
431         }
432         sendCamSetSettingCmd("shtrspeed", setValue, null)
433     }
434
435     private fun setAperture(value: String)
436     {
437         val setValue = when (value) {
438             "F1.0" -> "0/256"
439             "F1.1" -> "85/256"
440             "F1.2" -> "171/256"
441             "F1.4" -> "256/256"
442             "F1.6" -> "341/256"
443             "F1.7" -> "392/256"
444             "F1.8" -> "427/256"
445             "F2.0" -> "512/256"
446             "F2.2" -> "598/256"
447             "F2.4" -> "640/256"
448             "F2.5" -> "683/256"
449             "F2.8" -> "768/256"
450             "F3.2" -> "854/256"
451             "F3.5" -> "938/256"
452             "F4.0" -> "1024/256"
453             "F4.5" -> "1110/256"
454             "F5.0" -> "1195/256"
455             "F5.6" -> "1280/256"
456             "F6.3" -> "1366/256"
457             "F7.1" -> "1451/256"
458             "F8.0" -> "1536/256"
459             "F9.0" -> "1622/256"
460             "F10" -> "1707/256"
461             "F11" -> "1792/256"
462             "F13" -> "1878/256"
463             "F14" -> "1963/256"
464             "F16" -> "2048/256"
465             "F18" -> "2133/256"
466             "F20" -> "2219/256"
467             "F22" -> "2304/256"
468             "F25" -> "2389/256"
469             "F29" -> "2474/256"
470             "F32" -> "2560/256"
471             else -> "1024/256"
472         }
473         sendCamSetSettingCmd("focal", setValue, null)
474     }
475
476     private fun setExpRev(value: String)
477     {
478         val setValue = when (value) {
479             "-5.0" -> "-5"
480             "-4.7" -> "-14/3"
481             "-4.3" -> "-13/3"
482             "-4.0" -> "-4"
483             "-3.7" -> "-11/3"
484             "-3.3" -> "-10/3"
485             "-3.0" -> "-3"
486             "-2.7" -> "-8/3"
487             "-2.3" -> "-7/3"
488             "-2.0" -> "-2"
489             "-1.7" -> "-5/3"
490             "-1.3" -> "-4/3"
491             "-1.0" -> "-1"
492             "-0.7" -> "-2/3"
493             "-0.3" -> "-1/3"
494             "0.0" -> "0"
495             "+0.3" -> "1/3"
496             "+0.7" -> "2/3"
497             "+1.0" -> "1"
498             "+1.3" -> "4/3"
499             "+1.7" -> "5/3"
500             "+2.0" -> "2"
501             "+2.3" -> "7/3"
502             "+2.7" -> "8/3"
503             "+3.0" -> "3"
504             "+3.3" -> "10/3"
505             "+3.7" -> "11/3"
506             "+4.0" -> "4"
507             "+4.3" -> "13/3"
508             "+4.7" -> "14/3"
509             "+5.0" -> "5"
510             else -> "0"
511         }
512         sendCamSetSettingCmd("exposure", setValue, null)
513     }
514
515     private fun setCaptureMode(value: String)
516     {
517         //Log.v(TAG, " ===== setCaptureMode($value) =====")
518         val setValue = when (value) {
519             "STD" -> "standard"
520             "VIVID" -> "vivid"
521             "NATURAL" -> "natural"
522             "MONO" -> "bw"
523             "L.MONO" -> "l_bw"
524             "SCENERY" -> "scenery"
525             "PORTRAIT" -> "portrait"
526             "CUSTOM" -> "custom"
527             "CUSTOM1" -> "custom1"
528             "CUSTOM2" -> "custom2"
529             "CUSTOM3" -> "custom3"
530             "CUSTOM4" -> "custom4"
531             "CINELIKE_D" -> "cinelike_d"
532             "CINELIKE_V" -> "cinelike_v"
533             "L.MONO D" -> "l_bw_d"
534             "Like709" -> "709like"
535             "VLOG-L" -> "vlog-l"
536             "VLOG-G" -> "vlog-g"
537             "VLOG-GAMMA" -> "vlog-gamma"
538             "FLAT" -> "flat"
539             "L.CLAS N" -> "l_cla_neo"
540             "L.MONO S" -> "l_bw_s"
541             else -> return
542         }
543         sendCamSetSettingCmd("colormode", setValue, null)
544     }
545
546     private fun setIsoSensitivity(value: String)
547     {
548         val setValue = when (value) {
549             "ISO-i" -> "i_auto"
550             "AUTO" -> "auto"
551             else -> value
552         }
553         sendCamSetSettingCmd("iso", setValue, null)
554     }
555
556     private fun setWhiteBalance(value: String)
557     {
558         val setValue =  when (value) {
559             "AWB" -> "auto"
560             "Daylight" -> "daylight"
561             "Cloudy" -> "cloudy"
562             "Shade" -> "shade"
563             "Incandescent" -> "halogen"
564             "Flash" -> "flash"
565             "Custom1" -> "white_set1"
566             "Custom2" -> "white_set2"
567             "Custom3" -> "white_set3"
568             "Custom4" -> "white_set4"
569             "Color Temp." -> "color_temp"
570             "K1" -> "color_temp1"
571             "K2" -> "color_temp2"
572             "K3" -> "color_temp3"
573             "K4" -> "color_temp4"
574             "AWBc" -> "auto_cool"
575             "AWBw" -> "auto_warm"
576             else -> "auto"
577         }
578         sendCamSetSettingCmd("whitebalance", setValue, null)
579     }
580
581     private fun setMeteringMode(value: String)
582     {
583         val setValue = when (value) {
584             "MULTI" -> "multi"
585             "CENTER" -> "center"
586             "SPOT" -> "spot"
587             "HIGHLIGHT" -> "highlight"
588             else -> "multi"
589         }
590         sendCamSetSettingCmd("lightmetering", setValue, null)
591     }
592
593     private fun setPictureEffect(value: String)
594     {
595         val setValue = when (value) {
596             "POP" -> "pop"
597             "RETR" -> "retro"
598             "OLD" -> "old_days"
599             "HKEY" -> "high_key"
600             "LKEY" -> "low_key"
601             "SEPI" -> "sepia"
602             "MONO" -> "monochro"
603             "D.MONO" -> "dynamic_monochro"
604             "R.MONO" -> "rough_monochro"
605             "S.MONO" -> "silky_monochro"
606             "IART" -> "impressive_art"
607             "HDYN" -> "high_dynamic"
608             "XPRO" -> "cross_proc"
609             "TOY" -> "toy_photo"
610             "TOYP" -> "toy_pop"
611             "BLEA" -> "bleach_bypass"
612             "DIOR" -> "diorama"
613             "SOFT" -> "soft_focus"
614             "FAN" -> "fantasy"
615             "STAR" -> "cross_filter"
616             "1CLR" -> "one_point_color"
617             "SUN" -> "sunshine"
618             else -> "noeffect"
619         }
620         sendCamSetSettingCmd("filter_setting", setValue, null)
621     }
622
623     private fun sendCamGetSettingCmd(type: String)
624     {
625         try
626         {
627             val urlToSend = remote.getCmdUrl() + "cam.cgi?mode=getsetting&type=$type"
628             val thread = Thread {
629                 try
630                 {
631                     var retryCount = 0
632                     var loop = true
633                     while (loop)
634                     {
635                         val reply: String = http.httpGet(urlToSend, TIMEOUT_MS)
636                         if (reply.indexOf("<result>ok</result>") > 0)
637                         {
638                             loop = false
639                             Log.v(TAG, " ===== $urlToSend (OK) : $reply")
640                         }
641                         else
642                         {
643                             // エラー発生時は何回か(MAX_RETRY_COUNT分)再送する
644                             Log.v(TAG, " $urlToSend (NG) : $reply ")
645                             Thread.sleep(1000) // 1秒待つ
646                             retryCount++
647                             if(retryCount >= MAX_RETRY_COUNT)
648                             {
649                                 loop = false
650                             }
651                         }
652                     }
653                 }
654                 catch (e: Exception)
655                 {
656                     e.printStackTrace()
657                 }
658             }
659             thread.start()
660         }
661         catch (e: Exception)
662         {
663             e.printStackTrace()
664         }
665     }
666
667     private fun sendCamSetSettingCmd(msgType: String, msgValue: String, value2: String?)
668     {
669         try
670         {
671             //Log.v(TAG, "  ------- sendCamSetSettingCmd($msgType, $msgValue, $value2)")
672             val sendMessage = if (value2 != null) { "cam.cgi?mode=setsetting&type=$msgType&value=$msgValue&value2=$value2" } else { "cam.cgi?mode=setsetting&type=$msgType&value=$msgValue" }
673             val thread = Thread {
674                 try
675                 {
676                     var retryCount = 0
677                     var loop = true
678                     while (loop)
679                     {
680                         val urlToSend = remote.getCmdUrl() + sendMessage
681                         val reply: String = http.httpGet(urlToSend, TIMEOUT_MS)
682                         if (reply.indexOf("<result>ok</result>") > 0)
683                         {
684                             loop = false
685                             // Log.v(TAG, " --- SET SETTING ($msgType,$msgValue): $reply")
686                         }
687                         else
688                         {
689                             // エラー発生時は何回か(MAX_RETRY_COUNT分)再送する
690                             Log.v(TAG, " $urlToSend (NG) : $reply ")
691                             Thread.sleep(1000) // 1秒待つ
692                             retryCount++
693                             if(retryCount >= MAX_RETRY_COUNT)
694                             {
695                                 loop = false
696                             }
697                         }
698                     }
699                 }
700                 catch (e: Exception)
701                 {
702                     e.printStackTrace()
703                 }
704             }
705             thread.start()
706         }
707         catch (e: Exception)
708         {
709             e.printStackTrace()
710         }
711     }
712 }