⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 standard_i2c.c

📁 本人写的linux下云台控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	public_out(tp);		return 0;}//5. patternint pattern_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf;		if(!(tp->user_input.param1[0]))		return INVALID_ARGUMENT;	tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_SET_PATTERN_START:		tp->out[3] = 1;		break;	case ACTION_SET_PATTERN_END:		tp->out[3] = 2;		break;	case ACTION_START_PATTERN:		tp->out[3] = 0;		break;	}	tp->out[1] = 0x85;	buf = tp->user_input.param1[1];	if(buf <= 4)		tp->out[2] = buf;	else		return INVALID_ARGUMENT;		public_out(tp);	return 0;}//6. whirlint whirl_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf = tp->user_input.param1[1];	if(!(tp->user_input.param1[0]))		return INVALID_ARGUMENT;	tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_SET_WHIRL_SPEED:		tp->out[1] = 0x81;		tp->out[3] = 98;		if(IS_BETWEEN(buf,3,255))			tp->out[2] = buf;		else			return INVALID_ARGUMENT;		break;	case ACTION_START_WHIRL:		tp->out[1] = 0x83;		tp->out[3] = 98;		if(buf <= 1)			tp->out[2] = buf;		else			return INVALID_ARGUMENT;		break;	}	public_out(tp);	return 0;}static int hex_str_to_hex_unsigned_char_array(char* str,unsigned char* array){	int i,len,which = 0,count = 0;	char heigh[2],low[2];	if(!str || !array)		return -1;	memset(heigh,0,2);	memset(low,0,2);	len = strlen(str) - 1;	for(i = 0; i< len; i++)	{		if(str[i] == ' ')		{			which = 0;			continue;		}		else if((str[i] >= '0'&&str[i] <= '9') || (str[i] >='a' && str[i] <= 'f') || (str[i] >= 'A' && str[i] <= 'F'))		{			which == 0?(heigh[0] = str[i],which = 1):(low[0] = str[i],which = 2);			if(which == 2)			{				array[count++] = strtol(heigh,NULL,16) * 16 + strtol(low,NULL,16);				which = 0;			}		}		else			return -1;	}	return count;}int transparent_i2c(struct TDVSSS_protocol* tp){	int len;	tp->continuous = 0;	if(tp->transparent == 0)	{		return NO_SUCH_COMMAND;	}	tp->out[0] = tp->address;	tp->out[1] = 0xa5;	len = hex_str_to_hex_unsigned_char_array(tp->user_input.param,tp->out + 2);	if(len < 0)	{		return  -1;	}	tp->out_len = len + 2;	return 0;}int rs485_i2c(struct TDVSSS_protocol* tp){	unsigned short buf1,buf2;	int len;		tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_INIT_485: 		if(tp->transparent == 0)		{			if(!(tp->user_input.param1[0])) 				buf1 = 0x80;			else				buf1 = tp->user_input.param1[1];			if(!(tp->user_input.param2[0]))				buf2 = 0x00;			else			{				buf2 = tp->user_input.param2[1];				if((buf2 & 0x0f) == 0x0f)				{					tp->transparent = 1;				}			}			tp->out[1] = 0xa6;			tp->out[2] = buf1;			tp->out[3] = buf2;		}		else		{			len = hex_str_to_hex_unsigned_char_array(tp->user_input.param,tp->out + 2);			if(len < 0 || len > 2)			{				return  INVALID_ARGUMENT;			}			tp->out[1] = 0xa6;			if (len == 0 || len == 1)			{				tp->out[2] = 0x80;				tp->out[3] = 0x00;			}			buf2 = tp->out[3];			if((buf2 & 0x0f) != 0x0f)				tp->transparent = 0;		}		break;	case ACTION_QUERY_485:		return NO_SUCH_COMMAND;		break;	}	public_out(tp);	return 0;}int line_pt_i2c(struct TDVSSS_protocol* tp){	int len;	tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_SET_LINE_2_PT:		tp->out[1] = 0xa9;		tp->out[2] = 0x00;		if(tp->transparent == 0)		{			if(!(tp->user_input.param1[0]) || tp->user_input.param1[1] > 255) 				return INVALID_ARGUMENT;			tp->out[3] = tp->user_input.param1[1];		}		else		{			len = hex_str_to_hex_unsigned_char_array(tp->user_input.param,tp->out + 3);			if(len <= 0 || len > 1)			{				return  INVALID_ARGUMENT;			}		}		break;	case ACTION_QUERY_LINE_2_PT:			return NO_SUCH_COMMAND;		break; 	}		public_out(tp);	return 0;}int alarm_i2c(struct TDVSSS_protocol* tp){	int len;	tp->continuous = 0;	tp->out[1] = 0xa7;	switch (tp->user_input.cmd_id)	{	case ACTION_SET_ALARM_INTERVAL:		if(tp->transparent == 0)		{			if(!(tp->user_input.param1[0]) || tp->user_input.param1[1] > 255) 				return INVALID_ARGUMENT;			tp->out[2] = 0x00;			tp->out[3] = tp->user_input.param1[1];		}		else		{			len = hex_str_to_hex_unsigned_char_array(tp->user_input.param,tp->out + 3);			if(len <= 0 || len > 1)			{				return  INVALID_ARGUMENT;			}		}		break;	case ACTION_SET_ALARM_OUTPUT:		if(tp->transparent == 0)		{			if(!(tp->user_input.param1[0]) || tp->user_input.param1[1] > 1) 				return INVALID_ARGUMENT;			tp->out[2] = 0x02;			tp->out[3] = tp->user_input.param1[1];		}		else		{			len = hex_str_to_hex_unsigned_char_array(tp->user_input.param,tp->out + 3);			if(len <= 0 || len > 1)			{				return  INVALID_ARGUMENT;			}			if(tp->out[3] > 1)				return  INVALID_ARGUMENT;			}		break;	case ACTION_QUERY_ALARM_STATUS:		return NO_SUCH_COMMAND;		break;	}	public_out(tp);	return 0;}//assist switchint assist_switch_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf  = tp->user_input.param1[1];	unsigned short buf2 = tp->user_input.param2[1];	if(!(tp->user_input.param1[0]) || !(tp->user_input.param2[0])) 		return INVALID_ARGUMENT;	tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_ASSIST_SWITCH_ON:		tp->out[1] = 0x87;		break;	case ACTION_ASSIST_SWITCH_OFF:		break;		tp->out[1] = 0x88;	}	if((buf <= 1) && IS_BETWEEN(buf2,1,44))	{		tp->out[2] = buf;		tp->out[3] = buf2;	}	else		return INVALID_ARGUMENT;	public_out(tp);	return 0;}int alarm_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf  = tp->user_input.param1[1];	unsigned short buf2 = tp->user_input.param2[1];	tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_ALARM_SET:		if(!(tp->user_input.param1[0]) || !(tp->user_input.param2[0])) 			return INVALID_ARGUMENT;		tp->out[1] = 0x8c;		if(IS_BETWEEN(buf,1,15))		{				tp->out[2] &= 0x0f;			tp->out[2] |= ((buf<<4) & 0xf0);		}		else			return INVALID_ARGUMENT;		if(buf2 <= 4095)		{			tp->out[3] = buf2 & 0xff;			tp->out[2] &= 0xf0;			tp->out[2] |= ((buf2 >> 8) & 0x0f);				}		else			return INVALID_ARGUMENT;		break;	case ACTION_ALARM:		if(!(tp->user_input.param1[0]) || buf > 4095) 			return INVALID_ARGUMENT;		tp->out[1] = 0x8c;		tp->out[3] = buf & 0xff;		tp->out[2] = 0;		tp->out[2] |= ((buf >> 8) & 0x0f);				break;	case ACTION_ALARM_RESET:		tp->out[1] = 0x8d;		tp->out[2] = 0;		tp->out[3] = 2;		break;	}	public_out(tp);	return 0;}//status func_i2cint status_func_i2c(struct TDVSSS_protocol* tp){	tp->response = 1;	tp->continuous = 0;	//other code ......	public_out(tp);	return 0;}//privacy cover func_i2cint privacy_cover_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf  = tp->user_input.param1[1];	unsigned short buf2;		if(!(tp->user_input.param1[0]) || buf > 31)		return INVALID_ARGUMENT;	tp->continuous = 0;	tp->out[1] = 0x86;	tp->out[3] = 0;	tp->out[3] |= buf; 	switch (tp->user_input.cmd_id)	{	case ACTION_PRIVACY_SET_START:		tp->out[2] = 1;		break;	case ACTION_PRIVACY_OK_ENABLE:		tp->out[2] = 2;		break;	case ACTION_PRIVACY_DISABLE:		tp->out[2] = 0;		break;	case ACTION_PRIVACY_SET_COBOUNDARY:		buf2 = tp->user_input.param2[1];		if(!(tp->user_input.param2[0]))			return INVALID_ARGUMENT;		tp->out[2] = buf2;		tp->out[3] |= 0x20;		break;	case ACTION_PRIVACY_SET_LOWERBOUND:		buf2 = tp->user_input.param2[1];		if(!(tp->user_input.param2[0]))			return INVALID_ARGUMENT;		tp->out[2] = buf2;		tp->out[3] |= 0x40;		break;	case ACTION_PRIVACY_SET_LEFTMARGIN:		buf2 = tp->user_input.param2[1];		if(!(tp->user_input.param2[0]))			return INVALID_ARGUMENT;		tp->out[2] = buf2;		tp->out[3] |= 0x60;		break;	case ACTION_PRIVACY_SET_RIGHTMARGIN:		buf2 = tp->user_input.param2[1];		if(!(tp->user_input.param2[0]))			return INVALID_ARGUMENT;		tp->out[2] = buf2;		tp->out[3] |= 0x80;		break;	case ACTION_PRIVACY_COARSEN:		tp->out[2] = 0x01;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_ATTENUAT:		tp->out[2] = 0x02;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_WIDEN:		tp->out[2] = 0x04;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_NARROW:		tp->out[2] = 0x08;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_MOVE_UP:		tp->out[2] = 0x10;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_MOVE_DOWN:		tp->out[2] = 0x20;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_MOVE_LEFT:		tp->out[2] = 0x40;		tp->out[3] |= 0x90;		break;	case ACTION_PRIVACY_MOVE_RIGHT:		tp->out[2] = 0x80;		tp->out[3] |= 0x90;		break;	}	public_out(tp);	return 0;}//camera menu func_i2cint camera_menu_func_i2c(struct TDVSSS_protocol* tp){	tp->continuous = 0;	tp->out[1] = 0x89;	tp->out[3] = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_OPEN_MENU:		tp->out[2] = 0x01;		break;	case ACTION_CLOSE_MENU:		tp->out[2] = 0x00;		break;	case ACTION_FATHER_MENU:		tp->out[2] = 0x02;		break;	case ACTION_CHILD_MENU:		tp->out[2] = 0x03;		break;	case ACTION_UPWORD_MENU:		tp->out[2] = 0x04;		break;	case ACTION_DOWNWORD_MENU:		tp->out[2] = 0x05;		break;	case ACTION_LEFTWORD_MENU:		tp->out[2] = 0x06;		break;	case ACTION_RIGHTWORD_MENU:		tp->out[2] = 0x07;		break;	case ACTION_OK_MENU:		tp->out[2] = 0x08;		break;	}	public_out(tp);	return 0;}//char set func_i2cint char_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf  = tp->user_input.param1[1];	unsigned short buf2 = tp->user_input.param2[1];	if(!(tp->user_input.param1[0]))		return INVALID_ARGUMENT;		tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_SET_CHAR_POSITION:		if(!(tp->user_input.param2[0]))			return INVALID_ARGUMENT;		if(buf <=255 && buf2 <= 255)		{			tp->out[1] = 0x8a;			tp->out[2] = buf;			tp->out[3] = buf2;		}		else			return INVALID_ARGUMENT;		break;	case ACTION_SET_CHAR:		tp->out[1] = 0x8b;		tp->out[3] = buf & 0xff;		tp->out[2] = buf >> 8;		break;	}	public_out(tp);	return 0;}//other func_i2cint other_func_i2c(struct TDVSSS_protocol* tp){	unsigned short buf;	tp->continuous = 0;	switch (tp->user_input.cmd_id)	{	case ACTION_RESET:		tp->out[1] = 0x8d;		tp->out[2] = 0;		tp->out[3] = 1;		break;	case ACTION_ORIGINAL_SET:		tp->out[1] = 0x8d;		tp->out[2] = 0;		tp->out[3] = 0;		break;	case ACTION_MIN_FOCUS_DIST:		if(!(tp->user_input.param1[0]))			return INVALID_ARGUMENT;		tp->out[1] = 0x90;		buf = tp->user_input.param1[1];		tp->out[3] = buf & 0xff;		tp->out[2] = buf >> 8;		break;	}	public_out(tp);	return 0;}/*void response(int sig){	if((sig != SIGRESP) || (g_tp == NULL))		return;	fprintf(stderr,"response...\n");		g_tp->response = 0;	return;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -