@ -1,13 +1,13 @@ |
||||
[PreviousLibFiles] |
||||
LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_usb.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f102x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xg.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f107xc.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f105xc.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f102xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xg.h; |
||||
LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_usb.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h;Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f102x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xg.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101x6.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xe.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f107xc.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f105xc.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f102xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f101xg.h; |
||||
|
||||
[PreviousGenFiles] |
||||
HeaderPath=/home/ondra/Ac6/SW4Workspace/f103-usb/Inc |
||||
SourcePath=/home/ondra/Ac6/SW4Workspace/f103-usb/Src |
||||
SourceFiles=usb_device.h;usbd_conf.h;usbd_desc.h;stm32f1xx_it.h;stm32f1xx_hal_conf.h;mxconstants.h;usb_device.c;usbd_conf.c;usbd_desc.c;stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; |
||||
HeaderFiles=usb_device.h;usbd_conf.h;usbd_desc.h;stm32f1xx_it.h;stm32f1xx_hal_conf.h;mxconstants.h; |
||||
SourceFiles=usb_device.h;usbd_conf.h;usbd_desc.h;stm32f1xx_it.h;stm32f1xx_hal_conf.h;mxconstants.h;usb_device.c;usbd_conf.c;usbd_desc.c;stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c;gpio.h;usart.h;gpio.c;usart.c;usbd_custom_hid_if.h;usbd_custom_hid_if.c; |
||||
HeaderFiles=usb_device.h;usbd_conf.h;usbd_desc.h;stm32f1xx_it.h;stm32f1xx_hal_conf.h;mxconstants.h;gpio.h;usart.h;usbd_custom_hid_if.h; |
||||
|
||||
[PreviousUsedRideFiles] |
||||
HeaderPath=../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Middlewares/ST/STM32_USB_Device_Library/Core/Inc;../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc;../Drivers/CMSIS/Include;../Drivers/CMSIS/Device/ST/STM32F1xx/Include; |
||||
SourceFiles=../Src/main.c;../Src/usb_device.c;../Src/usbd_conf.c;../Src/usbd_desc.c;../Src/stm32f1xx_it.c;../Src/stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c; |
||||
SourceFiles=../Src/main.c;../Src/gpio.c;../Src/usart.c;../Src/usb_device.c;../Src/usbd_conf.c;../Src/usbd_desc.c;../Src/stm32f1xx_it.c;../Src/stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c;../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c;../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c; |
||||
|
||||
|
@ -0,0 +1,96 @@ |
||||
/**
|
||||
* @file circbuf.h |
||||
* @author Ondřej Hruška, 2016 |
||||
* |
||||
* Circular buffer / queue / stack. |
||||
* Slots are pre-allocated, values are copied into the buffer. |
||||
* |
||||
* The buffer may be used as a stack, event queue or a simple buffer. |
||||
* |
||||
* ------------------------------------- |
||||
* |
||||
* NW LR |
||||
* append -> [][][][] -> pop |
||||
* <- push |
||||
* |
||||
* NW - next write pointer (stack base) |
||||
* LR - last read position (stack top) |
||||
* |
||||
* ------------------------------------- |
||||
* |
||||
* MIT license |
||||
*/ |
||||
|
||||
#ifndef F103_USB_CIRCBUF_H |
||||
#define F103_USB_CIRCBUF_H |
||||
|
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <stdlib.h> |
||||
|
||||
|
||||
typedef struct circbuf_struct CircBuf; |
||||
|
||||
|
||||
/**
|
||||
* @brief Initialize a circular buffer. The buffer is malloc'd. |
||||
* @param capacity : buffer capacity |
||||
* @param elem_size : size of one element |
||||
* @return pointer to the buffer instance |
||||
*/ |
||||
CircBuf *cbuf_create(size_t capacity, size_t elem_size); |
||||
|
||||
|
||||
/**
|
||||
* @brief Destroy a buffer, freeing used memory. |
||||
* |
||||
* @attention |
||||
* If the buffer items have malloc'd members, you have |
||||
* to free them manually to avoid a memory leak. |
||||
* |
||||
* @param cb : buffer |
||||
*/ |
||||
void cbuf_destroy(CircBuf *cb); |
||||
|
||||
|
||||
/** Test for full buffer */ |
||||
bool cbuf_full(const CircBuf *cb); |
||||
|
||||
|
||||
/** Test for empty buffer */ |
||||
bool cbuf_empty(const CircBuf *cb); |
||||
|
||||
|
||||
/**
|
||||
* @brief Append a value to the buffer (FIFO) |
||||
* @param cb : buffer |
||||
* @param source : pointer to a value (will be copied) |
||||
* @return success |
||||
*/ |
||||
bool cbuf_append(CircBuf *cb, const void *source); |
||||
|
||||
|
||||
/**
|
||||
* @brief Push a value into the circbuf (LIFO). |
||||
* |
||||
* @param cb : buffer |
||||
* @param source : pointer to a value (will be copied) |
||||
* @return success |
||||
*/ |
||||
bool cbuf_push(CircBuf *cb, const void *source); |
||||
|
||||
|
||||
/**
|
||||
* @brief Read a value from the buffer, return success. |
||||
* |
||||
* @param cb : buffer |
||||
* @param dest : read destionation. If NULL, value is discarded. |
||||
* @return success |
||||
*/ |
||||
bool cbuf_pop(CircBuf *cb, void *dest); |
||||
|
||||
|
||||
/** @brief Remove all data from buffer */ |
||||
void cbuf_clear(CircBuf *cb); |
||||
|
||||
#endif // F103_USB_CIRCBUF_H
|
@ -0,0 +1,72 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : gpio.h |
||||
* Description : This file contains all the functions prototypes for
|
||||
* the gpio
|
||||
****************************************************************************** |
||||
* |
||||
* COPYRIGHT(c) 2016 STMicroelectronics |
||||
* |
||||
* 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. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __gpio_H |
||||
#define __gpio_H |
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_GPIO_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
#endif /*__ pinoutConfig_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,339 @@ |
||||
//
|
||||
// Created by MightyPork on 7.8.16.
|
||||
//
|
||||
|
||||
#ifndef F103_USB_KEYBOARD_H |
||||
#define F103_USB_KEYBOARD_H |
||||
|
||||
#include <stdbool.h> |
||||
#include <stdint.h> |
||||
|
||||
/** Max nr of simultaneous keys pressed */ |
||||
#define KYBD_SLOTS 6 |
||||
|
||||
/** Struct that can be used for key buffers */ |
||||
typedef struct { |
||||
uint8_t key; |
||||
bool press; |
||||
} KeyEvent; |
||||
|
||||
/**
|
||||
* Toggle key state |
||||
* |
||||
* @param key : key code |
||||
* @param press : key pressed / released |
||||
*/ |
||||
bool kybd_key(uint8_t key, bool press); |
||||
|
||||
/**
|
||||
* Toggle modifier |
||||
* |
||||
* @param mod : Modifier mask |
||||
* @param press : Modifier pressed / released |
||||
*/ |
||||
void kybd_mod(uint8_t mod, bool press); |
||||
|
||||
/**
|
||||
* Press a key |
||||
* |
||||
* @param key : key code |
||||
*/ |
||||
bool kybd_press(uint8_t key); |
||||
|
||||
/**
|
||||
* Release a key |
||||
* |
||||
* @param key : key code |
||||
*/ |
||||
bool kybd_release(uint8_t key); |
||||
|
||||
/**
|
||||
* Release all keys and cancel all modifiers |
||||
*/ |
||||
void kybd_clear(); |
||||
|
||||
/**
|
||||
* Get keyboard bytes for the USB HID report. |
||||
* |
||||
* @param arr : array long at least KYBD_SLOTS + 2 |
||||
*/ |
||||
void kybd_get_bytes(uint8_t *arr); |
||||
|
||||
/* ----------------------------------------------------------- */ |
||||
|
||||
/**
|
||||
* Modifier masks. Those may be used to directly set modifier status, |
||||
* as opposed to modifier Scan Codes 0xe0 - 0xe7, which do the same, |
||||
* but via the key press/release interface. |
||||
*/ |
||||
#define MOD_LCTRL 0x01 |
||||
#define MOD_LSHIFT 0x02 |
||||
#define MOD_LALT 0x04 |
||||
#define MOD_LMETA 0x08 |
||||
#define MOD_RCTRL 0x10 |
||||
#define MOD_RSHIFT 0x20 |
||||
#define MOD_RALT 0x40 |
||||
#define MOD_RMETA 0x80 |
||||
|
||||
/**
|
||||
* USB HID Keyboard scan codes as per USB spec 1.11 |
||||
* plus some additional codes |
||||
* |
||||
* Created by MightyPork, 2016 |
||||
* Public domain |
||||
* |
||||
* Adapted from: |
||||
* https://source.android.com/devices/input/keyboard-devices.html
|
||||
*/ |
||||
#define KEY_NONE 0x00 |
||||
#define KEY_ERR_OVF 0x01 // Keyboard Error Roll Over - used for all slots if too many keys are pressed ("Phantom key")
|
||||
// 0x02 // Keyboard POST Fail
|
||||
// 0x03 // Keyboard Error Undefined
|
||||
#define KEY_A 0x04 // Keyboard a and A
|
||||
#define KEY_B 0x05 // Keyboard b and B
|
||||
#define KEY_C 0x06 // Keyboard c and C
|
||||
#define KEY_D 0x07 // Keyboard d and D
|
||||
#define KEY_E 0x08 // Keyboard e and E
|
||||
#define KEY_F 0x09 // Keyboard f and F
|
||||
#define KEY_G 0x0a // Keyboard g and G
|
||||
#define KEY_H 0x0b // Keyboard h and H
|
||||
#define KEY_I 0x0c // Keyboard i and I
|
||||
#define KEY_J 0x0d // Keyboard j and J
|
||||
#define KEY_K 0x0e // Keyboard k and K
|
||||
#define KEY_L 0x0f // Keyboard l and L
|
||||
#define KEY_M 0x10 // Keyboard m and M
|
||||
#define KEY_N 0x11 // Keyboard n and N
|
||||
#define KEY_O 0x12 // Keyboard o and O
|
||||
#define KEY_P 0x13 // Keyboard p and P
|
||||
#define KEY_Q 0x14 // Keyboard q and Q
|
||||
#define KEY_R 0x15 // Keyboard r and R
|
||||
#define KEY_S 0x16 // Keyboard s and S
|
||||
#define KEY_T 0x17 // Keyboard t and T
|
||||
#define KEY_U 0x18 // Keyboard u and U
|
||||
#define KEY_V 0x19 // Keyboard v and V
|
||||
#define KEY_W 0x1a // Keyboard w and W
|
||||
#define KEY_X 0x1b // Keyboard x and X
|
||||
#define KEY_Y 0x1c // Keyboard y and Y
|
||||
#define KEY_Z 0x1d // Keyboard z and Z
|
||||
|
||||
#define KEY_1 0x1e // Keyboard 1 and !
|
||||
#define KEY_2 0x1f // Keyboard 2 and @
|
||||
#define KEY_3 0x20 // Keyboard 3 and #
|
||||
#define KEY_4 0x21 // Keyboard 4 and $
|
||||
#define KEY_5 0x22 // Keyboard 5 and %
|
||||
#define KEY_6 0x23 // Keyboard 6 and ^
|
||||
#define KEY_7 0x24 // Keyboard 7 and &
|
||||
#define KEY_8 0x25 // Keyboard 8 and *
|
||||
#define KEY_9 0x26 // Keyboard 9 and (
|
||||
#define KEY_0 0x27 // Keyboard 0 and )
|
||||
|
||||
#define KEY_ENTER 0x28 // Keyboard Return (ENTER)
|
||||
#define KEY_ESC 0x29 // Keyboard ESCAPE
|
||||
#define KEY_BACKSPACE 0x2a // Keyboard DELETE (Backspace)
|
||||
#define KEY_TAB 0x2b // Keyboard Tab
|
||||
#define KEY_SPACE 0x2c // Keyboard Spacebar
|
||||
#define KEY_MINUS 0x2d // Keyboard - and _
|
||||
#define KEY_EQUAL 0x2e // Keyboard = and +
|
||||
#define KEY_LEFTBRACE 0x2f // Keyboard [ and {
|
||||
#define KEY_RIGHTBRACE 0x30 // Keyboard ] and }
|
||||
#define KEY_BACKSLASH 0x31 // Keyboard \ and |
|
||||
#define KEY_HASHTILDE 0x32 // Keyboard Non-US # and ~
|
||||
#define KEY_SEMICOLON 0x33 // Keyboard ; and :
|
||||
#define KEY_APOSTROPHE 0x34 // Keyboard ' and "
|
||||
#define KEY_GRAVE 0x35 // Keyboard ` and ~
|
||||
#define KEY_COMMA 0x36 // Keyboard , and <
|
||||
#define KEY_DOT 0x37 // Keyboard . and >
|
||||
#define KEY_SLASH 0x38 // Keyboard / and ?
|
||||
#define KEY_CAPSLOCK 0x39 // Keyboard Caps Lock
|
||||
|
||||
#define KEY_F1 0x3a // Keyboard F1
|
||||
#define KEY_F2 0x3b // Keyboard F2
|
||||
#define KEY_F3 0x3c // Keyboard F3
|
||||
#define KEY_F4 0x3d // Keyboard F4
|
||||
#define KEY_F5 0x3e // Keyboard F5
|
||||
#define KEY_F6 0x3f // Keyboard F6
|
||||
#define KEY_F7 0x40 // Keyboard F7
|
||||
#define KEY_F8 0x41 // Keyboard F8
|
||||
#define KEY_F9 0x42 // Keyboard F9
|
||||
#define KEY_F10 0x43 // Keyboard F10
|
||||
#define KEY_F11 0x44 // Keyboard F11
|
||||
#define KEY_F12 0x45 // Keyboard F12
|
||||
|
||||
#define KEY_SYSRQ 0x46 // Keyboard Print Screen
|
||||
#define KEY_SCROLLLOCK 0x47 // Keyboard Scroll Lock
|
||||
#define KEY_PAUSE 0x48 // Keyboard Pause
|
||||
#define KEY_INSERT 0x49 // Keyboard Insert
|
||||
#define KEY_HOME 0x4a // Keyboard Home
|
||||
#define KEY_PAGEUP 0x4b // Keyboard Page Up
|
||||
#define KEY_DELETE 0x4c // Keyboard Delete Forward
|
||||
#define KEY_END 0x4d // Keyboard End
|
||||
#define KEY_PAGEDOWN 0x4e // Keyboard Page Down
|
||||
#define KEY_RIGHT 0x4f // Keyboard Right Arrow
|
||||
#define KEY_LEFT 0x50 // Keyboard Left Arrow
|
||||
#define KEY_DOWN 0x51 // Keyboard Down Arrow
|
||||
#define KEY_UP 0x52 // Keyboard Up Arrow
|
||||
|
||||
#define KEY_NUMLOCK 0x53 // Keyboard Num Lock and Clear
|
||||
#define KEY_KPSLASH 0x54 // Keypad /
|
||||
#define KEY_KPASTERISK 0x55 // Keypad *
|
||||
#define KEY_KPMINUS 0x56 // Keypad -
|
||||
#define KEY_KPPLUS 0x57 // Keypad +
|
||||
#define KEY_KPENTER 0x58 // Keypad ENTER
|
||||
#define KEY_KP1 0x59 // Keypad 1 and End
|
||||
#define KEY_KP2 0x5a // Keypad 2 and Down Arrow
|
||||
#define KEY_KP3 0x5b // Keypad 3 and PageDn
|
||||
#define KEY_KP4 0x5c // Keypad 4 and Left Arrow
|
||||
#define KEY_KP5 0x5d // Keypad 5
|
||||
#define KEY_KP6 0x5e // Keypad 6 and Right Arrow
|
||||
#define KEY_KP7 0x5f // Keypad 7 and Home
|
||||
#define KEY_KP8 0x60 // Keypad 8 and Up Arrow
|
||||
#define KEY_KP9 0x61 // Keypad 9 and Page Up
|
||||
#define KEY_KP0 0x62 // Keypad 0 and Insert
|
||||
#define KEY_KPDOT 0x63 // Keypad . and Delete
|
||||
|
||||
#define KEY_102ND 0x64 // Keyboard Non-US \ and |
|
||||
#define KEY_COMPOSE 0x65 // Keyboard Application
|
||||
#define KEY_POWER 0x66 // Keyboard Power
|
||||
#define KEY_KPEQUAL 0x67 // Keypad =
|
||||
|
||||
#define KEY_F13 0x68 // Keyboard F13
|
||||
#define KEY_F14 0x69 // Keyboard F14
|
||||
#define KEY_F15 0x6a // Keyboard F15
|
||||
#define KEY_F16 0x6b // Keyboard F16
|
||||
#define KEY_F17 0x6c // Keyboard F17
|
||||
#define KEY_F18 0x6d // Keyboard F18
|
||||
#define KEY_F19 0x6e // Keyboard F19
|
||||
#define KEY_F20 0x6f // Keyboard F20
|
||||
#define KEY_F21 0x70 // Keyboard F21
|
||||
#define KEY_F22 0x71 // Keyboard F22
|
||||
#define KEY_F23 0x72 // Keyboard F23
|
||||
#define KEY_F24 0x73 // Keyboard F24
|
||||
|
||||
#define KEY_OPEN 0x74 // Keyboard Execute
|
||||
#define KEY_HELP 0x75 // Keyboard Help
|
||||
#define KEY_PROPS 0x76 // Keyboard Menu
|
||||
#define KEY_FRONT 0x77 // Keyboard Select
|
||||
#define KEY_STOP 0x78 // Keyboard Stop
|
||||
#define KEY_AGAIN 0x79 // Keyboard Again
|
||||
#define KEY_UNDO 0x7a // Keyboard Undo
|
||||
#define KEY_CUT 0x7b // Keyboard Cut
|
||||
#define KEY_COPY 0x7c // Keyboard Copy
|
||||
#define KEY_PASTE 0x7d // Keyboard Paste
|
||||
#define KEY_FIND 0x7e // Keyboard Find
|
||||
#define KEY_MUTE 0x7f // Keyboard Mute
|
||||
#define KEY_VOLUMEUP 0x80 // Keyboard Volume Up
|
||||
#define KEY_VOLUMEDOWN 0x81 // Keyboard Volume Down
|
||||
// 0x82 Keyboard Locking Caps Lock
|
||||
// 0x83 Keyboard Locking Num Lock
|
||||
// 0x84 Keyboard Locking Scroll Lock
|
||||
#define KEY_KPCOMMA 0x85 // Keypad Comma
|
||||
// 0x86 Keypad Equal Sign
|
||||
#define KEY_RO 0x87 // Keyboard International1
|
||||
#define KEY_KATAKANAHIRAGANA 0x88 // Keyboard International2
|
||||
#define KEY_YEN 0x89 // Keyboard International3
|
||||
#define KEY_HENKAN 0x8a // Keyboard International4
|
||||
#define KEY_MUHENKAN 0x8b // Keyboard International5
|
||||
#define KEY_KPJPCOMMA 0x8c // Keyboard International6
|
||||
// 0x8d Keyboard International7
|
||||
// 0x8e Keyboard International8
|
||||
// 0x8f Keyboard International9
|
||||
#define KEY_HANGEUL 0x90 // Keyboard LANG1
|
||||
#define KEY_HANJA 0x91 // Keyboard LANG2
|
||||
#define KEY_KATAKANA 0x92 // Keyboard LANG3
|
||||
#define KEY_HIRAGANA 0x93 // Keyboard LANG4
|
||||
#define KEY_ZENKAKUHANKAKU 0x94 // Keyboard LANG5
|
||||
// 0x95 Keyboard LANG6
|
||||
// 0x96 Keyboard LANG7
|
||||
// 0x97 Keyboard LANG8
|
||||
// 0x98 Keyboard LANG9
|
||||
// 0x99 Keyboard Alternate Erase
|
||||
// 0x9a Keyboard SysReq/Attention
|
||||
// 0x9b Keyboard Cancel
|
||||
// 0x9c Keyboard Clear
|
||||
// 0x9d Keyboard Prior
|
||||
// 0x9e Keyboard Return
|
||||
// 0x9f Keyboard Separator
|
||||
// 0xa0 Keyboard Out
|
||||
// 0xa1 Keyboard Oper
|
||||
// 0xa2 Keyboard Clear/Again
|
||||
// 0xa3 Keyboard CrSel/Props
|
||||
// 0xa4 Keyboard ExSel
|
||||
|
||||
// 0xb0 Keypad 00
|
||||
// 0xb1 Keypad 000
|
||||
// 0xb2 Thousands Separator
|
||||
// 0xb3 Decimal Separator
|
||||
// 0xb4 Currency Unit
|
||||
// 0xb5 Currency Sub-unit
|
||||
#define KEY_KPLEFTPAREN 0xb6 // Keypad (
|
||||
#define KEY_KPRIGHTPAREN 0xb7 // Keypad )
|
||||
// 0xb8 Keypad {
|
||||
// 0xb9 Keypad }
|
||||
// 0xba Keypad Tab
|
||||
// 0xbb Keypad Backspace
|
||||
// 0xbc Keypad A
|
||||
// 0xbd Keypad B
|
||||
// 0xbe Keypad C
|
||||
// 0xbf Keypad D
|
||||
// 0xc0 Keypad E
|
||||
// 0xc1 Keypad F
|
||||
// 0xc2 Keypad XOR
|
||||
// 0xc3 Keypad ^
|
||||
// 0xc4 Keypad %
|
||||
// 0xc5 Keypad <
|
||||
// 0xc6 Keypad >
|
||||
// 0xc7 Keypad &
|
||||
// 0xc8 Keypad &&
|
||||
// 0xc9 Keypad |
|
||||
// 0xca Keypad ||
|
||||
// 0xcb Keypad :
|
||||
// 0xcc Keypad #
|
||||
// 0xcd Keypad Space
|
||||
// 0xce Keypad @
|
||||
// 0xcf Keypad !
|
||||
// 0xd0 Keypad Memory Store
|
||||
// 0xd1 Keypad Memory Recall
|
||||
// 0xd2 Keypad Memory Clear
|
||||
// 0xd3 Keypad Memory Add
|
||||
// 0xd4 Keypad Memory Subtract
|
||||
// 0xd5 Keypad Memory Multiply
|
||||
// 0xd6 Keypad Memory Divide
|
||||
// 0xd7 Keypad +/-
|
||||
// 0xd8 Keypad Clear
|
||||
// 0xd9 Keypad Clear Entry
|
||||
// 0xda Keypad Binary
|
||||
// 0xdb Keypad Octal
|
||||
// 0xdc Keypad Decimal
|
||||
// 0xdd Keypad Hexadecimal
|
||||
|
||||
#define KEY_LEFTCTRL 0xe0 // Keyboard Left Control
|
||||
#define KEY_LEFTSHIFT 0xe1 // Keyboard Left Shift
|
||||
#define KEY_LEFTALT 0xe2 // Keyboard Left Alt
|
||||
#define KEY_LEFTMETA 0xe3 // Keyboard Left GUI
|
||||
#define KEY_RIGHTCTRL 0xe4 // Keyboard Right Control
|
||||
#define KEY_RIGHTSHIFT 0xe5 // Keyboard Right Shift
|
||||
#define KEY_RIGHTALT 0xe6 // Keyboard Right Alt
|
||||
#define KEY_RIGHTMETA 0xe7 // Keyboard Right GUI
|
||||
|
||||
#define KEY_MEDIA_PLAYPAUSE 0xe8 |
||||
#define KEY_MEDIA_STOPCD 0xe9 |
||||
#define KEY_MEDIA_PREVIOUSSONG 0xea |
||||
#define KEY_MEDIA_NEXTSONG 0xeb |
||||
#define KEY_MEDIA_EJECTCD 0xec |
||||
#define KEY_MEDIA_VOLUMEUP 0xed |
||||
#define KEY_MEDIA_VOLUMEDOWN 0xee |
||||
#define KEY_MEDIA_MUTE 0xef |
||||
#define KEY_MEDIA_WWW 0xf0 |
||||
#define KEY_MEDIA_BACK 0xf1 |
||||
#define KEY_MEDIA_FORWARD 0xf2 |
||||
#define KEY_MEDIA_STOP 0xf3 |
||||
#define KEY_MEDIA_FIND 0xf4 |
||||
#define KEY_MEDIA_SCROLLUP 0xf5 |
||||
#define KEY_MEDIA_SCROLLDOWN 0xf6 |
||||
#define KEY_MEDIA_EDIT 0xf7 |
||||
#define KEY_MEDIA_SLEEP 0xf8 |
||||
#define KEY_MEDIA_COFFEE 0xf9 |
||||
#define KEY_MEDIA_REFRESH 0xfa |
||||
#define KEY_MEDIA_CALC 0xfb |
||||
|
||||
#endif //F103_USB_KEYBOARD_H
|
@ -0,0 +1,15 @@ |
||||
//
|
||||
// Created by ondra on 7.8.16.
|
||||
//
|
||||
|
||||
#ifndef F103_USB_MAIN_H_H |
||||
#define F103_USB_MAIN_H_H |
||||
|
||||
#include "stm32f1xx_hal.h" |
||||
#include "circbuf.h" |
||||
|
||||
extern void dbg(const char* msg); |
||||
|
||||
extern CircBuf *key_cbuf; |
||||
|
||||
#endif //F103_USB_MAIN_H_H
|
@ -0,0 +1,75 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : USART.h |
||||
* Description : This file provides code for the configuration |
||||
* of the USART instances. |
||||
****************************************************************************** |
||||
* |
||||
* COPYRIGHT(c) 2016 STMicroelectronics |
||||
* |
||||
* 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. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __usart_H |
||||
#define __usart_H |
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern UART_HandleTypeDef huart2; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
extern void Error_Handler(void); |
||||
|
||||
void MX_USART2_UART_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
#endif /*__ usart_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,163 @@ |
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <string.h> |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
|
||||
#include "circbuf.h" |
||||
|
||||
#define malloc_s malloc |
||||
|
||||
// --- Circbuf data structure ----
|
||||
|
||||
/** Offset in void* buffer */ |
||||
#define PV_OFFS(pvBuf, elem_size, index) ((uint8_t*)(pvBuf) + ((elem_size)*(index))) |
||||
|
||||
|
||||
// Instance structure
|
||||
struct circbuf_struct { |
||||
void *buf; |
||||
size_t elem_size; |
||||
size_t cap; |
||||
size_t lr; // last read pos
|
||||
size_t nw; // next write pos
|
||||
}; |
||||
|
||||
|
||||
/**
|
||||
* @brief Write data to a CircBuf slot |
||||
* @param cb : circbuf |
||||
* @param index : slot index |
||||
* @param source : data source |
||||
*/ |
||||
static void write_buffer(CircBuf *cb, size_t index, const void *source) |
||||
{ |
||||
memcpy(PV_OFFS(cb->buf, cb->elem_size, index), source, cb->elem_size); |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief Copy data from a CircBuf slot to a buffer |
||||
* @param cb : circbuf |
||||
* @param index : slot index |
||||
* @param dest : destination buffer |
||||
*/ |
||||
static void read_buffer(const CircBuf *cb, size_t index, void *dest) |
||||
{ |
||||
memcpy(dest, PV_OFFS(cb->buf, cb->elem_size, index), cb->elem_size); |
||||
} |
||||
|
||||
|
||||
/** Create a cbuf */ |
||||
CircBuf *cbuf_create(size_t capacity, size_t elem_size) |
||||
{ |
||||
// add one, because one is always unused.
|
||||
capacity++; |
||||
|
||||
// Allocate the structure
|
||||
CircBuf *cb = malloc_s(sizeof(CircBuf)); |
||||
|
||||
// allocate the buffer
|
||||
cb->buf = malloc_s(capacity * elem_size); |
||||
|
||||
// set capacity, clear state
|
||||
cb->elem_size = elem_size; |
||||
cb->cap = capacity; |
||||
cbuf_clear(cb); |
||||
|
||||
return cb; |
||||
} |
||||
|
||||
|
||||
/** Release cbuf memory */ |
||||
void cbuf_destroy(CircBuf *cb) |
||||
{ |
||||
if (cb != NULL) { |
||||
if (cb->buf != NULL) { |
||||
free(cb->buf); |
||||
} |
||||
|
||||
free(cb); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** Check if cbuf is full */ |
||||
bool cbuf_full(const CircBuf *cb) |
||||
{ |
||||
if (cb == NULL) return false; |
||||
|
||||
return (cb->lr == cb->nw); |
||||
} |
||||
|
||||
|
||||
/** Check if cbuf is empty */ |
||||
bool cbuf_empty(const CircBuf *cb) |
||||
{ |
||||
if (cb == NULL) return true; |
||||
|
||||
return ((cb->lr + 1) % cb->cap) == cb->nw; |
||||
} |
||||
|
||||
|
||||
/** Write a byte to the buffer, if space left */ |
||||
bool cbuf_append(CircBuf *cb, const void *source) |
||||
{ |
||||
if (cb == NULL) return false; |
||||
if (source == NULL) return false; |
||||
if (cbuf_full(cb)) return false; |
||||
|
||||
write_buffer(cb, cb->nw, source); |
||||
|
||||
// increment
|
||||
cb->nw++; |
||||
if (cb->nw == cb->cap) cb->nw = 0; |
||||
|
||||
return true; |
||||
} |
||||
|
||||
|
||||
/** Push value to the end, like a stack. */ |
||||
bool cbuf_push(CircBuf *cb, const void *source) |
||||
{ |
||||
if (cb == NULL) return false; |
||||
if (source == NULL) return false; |
||||
if (cbuf_full(cb)) return false; |
||||
|
||||
write_buffer(cb, cb->lr, source); |
||||
|
||||
// move lr back
|
||||
if (cb->lr == 0) { |
||||
cb->lr = cb->cap - 1; // wrap to the end
|
||||
} else { |
||||
cb->lr--; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
|
||||
/** Read one byte, if not empty. */ |
||||
bool cbuf_pop(CircBuf *cb, void *dest) |
||||
{ |
||||
if (cb == NULL || dest == NULL) return false; |
||||
if (cbuf_empty(cb)) return false; |
||||
|
||||
// increment
|
||||
cb->lr++; |
||||
if (cb->lr == cb->cap) cb->lr = 0; |
||||
|
||||
read_buffer(cb, cb->lr, dest); |
||||
|
||||
return true; |
||||
} |
||||
|
||||
|
||||
/** Clear a cbuf */ |
||||
void cbuf_clear(CircBuf *cb) |
||||
{ |
||||
if (cb == NULL) return; |
||||
|
||||
cb->lr = cb->cap - 1; |
||||
cb->nw = 0; |
||||
} |
@ -0,0 +1,92 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : gpio.c |
||||
* Description : This file provides code for the configuration |
||||
* of all used GPIO pins. |
||||
****************************************************************************** |
||||
* |
||||
* COPYRIGHT(c) 2016 STMicroelectronics |
||||
* |
||||
* 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. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "gpio.h" |
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
/*----------------------------------------------------------------------------*/ |
||||
/* Configure GPIO */ |
||||
/*----------------------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
||||
|
||||
/** Configure pins as
|
||||
* Analog
|
||||
* Input
|
||||
* Output |
||||
* EVENT_OUT |
||||
* EXTI |
||||
*/ |
||||
void MX_GPIO_Init(void) |
||||
{ |
||||
GPIO_InitTypeDef GPIO_InitStruct; |
||||
|
||||
/* GPIO Ports Clock Enable */ |
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOA_CLK_ENABLE(); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = LED_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PA1 */ |
||||
GPIO_InitStruct.Pin = GPIO_PIN_1; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; |
||||
GPIO_InitStruct.Pull = GPIO_PULLUP; |
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
||||
} |
||||
|
||||
/* USER CODE BEGIN 2 */ |
||||
|
||||
/* USER CODE END 2 */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,117 @@ |
||||
//
|
||||
// Created by MightyPork on 7.8.16.
|
||||
//
|
||||
|
||||
#include <stdbool.h> |
||||
#include <stdint.h> |
||||
#include <string.h> |
||||
#include "keyboard.h" |
||||
|
||||
static uint8_t modifiers = 0x00; |
||||
|
||||
static uint8_t keys[KYBD_SLOTS] = {}; |
||||
|
||||
static uint8_t free_slot = 0; |
||||
|
||||
static bool err_ovf = false; |
||||
|
||||
/** Clear keys and mods */ |
||||
void kybd_clear() { |
||||
memset(keys, 0x00, KYBD_SLOTS); |
||||
modifiers = 0x00; |
||||
free_slot = 0; |
||||
err_ovf = false; |
||||
} |
||||
|
||||
/** Key down */ |
||||
bool kybd_press(uint8_t key) { |
||||
kybd_key(key, true); |
||||
} |
||||
|
||||
/** Key up */ |
||||
bool kybd_release(uint8_t key) { |
||||
kybd_key(key, false); |
||||
} |
||||
|
||||
/** Modifier press or release */ |
||||
void kybd_mod(uint8_t mod, bool press) { |
||||
if (press) { |
||||
modifiers |= mod; |
||||
} else { |
||||
modifiers &= ~mod; |
||||
} |
||||
} |
||||
|
||||
/** Key press or release */ |
||||
bool kybd_key(uint8_t key, bool press) { |
||||
if (key >= KEY_LEFTCTRL && key <= KEY_RIGHTMETA) { |
||||
// Modifier key
|
||||
|
||||
// conveniently, the lower byte indicates the modifier position
|
||||
uint8_t bitshift = (uint8_t) (key & 0x0F); |
||||
// obtain the modifier mask
|
||||
uint8_t mod = (uint8_t) (1 << bitshift); |
||||
// apply modifier
|
||||
kybd_mod(mod, press); |
||||
|
||||
goto suc; |
||||
} |
||||
|
||||
// Regular key
|
||||
if (press) { |
||||
for (int i = 0; i < KYBD_SLOTS; i++) { |
||||
if (keys[i] == key) { |
||||
// key is already pressed
|
||||
goto suc; |
||||
} |
||||
} |
||||
|
||||
if (free_slot < KYBD_SLOTS) { |
||||
// press the key
|
||||
keys[free_slot++] = key; |
||||
goto suc; |
||||
} |
||||
|
||||
err_ovf = true; // set overflow flag
|
||||
} |
||||
else { |
||||
// release
|
||||
bool found = false; |
||||
for (int i = 0; i < KYBD_SLOTS; i++) { |
||||
if (found) { |
||||
keys[i - 1] = keys[i]; |
||||
if (i == KYBD_SLOTS - 1) { |
||||
keys[i] = 0x00; |
||||
} |
||||
} |
||||
else { |
||||
if (keys[i] == key) { |
||||
found = true; |
||||
} |
||||
} |
||||
} |
||||
if (found) { |
||||
err_ovf = false; // clear overflow flag
|
||||
free_slot--; |
||||
goto suc; |
||||
} |
||||
} |
||||
|
||||
return false; |
||||
suc: |
||||
return true; |
||||
} |
||||
|
||||
/** Get HID report */ |
||||
void kybd_get_bytes(uint8_t *arr) { |
||||
arr[0] = modifiers; |
||||
arr[1] = 0x00; |
||||
|
||||
if (err_ovf) { |
||||
// all slots ERR_OVF
|
||||
memset(arr + 2, KEY_ERR_OVF, KYBD_SLOTS); |
||||
} else { |
||||
// show keys
|
||||
memcpy(arr + 2, keys, KYBD_SLOTS); |
||||
} |
||||
} |
@ -0,0 +1,32 @@ |
||||
#include <errno.h> |
||||
#include <stdio.h> |
||||
|
||||
register char * stack_ptr asm("sp"); |
||||
|
||||
caddr_t _sbrk(int incr) |
||||
{ |
||||
extern char end __asm("end"); |
||||
static char *heap_end; |
||||
char *prev_heap_end; |
||||
|
||||
if (heap_end == 0) |
||||
heap_end = &end; |
||||
|
||||
prev_heap_end = heap_end; |
||||
if (heap_end + incr > stack_ptr) |
||||
{ |
||||
// write(1, "Heap and stack collision\n", 25);
|
||||
// abort();
|
||||
errno = ENOMEM; |
||||
return (caddr_t) -1; |
||||
} |
||||
|
||||
heap_end += incr; |
||||
|
||||
return (caddr_t) prev_heap_end; |
||||
} |
||||
|
||||
|
||||
// Other systcalls are defined in
|
||||
// - com/com_fileio.c
|
||||
// - hw_utils/reset.h
|
@ -0,0 +1,133 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : USART.c |
||||
* Description : This file provides code for the configuration |
||||
* of the USART instances. |
||||
****************************************************************************** |
||||
* |
||||
* COPYRIGHT(c) 2016 STMicroelectronics |
||||
* |
||||
* 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. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usart.h" |
||||
|
||||
#include "gpio.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
UART_HandleTypeDef huart2; |
||||
|
||||
/* USART2 init function */ |
||||
|
||||
void MX_USART2_UART_Init(void) |
||||
{ |
||||
|
||||
huart2.Instance = USART2; |
||||
huart2.Init.BaudRate = 115200; |
||||
huart2.Init.WordLength = UART_WORDLENGTH_8B; |
||||
huart2.Init.StopBits = UART_STOPBITS_1; |
||||
huart2.Init.Parity = UART_PARITY_NONE; |
||||
huart2.Init.Mode = UART_MODE_TX_RX; |
||||
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
||||
huart2.Init.OverSampling = UART_OVERSAMPLING_16; |
||||
if (HAL_UART_Init(&huart2) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
|
||||
} |
||||
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct; |
||||
if(uartHandle->Instance==USART2) |
||||
{ |
||||
/* USER CODE BEGIN USART2_MspInit 0 */ |
||||
|
||||
/* USER CODE END USART2_MspInit 0 */ |
||||
/* Peripheral clock enable */ |
||||
__HAL_RCC_USART2_CLK_ENABLE(); |
||||
|
||||
/**USART2 GPIO Configuration
|
||||
PA2 ------> USART2_TX |
||||
PA3 ------> USART2_RX
|
||||
*/ |
||||
GPIO_InitStruct.Pin = GPIO_PIN_2; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; |
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_3; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
||||
|
||||
/* USER CODE BEGIN USART2_MspInit 1 */ |
||||
|
||||
/* USER CODE END USART2_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) |
||||
{ |
||||
|
||||
if(uartHandle->Instance==USART2) |
||||
{ |
||||
/* USER CODE BEGIN USART2_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END USART2_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_USART2_CLK_DISABLE(); |
||||
|
||||
/**USART2 GPIO Configuration
|
||||
PA2 ------> USART2_TX |
||||
PA3 ------> USART2_RX
|
||||
*/ |
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); |
||||
|
||||
} |
||||
/* USER CODE BEGIN USART2_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END USART2_MspDeInit 1 */ |
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
Loading…
Reference in new issue