Mini Kabibi Habibi

Current Path : C:/Program Files/Smart Professional Surveillance System/PC-NVR/Common/Lua/ptz/
Upload File :
Current File : C:/Program Files/Smart Professional Surveillance System/PC-NVR/Common/Lua/ptz/Samsung.lua

--[[
SAMSUNG��̨Э�������������:
1 PATTERNֻ��START��STOPָ��, û����Ӧ������ָ��.
2 AUTO SCANֻ��START��STOPָ��, û����Ӧ�����ұ߽�ֵ���趨����.
--]]

local Protocol = {};

-- ��ʾ�ֵ������16��10����(��Сֵ�����ֵ)
Protocol.Attr = 
{
	-- Э�����ʾ���,���ܳ���16�ַ���Ŀǰ�ݲ�֧������
	Name = "SAMSUNG",	
		
	-- ָ�����̨Э�黹�Ǿ���Э�飬ʹ��"PTZ", "MATRIX"��ʾ
	Type = "PTZ",
	
	-- ��msΪ��λ
	Internal = 200,
				
	-- û�ж�Ӧ�ĵ�ַ��Χ���붼���0xff
	-- ��̨��ַ��Χ
	CamAddrRange 		= {0x01, 0xFF}, 
	-- ���ӵ�ַ��Χ
	MonAddrRange		= {0x00, 0xFF},	
	-- Ԥ�õ㷶Χ
	PresetRange 		= {0x00, 0xff},
	-- �Զ�Ѳ����·��Χ
	TourRange		= {0xff, 0xff},
	-- �켣��·��Χ
	PatternRange		= {1, 3},
	-- ��ֱ�ٶȷ�Χ
	TileSpeedRange 		= {0x00, 0x40},
	-- ˮƽ�ٶȷ�Χ
	PanSpeedRange 		= {0x00, 0x40},
	
	-- �����Χ
	AuxRange 		= {0x01, 0x08},
}

Protocol.CommandAttr =
{
	-- Э������Ҫ���ĵ�λ�ã���LUA�±��ʾ�����±�ӣ���ʼ,��10���Ʊ�ʾ
	AddrPos 		= 3, 
	PresetPos 		= 6, 
	TileSpeedPos 		= 8,
	PanSpeedPos 		= 7,
	PatternPos 		= 6;
	AuxPos 		= 6,
}

