Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
Programmable RF Attenuator
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Programmable RF Attenuator
Commits
6f490008
Commit
6f490008
authored
Nov 09, 2021
by
Juan David González Cobas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
completely refactor enumeration
parent
4df8f30f
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
132 additions
and
50 deletions
+132
-50
Makefile
software/lib/Makefile
+5
-4
liboasis-usb-att.c
software/lib/liboasis-usb-att.c
+24
-2
liboasis-usb-att.h
software/lib/liboasis-usb-att.h
+15
-1
oautest
software/lib/oautest
+46
-6
usb-enum.c
software/lib/usb-enum.c
+7
-37
usb-enum.h
software/lib/usb-enum.h
+35
-0
No files found.
software/lib/Makefile
View file @
6f490008
-include
Makefile.ftdi
OBJS
=
$(LIBNAME)
.o
OBJS
=
$(LIBNAME)
.o
usb-enum.o
CFLAGS
+=
-fPIC
-g
CFLAGS
+=
-DGIT_VERSION
=
\"
$(GIT_VERSION)
\"
GIT_VERSION
=
$(
shell
git describe
--dirty
--tags
--all
--long
)
LIBNAME
=
liboasis-usb-att
all
:
lib testprog
usb-enum
all
:
lib testprog
lib
:
$(LIBNAME).a $(LIBNAME).so
$(LIBNAME).a
:
$(OBJS)
ar rc
$(LIBNAME)
.a
$(OBJS)
$(LIBNAME).so
:
LDLIBS += -ludev
$(LIBNAME).so
:
$(OBJS)
$(CC)
$(CFLAGS)
-shared
-o
$@
$^
$(LDFLAGS)
$(LDLIBS)
$(OBJS)
:
liboasis-usb-att.h usb-enum.h
usb-enum
:
usb-enum.o
usb-enum
:
LDLIBS += -ludev
testprog
:
LDLIBS += -ludev
testprog
:
test.o $(LIBNAME).a
$(CC)
$(CFLAGS)
$^
-o
$@
$(LDLIBS)
$(LDFLAGS)
...
...
software/lib/liboasis-usb-att.c
View file @
6f490008
...
...
@@ -8,9 +8,11 @@
#include <stdio.h>
#include <errno.h>
#include "liboasis-usb-att.h"
#include <ftdi.h>
#include "liboasis-usb-att.h"
#include "usb-enum.h"
#define OAU_VENDOR_ID 0x1556
/* CERN USB Vendor ID */
#define OAU_DEVICE_ID 0x0443
/* oau USB Device ID */
...
...
@@ -38,7 +40,13 @@ static struct {
{
6
,
7
}
};
int
oau_att_open
(
char
*
serial
)
int
oau_att_open
(
int
lun
)
{
/* not implemented: ignore lun by the moment */
return
-
ENOSYS
;
}
int
oau_att_open_by_serial
(
char
*
serial
)
{
int
ret
;
...
...
@@ -167,3 +175,17 @@ int oau_att_get_nchannels(int fd)
return
OAU_NUM_CHANNELS
;
}
int
oau_list_devices
(
void
)
{
int
i
,
devs
;
struct
oau_devarray
*
list
;
char
vid
[
10
],
did
[
10
];
sprintf
(
vid
,
"%04x"
,
OAU_VENDOR_ID
);
sprintf
(
did
,
"%04x"
,
OAU_DEVICE_ID
);
list
=
oau_get_devarray
(
vid
,
did
);
oau_display_devarray
(
list
);
return
0
;
}
software/lib/liboasis-usb-att.h
View file @
6f490008
...
...
@@ -32,6 +32,9 @@ enum oau_att_value_enum {
ATT_NONE
=
0x0
,
/**< No attenuation */
ATT_1
=
0x01
,
/**< Attenuator 1: 20dB */
ATT_2
=
0x03
,
/**< Attenuator 1+2: 40dB */
ATT_MINUS_40dB
=
0x0
,
/**< -40dB attn (power-on default) */
ATT_MINUS_20dB
=
0x01
,
/**< -20dB attn */
ATT_0dB
=
0x03
,
/**< 0dB attn */
};
/**
...
...
@@ -40,11 +43,22 @@ enum oau_att_value_enum {
* A board is selected by lun, and a handle is returned for further
* reference to it.
*
* @param lun - logical unit number of USB attenuator
*
* @return >0 - on success, device file descriptor number
*/
int
oau_att_open
(
int
lun
);
/**
* @brief Open a msatt device
*
* Open OASIS USB attenuator with given serial number.
*
* @param serial - serial number of USB attenuator
*
* @return >0 - on success, device file descriptor number
*/
int
oau_att_open
(
char
*
serial
);
int
oau_att_open
_by_serial
(
char
*
serial
);
/**
* @brief close a channel handle
...
...
software/lib/oautest
View file @
6f490008
...
...
@@ -7,6 +7,25 @@ import os.path
import
pdb
from
ctypes
import
*
class
Dev
(
Structure
):
_fields_
=
[
(
'lun'
,
c_int
),
(
'busnum'
,
c_char
*
6
),
(
'devnum'
,
c_char
*
6
),
(
'portnum'
,
c_char
*
6
),
(
'busport'
,
c_char
*
16
),
(
'devno'
,
c_char
*
10
),
(
'serial'
,
c_char
*
48
),
(
'path'
,
c_char
*
256
),
(
'unused'
,
c_int
*
4
),
]
class
DevArray
(
Structure
):
_fields_
=
[
(
'ndevs'
,
c_int
),
(
'devs'
,
POINTER
(
Dev
)
),
]
class
OauTest
(
cmd
.
Cmd
):
attn_values
=
{
...
...
@@ -31,23 +50,44 @@ class OauTest(cmd.Cmd):
self
.
lun
=
None
self
.
fd
=
None
self
.
nchannels
=
None
self
.
fill_devarray
()
def
fill_devarray
(
self
):
self
.
api
.
oau_get_devarray
.
restype
=
POINTER
(
DevArray
)
self
.
devarray
=
self
.
api
.
oau_get_devarray
(
b
'1556'
,
b
'0443'
)
ndevs
=
self
.
devarray
.
contents
.
ndevs
devs
=
self
.
devarray
.
contents
.
devs
self
.
devices
=
[]
for
i
in
range
(
ndevs
):
dev
=
devs
[
i
]
self
.
devices
.
append
({
'lun'
:
dev
.
lun
,
'busnum'
:
str
(
dev
.
busnum
,
'utf8'
),
'devnum'
:
str
(
dev
.
devnum
,
'utf8'
),
'portnum'
:
str
(
dev
.
portnum
,
'utf8'
),
'busport'
:
str
(
dev
.
busport
,
'utf8'
),
'devno'
:
str
(
dev
.
devno
,
'utf8'
),
'serial'
:
str
(
dev
.
serial
,
'utf8'
),
'path'
:
str
(
dev
.
path
,
'utf8'
)})
def
do_list
(
self
,
arg
):
"""list devices and their access methods."""
pass
self
.
fill_devarray
()
for
i
,
dev
in
enumerate
(
self
.
devices
):
print
(
'{}: l:{} serial:{} busport:{}'
.
format
(
i
,
dev
[
'lun'
],
dev
[
'serial'
],
dev
[
'busport'
]))
def
do_open
(
self
,
arg
):
"""open device by serial number."""
serial
=
bytes
(
arg
,
'utf8'
)
if
arg
else
0
fd
=
self
.
api
.
oau_att_open
(
serial
)
serial
=
self
.
devices
[
0
][
'serial'
]
if
not
arg
else
arg
fd
=
self
.
api
.
oau_att_open
_by_serial
(
bytes
(
serial
,
'utf8'
)
)
if
fd
<
0
:
print
(
'cannot open device {}'
.
format
(
serial
))
return
self
.
fd
=
fd
self
.
nchannels
=
self
.
read_nchannels
()
print
(
'current device: serial {}, fd {}, {} channels'
.
format
(
str
(
serial
,
'utf8'
)
if
serial
else
'??'
,
fd
,
self
.
nchannels
))
serial
,
fd
,
self
.
nchannels
))
def
do_close
(
self
,
arg
):
"""close connection to current device."""
...
...
@@ -149,7 +189,7 @@ class OauTest(cmd.Cmd):
do_q
=
do_EOF
do_h
=
cmd
.
Cmd
.
do_help
do_ls
=
do_list
if
__name__
==
'__main__'
:
...
...
software/lib/usb-enum.c
View file @
6f490008
...
...
@@ -4,30 +4,11 @@
#include <string.h>
#include <libudev.h>
#define OAU_VENDOR_ID "1556"
/* CERN USB Vendor ID */
#define OAU_DEVICE_ID "0443"
/* oau USB Device ID */
#define ID_VENDOR_ID OAU_VENDOR_ID
#define ID_DEVICE_ID OAU_DEVICE_ID
#include "usb-enum.h"
#define MAX_OUA 16
struct
oau_usb_dev
{
char
path
[
PATH_MAX
];
char
busnum
[
6
];
char
devnum
[
6
];
char
portnum
[
6
];
char
busport
[
16
];
char
devno
[
10
];
char
serial
[
48
];
};
struct
oau_devlist
{
struct
oau_usb_dev
*
devs
;
int
ndevs
;
};
void
oau_display_devlist
(
struct
oau_devlist
*
ls
)
void
oau_display_devarray
(
struct
oau_devarray
*
ls
)
{
int
i
;
for
(
i
=
0
;
i
<
ls
->
ndevs
;
i
++
)
{
...
...
@@ -40,9 +21,9 @@ void oau_display_devlist(struct oau_devlist *ls)
}
static
struct
oau_usb_dev
usb_dev
[
MAX_OUA
];
static
struct
oau_dev
list
devlist
=
{
usb_dev
,
-
1
,
};
static
struct
oau_dev
array
devarray
=
{
-
1
,
usb_dev
,
};
st
atic
struct
oau_devlist
*
oau_enumerate
(
char
*
vendor_id
,
char
*
device_id
)
st
ruct
oau_devarray
*
oau_get_devarray
(
char
*
vendor_id
,
char
*
device_id
)
{
struct
udev
*
udev
=
udev_new
();
struct
udev_enumerate
*
enumerate
=
udev_enumerate_new
(
udev
);
...
...
@@ -67,22 +48,11 @@ static struct oau_devlist *oau_enumerate(char *vendor_id, char *device_id)
strcpy
(
entry
->
serial
,
udev_device_get_sysattr_value
(
dev
,
"serial"
));
strcpy
(
entry
->
busport
,
rindex
(
entry
->
path
,
'/'
)
+
1
);
found_devs
++
;
found_devs
+=
1
;
udev_device_unref
(
dev
);
}
out:
udev_enumerate_unref
(
enumerate
);
devlist
.
ndevs
=
found_devs
;
return
&
devlist
;
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
i
,
devs
;
struct
oau_devlist
*
list
;
list
=
oau_enumerate
(
ID_VENDOR_ID
,
ID_DEVICE_ID
);
oau_display_devlist
(
list
);
return
0
;
devarray
.
ndevs
=
found_devs
;
return
&
devarray
;
}
software/lib/usb-enum.h
0 → 100644
View file @
6f490008
/**
* @file usb-enum.h
*
* @brief OASIS USB Attenuator driver library interface
*
* This file describes the external interface to the OASIS USB Attenuator
* driver and provides the definitios for proper communication
* with the device
*
* Copyright (c) 2021 CERN
* @author David Cobas <dcobas AT cern.ch>
*
* @section license_sec License
* Released under the GPL v2. (and only v2, not any later version)
*/
struct
oau_usb_dev
{
int
lun
;
char
busnum
[
6
];
char
devnum
[
6
];
char
portnum
[
6
];
char
busport
[
16
];
char
devno
[
10
];
char
serial
[
48
];
char
path
[
256
];
int
unused
[
4
];
};
struct
oau_devarray
{
int
ndevs
;
struct
oau_usb_dev
*
devs
;
};
void
oau_display_devarray
(
struct
oau_devarray
*
ls
);
struct
oau_devarray
*
oau_get_devarray
(
char
*
vendor_id
,
char
*
device_id
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment