aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md80
1 files changed, 80 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ae473f6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,80 @@
+# Hasp HL Library
+### Jason A. Donenfeld | <Jason@zx2c4.com>
+
+This is a very simple library based on `libusb` for accessing MemoHASP
+functions of the Hasp HL USB dongle. It currently can view the ID of a dongle,
+validate the password, read from memory locations, and write to memory
+locations.
+
+This library allows use of the dongle **without any drivers**!
+
+## API
+
+Include `hasplib.h`, and compile your application alongside `hasplib.c`
+and optionally `hasplib-simple.c`.
+
+### Main Functions
+
+Get a list of all connected dongles:
+
+ size_t hasp_find_dongles(hasp_dongle ***dongles);
+
+Login to that dongle using the password, and optionally view the memory size:
+
+ bool hasp_login(hasp_dongle *dongle, uint16_t password1, uint16_t password2, uint16_t *memory_size);
+
+Instead of the first two steps, you can also retreive the first connected
+dongle that fits your password:
+
+ hasp_dongle *hasp_find_login_first_dongle(uint16_t password1, uint16_t password2);
+
+Read the ID of a dongle:
+
+ bool hasp_id(hasp_dongle *dongle, uint32_t *id);
+
+Read from a memory location:
+
+ bool hasp_read(hasp_dongle *dongle, uint16_t location, uint16_t *value);
+
+Write to a memory location:
+
+ bool hasp_write(hasp_dongle *dongle, uint16_t location, uint16_t value);
+
+Free the list of dongles opened earlier:
+
+ void hasp_free_dongles(hasp_dongle **dongles);
+
+Free a single dongle:
+
+ void hasp_free_dongle(hasp_dongle *dongle);
+
+### Simple Functions
+
+The simple API wraps the main API and provides access to a default dongle, which is the
+first connected dongle that responds to the given passwords. It handles dongle disconnects
+and reconnections.
+
+Create a `hasp_simple *` object for a given password pair:
+
+ hasp_simple *hasp_simple_login(uint16_t password1, uint16_t password2);
+
+Free this object:
+
+ void hasp_simple_free(hasp_simple *simple);
+
+Read an ID, returning 0 if an error occurred:
+
+ uint32_t hasp_simple_id(hasp_simple *simple);
+
+Read a memory location, returning 0 if an error occurred:
+
+ uint16_t hasp_simple_read(hasp_simple *simple, uint16_t location);
+
+Write to a memory location, returning its success:
+
+ bool hasp_simple_write(hasp_simple *simple, uint16_t location, uint16_t value);
+
+## Licensing
+
+This is released under the GPLv3. See `COPYING` for more information. If you
+need a less restrictive license, please contact me. \ No newline at end of file