Commit cb370ad5 authored by Evangelia Gousiou's avatar Evangelia Gousiou

last version of fmctdc1ns5cha calibration modules

parent 02101201
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
MODULE_INFO(vermagic, VERMAGIC_STRING);
struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
static const struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0x35ec255d, "module_layout" },
{ 0x1976aa06, "param_ops_bool" },
{ 0x3539443, "usb_serial_deregister_drivers" },
{ 0xdf6a71a4, "usb_serial_register_drivers" },
{ 0x73c9cdb0, "usb_serial_generic_open" },
{ 0x6143a69d, "dev_warn" },
{ 0x53662107, "tty_encode_baud_rate" },
{ 0x6339a8bc, "mutex_unlock" },
{ 0xcf510c4a, "mutex_lock" },
{ 0x41b8c132, "usb_serial_generic_close" },
{ 0xcea0a119, "kmalloc_caches" },
{ 0x41ad0272, "kmem_cache_alloc_trace" },
{ 0xd44c22ec, "usb_reset_device" },
{ 0x93d085b2, "dev_set_drvdata" },
{ 0x50eedeb8, "printk" },
{ 0x37a0cba, "kfree" },
{ 0x64d0da33, "usb_control_msg" },
{ 0x12da5bb2, "__kmalloc" },
{ 0x35af9caf, "dev_err" },
{ 0xddffa24, "dev_get_drvdata" },
{ 0xb4390f9a, "mcount" },
};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=usbserial";
MODULE_ALIAS("usb:v045Bp0053d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0471p066Ad*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0489pE000d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0489pE003d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0745p1000d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v08E6p5501d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v08FDp000Ad*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0BEDp1100d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0BEDp1101d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0FCFp1003d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0FCFp1004d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v0FCFp1006d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10A6pAA26d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10ABp10C5d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10B5pAC70d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p0F91d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p1101d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p1601d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p800Ad*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p803Bd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8044d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p804Ed*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8053d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8054d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8066d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p806Fd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p807Ad*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p80CAd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p80DDd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p80F6d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8115d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p813Dd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p813Fd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p814Ad*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p814Bd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8156d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p815Ed*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p818Bd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p819Fd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81A6d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81A9d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81ACd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81ADd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81C8d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81E2d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81E7d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81E8d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p81F2d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8218d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p822Bd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p826Bd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8293d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p82F9d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8341d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8382d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p83A8d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p83D8d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8411d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8418d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p846Ed*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8477d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p85EAd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p85EBd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8664d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4p8665d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pEA60d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pEA61d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pEA70d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pEA80d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pEA71d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pF001d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pF002d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pF003d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C4pF004d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10C5pEA61d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v10CEpEA6Ad*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v13ADp9999d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v1555p0004d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v166Ap0303d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v16D6p0001d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v16DCp0010d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v16DCp0011d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v16DCp0012d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v16DCp0015d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v17A8p0001d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v17A8p0005d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v17F4pAAAAd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v1843p0200d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v18EFpE00Fd*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v1BE3p07A6d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v3195pF190d*dc*dsc*dp*ic*isc*ip*");
MODULE_ALIAS("usb:v413Cp9500d*dc*dsc*dp*ic*isc*ip*");
MODULE_INFO(srcversion, "FF7E88FED57F3623F48F6A3");
......@@ -32,6 +32,12 @@ default_test_syntax = r'(test)?(\d\d)'
original_raw_input = raw_input
sys.path.append('gnurabbit/python/')
sys.path.append('common/')
sys.path.append('common/usb_box')
sys.path.append('common/cp210x')
sys.path.append('test/fmceeprom/python')
def pts_raw_input(msg, default='y'):
try:
ret = original_raw_input(msg)
......
ifneq ($(KERNELRELEASE),)
obj-m := usbtmc.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
This diff is collapsed.
// usbtmc.h
// This file is part of a Linux kernel module for USBTMC (USB Test and
// Measurement Class) devices
// Copyright (C) 2007 Stefan Kopp, Gechingen, Germany
// See usbtmc.c source file for license details
#include <linux/ioctl.h> // For _IO macro
// Driver parameters that you might want to tune...
// Maximum number of USBTMC devices to be concurrently serviced by this module
#define USBTMC_MINOR_NUMBERS 16
// Size of driver internal IO buffer. Must be multiple of 4 and at least as
// large as wMaxPacketSize (which is usually 512 bytes).
#define USBTMC_SIZE_IOBUFFER 4096
// Default USB timeout (in jiffies)
#define USBTMC_DEFAULT_TIMEOUT 10*HZ
// Maximum number of read cycles to empty bulk in endpoint during CLEAR and
// ABORT_BULK_IN requests. Ends the loop if (for whatever reason) a short
// packet is never read.
#define USBTMC_MAX_READS_TO_CLEAR_BULK_IN 100
// Other definitions
// Request values for USBTMC driver's ioctl entry point
#define USBTMC_IOC_NR 91
#define USBTMC_IOCTL_GET_CAPABILITIES _IO(USBTMC_IOC_NR,0)
#define USBTMC_IOCTL_INDICATOR_PULSE _IO(USBTMC_IOC_NR,1)
#define USBTMC_IOCTL_CLEAR _IO(USBTMC_IOC_NR,2)
#define USBTMC_IOCTL_ABORT_BULK_OUT _IO(USBTMC_IOC_NR,3)
#define USBTMC_IOCTL_ABORT_BULK_IN _IO(USBTMC_IOC_NR,4)
#define USBTMC_IOCTL_SET_ATTRIBUTE _IO(USBTMC_IOC_NR,5)
#define USBTMC_IOCTL_CLEAR_OUT_HALT _IO(USBTMC_IOC_NR,6)
#define USBTMC_IOCTL_CLEAR_IN_HALT _IO(USBTMC_IOC_NR,7)
//#define USBTMC_IOCTL_TIMEOUT _IO(USBTMC_IOC_NR,8)
#define USBTMC_IOCTL_GET_ATTRIBUTE _IO(USBTMC_IOC_NR,9)
#define USBTMC_IOCTL_INSTRUMENT_DATA _IO(USBTMC_IOC_NR,10)
#define USBTMC_IOCTL_RESET_CONF _IO(USBTMC_IOC_NR,11)
// Request names for usbtmc_ioctl command line utility
#define USBTMC_IOCTL_NAME_GET_CAPABILITIES "getcaps"
#define USBTMC_IOCTL_NAME_INDICATOR_PULSE "indpulse"
#define USBTMC_IOCTL_NAME_CLEAR "clear"
#define USBTMC_IOCTL_NAME_ABORT_BULK_OUT "abortout"
#define USBTMC_IOCTL_NAME_ABORT_BULK_IN "abortin"
#define USBTMC_IOCTL_NAME_SET_ATTRIBUTE "setattr"
#define USBTMC_IOCTL_NAME_CLEAR_OUT_HALT "clearouthalt"
#define USBTMC_IOCTL_NAME_CLEAR_IN_HALT "clearinhalt"
#define USBTMC_IOCTL_NAME_GET_ATTRIBUTE "getattr"
#define USBTMC_IOCTL_NAME_RESET_CONF "reset"
// This structure is used with USBTMC_IOCTL_GET_CAPABILITIES.
// See section 4.2.1.8 of the USBTMC specification for details.
struct usbtmc_dev_capabilities {
char interface_capabilities;
char device_capabilities;
char usb488_interface_capabilities;
char usb488_device_capabilities;
};
// This structure is used with USBTMC_IOCTL_SET_ATTRIBUTE and
// USBTMC_IOCTL_GET_ATTRIBUTE.
struct usbtmc_attribute {
int attribute;
int value;
};
// Defines for attributes and their values
#define USBTMC_ATTRIB_AUTO_ABORT_ON_ERROR 0
#define USBTMC_ATTRIB_NAME_AUTO_ABORT_ON_ERROR "autoabort"
#define USBTMC_ATTRIB_READ_MODE 1
#define USBTMC_ATTRIB_NAME_READ_MODE "readmode"
#define USBTMC_ATTRIB_TIMEOUT 2
#define USBTMC_ATTRIB_NAME_TIMEOUT "timeout"
#define USBTMC_ATTRIB_NUM_INSTRUMENTS 3
#define USBTMC_ATTRIB_NAME_NUM_INSTRUMENTS "numinst"
#define USBTMC_ATTRIB_MINOR_NUMBERS 4
#define USBTMC_ATTRIB_NAME_MINOR_NUMBERS "numminor"
#define USBTMC_ATTRIB_SIZE_IO_BUFFER 5
#define USBTMC_ATTRIB_NAME_SIZE_IO_BUFFER "buffsize"
#define USBTMC_ATTRIB_DEFAULT_TIMEOUT 6
#define USBTMC_ATTRIB_NAME_DEFAULT_TIMEOUT "deftimeout"
#define USBTMC_ATTRIB_DEBUG_MODE 7
#define USBTMC_ATTRIB_NAME_DEBUG_MODE "debug"
#define USBTMC_ATTRIB_VERSION 8
#define USBTMC_ATTRIB_NAME_VERSION "version"
#define USBTMC_ATTRIB_TERM_CHAR_ENABLED 9
#define USBTMC_ATTRIB_NAME_TERM_CHAR_ENABLED "termcharenab"
#define USBTMC_ATTRIB_TERM_CHAR 10
#define USBTMC_ATTRIB_NAME_TERM_CHAR "termchar"
#define USBTMC_ATTRIB_ADD_NL_ON_READ 11
#define USBTMC_ATTRIB_NAME_ADD_NL_ON_READ "addnlread"
#define USBTMC_ATTRIB_REM_NL_ON_WRITE 12
#define USBTMC_ATTRIB_NAME_REM_NL_ON_WRITE "remnlwrite"
#define USBTMC_ATTRIB_VAL_OFF 0
#define USBTMC_ATTRIB_NAME_VAL_OFF "off"
#define USBTMC_ATTRIB_VAL_ON 1
#define USBTMC_ATTRIB_NAME_VAL_ON "on"
#define USBTMC_ATTRIB_VAL_FREAD 0
#define USBTMC_ATTRIB_NAME_VAL_FREAD "fread"
#define USBTMC_ATTRIB_VAL_READ 1
#define USBTMC_ATTRIB_NAME_VAL_READ "read"
// This structure is used with USBTMC_IOCTL_INSTRUMENT_DATA.
struct usbtmc_instrument {
int minor_number;
char manufacturer[200];
char product[200];
char serial_number[200];
};
// USBTMC status values
#define USBTMC_STATUS_SUCCESS 0x01
#define USBTMC_STATUS_PENDING 0x02
#define USBTMC_STATUS_FAILED 0x80
#define USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS 0x81
#define USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS 0x82
#define USBTMC_STATUS_SPLIT_IN_PROGRESS 0x83
// USBTMC requests values
#define USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT 1
#define USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS 2
#define USBTMC_REQUEST_INITIATE_ABORT_BULK_IN 3
#define USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS 4
#define USBTMC_REQUEST_INITIATE_CLEAR 5
#define USBTMC_REQUEST_CHECK_CLEAR_STATUS 6
#define USBTMC_REQUEST_GET_CAPABILITIES 7
#define USBTMC_REQUEST_INDICATOR_PULSE 64
// usbtmc_ioctl.c
// This file is part of a Linux kernel module for USBTMC (USB Test and
// Measurement Class) devices. It allows access to the driver's ioctl
// entry point.
// Copyright (C) 2007 Stefan Kopp, Gechingen, Germany
// See revision history at the end of this file
//
// 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.
//
// The GNU General Public License is available at
// http://www.gnu.org/copyleft/gpl.html.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include "usbtmc.h"
int minor_number=0;
char devfile[100];
int request=-1;
int myfile;
int rv;
struct usbtmc_dev_capabilities devcaps;
struct usbtmc_attribute attr;
int main(int argc,char *argv[])
{
if(argc<3) goto print_usage;
// Convert parameter #1 (minor number)
sscanf(argv[1],"%d",&minor_number);
if((minor_number<1)||(minor_number>USBTMC_MINOR_NUMBERS)) {
printf("Error: Bad minor number.\n");
goto print_usage;
}
sprintf(devfile,"/dev/usbtmc%d",minor_number);
// Convert parameter #2 (request name)
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_GET_CAPABILITIES))
request=USBTMC_IOCTL_GET_CAPABILITIES;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_INDICATOR_PULSE))
request=USBTMC_IOCTL_INDICATOR_PULSE;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_CLEAR))
request=USBTMC_IOCTL_CLEAR;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_ABORT_BULK_OUT))
request=USBTMC_IOCTL_ABORT_BULK_OUT;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_ABORT_BULK_IN))
request=USBTMC_IOCTL_ABORT_BULK_IN;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_SET_ATTRIBUTE))
request=USBTMC_IOCTL_SET_ATTRIBUTE;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_CLEAR_OUT_HALT))
request=USBTMC_IOCTL_CLEAR_OUT_HALT;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_CLEAR_IN_HALT))
request=USBTMC_IOCTL_CLEAR_IN_HALT;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_GET_ATTRIBUTE))
request=USBTMC_IOCTL_GET_ATTRIBUTE;
if(!strcmp(argv[2],USBTMC_IOCTL_NAME_RESET_CONF))
request=USBTMC_IOCTL_RESET_CONF;
// Open device file
myfile=open(devfile,O_RDWR);
if(myfile==-1) {
printf("Error: Can't open device file %s.\n",devfile);
exit(-1);
}
switch(request) {
case USBTMC_IOCTL_INDICATOR_PULSE:
case USBTMC_IOCTL_CLEAR:
case USBTMC_IOCTL_ABORT_BULK_OUT:
case USBTMC_IOCTL_ABORT_BULK_IN:
case USBTMC_IOCTL_CLEAR_OUT_HALT:
case USBTMC_IOCTL_CLEAR_IN_HALT:
case USBTMC_IOCTL_RESET_CONF:
rv=ioctl(myfile,request,0);
if(rv==-1) {
printf("Error: ioctl returned %d.\n",rv);
}
break;
case USBTMC_IOCTL_GET_CAPABILITIES:
rv=ioctl(myfile,request,&devcaps);
printf("Interface capabilities: %u\n",
devcaps.interface_capabilities);
printf("Device capabilities: %u\n",
devcaps.device_capabilities);
printf("USB488 interface capabilities: %u\n",
devcaps.usb488_interface_capabilities);
printf("USB488 device capabilities: %u\n",
devcaps.usb488_device_capabilities);
break;
case USBTMC_IOCTL_SET_ATTRIBUTE:
case USBTMC_IOCTL_GET_ATTRIBUTE:
// Convert parameter #3 (attribute name)
attr.attribute=-1;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_AUTO_ABORT_ON_ERROR))
attr.attribute=USBTMC_ATTRIB_AUTO_ABORT_ON_ERROR;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_READ_MODE))
attr.attribute=USBTMC_ATTRIB_READ_MODE;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_TIMEOUT))
attr.attribute=USBTMC_ATTRIB_TIMEOUT;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_NUM_INSTRUMENTS))
attr.attribute=USBTMC_ATTRIB_NUM_INSTRUMENTS;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_MINOR_NUMBERS))
attr.attribute=USBTMC_ATTRIB_MINOR_NUMBERS;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_SIZE_IO_BUFFER))
attr.attribute=USBTMC_ATTRIB_SIZE_IO_BUFFER;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_DEFAULT_TIMEOUT))
attr.attribute=USBTMC_ATTRIB_DEFAULT_TIMEOUT;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_DEBUG_MODE))
attr.attribute=USBTMC_ATTRIB_DEBUG_MODE;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_VERSION))
attr.attribute=USBTMC_ATTRIB_VERSION;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_TERM_CHAR_ENABLED))
attr.attribute=USBTMC_ATTRIB_TERM_CHAR_ENABLED;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_TERM_CHAR))
attr.attribute=USBTMC_ATTRIB_TERM_CHAR;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_ADD_NL_ON_READ))
attr.attribute=USBTMC_ATTRIB_ADD_NL_ON_READ;
if(!strcmp(argv[3],USBTMC_ATTRIB_NAME_REM_NL_ON_WRITE))
attr.attribute=USBTMC_ATTRIB_REM_NL_ON_WRITE;
if(attr.attribute==-1) {
printf("Error: Bad attribute name\n");
close(myfile);
goto print_usage;
}
if(request==USBTMC_IOCTL_SET_ATTRIBUTE) {
attr.value=-1;
if(!strcmp(argv[4],USBTMC_ATTRIB_NAME_VAL_OFF))
attr.value=USBTMC_ATTRIB_VAL_OFF;
if(!strcmp(argv[4],USBTMC_ATTRIB_NAME_VAL_ON))
attr.value=USBTMC_ATTRIB_VAL_ON;
if(!strcmp(argv[4],USBTMC_ATTRIB_NAME_VAL_FREAD))
attr.value=USBTMC_ATTRIB_VAL_FREAD;
if(!strcmp(argv[4],USBTMC_ATTRIB_NAME_VAL_READ))
attr.value=USBTMC_ATTRIB_VAL_READ;
if(attr.value==-1) sscanf(argv[4],"%d",&attr.value);
}
rv=ioctl(myfile,request,&attr);
if(request==USBTMC_IOCTL_GET_ATTRIBUTE) {
if((attr.attribute==USBTMC_ATTRIB_AUTO_ABORT_ON_ERROR)||
(attr.attribute==USBTMC_ATTRIB_DEBUG_MODE)||
(attr.attribute==USBTMC_ATTRIB_TERM_CHAR_ENABLED)||
(attr.attribute==USBTMC_ATTRIB_ADD_NL_ON_READ)||
(attr.attribute==USBTMC_ATTRIB_REM_NL_ON_WRITE))
if(attr.value==USBTMC_ATTRIB_VAL_OFF)
printf("Value: %s\n",USBTMC_ATTRIB_NAME_VAL_OFF);
else
printf("Value: %s\n",USBTMC_ATTRIB_NAME_VAL_ON);
if(attr.attribute==USBTMC_ATTRIB_READ_MODE)
if(attr.value==USBTMC_ATTRIB_VAL_FREAD)
printf("Value: %s\n",USBTMC_ATTRIB_NAME_VAL_FREAD);
else
printf("Value: %s\n",USBTMC_ATTRIB_NAME_VAL_READ);
if(attr.attribute==USBTMC_ATTRIB_TIMEOUT)
printf("Value: %d\n",attr.value);
if(attr.attribute==USBTMC_ATTRIB_NUM_INSTRUMENTS)
printf("Value: %d\n",attr.value);
if(attr.attribute==USBTMC_ATTRIB_MINOR_NUMBERS)
printf("Value: %d\n",attr.value);
if(attr.attribute==USBTMC_ATTRIB_SIZE_IO_BUFFER)
printf("Value: %d\n",attr.value);
if(attr.attribute==USBTMC_ATTRIB_DEFAULT_TIMEOUT)
printf("Value: %d\n",attr.value);
if(attr.attribute==USBTMC_ATTRIB_VERSION)
printf("Value: %d\n",attr.value);
if(attr.attribute==USBTMC_ATTRIB_TERM_CHAR)
printf("Value: %d\n",attr.value);
}
break;
default:
printf("Error: Bad request name.\n");
close(myfile);
goto print_usage;
}
// Close device file
close(myfile);
exit(0);
print_usage:
printf("Usage:\n");
printf("usbtmc_ioctl n request [ attribute [ value ] ]\n");
printf("where\n");
printf("m = minor number, e. g. 1 for /dev/usbtmc1\n");
printf("request = { clear , setattr , getattr , reset etc}\n");
printf("attribute = { autoabort , readmode , timeout etc }\n");
printf("See html documentation for details!\n");
printf("Example:\n");
printf("usbtmc_ioctl 1 clear\n");
printf("Clears input and output buffer of device /dev/usbtmc1\n");
exit(-1);
}
// Revision history
//
// 1.0 05.11.2007 Initial version.
// 1.0.1 07.11.2007 Set cdev struct to zero prior to calling cdev_init().
// 1.0.2 09.11.2007 Bug fixes related to control requests.
// 1.0.3 13.11.2007 Automatic ABORT on error in FREAD (shell) mode.
// 1.0.4 02.12.2007 Added a whole bunch of attributes.
// 1.1 08.12.2007 Clean-up.
#!/bin/bash
module="usbtmc"
# Remove module from kernel (just in case it is still running)
/sbin/rmmod $module 2> /dev/null
# Install module
#/sbin/insmod /home/user/pts_fmcfd/pts/usbdriver/$module.ko
/sbin/insmod /home/user/pts/usbdriver/$module.ko 2> /dev/null
# Find major number used
major=$(cat /proc/devices | grep USBTMCCHR | awk '{print $1}')
#echo Using major number $major
# Remove old device files
rm -f /dev/${module}[0-9]
# Ceate new device files
mknod /dev/${module}0 c $major 0
mknod /dev/${module}1 c $major 1
mknod /dev/${module}2 c $major 2
mknod /dev/${module}3 c $major 3
mknod /dev/${module}4 c $major 4
mknod /dev/${module}5 c $major 5
mknod /dev/${module}6 c $major 6
mknod /dev/${module}7 c $major 7
mknod /dev/${module}8 c $major 8
mknod /dev/${module}9 c $major 9
# Change access mode
chmod 666 /dev/${module}0
chmod 666 /dev/${module}1
chmod 666 /dev/${module}2
chmod 666 /dev/${module}3
chmod 666 /dev/${module}4
chmod 666 /dev/${module}5
chmod 666 /dev/${module}6
chmod 666 /dev/${module}7
chmod 666 /dev/${module}8
chmod 666 /dev/${module}9
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment