OSDN Git Service

arrangement file
authorayaka <gyzdisk@gmail.com>
Thu, 17 Dec 2015 06:46:23 +0000 (15:46 +0900)
committerayaka <gyzdisk@gmail.com>
Thu, 17 Dec 2015 06:46:23 +0000 (15:46 +0900)
18 files changed:
lib/cameraSocket.rb [new file with mode: 0644]
lib/channel.rb [moved from vemserver/channel.rb with 67% similarity]
lib/request.rb [moved from vemserver/request.rb with 91% similarity]
lib/serialCamera.rb [new file with mode: 0644]
lib/vemapi.rb [moved from vemserver/vemapi2.rb~ with 75% similarity]
lib/workerThread.rb [new file with mode: 0644]
test/timeMeas/acqTest.html
test/timeMeas/acqTest.js
test/timeMeas/emControl.js
vem/feicontrol.rb
vemserver/Rakefile
vemserver/cameraServer.rb [deleted file]
vemserver/config.rb [new file with mode: 0644]
vemserver/request.rb~ [deleted file]
vemserver/vemapi.rb [deleted file]
vemserver/vemapi2.rb [deleted file]
vemserver/vemserver.rb [new file with mode: 0644]
vemserver/workerThread.rb [deleted file]

diff --git a/lib/cameraSocket.rb b/lib/cameraSocket.rb
new file mode 100644 (file)
index 0000000..7a0d45f
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/env ruby -I c://Users/iwasaki/gem/sinatra-master/lib -I lib
+
+$:.unshift(File.dirname(__FILE__))
+
+require 'em-websocket'
+require 'json'
+require 'serialCamera'
+
+class CameraSocket
+  def initialize(ip, port)
+    @ip = ip
+    @port = port
+    @camera = SerialCamera.instance
+  end
+
+  def run!
+    Thread.new do
+      EM::WebSocket.start(host: @ip, port: @port) do |ws|
+        ws.onopen do
+          while true do
+            buf = @camera.get_image
+            ws.send(buf)
+          end
+        end
+      end
+    end
+  end
+end
similarity index 67%
rename from vemserver/channel.rb
rename to lib/channel.rb
index a33d7ff..80de7ca 100644 (file)
@@ -1,5 +1,7 @@
+$:.unshift(File.dirname(__FILE__))
+
 require 'singleton'
-require './workerThread'
+require 'workerThread'
 
 class Channel
   include Singleton
@@ -18,6 +20,10 @@ class Channel
   end
 
   def take_request
-    return @request_queue.pop
+    if(@request_queue.length > 0)
+      return @request_queue.pop
+    else
+      return 0
+    end
   end
 end
similarity index 91%
rename from vemserver/request.rb
rename to lib/request.rb
index 4753ad0..4381d47 100644 (file)
@@ -1,7 +1,12 @@
+$:.unshift(File.dirname(__FILE__))
+
 require 'json'
 require '../vem/vem'
 require '../vem/mock'
+begin
 require '../vem/feicontrol'
+rescue LoadError
+end
 require '../tool/imageProc'
 
 class Request
@@ -15,12 +20,11 @@ class Request
                @mutex = Mutex.new
                @cv = ConditionVariable.new
                @complete = false
+    @em = $em_name
        end
 
        def execute
-
-               @vem = VEM.create('fei')
-               puts "execute"
+               @vem = VEM.create(@em)
                case @command
                when "get"
                        @result = @vem.get_params
diff --git a/lib/serialCamera.rb b/lib/serialCamera.rb
new file mode 100644 (file)
index 0000000..da04d58
--- /dev/null
@@ -0,0 +1,33 @@
+$:.unshift(File.dirname(__FILE__))
+
+require 'singleton'
+require '../tool/imageProc'
+
+class SerialCamera
+  include Singleton
+  include ImageProc
+
+  def initialize
+    @vem      = VEM.create('mock')
+    @mutex    = Mutex.new
+    @cv       = ConditionVariable.new
+    @image    = nil
+    @complete = false
+  end
+
+  def execute
+    origin_image = @vem.acquisition # 撮影
+    converted_image = convert_256(origin_image) # 256階調に変換
+    @image = converted_image.to_json 
+    @complete = true
+    @cv.broadcast
+  end
+
+  def get_image
+    @mutex.synchronize do
+      @cv.wait(@mutex) while (@complete == false)
+      @complete = false
+      return @image
+    end
+  end
+end
similarity index 75%
rename from vemserver/vemapi2.rb~
rename to lib/vemapi.rb
index 3af8a97..6ad619f 100644 (file)
@@ -3,12 +3,22 @@
 $:.unshift(File.dirname(__FILE__))
 
 require 'sinatra/base'
