aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 606c25da3abe6cc8cfd1ac2ed4d269415b08dd56 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# k8055 for libusb

This library provides access to the Velleman K8055 USB Experiment Board. While providing a high-level interface to the user, the library communicates with a k8055 board through [libusb](http://www.libusb.org/wiki/libusb-1.0).

## Main Features
- runs with libusb-1.0
- up to 4 k8055 boards supported simultaneously (limit is given by k8055 hardware)
- pseudo-querying of a board's output status (see header file documentation for detailed explanation)
- concise and lightweight

## Example Program 
```c
#include <stdio.h>
#include <stdbool.h>
#include <k8055.h>

int main(int argc, char *argv[]) {
    k8055_debug(true); //turn on debug information
    k8055_device* device = NULL; //this will be a pointer to a K8055 board
    
    int r = k8055_open_device(0, &device); //open device on port 0
    if (r != 0) return r; //return error code if something went wrong

    k8055_set_digital(device, 0, true); //turn on digital output 0 (the first one)
    k8055_set_analog(device, 0, 255); //turn on analog output 0 to maximum

    int digital; //initialize variable containing digital input mask
    int analog0; //initialize variable containing analog input 0
    int analog1; //initialize variable containing analog input 1
    int counter0; //initialize variable containing value of counter 0
    int counter1; //initialize variable containing value of counter 1

    //read current input
    k8055_get_all_input(device, &digital, &analog0, &analog1, &counter0, &counter1, false);

    //print input
    printf("k8055 input status\n");
    printf("digital bitmask: %d\nanalog 0: %d\nanalog 1: %d\ncounter 0: %d\ncounter 1: %d\n",
        digital, analog0, analog1, counter0, counter1);

    k8055_close_device(device); //close board and free resources
    return 0;
}
```

## Requirements
- libusb-1.0
- (doxygen for documentation generation)

## Build
### Local build
Run `make local` in the project root folder. Products are copied to 'target' directory.

To remove all generated files, run `make clean`.

### System install
Run  `make install` to install the library and header files (this command does essentially the same as a local build with the exception that products are copied to /usr/local/ by default). You may change that path by passing 'make' the variable 'PREFIX', i.e. `make install PREFIX=/my/custom/path`. To uninstall, run `make uninstall`.

### Udev Rules
If your system uses udev (i.e. linux), you will probably have to configure it to allow access to the k8055 boards. The following instructions show how to configure udev.

1. Copy the file `k8055.rules' into the udev rules directory, typically /etc/udev/rules.d

    `cp k8055.rules /etc/udev/rules.d/k8055.rules`

2. Create a group named k8055.

    `groupadd -r k8055`

3. Add to the group yourself and/or other users whom you wish to grant access to the boards.

    `usermod -a -G k8055 $(USER)`

The previously described steps may be automated by running `make install-rules` to install just the rules or `make install-permissions USERS="<list of users>"` to also create the group and add the given list of users to it.
To uninstall, run `make uninstall-rules` or `make uninstall-permissions`.

## Documentation
See the comments in the source code for documentation about usage. Note: the API isn't the same as the one provided by Velleman in their DLL.

Run `make doc` to generate doxygen documentation.

## Authors
The library is written by Jakob Odersky. It is based on the information provided by the following people who wrote the original version of `libk8055' (http://libk8055.sourceforge.net) :

- 2005 by Sven Lindberg <k8055@k8055.mine.nu>

- 2007 by Pjetur G. Hjaltason <pjetur@pjetur.net> Commenting, general rearrangement of code, bugfixes, python interface with swig and simple k8055 python class


## Copying
Copyright (c) 2012 by Jakob Odersky

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## Tested

Prior to version 1.0

- Ubuntu 11.04, kernel 2.6.38-13-generic, x86_64, March 2012
- Ubuntu 11.10, kernel 3.0.0-16-generic, i686, March 2012
- Ubuntu 12.04, kernel 3.2.0-24-generic, x86_64, May 2012

Version 1.0

- Ubuntu 12.04, kernel 3.2.0-26-generic, x86_64, July 2012