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

📄 oap-head.c

📁 这个开发机器人项目源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * $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 + -