-require './channel'
-require './request'
+require 'channel'
+require 'request'
+require 'cameraSocket'
 
 class Vemapi < Sinatra::Base
   @@channel = Channel.instance
 
+  if development? 
+  $em_name == 'mock'
+  elsif 
+  $em_name == 'fei'
+  end
+
+  cs = CameraSocket.new($ip_address, $cs_port)
+  cs.run!
+
   get '/' do
     headers \
       "Access-Control-Allow-origin" => "*"
@@ -27,7 +37,7 @@ class Vemapi < Sinatra::Base
     headers \
       "Access-Control-Allow-origin" => "*"
     request = Request.new(params["command"], params)
-    result = @@channel.put_request(request)
+    @@channel.put_request(request)
     return request.get_result
   end
 
@@ -35,12 +45,9 @@ class Vemapi < Sinatra::Base
     headers \
       "Access-Control-Allow-origin" => "*"
     request = Request.new("acq", nil)
-    result = @@channel.put_request(request)
+    @@channel.put_request(request)
     return request.get_result
   end
 end
 
-channel = Channel.instance
-channel.start_worker
-Vemapi.run! :host => '192.168.4.145', :port => 9090
 
diff --git a/lib/workerThread.rb b/lib/workerThread.rb
new file mode 100644 (file)
index 0000000..2b1984e
--- /dev/null
@@ -0,0 +1,25 @@
+$:.unshift(File.dirname(__FILE__))
+
+require 'singleton'
+require 'channel'
+require 'serialCamera'
+
+class WorkerThread
+
+  def initialize(channel)
+    @channel       = channel
+    @serial_camera = SerialCamera.instance
+ end
+
+  def start
+    puts "worker_thread start"
+    Thread.new do
+      while true do
+        request = @channel.take_request
+        request.execute if (request!= 0)
+        @serial_camera.execute
+      end
+    end
+  end
+
+end
index d2ce863..e09d3c4 100644 (file)
         </div>
         <div id="params">
         </div>
+        <div id="stage">
+          <button id="plusStage">+</button>
+          <button id="minusStage">-</button>
+        </div>
       </div>
     </div>
     <div id="newImg"></div>
index 9c5df9a..70b2346 100644 (file)
@@ -43,21 +43,9 @@ function startAcq () {
   ws = new WebSocket( "ws://localhost:3000" );
 
   ws.onopen = function () {
-    sendSettings();
-    //  console.time('singleAcq');
-    singleAcq();
-    //   console.timeEnd('singleAcq');
-    ws.onmessage = function( event ){
-      msg = JSON.parse(event.data);
-      //   console.log(msg);
-      if(msg["type"]==null){
-        //   for(var i=0;i<10;i++){
-        //       console.time('draw');
-        draw( msg );
-        //         console.timeEnd('draw');
-        //    }
-      }
-    }
+   ws.onmessage = function( event ){
+     console.log("flag");
+   }
   }
 
 }
@@ -121,7 +109,7 @@ function serialAcq () {
       ws.send( "acq" );
     }else{
       ws.send( "acq" );
-      draw( JSON.parse(event.data ));
//     draw( JSON.parse(event.data ));
       //    console.log(i);
       i = i + 1;
     }
