--- /dev/null
+#!/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
+$:.unshift(File.dirname(__FILE__))
+
require 'singleton'
-require './workerThread'
+require 'workerThread'
class Channel
include Singleton
end
def take_request
- return @request_queue.pop
+ if(@request_queue.length > 0)
+ return @request_queue.pop
+ else
+ return 0
+ end
end
end
+$:.unshift(File.dirname(__FILE__))
+
require 'json'
require '../vem/vem'
require '../vem/mock'
+begin
require '../vem/feicontrol'
+rescue LoadError
+end
require '../tool/imageProc'
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
--- /dev/null
+$:.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
$:.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" => "*"
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
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
--- /dev/null
+$:.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
</div>
<div id="params">
</div>
+ <div id="stage">
+ <button id="plusStage">+</button>
+ <button id="minusStage">-</button>
+ </div>
</div>
</div>
<div id="newImg"></div>
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");
+ }
}
}
ws.send( "acq" );
}else{
ws.send( "acq" );
- draw( JSON.parse(event.data ));
+ // draw( JSON.parse(event.data ));
// console.log(i);
i = i + 1;
}
-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");
- }
- });
- */
-
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
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
+++ /dev/null
-#!/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
-
-
--- /dev/null
+$ip_address = 'localhost'
+$cs_port = '3000'
+$vemapi_port = 9090
+$debug = true
+
+# $em_nameをsinatraの起動モード(development or test)で'mock'か'fei'に切り替わるようにしている。
+++ /dev/null
-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
+++ /dev/null
-#!/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
-
+++ /dev/null
-#!/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
-
--- /dev/null
+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の中で起動している。
+++ /dev/null
-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