Protocol.Command = 
{
	-- д����Э��ʱֻ����16���ƻ��ַ���ʾ,û�еĻ���ע�͵�
	Start= 
	{
		--д��������, ���ϣ����£����ϣ�����
		--                  1     2     3     4     5     6     7     8     9
		TileUp 		= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00",
		TileDown 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00",
		PanLeft 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00", 
		PanRight 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00",
		LeftUp 		= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00",
		LeftDown 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00",
		RightUp		= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00",
		RightDown = "0xA0, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x00, 0x00",

		ZoomWide 	= "0xA0, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00",
		ZoomTele 	= "0xA0, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00",
		FocusNear	= "0xA0, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00",
		FocusFar 	= "0xA0, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00",
		IrisSmall 	= "0xA0, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00",
		IrisLarge 	= "0xA0, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00",
			
		-- Ԥ�õ��������ã�����ת��)
		SetPreset 	= "0xA0, 0x00, 0x00, 0x03, 0x50, 0x00, 0xFF, 0xFF, 0x00",
		ClearPreset	= "0xA0, 0x00, 0x00, 0x03, 0x51, 0x00, 0xFF, 0xFF, 0x00",
		GoToPreset 	= "0xA0, 0x00, 0x00, 0x03, 0x19, 0x00, 0xFF, 0xFF, 0x00",			
			
		-- ˮƽ�ת��
		AutoPanOn	= "0xA0, 0x00, 0x00, 0x03, 0x1A, 0x01, 0xFF, 0xFF, 0x00",
		AutoPanOff	= "0xA0, 0x00, 0x00, 0x03, 0x1A, 0x00, 0xFF, 0xFF, 0x00",
			
		-- �Զ�ɨ�裬��Ԥ�����õı߽��м�ת��
		AutoScanOn 	= "0xA0, 0x00, 0x00, 0x03, 0x13, 0x01, 0xFF, 0xFF, 0x00",
		AutoScanOff	= "0xA0, 0x00, 0x00, 0x03, 0x13, 0x00, 0xFF, 0xFF, 0x00",
			
		-- �켣Ѳ��, һ��ָģʽ(���ÿ�ʼ�����ý�������У�ֹͣ����ģʽ
		StartPattern 	= "0xA0, 0x00, 0x00, 0x03, 0x1B, 0x00, 0x01, 0xFF, 0x00",
		StopPattern	= "0xA0, 0x00, 0x00, 0x03, 0x1B, 0x00, 0x00, 0xFF, 0x00",
		--ClearPattern 	= "",
				
		-- �˵���ز��
		--                  1     2     3     4     5     6     7     8     9		
		Menu 		= "0xA0, 0x00, 0x00, 0x03, 0x17, 0x01, 0xFF, 0xFF, 0x00", 
		MenuExit 	= "0xA0, 0x00, 0x00, 0x03, 0x17, 0x00, 0xFF, 0xFF, 0x00", 
		MenuEnter 	= "0xA0, 0x00, 0x00, 0x03, 0x18, 0xFF, 0xFF, 0xFF, 0x00", 
		MenuUp = "0xA0, 0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0x00", 
		MenuDown = "0xA0, 0x00, 0x00, 0x03, 0x09, 0xFF, 0xFF, 0xFF, 0x00", 
		MenuLeft = "0xA0, 0x00, 0x00, 0x03, 0x05, 0xFF, 0xFF, 0xFF, 0x00", 
		MenuRight = "0xA0, 0x00, 0x00, 0x03, 0x07, 0xFF, 0xFF, 0xFF, 0x00", 
		--[[ 
		�ά��λ���ܣ�ǰ�Ÿ��ֽڱ�ʾˮƽ������˶����м�Ÿ��ֽڱ�ʾ��ֱ������˶������Ÿ��ֽڱ�ʾ�䱶
		ǰ�Ÿ��ֽڵĺ��壺3�ֽڵ�ַ,5�ֽڱ�ʾ���������ң���1��0,6��7 �ֽڱ�ʾ����˶���ֵ����ΧΪ��0 - 708H
		�м�Ÿ��ֽڵĺ��壺12�ֽڵ�ַ��14�ֽڱ�ʾ���ϻ������£���0��1��15��16�ֽڱ�ʾ��ֱ����˶���ֵ	����ΧΪ��(���±�)
		��Ÿ��ֽڵĺ��壺21�ֽڱ�ʾ��ַ��23���ֽڱ�ʾ�䱶��С����0С1��24��25�ֽڱ�ʾ�䱶�Ĵ�С��
		--]]
		Position  = "a0 00 01 20 00 05 00 ff da a0 00 01 30 01 00 50 ff 7e a0 00 01 40 00 0d 2c ff 86",
		
	},
	Stop = 
	{
		--                  1     2     3     4     5     6     7     8     9	
		TileUp 		= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		TileDown 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		PanLeft 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		PanRight 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		LeftUp		= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		LeftDown	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		RightUp		= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		RightDown	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		
		ZoomWide 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		ZoomTele 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		FocusNear 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		FocusFar 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		IrisSmall 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
		IrisLarge 	= "0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00",
	},
}

Protocol.Checksum = function (s)
	--��9λΪУ����, ��ֵΪ0xFFFF��ȥ��2��8λ֮����ȡ��8λ.
	if table.getn(s) == 9 then
		local sum = s[2] + s[3] + s[4] + s[5] + s[6] + s[7] + s[8];
		s[9] = bits.band(0xFFFF - sum, 0xff);
	else
		local sum1 = s[2] + s[3] + s[4] + s[5] + s[6] + s[7] + s[8];
		s[9] = bits.band(0xFFFF - sum1,0xff);
		
		local sum2 = s[11] + s[12] + s[13] + s[14] + s[15] + s[16] + s[17];
		s[18] = bits.band(0xFFFF- sum2,0xff);
		
		local sum3 = s[20] + s[21] + s[22] + s[23] + s[24] + s[25] + s[26];
		s[27] = bits.band(0xFFFF - sum3,0xff);
	end;
	return s;
