atelier:mitsuba

i love UI/UX, Blend, XAML, Behavior, P5, oF, Web, Tangible Bits and Physical computing. なにかあればお気軽にご連絡ください。atelier@c-mitsuba.com

OPC.Net計画その1:Windows PhoneからOPCのシャッターを切りたい。

Windows PhoneからOLYMPUS AIRでシャッターが切れました!
とりあえず、C#が動くデバイスならうごくはず!

        private string opc = "http://192.168.0.10/";
        public  void Shutter()
        {
            var httpClient = new HttpClient { MaxResponseContentBufferSize = 256000 };
            httpClient.DefaultRequestHeaders.Add("user-agent", "OlympusCameraKit");

            var mode = httpClient.GetAsync(opc + "switch_cameramode.cgi?mode=rec").Result;
            var r = mode.Content.ReadAsStringAsync().Result;

            var shutter = httpClient.GetAsync(opc + "exec_takemotion.cgi?com=newstarttake").Result;
            var r2 = shutter.Content.ReadAsStringAsync().Result;
        }

コードはこんなかんじ。
前提条件として、Windows PhoneがOPCとWiFiにつながっていることとします。

private string opc = "http://192.168.0.10/";

仕様上OPCのIPが決まっているので、予め定義します。

            var httpClient = new HttpClient { MaxResponseContentBufferSize = 256000 };
            httpClient.DefaultRequestHeaders.Add("user-agent", "OlympusCameraKit");

HttpClientでcgiを叩いていくのが、OPCを操作する基本になります。
コマンドを投げるたびにOPCの状態がXMLで返ってくる仕組みです。
お約束として、OPCはUAがOlympusCameraKitでないと、コマンドを受け付けてくれないので、変更します。

var mode = httpClient.GetAsync(opc + "switch_cameramode.cgi?mode=rec").Result;
var r = mode.Content.ReadAsStringAsync().Result;

OPCで撮影するには、まずは撮影モードに変更してやる必要があります。
rにOKが返ってくれば、変更成功。
NGの場合は、すでに指定したモードになっている可能性があります。

var shutter = httpClient.GetAsync(opc + "exec_takemotion.cgi?com=newstarttake").Result;
var r2 = shutter.Content.ReadAsStringAsync().Result;

これで実際にシャッターを切ります。
これだけシャッターが降りるのですが、r2には撮影完了状態だったり記録画像だったり、AFの位置や枠のサイズなどが返ってきます。