Mini Kabibi Habibi
--[[
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;