add more clarity
This commit is contained in:
parent
f6d3744de8
commit
05ab5f9d23
@ -32,17 +32,29 @@ int main()
|
|||||||
`ctaphid_handle_packet(hidmsg);` is the entrance into the HID layer of libsolo, and will buffer packets and pass them
|
`ctaphid_handle_packet(hidmsg);` is the entrance into the HID layer of libsolo, and will buffer packets and pass them
|
||||||
into FIDO2 or U2F layers.
|
into FIDO2 or U2F layers.
|
||||||
|
|
||||||
Everything in the library is cross-platform, and it makes calls to functions defined
|
Everything in the library is cross-platform, but it needs some functions implemented that are usually
|
||||||
in `fido2/device.h` to do possibly platform specific things. To get the library to compile
|
platform specific. For example, how should libsolo implement an atomic counter? Where should it save state?
|
||||||
and run, you only need to implement one of these functions: `usbhid_send(uint8_t * send)`, which
|
For all of these platform specific functions, the library contains it's own `weak` definition, so the library will compile and run.
|
||||||
is called by the library to send a 64 byte packet over a USB HID endpoint.
|
LibSolo by default will not try to use an atomic
|
||||||
|
counter or save data persistently -- that needs to be implemented externally.
|
||||||
|
|
||||||
|
If you are using libsolo on another platform,
|
||||||
|
you should take a look at these possibly platform specific functions. They are listed in `fido2/device.h`.
|
||||||
|
If you'd like to reimplement any of the functions, then simply implement the function and compile normally.
|
||||||
|
GCC will replace libsolo's `weak` defined functions (everything in `fido2/device.h`) with your functions. By doing this, you
|
||||||
|
are replacing the function that is used by libsolo.
|
||||||
|
|
||||||
|
To get the library to compile
|
||||||
|
and run, you only need to implement one function for libsolo: `usbhid_send(uint8_t * send)`, which
|
||||||
|
is called by the library to send a 64 byte packet over a USB HID endpoint. In essence, you are giving
|
||||||
|
libsolo a function to write to USB.
|
||||||
|
|
||||||
The rest of the definitions in `fido2/device.h` are not required to compile and run so you can
|
The rest of the definitions in `fido2/device.h` are not required to compile and run so you can
|
||||||
immediately hit the ground running and iterative add what else you need. You'll definitely want
|
immediately hit the ground running and iterative add what else you need. You'll definitely want
|
||||||
to continue implementing other functions in `fido2/device.h`. For example, no data will be stored
|
to continue implementing other functions in `fido2/device.h`. For example, no data will be stored
|
||||||
persistently until you define how it can be done!
|
persistently until you define how it can be done!
|
||||||
|
|
||||||
For examples, check out the build for STM32L4 and PC.
|
For examples, check out the build for STM32L4 and PC (check out `pc/device` and `targets/stm32l432/src/device.c`).
|
||||||
|
|
||||||
If there's something that doesn't work for you -- send a pull request! It's better if we can
|
If there's something that doesn't work for you -- send a pull request! It's better if we can
|
||||||
work together off of the same repo and not fork.
|
work together off of the same repo and not fork.
|
Loading…
x
Reference in New Issue
Block a user