index f784bd8..bcc0f0c 100644 (file)
@@ -1,64 +1,17 @@
-function getAjax(){
-  var ajax = null;
-  try{
-    ajax = new XMLHttpRequest();
-  }catch(e){
-    try{
-      ajax = new ActiveXObject("Msxml2.XMLHTTP");
-    }catch(e){
-      try{
-        ajax = new ActiveXObject("Microsoft.XMLHTTP");
-      }catch(e){
-        alert("Not Init");
-      }
+$(function () {
+  $( "#plusStage" ).click( setPlusStage );
+  $( "#minusStage" ).click( setMinusStage );
+});
+
+function setPlusStage () {
+  $.ajax({
+    type:"GET",
+    url:"http://192.168.4.146:9090/fei/set/stagea?x=10&&y=0&&z=0&&a=0",
+  //   url:"http://192.168.4.146:9090/fei/get",
+    success: function(data){
     }
-  }
-  return ajax;
+  });
 }
 
-function test(){
-
-  var ajax = getAjax();
-
-  if(ajax){
-    try {
-      ajax.onreadystatechange = getData;
-    } catch (e) {
-    }
-    try {
-      ajax.open("GET", "http://localhost:9090/fei/get", true);
-    } catch (e) {
-    }
-    try {
-      ajax.send(null);
-    } catch (e) {
-    }
-
-  } else {
-  }
-
-  function getData() {
-    if (ajax.readyState == 4) {
-      if (ajax.status == 200) {
-        var resultjson = ajax.responseText;
-              } else {
-     }
-    }
-  }
-
+function setMinusStage () {
 }
-
-test();
-
-
-
-/*
-   $.ajax({
-   url: 'http://localhost:9090/fei/init',
-   type: "GET",
-   success: function(res) {
-   console.log("sucsess");
-   }
-   });
-   */
-
index ec166d2..6754e12 100644 (file)
@@ -21,19 +21,20 @@ end
 class FEIControl < VEM
        include TEMObject
        @@params = {
-               "x" => 0,
-               "y" => 0,
-               "z" => 0,
-               "a" => 0
+               "x"          => 0,
+               "y"          => 0,
+               "z"          => 0,
+               "a"          => 0,
+    "binning"    => 1,
+    "exptime"    => 1,
+    "image_size" => 0
        }
 
        @@acq = nil
 
-
        def initialize
                puts "FEI initialize"
 
-       #       @@tem    = WIN32OLE.new('TEMScripting.Instrument')
                @@tem = TEMObject.instance
                puts @@tem
        end
index 84dbaf5..e01d93b 100644 (file)
@@ -1,8 +1,8 @@
 task :mock do
-  sh "RACK_ENV=development ruby vemapi.rb"
+  sh "RACK_ENV=development ruby vemserver.rb"
 end
 
 task :test do
-  sh "RACK_ENV=test ruby vemapi.rb"
+  sh "RACK_ENV=test ruby vemserver.rb"
 end
 
diff --git a/vemserver/cameraServer.rb b/vemserver/cameraServer.rb
deleted file mode 100644 (file)
index f4175b7..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env ruby -I c://Users/iwasaki/gem/sinatra-master/lib -I lib
-
-require 'em-websocket'
-require '../vem/vem'
-require '../vem/feicontrol'
-
-
-@@vem = VEM.create("fei")
-
-EM::WebSocket.start(host: "192.168.4.145", port:3000) do |ws|
-
-  # 接続確立時の処理
-  ws.onopen do
-               puts "WebSocket connection open"
-               ws.send("init")
-       end
-
-  # メッセージ受信時の処理
-       ws.onmessage do |message|
-               if(message=="acq")
-                       result = @@vem.acquisition255
-                       ws.send(result)
-                       puts "send image"
-               end
-       end
-
-end
-
-
diff --git a/vemserver/config.rb b/vemserver/config.rb
new file mode 100644 (file)
index 0000000..1fb7213
--- /dev/null
@@ -0,0 +1,6 @@
+$ip_address  = 'localhost'
+$cs_port     = '3000'
+$vemapi_port = 9090
+$debug       = true
+
+# $em_nameをsinatraの起動モード(development or test)で'mock'か'fei'に切り替わるようにしている。
diff --git a/vemserver/request.rb~ b/vemserver/request.rb~
deleted file mode 100644 (file)
index 49a125f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'json'
-require '../vem/vem'
-require '../vem/mock'
-require '../vem/feicontrol'
-require '../tool/imageProc'
-
-class Request
-  include ImageProc
-
-  def initialize(command, params)
-    puts "create request"
-    @command = command
-    @params  = params
-    @vem = VEM.create('fei')
-    @result = nil
-    @mutex = Mutex.new
-    @cv = ConditionVariable.new
-    @complete = false
-  end
-
-  def execute
-         puts "execute"
-    case @command
-    when "get"
-      @result = @vem.get_params
-    when "stagea"
-      @result = @vem.set_stageA(@params["x"].to_i, @params["y"].to_i, @params["z"].to_i, @params["a"].to_i)
-    when "stager"
-      @result = @vem.set_stageR(@params["x"].to_i, @params["y"].to_i, @params["z"].to_i, @params["a"].to_i)
-    when "acq_init"
-      @result = @vem.acquisition_init(@params["bng"].to_i, @params["exp"], @params["size"].to_i)
-    when "acq"
-      image = @vem.acquisition
-      converted_image = convert_256(image)
-      @result = converted_image.to_json
-    else
-      puts "else"
-    end
-    puts "execute end"
-    @complete = true
-    @cv.broadcast
-  end
-
-  def get_result
-    @mutex.synchronize do
-      @cv.wait(@mutex) while (@complete == false)
-      puts "resturn result"
-      return @result
-    end
-  end
-end
diff --git a/vemserver/vemapi.rb b/vemserver/vemapi.rb
deleted file mode 100644 (file)
index e6e8232..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env ruby -I c:/Users/iwasaki/gem/sinatra-master/lib -I lib
-
-$:.unshift(File.dirname(__FILE__))
-
-require 'sinatra/base'
-require '../vem/vem'
-require '../vem/mock'
-begin
-  require '../vem/feicontrol'
-rescue LoadError
-end
-#require 'vem/jeolcontrol'
-#require './vem/hitachicontrol'
-
-class Vemapi < Sinatra::Base
-
-  @@vem = nil
-
-  get '/' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    'VEM API test'
-  end
-
-
-  get '/:emname/init' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-
-    if settings.development?
-     @@vem = VEM.create("mock")
-      print  "created mock instance"
-    else
-      @@vem = VEM.create(params[:emname])
-      print  "created #{params[:emname]} instance"
-    end
-
-    return "created #{params[:emname]} instance"
-  end
-
-
-  get '/:emname/get' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-  
-  result = @@vem.get_params
-    "#{result}"
-  end
-
-
-  get '/:emname/set/stagea' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-
-    result = @@vem.set_stageA(params["x"].to_i, params["y"].to_i, params["z"].to_i, params["a"].to_i)
-    "#{result}"
-  end
-
-
-  get '/:emname/set/stager' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    result = @@vem.set_stageR(params["x"].to_i, params["y"].to_i, params["z"].to_i, params["a"].to_i)
-    "#{result}"
-  end
-
-  get '/:emname/set/acq' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    result = @@vem.acquisition_init(params["bin"].to_i, params["expt"].to_i, params["size"].to_i)
-    "#{result}"
-  end
-
-  get '/:emname/acq' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    result = @@vem.acquisition
-    "#{result}"
-  end
-
-end
-
-Vemapi.run! :host => '192.168.4.145', :port => 9090
-
diff --git a/vemserver/vemapi2.rb b/vemserver/vemapi2.rb
deleted file mode 100644 (file)
index ef6e60f..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env ruby -I c:/Users/iwasaki/gem/sinatra-master/lib -I lib
-
-$:.unshift(File.dirname(__FILE__))
-
-require 'sinatra/base'
-require './channel'
-require './request'
-
-class Vemapi < Sinatra::Base
-  @@channel = Channel.instance
-
-  get '/' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    'VEM API test'
-  end
-
-  get '/:emname/get' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    request = Request.new("get", nil)
-    result = @@channel.put_request(request)
-    return request.get_result
-  end
-
-  get '/:emname/set/:command' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    request = Request.new(params["command"], params)
-    result = @@channel.put_request(request)
-    return request.get_result
-  end
-
-  get '/:emname/acq' do
-    headers \
-      "Access-Control-Allow-origin" => "*"
-    request = Request.new("acq", nil)
-    result = @@channel.put_request(request)
-    return request.get_result
-  end
-end
-
-channel = Channel.instance
-channel.start_worker
-Vemapi.run! :host => '192.168.4.145', :port => 9090
-
diff --git a/vemserver/vemserver.rb b/vemserver/vemserver.rb
new file mode 100644 (file)
index 0000000..2442363
--- /dev/null
@@ -0,0 +1,12 @@
+require 'sinatra/base'
+require '../lib/vemapi'
+require '../lib/channel'
+require './config'
+
+
+channel = Channel.instance # Channelインスタンス生成
+channel.start_worker # Worker Threadの起動
+
+Vemapi.run! :host => $ip_address, :port => $vemapi_port # sinatraサーバーの起動
+
+# cameraSocketはVemapiの中で起動している。
diff --git a/vemserver/workerThread.rb b/vemserver/workerThread.rb
deleted file mode 100644 (file)
index c93148d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'singleton'
-require './channel'
-
-class WorkerThread
-
-  def initialize(channel)
-    @channel = channel
-  end
-
-  def start
-    puts "worker_thread start"
-    Thread.new do
-      while true do
-        request = @channel.take_request
-        request.execute
-      end
-    end
-  end
-
-end