end;

Protocol.CamAddrProcess = function(s, addr)
	local addr = math.mod(addr,256);
	if table.getn(s) == 9 then
		s[3] = addr;
	else
		s[21] , s[12] , s[3] = addr,addr,addr;		
	end;
	return s;
end;

Protocol.PatternProcess = function(s, num)
	s[6] = num;
	return s;
end;

Protocol.SpeedProcess = function(opttable, arg1, arg2)

	if opttable[6] ~= 0 then
		opttable[8] = arg1;
		opttable[7] = arg2;
	end;
	return opttable;
end;

Protocol.PositionProcess = function(s, hor, ver, zoom)
	-- ����ֻ������ٶ�λ����
	print("hor is:",hor);
	print("ver is :",ver);
	print("zoom is:",zoom);
	-- ���� ʱhor ��ver ����
	-- �ң��� ʱhor ��ver �Ǹ��
	--[[ 
		�ά��λ���ܣ�ǰ�Ÿ��ֽڱ�ʾˮƽ������˶����м�Ÿ��ֽڱ�ʾ��ֱ������˶������Ÿ��ֽڱ�ʾ�䱶
		ǰ�Ÿ��ֽڵĺ��壺3�ֽڵ�ַ,5�ֽڱ�ʾ���������ң���1��0,6��7 �ֽڱ�ʾ����˶���ֵ����ΧΪ��0 - 708H
		�м�Ÿ��ֽڵĺ��壺12�ֽڵ�ַ��14�ֽڱ�ʾ���ϻ������£���0��1��15��16�ֽڱ�ʾ��ֱ����˶���ֵ	����ΧΪ��(���±�)
		��Ÿ��ֽڵĺ��壺21�ֽڱ�ʾ��ַ��23���ֽڱ�ʾ�䱶��С����0С1��24��25�ֽڱ�ʾ�䱶�Ĵ�С��
	--]]
	local max_pos_zoom = 22;
	zoom_num_table = {0x008,0x574,0x7B8,0x90C,0x9F4,0xAA0,0xB2C,0xBA0,0xC04,0xC58,0xCA4,0xCEC,0xD28, 0xD5C,0xD8C,0xDB4,0xDD8,0xDF8,0xE10,0xE28,0xE38,0xE44};
	local max_pan_value = 0x708;
	local max_tilt_value = 0x16;
	
	if hor >= 0 then
		s[5] = 0x00;
		print("right");
	else 
		print("left");
		s[5] = 0x01;
	end;
	hor = math.abs(hor);
	
	if ver >= 0 then
		print("down");
		s[14] = 0x01;
	else
		print("up");
		s[14] = 0x00;
	end;
	ver = math.abs(ver);
	
	if zoom > 0 then
		print("room tele");
		s[23] = 0x00;
	else
		print("room wide");
		s[23] = 0x01;
	end;
	local zoom_value = math.mod(bits.band(math.abs(zoom),0x7f),0x04);
	print("zoom_value:",zoom_value);
	--����ˮƽλ��
	local pan = math.floor(hor/80);
	print("1");
	s[6] = bits.band(math.floor(pan/256),0xff);
	print("2");
	s[7] = bits.band(math.mod(pan,256),0xff)
	--����ֱλ��
	print("3");
	local tilt = math.floor(ver/226);
	print("4");
	s[15] = bits.band(math.floor(tilt/256),0xff);
	print("5");
	s[16] = bits.band(math.mod(tilt,256),0xff);
	--����䱶��С
	print("6");
	if zoom_value >= 1 then
	print("7");
		print("zoom_num_table[zoom_value]:",zoom_num_table[zoom_value]);
		local zoom_num = zoom_num_table[zoom_value];
		s[24] = bits.band(math.floor(zoom_num/256),0xff);
		s[25] = bits.band(math.mod(zoom_num,256),0xff);
	end;
	
	return s;
end;

return Protocol;