--- /dev/null
+$:.unshift(File.dirname(__FILE__))
+
+require 'json'
+require '../vem/vem'
+require '../vem/mock'
+begin
+require '../vem/feicontrol'
+rescue LoadError
+end
+require '../tool/imageProc'
+
+class Request
+ include ImageProc
+
+ def initialize(command, params)
+ puts "create request"
+ @command = command
+ @params = params
+ @result = nil
+ @mutex = Mutex.new
+ @cv = ConditionVariable.new
+ @complete = false
+ @em = $em_name
+ end
+
+ def execute
+ @vem = VEM.create(@em)
+ 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"
+ puts "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
$em_name == 'fei'
end
- cs = CameraSocket.new($ip_address, $cs_port)
- cs.run!
+# cs = CameraSocket.new($ip_address, $cs_port)
+# cs.run!
get '/' do
headers \
--- /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'
+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" => "*"
+ 'VEM API test'
+ end
+
+ get '/:emname/get' do
+ headers \
+ "Access-Control-Allow-origin" => "*"
+ request = Request.new("get", nil)
+ @@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)
+ @@channel.put_request(request)
+ return request.get_result
+ end
+
+ get '/:emname/acq' do
+ headers \
+ "Access-Control-Allow-origin" => "*"
+ request = Request.new("acq", nil)
+ @@channel.put_request(request)
+ return request.get_result
+ end
+end
+
+
"y" => 0,
"z" => 0,
"a" => 0,
- "binning" => 1,
- "exptime" => 1,
- "image_size" => 0
+ "binning" => 1,
+ "exptime" => 1,
+ "image_size" => 0
}
@@acq = nil
end
def acquisition_init(binning, exp_time, image_size)
+ puts "acq_init"
+
+ @@tem = TEMObject.instance
+
# get acquitision object
@@acq = @@tem.Acquisition
+
# acquire an image from "CCD" camera
@@acq.AddAcqDeviceByName("CCD")
ccdCamerasAcqParams.ExposureTime = exp_time
# imagesize
ccdCamerasAcqParams.ImageSize = image_size
- puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.image_size}"
+ puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.ImageSize}"
end
def acquisition
+ @@tem = TEMObject.instance
+
# acquisition Image
imageCollection = @@acq.AcquireImages
img = imageCollection.Item(0)
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
@@params["a"] = @@tem.Stage.Position.A
- return @@params
+ return @@params.to_json
end
def set_stageA(x, y, z, a)
@@tem.Stage.GoTo(position, 15)
get_params
- return @@params
+ return @@params.to_json
end
def set_stageR(x, y, z, a)
@@tem.Stage.GoTo(position, 15)
get_params
- return @@params
+ return @@params.to_json
end
def set_spotsize(spsize)
end
def acquisition_init(binning, exp_time, image_size)
+ puts "acq_init"
+
+ @@tem = TEMObject.instance
+
# get acquitision object
@@acq = @@tem.Acquisition
+
# acquire an image from "CCD" camera
@@acq.AddAcqDeviceByName("CCD")
end
def acquisition
+ @@tem = TEMObject.instance
+
# acquisition Image
imageCollection = @@acq.AcquireImages
img = imageCollection.Item(0)
end
test = TEST.new
-test.test_get_params
+test.test_acq_init
end
def test_get_params
- @@vem = VEM.get_params
+ @@vem.get_params
end
def test_set_stageA
$cs_port = '3000'
$vemapi_port = 9090
$debug = true
+$em_name = 'fei'
# $em_nameをsinatraの起動モード(development or test)で'mock'か'fei'に切り替わるようにしている。
--- /dev/null
+$ip_address = 'localhost'
+$cs_port = '3000'
+$vemapi_port = 9090
+$debug = true
+
+# $em_nameをsinatraの起動モード(development or test)で'mock'か'fei'に切り替わるようにしている。
-require 'sinatra/base'
+#!/usr/bin/env ruby -I c:/Users/iwasaki/gem/sinatra-master/lib -I lib
+
require '../lib/vemapi'
require '../lib/channel'
require './config'
--- /dev/null
+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の中で起動している。