@ -17,17 +17,17 @@
* along with this library . If not , see < http : //www.gnu.org/licenses/>.
*/
# include <string.h>
# include <libopencm3/usb/usbd.h>
# include <libopencm3/usb/hid.h>
# include <libopencm3/usb/usbd.h>
# include <string.h>
# include "bitmaps.h"
# include "buttons.h"
# include "hmac.h"
# include "layout.h"
# include "oled.h"
# include "setup.h"
# include "hmac.h"
# include "pbkdf2.h"
# include "rng.h"
# include "setup.h"
const int states = 2 ;
int state = 0 ;
@ -58,63 +58,82 @@ static const struct usb_device_descriptor dev_descr = {
/* got via usbhid-dump from CP2110 */
static const uint8_t hid_report_descriptor [ ] = {
0x06 , 0x00 , 0xFF , 0x09 , 0x01 , 0xA1 , 0x01 , 0x09 , 0x01 , 0x75 , 0x08 , 0x95 , 0x40 , 0x26 , 0xFF , 0x00 ,
0x15 , 0x00 , 0x85 , 0x01 , 0x95 , 0x01 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x02 ,
0x95 , 0x02 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x03 , 0x95 , 0x03 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x04 , 0x95 , 0x04 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x05 , 0x95 , 0x05 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x06 ,
0x95 , 0x06 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x07 , 0x95 , 0x07 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x08 , 0x95 , 0x08 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x09 , 0x95 , 0x09 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0A ,
0x95 , 0x0A , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0B , 0x95 , 0x0B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0C , 0x95 , 0x0C , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x0D , 0x95 , 0x0D , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0E ,
0x95 , 0x0E , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0F , 0x95 , 0x0F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x10 , 0x95 , 0x10 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x11 , 0x95 , 0x11 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x12 ,
0x95 , 0x12 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x13 , 0x95 , 0x13 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x14 , 0x95 , 0x14 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x15 , 0x95 , 0x15 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x16 ,
0x95 , 0x16 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x17 , 0x95 , 0x17 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x18 , 0x95 , 0x18 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x19 , 0x95 , 0x19 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1A ,
0x95 , 0x1A , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1B , 0x95 , 0x1B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1C , 0x95 , 0x1C , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x1D , 0x95 , 0x1D , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1E ,
0x95 , 0x1E , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1F , 0x95 , 0x1F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x20 , 0x95 , 0x20 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x21 , 0x95 , 0x21 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x22 ,
0x95 , 0x22 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x23 , 0x95 , 0x23 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x24 , 0x95 , 0x24 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x25 , 0x95 , 0x25 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x26 ,
0x95 , 0x26 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x27 , 0x95 , 0x27 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x28 , 0x95 , 0x28 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x29 , 0x95 , 0x29 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2A ,
0x95 , 0x2A , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2B , 0x95 , 0x2B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2C , 0x95 , 0x2C , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x2D , 0x95 , 0x2D , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2E ,
0x95 , 0x2E , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2F , 0x95 , 0x2F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x30 , 0x95 , 0x30 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x31 , 0x95 , 0x31 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x32 ,
0x95 , 0x32 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x33 , 0x95 , 0x33 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x34 , 0x95 , 0x34 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x35 , 0x95 , 0x35 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x36 ,
0x95 , 0x36 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x37 , 0x95 , 0x37 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x38 , 0x95 , 0x38 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x39 , 0x95 , 0x39 , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3A ,
0x95 , 0x3A , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3B , 0x95 , 0x3B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3C , 0x95 , 0x3C , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 ,
0x91 , 0x02 , 0x85 , 0x3D , 0x95 , 0x3D , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3E ,
0x95 , 0x3E , 0x09 , 0x01 , 0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3F , 0x95 , 0x3F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x40 , 0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x41 ,
0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x42 , 0x95 , 0x06 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x43 ,
0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x44 , 0x95 , 0x02 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x45 ,
0x95 , 0x04 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x46 , 0x95 , 0x02 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x47 ,
0x95 , 0x02 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x50 , 0x95 , 0x08 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x51 ,
0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x52 , 0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x60 ,
0x95 , 0x0A , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x61 , 0x95 , 0x3F , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x62 ,
0x95 , 0x3F , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x63 , 0x95 , 0x3F , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x64 ,
0x95 , 0x3F , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x65 , 0x95 , 0x3E , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x66 ,
0x06 , 0x00 , 0xFF , 0x09 , 0x01 , 0xA1 , 0x01 , 0x09 , 0x01 , 0x75 , 0x08 , 0x95 ,
0x40 , 0x26 , 0xFF , 0x00 , 0x15 , 0x00 , 0x85 , 0x01 , 0x95 , 0x01 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x02 , 0x95 , 0x02 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x03 , 0x95 , 0x03 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x04 , 0x95 , 0x04 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x05 , 0x95 , 0x05 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x06 , 0x95 , 0x06 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x07 , 0x95 , 0x07 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x08 , 0x95 , 0x08 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x09 , 0x95 , 0x09 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0A , 0x95 , 0x0A , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0B , 0x95 , 0x0B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0C , 0x95 , 0x0C , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0D , 0x95 , 0x0D , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0E , 0x95 , 0x0E , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x0F , 0x95 , 0x0F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x10 , 0x95 , 0x10 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x11 , 0x95 , 0x11 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x12 , 0x95 , 0x12 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x13 , 0x95 , 0x13 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x14 , 0x95 , 0x14 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x15 , 0x95 , 0x15 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x16 , 0x95 , 0x16 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x17 , 0x95 , 0x17 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x18 , 0x95 , 0x18 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x19 , 0x95 , 0x19 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1A , 0x95 , 0x1A , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1B , 0x95 , 0x1B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1C , 0x95 , 0x1C , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1D , 0x95 , 0x1D , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1E , 0x95 , 0x1E , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x1F , 0x95 , 0x1F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x20 , 0x95 , 0x20 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x21 , 0x95 , 0x21 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x22 , 0x95 , 0x22 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x23 , 0x95 , 0x23 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x24 , 0x95 , 0x24 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x25 , 0x95 , 0x25 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x26 , 0x95 , 0x26 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x27 , 0x95 , 0x27 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x28 , 0x95 , 0x28 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x29 , 0x95 , 0x29 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2A , 0x95 , 0x2A , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2B , 0x95 , 0x2B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2C , 0x95 , 0x2C , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2D , 0x95 , 0x2D , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2E , 0x95 , 0x2E , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x2F , 0x95 , 0x2F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x30 , 0x95 , 0x30 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x31 , 0x95 , 0x31 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x32 , 0x95 , 0x32 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x33 , 0x95 , 0x33 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x34 , 0x95 , 0x34 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x35 , 0x95 , 0x35 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x36 , 0x95 , 0x36 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x37 , 0x95 , 0x37 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x38 , 0x95 , 0x38 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x39 , 0x95 , 0x39 , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3A , 0x95 , 0x3A , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3B , 0x95 , 0x3B , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3C , 0x95 , 0x3C , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3D , 0x95 , 0x3D , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3E , 0x95 , 0x3E , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x3F , 0x95 , 0x3F , 0x09 , 0x01 ,
0x81 , 0x02 , 0x09 , 0x01 , 0x91 , 0x02 , 0x85 , 0x40 , 0x95 , 0x01 , 0x09 , 0x01 ,
0xB1 , 0x02 , 0x85 , 0x41 , 0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x42 ,
0x95 , 0x06 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x43 , 0x95 , 0x01 , 0x09 , 0x01 ,
0xB1 , 0x02 , 0x85 , 0x44 , 0x95 , 0x02 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x45 ,
0x95 , 0x04 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x46 , 0x95 , 0x02 , 0x09 , 0x01 ,
0xB1 , 0x02 , 0x85 , 0x47 , 0x95 , 0x02 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x50 ,
0x95 , 0x08 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x51 , 0x95 , 0x01 , 0x09 , 0x01 ,
0xB1 , 0x02 , 0x85 , 0x52 , 0x95 , 0x01 , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x60 ,
0x95 , 0x0A , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x61 , 0x95 , 0x3F , 0x09 , 0x01 ,
0xB1 , 0x02 , 0x85 , 0x62 , 0x95 , 0x3F , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x63 ,
0x95 , 0x3F , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x64 , 0x95 , 0x3F , 0x09 , 0x01 ,
0xB1 , 0x02 , 0x85 , 0x65 , 0x95 , 0x3E , 0x09 , 0x01 , 0xB1 , 0x02 , 0x85 , 0x66 ,
0x95 , 0x13 , 0x09 , 0x01 , 0xB1 , 0x02 , 0xC0 ,
} ;
@ -124,8 +143,9 @@ static const struct {
uint8_t bReportDescriptorType ;
uint16_t wDescriptorLength ;
} __attribute__ ( ( packed ) ) hid_report ;
} __attribute__ ( ( packed ) ) hid_function = {
. hid_descriptor = {
} __attribute__ ( ( packed ) )
hid_function = { . hid_descriptor =
{
. bLength = sizeof ( hid_function ) ,
. bDescriptorType = USB_DT_HID ,
. bcdHID = 0x0111 ,
@ -135,17 +155,18 @@ static const struct {
. hid_report = {
. bReportDescriptorType = USB_DT_REPORT ,
. wDescriptorLength = sizeof ( hid_report_descriptor ) ,
}
} ;
} } ;
static const struct usb_endpoint_descriptor hid_endpoints [ 2 ] = { {
static const struct usb_endpoint_descriptor hid_endpoints [ 2 ] = {
{
. bLength = USB_DT_ENDPOINT_SIZE ,
. bDescriptorType = USB_DT_ENDPOINT ,
. bEndpointAddress = 0x81 ,
. bmAttributes = USB_ENDPOINT_ATTR_INTERRUPT ,
. wMaxPacketSize = 64 ,
. bInterval = 1 ,
} , {
} ,
{
. bLength = USB_DT_ENDPOINT_SIZE ,
. bDescriptorType = USB_DT_ENDPOINT ,
. bEndpointAddress = 0x02 ,
@ -192,14 +213,14 @@ static const char *usb_strings[] = {
" 01234567 " ,
} ;
static int hid_control_request ( usbd_device * dev , struct usb_setup_data * req , uint8_t * * buf , uint16_t * len , usbd_control_complete_callback * complete )
{
static int hid_control_request ( usbd_device * dev , struct usb_setup_data * req ,
uint8_t * * buf , uint16_t * len ,
usbd_control_complete_callback * complete ) {
( void ) complete ;
( void ) dev ;
if ( ( req - > bmRequestType ! = 0x81 ) | |
( req - > bRequest ! = USB_REQ_GET_DESCRIPTOR ) | |
( req - > wValue ! = 0x2200 ) )
( req - > bRequest ! = USB_REQ_GET_DESCRIPTOR ) | | ( req - > wValue ! = 0x2200 ) )
return 0 ;
/* Handle the HID report descriptor. */
@ -209,44 +230,41 @@ static int hid_control_request(usbd_device *dev, struct usb_setup_data *req, uin
return 1 ;
}
static void hid_rx_callback ( usbd_device * dev , uint8_t ep )
{
static void hid_rx_callback ( usbd_device * dev , uint8_t ep ) {
( void ) dev ;
( void ) ep ;
}
static void hid_set_config ( usbd_device * dev , uint16_t wValue )
{
static void hid_set_config ( usbd_device * dev , uint16_t wValue ) {
( void ) wValue ;
usbd_ep_setup ( dev , 0x81 , USB_ENDPOINT_ATTR_INTERRUPT , 64 , 0 ) ;
usbd_ep_setup ( dev , 0x02 , USB_ENDPOINT_ATTR_INTERRUPT , 64 , hid_rx_callback ) ;
usbd_register_control_callback (
dev ,
USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE ,
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT ,
hid_control_request ) ;
dev , USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE ,
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT , hid_control_request ) ;
}
static usbd_device * usbd_dev ;
static uint8_t usbd_control_buffer [ 128 ] ;
void usbInit ( void )
{
usbd_dev = usbd_init ( & otgfs_usb_driver , & dev_descr , & config , usb_strings , 3 , usbd_control_buffer , sizeof ( usbd_control_buffer ) ) ;
void usbInit ( void ) {
usbd_dev = usbd_init ( & otgfs_usb_driver , & dev_descr , & config , usb_strings , 3 ,
usbd_control_buffer , sizeof ( usbd_control_buffer ) ) ;
usbd_register_set_config_callback ( usbd_dev , hid_set_config ) ;
}
int main ( void )
{
int main ( void ) {
# ifndef APPVER
setup ( ) ;
__stack_chk_guard = random32 ( ) ; // this supports compiler provided unpredictable stack protection checks
__stack_chk_guard = random32 ( ) ; // this supports compiler provided
// unpredictable stack protection checks
oledInit ( ) ;
# else
setupApp ( ) ;
__stack_chk_guard = random32 ( ) ; // this supports compiler provided unpredictable stack protection checks
__stack_chk_guard = random32 ( ) ; // this supports compiler provided
// unpredictable stack protection checks
# endif
usbInit ( ) ;