📄 standard_i2c.c
字号:
} 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 + -