📄 oap-head.c
字号:
/* * $Id: oap-head.c,v 1.5 2005/02/19 14:39:09 dwalters Exp $ * * Copyright (C) 2003 Dafydd Walters <dwalters@dragontechnology.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>#include "../../config_api/config_api.h"#include "../include26/i2c-dev-26.h"#define VERSION "1.0"#define CONFIG_FILENAME "/etc/oap.conf"#define READ_PAN_SERVO_SETPOINT_COMMAND 1 // SMBus Read Byte#define READ_PAN_SERVO_ACTUAL_COMMAND 2 // SMBus Read Word#define READ_TILT_SERVO_SETPOINT_COMMAND 3 // SMBus Read Byte#define READ_TILT_SERVO_ACTUAL_COMMAND 4 // SMBus Read Word#define READ_MAX_CHANGE_PER_PERIOD_COMMAND 5 // SMBus Read Byte#define READ_RAW_ANALOG_IR_SENSOR_COMMAND 6 // SMBus Read Byte#define READ_IR_SENSOR_NEUTRAL_VALUE_COMMAND 7 // SMBus Read Byte#define READ_IR_SENSOR_TRIGGER_THRESHOLD_COMMAND 8 // SMBus Read Byte#define READ_IR_TRIGGERED_EVENT_PAN_ACTUAL_COMMAND 9 // SMBus Read Byte#define READ_IR_TRIGGERED_EVENT_STATUS_COMMAND 10 // SMBus Read Byte#define READ_IR_TRIGGERED_EVENT_MODE_COMMAND 11 // SMBus Read Byte#define READ_IR_TRIGGERED_EVENT_ANALOG_COMMAND 12 // SMBus Read Byte#define READ_IR_TRIGGERED_EVENT_TIMER_COUNT_COMMAND 13 // SMBus Read Byte#define READ_CURRENT_TIMER_COUNT_COMMAND 14 // SMBus Read Byte#define READ_PWM_OUTPUT_STATUS_COMMAND 15 // SMBus Read Byte#define WRITE_PAN_SERVO_SETPOINT_COMMAND 100 // SMBus Write Byte#define WRITE_TILT_SERVO_SETPOINT_COMMAND 101 // SMBus Write Byte#define WRITE_MAX_CHANGE_PER_PERIOD_COMMAND 102 // SMBus Write Byte#define WRITE_IR_SENSOR_NEUTRAL_VALUE_COMMAND 103 // SMBus Write Byte#define WRITE_IR_SENSOR_TRIGGER_THRESHOLD_COMMAND 104 // SMBus Write Byte#define RESET_IR_TRIGGERED_EVENT_COMMAND 105 // SMBus Send Byte#define WRITE_IR_TRIGGERED_EVENT_MODE_COMMAND 106 // SMBus Write Byte#define RESET_TIMER_COUNT_COMMAND 107 // SMBus Send Byte#define ENABLE_PWM_OUTPUT_COMMAND 108 // SMBus Send Byte#define DISABLE_PWM_OUTPUT_COMMAND 109 // SMBus Send Bytestatic int device_address;static char filename[100];static int file;static void read_config();static int check_params(int argc, char* argv[]);static void report_state(int file);static void set_pan_servo_setpoint(int file, __u8 setpoint);static void set_tilt_servo_setpoint(int file, __u8 setpoint);static void set_max_change_per_period(int file, __u8 setpoint);static void set_ir_sensor_neutral(int file, __u8 setpoint);static void set_ir_sensor_trigger_threshold(int file, __u8 setpoint);static void set_ir_triggered_event_mode(int file, __u8 setpoint);static void reset_ir_event(int file);static void zero_timer(int file);static void activate(int file);static void disable(int file);static void show_usage(void);int main(int argc, char* argv[]){ if (!check_params(argc, argv)) { show_usage(); exit(EXIT_FAILURE); } /* Load configuration settings */ read_config(); /* Open device */ if ((file = open(filename, O_RDWR)) < 0) { fprintf(stderr, "Unable to open device %s\n", filename); exit(EXIT_FAILURE); } /* Select slave device address */ if (ioctl(file, I2C_SLAVE, device_address) < 0) { fprintf(stderr, "Unable to set slave device address to %d\n", device_address); close(file); exit(EXIT_FAILURE); } if (strcmp(argv[1], "s") == 0) { /* Report servo postions, state and configuration */ report_state(file); } else if (strcmp(argv[1], "p") == 0) { /* Set Pan servo setpoint */ set_pan_servo_setpoint(file, atoi(argv[2])); } else if (strcmp(argv[1], "t") == 0) { /* Set Tilt servo setpoint */ set_tilt_servo_setpoint(file, atoi(argv[2])); } else if (strcmp(argv[1], "c") == 0) { /* Set Maximum Change Per Period setting */ set_max_change_per_period(file, atoi(argv[2])); } else if (strcmp(argv[1], "n") == 0) { /* Set IR Sensor Neutral setting */ set_ir_sensor_neutral(file, atoi(argv[2])); } else if (strcmp(argv[1], "i") == 0) { /* Set IR Sensor Trigger Threshold setting */ set_ir_sensor_trigger_threshold(file, atoi(argv[2])); } else if (strcmp(argv[1], "m") == 0) { /* Set IR Triggered Event Mode setting */ set_ir_triggered_event_mode(file, atoi(argv[2])); } else if (strcmp(argv[1], "r") == 0) { /* Reset ir event */ reset_ir_event(file); } else if (strcmp(argv[1], "z") == 0) { /* Reset ir event */ zero_timer(file); } else if (strcmp(argv[1], "a") == 0) { /* Activate PWM otuput */ activate(file); } else if (strcmp(argv[1], "d") == 0) { /* Disable PWM output */ disable(file); } close(file); exit(EXIT_SUCCESS);}void show_usage(void){ printf("\nOpen Automaton Project Head Control Module utility - " "(oap-head) version %s\nCopyright (C) 2003 Dafydd Walters\n\n" "oap-head comes with ABSOLUTYELY NO WARRANTY; for details " "see the\nGNU General Public License at http://www.gnu.org" "/licenses/gpl.html\n\n", VERSION); printf("Usage: oap-head <command>\n" "Commands:\n" " s Report servo positons, state and configuration\n" " p <nnn> Pan servo setpoint\n" " t <nnn> Tilt servo setpoint\n" " c <nnn> Set \"Maximum Change Per Period\" setting\n" " n <nnn> Set \"IR Sensor Neutral\" setting\n" " i <nnn> Set \"IR Sensor Trigger Threshold\" setting\n" " m <n> Set \"IR Triggered Event Mode\" setting\n" " r Reset IR triggered event\n" " z Reset 8-bit free running timer counter\n" " a Activate PWM output, timer and IR sensing\n" " d Disable PWM output, timer and IR sensing (low power)\n" "\n");}void set_pan_servo_setpoint(int file, __u8 setpoint){ __s32 result; /* Set pan servo setpoint */ result = oap_i2c_smbus_write_byte_data(file, WRITE_PAN_SERVO_SETPOINT_COMMAND, setpoint); if (result < 0) { fprintf(stderr, "Error setting pan servo setpoint\n"); close(file); exit(EXIT_FAILURE); }}void set_tilt_servo_setpoint(int file, __u8 setpoint){ __s32 result; /* Set tilt servo setpoint */ result = oap_i2c_smbus_write_byte_data(file, WRITE_TILT_SERVO_SETPOINT_COMMAND, setpoint); if (result < 0) { fprintf(stderr, "Error setting tilt servo setpoint\n"); close(file); exit(EXIT_FAILURE); }}void set_max_change_per_period(int file, __u8 setting){ __s32 result; /* Set max Change Per Period setting */ result = oap_i2c_smbus_write_byte_data(file, WRITE_MAX_CHANGE_PER_PERIOD_COMMAND, setting); if (result < 0) { fprintf(stderr, "Error setting max Change Per Period setting\n"); close(file); exit(EXIT_FAILURE); }}void set_ir_sensor_neutral(int file, __u8 setting){ __s32 result; /* Set IR Sensor Neutral Setting */ result = oap_i2c_smbus_write_byte_data(file, WRITE_IR_SENSOR_NEUTRAL_VALUE_COMMAND, setting); if (result < 0) { fprintf(stderr, "Error setting IR Sensor Neutral setting\n"); close(file); exit(EXIT_FAILURE); }}void set_ir_sensor_trigger_threshold(int file, __u8 setting){ __s32 result; /* Set IR Sensor Trigger Threshold Setting */ result = oap_i2c_smbus_write_byte_data(file, WRITE_IR_SENSOR_TRIGGER_THRESHOLD_COMMAND, setting); if (result < 0) { fprintf(stderr, "Error setting IR Sensor Trigger Treshold setting\n"); close(file); exit(EXIT_FAILURE); }}void set_ir_triggered_event_mode(int file, __u8 setting){ __s32 result; /* Set IR Triggered Event Mode setting */ result = oap_i2c_smbus_write_byte_data(file, WRITE_IR_TRIGGERED_EVENT_MODE_COMMAND, setting); if (result < 0) { fprintf(stderr, "Error setting IR Triggered Event Mode setting\n"); close(file); exit(EXIT_FAILURE); }}void reset_ir_event(int file){ __s32 result; /* Reset IR event */ result = oap_i2c_smbus_write_byte(file, RESET_IR_TRIGGERED_EVENT_COMMAND); if (result < 0) { fprintf(stderr, "Error resetting IR triggered event\n"); close(file); exit(EXIT_FAILURE); }} void zero_timer(int file){ __s32 result;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -