📄 cam_sony.c
字号:
/*
Library for control sony camera
V 1.00 build 2003.05.08
support camera list:
16X:
SONY450AP(TTL)
SONY450LP(TTL)
18X:
SONY480AP(TTL)
SONY480LP(TTL)
FCB-EX480BP(TTL)
*/
#include <REG54.H>
#include <INTRINS.H>
#include "kernel.h"
#include "camera.h"
#include "cam_func.h"
//#define CAM_SONY_LP
bit icr_fg = 0;
bit icr_need_fg = 0;
bit icr_manu_fg = 0;
bit iris_manu_fg = 0;
bit bw_fg = 0;
unsigned char idata cam_id;
unsigned int idata cc_icr = 0;
void cam_send_command(unsigned char *p)
{
while (*p != 0xff)
{
cam_send_byte(*p);
p++;
}
cam_send_byte(0xff);
}
void cam_inquiry_state(void)
{
register unsigned char i;
for (i=40;i<47;i++)
seq[i] = cam_receive_byte();
}
extern void cam_zoom_focus_direct(void)
{
cam_focus_manu();
delay_xms(30);
cam_send_byte(0x81); // CAM_ZoomFocus Direct
cam_send_byte(0x01);
cam_send_byte(0x04);
cam_send_byte(0x47);
cam_send_byte((pre[5] >> 4) & 0x0f);
cam_send_byte(pre[5] & 0x0f);
cam_send_byte((pre[6] >> 4) & 0x0f);
cam_send_byte(pre[6] & 0x0f);
cam_send_byte((pre[7] >> 4) & 0x0f);
cam_send_byte(pre[7] & 0x0f);
cam_send_byte((pre[8] >> 4) & 0x0f);
cam_send_byte(pre[8] & 0x0f);
cam_send_byte(0xff);
delay_xms(24);
set_curlimit(((pre[5] << 8) | pre[6])/ 0x02e8);
}
unsigned char code cam_power_on_[] = {0x81,0x01,0x04,0x00,0x02,0xff};
unsigned char code cam_power_off_[] = {0x81,0x01,0x04,0x00,0x03,0xff};
unsigned char code cam_zoom_stop_[] = {0x81,0x01,0x04,0x07,0x00,0xff};
unsigned char code cam_zoom_tele_[] = {0x81,0x01,0x04,0x07,0x27,0xff};
unsigned char code cam_zoom_wide_[] = {0x81,0x01,0x04,0x07,0x37,0xff};
unsigned char code cam_d_zoom_on_[] = {0x81,0x01,0x04,0x06,0x02,0xff};
unsigned char code cam_d_zoom_off_[] = {0x81,0x01,0x04,0x06,0x03,0xff};
unsigned char code cam_icrshot_on_[] = {0x81,0x01,0x04,0x01,0x02,0xff};
unsigned char code cam_icrshot_off_[] = {0x81,0x01,0x04,0x01,0x03,0xff};
unsigned char code cam_focus_stop_[] = {0x81,0x01,0x04,0x08,0x00,0xff};
unsigned char code cam_focus_far_[] = {0x81,0x01,0x04,0x08,0x02,0xff};
unsigned char code cam_focus_near_[] = {0x81,0x01,0x04,0x08,0x03,0xff};
unsigned char code cam_focus_auto_[] = {0x81,0x01,0x04,0x38,0x02,0xff};
unsigned char code cam_focus_manu_[] = {0x81,0x01,0x04,0x38,0x03,0xff};
unsigned char code cam_iris_up_[] = {0x81,0x01,0x04,0x0b,0x02,0xff};
unsigned char code cam_iris_down_[] = {0x81,0x01,0x04,0x0b,0x03,0xff};
unsigned char code cam_wb_auto_[] = {0x81,0x01,0x04,0x35,0x00,0xff};
unsigned char code cam_wb_manu_[] = {0x81,0x01,0x04,0x35,0x05,0xff};
unsigned char code cam_ae_auto_[] = {0x81,0x01,0x04,0x39,0x00,0xff};
unsigned char code cam_ae_manu_[] = {0x81,0x01,0x04,0x39,0x03,0xff};
unsigned char code cam_backlight_on_[] = {0x81,0x01,0x04,0x33,0x02,0xff};
unsigned char code cam_backlight_off_[]= {0x81,0x01,0x04,0x33,0x03,0xff};
unsigned char code cam_reverse_on_[] = {0x81,0x01,0x04,0x61,0x02,0xff};
unsigned char code cam_reverse_off_[] = {0x81,0x01,0x04,0x61,0x03,0xff};
unsigned char code cam_freeze_on_[] = {0x81,0x01,0x04,0x62,0x02,0xff};
unsigned char code cam_freeze_off_[] = {0x81,0x01,0x04,0x62,0x03,0xff};
unsigned char code cam_picture_off_[] = {0x81,0x01,0x04,0x63,0x00,0xff};
unsigned char code cam_picture_bw_[] = {0x81,0x01,0x04,0x63,0x04,0xff};
unsigned char code cam_display_on_[] = {0x81,0x01,0x04,0x15,0x02,0xff};
unsigned char code cam_display_off_[] = {0x81,0x01,0x04,0x15,0x03,0xff};
unsigned char code cam_inq_zoom_pos_[] = {0x81,0x09,0x04,0x47,0xff};
unsigned char code cam_inq_focus_pos_[] = {0x81,0x09,0x04,0x48,0xff};
unsigned char code cam_inq_gain_pos_[] = {0x81,0x09,0x04,0x4C,0xff};
extern void cam_focus_auto() {f_auto_fg = 1;cam_send_command(cam_focus_auto_);}
extern void cam_focus_manu() {f_auto_fg = 0;cam_send_command(cam_focus_manu_);}
extern void cam_focus_far() {
cam_focus_manu();
delay_xms(12);
cam_send_command(cam_focus_far_);
}
extern void cam_zoom_wide() {cam_send_command(cam_zoom_wide_);}
extern void cam_zoom_tele() {cam_send_command(cam_zoom_tele_);}
extern void cam_zoom_stop() {
cam_send_command(cam_zoom_stop_);
delay_xms(24);
set_level_limit();
delay_xms(24);
cam_focus_auto();
}
extern void cam_focus_near() {
cam_focus_manu();
delay_xms(24);
cam_send_command(cam_focus_near_);
}
extern void cam_focus_stop() {
cam_send_command(cam_focus_stop_);
}
extern void cam_iris_open() {cam_send_command(cam_iris_up_);}
extern void cam_iris_close() {cam_send_command(cam_iris_down_);}
extern void cam_power_on() {cam_send_command(cam_power_on_);}
extern void cam_power_off() {cam_send_command(cam_power_off_);}
extern void cam_ae_auto() {iris_manu_fg = 0;cam_send_command(cam_ae_auto_);}
extern void cam_ae_manu() {iris_manu_fg = 1;cam_send_command(cam_ae_manu_);}
extern void cam_freeze_on() {cam_send_command(cam_freeze_on_);}
extern void cam_freeze_off() {cam_send_command(cam_freeze_off_);}
extern void cam_backlight_on() {cam_send_command(cam_backlight_on_);}
extern void cam_backlight_off() {cam_send_command(cam_backlight_off_);}
extern void cam_reverse_on() {cam_send_command(cam_reverse_on_);}
extern void cam_reverse_off() {cam_send_command(cam_reverse_off_);}
extern void cam_display_on() {cam_send_command(cam_display_on_);}
extern void cam_display_off() {cam_send_command(cam_display_off_);}
extern void cam_d_zoom_on() {cam_send_command(cam_d_zoom_on_);}
extern void cam_d_zoom_off() {cam_send_command(cam_d_zoom_off_);}
extern void cam_icrshot_on() {cam_send_command(cam_icrshot_on_);
#ifdef CAM_SONY_LP
if (!bw_fg)
{
delay_xms(20);
cam_send_command(cam_picture_bw_);
}
#endif
}
extern void cam_icrshot_off() {cam_send_command(cam_icrshot_off_);
#ifdef CAM_SONY_LP
if (!bw_fg)
{
delay_xms(20);
cam_send_command(cam_picture_off_);
}
#endif
}
extern void cam_wb_auto() {cam_send_command(cam_wb_auto_);}
extern void cam_wb_manu() {cam_send_command(cam_wb_manu_);}
extern void cam_picture_off() {bw_fg = 0;cam_send_command(cam_picture_off_);}
extern void cam_picture_bw() {bw_fg = 1;cam_send_command(cam_picture_bw_);}
extern void cam_inq_zoom_pos() {cam_send_command(cam_inq_zoom_pos_);}
extern void cam_inq_focus_pos() {cam_send_command(cam_inq_focus_pos_);}
extern void cam_get_id(void)
{
cam_id = 1;
}
extern void cam_icr_set(void)
{
cc_icr ++;
if (cc_icr != 0xffff) return;
if (manual_fg) return;
if (cont_fg) return;
if (icr_manu_fg) return;
cam_send_command(cam_inq_gain_pos_);
cam_inquiry_state();
delay_xms(20);
if (seq[42] || seq[43] || seq[44]) goto icr_off;
if (seq[45] >= 0x06)
{
if (_testbit_(icr_need_fg))
{
cam_icrshot_on();
icr_fg = 1;
delay_xms(20);
cam_icrshot_on();
}
else if (!icr_fg)
icr_need_fg = 1;
}
else
{
icr_off:
icr_need_fg = 0;
if (_testbit_(icr_fg))
{
cam_icrshot_off();
delay_xms(20);
cam_icrshot_off();
}
}
}
extern void set_level_limit(void)
{
unsigned char zh,zl;
cam_inq_zoom_pos();
cam_inquiry_state();
zh = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
zl = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);
set_curlimit(((zh << 8) | zl) / 0x02e8);
}
extern void cam_set_preset(void)
{
cam_inq_zoom_pos(); // read zoom position
cam_inquiry_state();
seq[5] = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
seq[6] = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);
delay_xms(20);
cam_inq_focus_pos(); // read focus position
cam_inquiry_state();
seq[7] = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
seq[8] = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -