mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-11-22 00:16:41 +06:00
Remove mbed files (#7605)
* Remove mbed files * Remove mbed files - fix comment * Remove mbed logic blocks
This commit is contained in:
parent
770a4ee729
commit
071eb2478f
|
@ -99,14 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
|
|||
- http://www.obdev.at/products/vusb/license.html
|
||||
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
||||
|
||||
## Cortex: `cstddef: No such file or directory`
|
||||
GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
|
||||
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
|
||||
|
||||
https://github.com/tmk/tmk_keyboard/issues/212
|
||||
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
|
||||
https://developer.mbed.org/forum/mbed/topic/5205/
|
||||
|
||||
## BOOTLOADER_SIZE for AVR
|
||||
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
|
||||
|
||||
|
|
|
@ -99,15 +99,6 @@ Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nécessai
|
|||
- http://www.obdev.at/products/vusb/license.html
|
||||
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
||||
|
||||
## Cortex: `cstddef: No such file or directory`
|
||||
|
||||
Ce problème existait avec le GCC 4.8 d'Ubuntu 14.04, la solution a nécessité de mettre à jour vers 4.9 avec ce PPA.
|
||||
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
|
||||
|
||||
https://github.com/tmk/tmk_keyboard/issues/212
|
||||
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
|
||||
https://developer.mbed.org/forum/mbed/topic/5205/
|
||||
|
||||
## BOOTLOADER_SIZE pour AVR
|
||||
|
||||
Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
|
||||
|
|
|
@ -68,14 +68,6 @@ https://github.com/tmk/tmk_keyboard/issues/150
|
|||
- http://www.obdev.at/products/vusb/license.html
|
||||
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
||||
|
||||
## Cortex: `cstddef: No such file or directory`
|
||||
在Ubuntu 14.04上的GCC 4.8 会出现这种问题需要用这个PPA升级到4.9。
|
||||
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
|
||||
|
||||
https://github.com/tmk/tmk_keyboard/issues/212
|
||||
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
|
||||
https://developer.mbed.org/forum/mbed/topic/5205/
|
||||
|
||||
## AVR的BOOTLOADER_SIZE
|
||||
注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ tmk_core/protocol/bluefruit
|
|||
tmk_core/protocol/chibios
|
||||
tmk_core/protocol/iwrap
|
||||
tmk_core/protocol/lufa
|
||||
tmk_core/protocol/mbed
|
||||
tmk_core/protocol/midi
|
||||
tmk_core/protocol/midi/bytequeue
|
||||
tmk_core/protocol/midi/Config
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
#include "bootloader.h"
|
||||
|
||||
void bootloader_jump(void) {}
|
|
@ -1,5 +0,0 @@
|
|||
#include <stdbool.h>
|
||||
|
||||
void suspend_power_down(void) {}
|
||||
bool suspend_wakeup_condition(void) { return true; }
|
||||
void suspend_wakeup_init(void) {}
|
|
@ -1,23 +0,0 @@
|
|||
#include "cmsis.h"
|
||||
#include "timer.h"
|
||||
|
||||
/* Mill second tick count */
|
||||
volatile uint32_t timer_count = 0;
|
||||
|
||||
/* Timer interrupt handler */
|
||||
void SysTick_Handler(void) { timer_count++; }
|
||||
|
||||
void timer_init(void) {
|
||||
timer_count = 0;
|
||||
SysTick_Config(SystemCoreClock / 1000); /* 1ms tick */
|
||||
}
|
||||
|
||||
void timer_clear(void) { timer_count = 0; }
|
||||
|
||||
uint16_t timer_read(void) { return (uint16_t)(timer_count & 0xFFFF); }
|
||||
|
||||
uint32_t timer_read32(void) { return timer_count; }
|
||||
|
||||
uint16_t timer_elapsed(uint16_t last) { return TIMER_DIFF_16(timer_read(), last); }
|
||||
|
||||
uint32_t timer_elapsed32(uint32_t last) { return TIMER_DIFF_32(timer_read32(), last); }
|
|
@ -1,50 +0,0 @@
|
|||
#include <cstdarg>
|
||||
//#include <stdarg.h>
|
||||
#include "mbed.h"
|
||||
#include "mbed/xprintf.h"
|
||||
|
||||
#define STRING_STACK_LIMIT 120
|
||||
|
||||
// TODO
|
||||
int __xprintf(const char* format, ...) { return 0; }
|
||||
|
||||
#if 0
|
||||
/* mbed Serial */
|
||||
Serial ser(UART_TX, UART_RX);
|
||||
|
||||
/* TODO: Need small implementation for embedded */
|
||||
int xprintf(const char* format, ...)
|
||||
{
|
||||
/* copy from mbed/common/RawSerial.cpp */
|
||||
std::va_list arg;
|
||||
va_start(arg, format);
|
||||
int len = vsnprintf(NULL, 0, format, arg);
|
||||
if (len < STRING_STACK_LIMIT) {
|
||||
char temp[STRING_STACK_LIMIT];
|
||||
vsprintf(temp, format, arg);
|
||||
ser.puts(temp);
|
||||
} else {
|
||||
char *temp = new char[len + 1];
|
||||
vsprintf(temp, format, arg);
|
||||
ser.puts(temp);
|
||||
delete[] temp;
|
||||
}
|
||||
va_end(arg);
|
||||
return len;
|
||||
|
||||
/* Fail: __builtin_va_arg_pack?
|
||||
* https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Constructing-Calls.html#Constructing-Calls
|
||||
void *arg = __builtin_apply_args();
|
||||
void *ret = __builtin_apply((void*)(&(ser.printf)), arg, 100);
|
||||
__builtin_return(ret)
|
||||
*/
|
||||
/* Fail: varargs can not be passed to printf
|
||||
//int r = ser.printf("test %i\r\n", 123);
|
||||
va_list arg;
|
||||
va_start(arg, format);
|
||||
int r = ser.printf(format, arg);
|
||||
va_end(arg);
|
||||
return r;
|
||||
*/
|
||||
}
|
||||
#endif
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef XPRINTF_H
|
||||
#define XPRINTF_H
|
||||
|
||||
//#define xprintf(format, ...) __xprintf(format, ##__VA_ARGS__)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int __xprintf(const char *format, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -128,38 +128,7 @@ extern "C"
|
|||
|
||||
# endif /* USER_PRINT / NORMAL PRINT */
|
||||
|
||||
# elif defined(__arm__) /* __arm__ */
|
||||
|
||||
# include "mbed/xprintf.h"
|
||||
|
||||
# ifdef USER_PRINT /* USER_PRINT */
|
||||
|
||||
// Remove normal print defines
|
||||
# define print(s)
|
||||
# define println(s)
|
||||
# define xprintf(fmt, ...)
|
||||
|
||||
// Create user print defines
|
||||
# define uprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
|
||||
# define uprint(s) xprintf(s)
|
||||
# define uprintln(s) xprintf(s "\r\n")
|
||||
|
||||
# else /* NORMAL PRINT */
|
||||
|
||||
// Create user & normal print defines
|
||||
# define xprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
|
||||
# define print(s) xprintf(s)
|
||||
# define println(s) xprintf(s "\r\n")
|
||||
# define uprint(s) print(s)
|
||||
# define uprintln(s) println(s)
|
||||
# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__)
|
||||
|
||||
# endif /* USER_PRINT / NORMAL PRINT */
|
||||
|
||||
/* TODO: to select output destinations: UART/USBSerial */
|
||||
# define print_set_sendchar(func)
|
||||
|
||||
# endif /* __AVR__ / PROTOCOL_CHIBIOS / PROTOCOL_ARM_ATSAM / __arm__ */
|
||||
# endif /* __AVR__ / PROTOCOL_CHIBIOS / PROTOCOL_ARM_ATSAM */
|
||||
|
||||
// User print disables the normal print messages in the body of QMK/TMK code and
|
||||
// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do
|
||||
|
|
|
@ -33,8 +33,6 @@ extern "C" {
|
|||
# include "clks.h"
|
||||
# define wait_ms(ms) CLK_delay_ms(ms)
|
||||
# define wait_us(us) CLK_delay_us(us)
|
||||
#elif defined(__arm__)
|
||||
# include "wait_api.h"
|
||||
#else // Unit tests
|
||||
void wait_ms(uint32_t ms);
|
||||
# define wait_us(us) wait_ms(us / 1000)
|
||||
|
|
|
@ -1,260 +0,0 @@
|
|||
#include <stdint.h>
|
||||
#include "USBHID.h"
|
||||
#include "USBHID_Types.h"
|
||||
#include "USBDescriptor.h"
|
||||
#include "HIDKeyboard.h"
|
||||
|
||||
#define DEFAULT_CONFIGURATION (1)
|
||||
|
||||
HIDKeyboard::HIDKeyboard(uint16_t vendor_id, uint16_t product_id, uint16_t product_release) : USBDevice(vendor_id, product_id, product_release) { USBDevice::connect(); }
|
||||
|
||||
bool HIDKeyboard::sendReport(report_keyboard_t report) {
|
||||
USBDevice::write(EP1IN, report.raw, sizeof(report), MAX_PACKET_SIZE_EP1);
|
||||
return true;
|
||||
}
|
||||
|
||||
uint8_t HIDKeyboard::leds() { return led_state; }
|
||||
|
||||
bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) {
|
||||
if (configuration != DEFAULT_CONFIGURATION) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Configure endpoints > 0
|
||||
addEndpoint(EPINT_IN, MAX_PACKET_SIZE_EPINT);
|
||||
// addEndpoint(EPINT_OUT, MAX_PACKET_SIZE_EPINT);
|
||||
|
||||
// We activate the endpoint to be able to recceive data
|
||||
// readStart(EPINT_OUT, MAX_PACKET_SIZE_EPINT);
|
||||
return true;
|
||||
}
|
||||
|
||||
uint8_t *HIDKeyboard::stringImanufacturerDesc() {
|
||||
static uint8_t stringImanufacturerDescriptor[] = {
|
||||
0x18, /*bLength*/
|
||||
STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
|
||||
't',
|
||||
0,
|
||||
'm',
|
||||
0,
|
||||
'k',
|
||||
0,
|
||||
'-',
|
||||
0,
|
||||
'k',
|
||||
0,
|
||||
'b',
|
||||
0,
|
||||
'd',
|
||||
0,
|
||||
'.',
|
||||
0,
|
||||
'c',
|
||||
0,
|
||||
'o',
|
||||
0,
|
||||
'm',
|
||||
0 /*bString iManufacturer*/
|
||||
};
|
||||
return stringImanufacturerDescriptor;
|
||||
}
|
||||
|
||||
uint8_t *HIDKeyboard::stringIproductDesc() {
|
||||
static uint8_t stringIproductDescriptor[] = {
|
||||
0x0a, /*bLength*/
|
||||
STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
|
||||
'm',
|
||||
0,
|
||||
'b',
|
||||
0,
|
||||
'e',
|
||||
0,
|
||||
'd',
|
||||
0 /*bString iProduct*/
|
||||
};
|
||||
return stringIproductDescriptor;
|
||||
}
|
||||
|
||||
uint8_t *HIDKeyboard::stringIserialDesc() {
|
||||
static uint8_t stringIserialDescriptor[] = {
|
||||
0x04, /*bLength*/
|
||||
STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
|
||||
'0', 0 /*bString iSerial*/
|
||||
};
|
||||
return stringIserialDescriptor;
|
||||
}
|
||||
|
||||
uint8_t *HIDKeyboard::reportDesc() {
|
||||
static uint8_t reportDescriptor[] = {
|
||||
USAGE_PAGE(1), 0x01, // Generic Desktop
|
||||
USAGE(1), 0x06, // Keyboard
|
||||
COLLECTION(1), 0x01, // Application
|
||||
|
||||
USAGE_PAGE(1), 0x07, // Key Codes
|
||||
USAGE_MINIMUM(1), 0xE0, USAGE_MAXIMUM(1), 0xE7, LOGICAL_MINIMUM(1), 0x00, LOGICAL_MAXIMUM(1), 0x01, REPORT_SIZE(1), 0x01, REPORT_COUNT(1), 0x08, INPUT(1), 0x02, // Data, Variable, Absolute
|
||||
|
||||
REPORT_COUNT(1), 0x01, REPORT_SIZE(1), 0x08, INPUT(1), 0x01, // Constant
|
||||
|
||||
REPORT_COUNT(1), 0x05, REPORT_SIZE(1), 0x01, USAGE_PAGE(1), 0x08, // LEDs
|
||||
USAGE_MINIMUM(1), 0x01, USAGE_MAXIMUM(1), 0x05, OUTPUT(1), 0x02, // Data, Variable, Absolute
|
||||
|
||||
REPORT_COUNT(1), 0x01, REPORT_SIZE(1), 0x03, OUTPUT(1), 0x01, // Constant
|
||||
|
||||
REPORT_COUNT(1), 0x06, REPORT_SIZE(1), 0x08, LOGICAL_MINIMUM(1), 0x00, LOGICAL_MAXIMUM(1), 0xFF, USAGE_PAGE(1), 0x07, // Key Codes
|
||||
USAGE_MINIMUM(1), 0x00, USAGE_MAXIMUM(1), 0xFF, INPUT(1), 0x00, // Data, Array
|
||||
END_COLLECTION(0),
|
||||
};
|
||||
reportLength = sizeof(reportDescriptor);
|
||||
return reportDescriptor;
|
||||
}
|
||||
|
||||
uint16_t HIDKeyboard::reportDescLength() {
|
||||
reportDesc();
|
||||
return reportLength;
|
||||
}
|
||||
|
||||
#define TOTAL_DESCRIPTOR_LENGTH ((1 * CONFIGURATION_DESCRIPTOR_LENGTH) + (1 * INTERFACE_DESCRIPTOR_LENGTH) + (1 * HID_DESCRIPTOR_LENGTH) + (1 * ENDPOINT_DESCRIPTOR_LENGTH))
|
||||
uint8_t *HIDKeyboard::configurationDesc() {
|
||||
static uint8_t configurationDescriptor[] = {
|
||||
CONFIGURATION_DESCRIPTOR_LENGTH, // bLength
|
||||
CONFIGURATION_DESCRIPTOR, // bDescriptorType
|
||||
LSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (LSB)
|
||||
MSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (MSB)
|
||||
0x01, // bNumInterfaces
|
||||
DEFAULT_CONFIGURATION, // bConfigurationValue
|
||||
0x00, // iConfiguration
|
||||
C_RESERVED | C_REMOTE_WAKEUP, // bmAttributes
|
||||
C_POWER(100), // bMaxPowerHello World from Mbed
|
||||
|
||||
INTERFACE_DESCRIPTOR_LENGTH, // bLength
|
||||
INTERFACE_DESCRIPTOR, // bDescriptorType
|
||||
0x00, // bInterfaceNumber
|
||||
0x00, // bAlternateSetting
|
||||
0x01, // bNumEndpoints
|
||||
HID_CLASS, // bInterfaceClass
|
||||
1, // bInterfaceSubClass (boot)
|
||||
1, // bInterfaceProtocol (keyboard)
|
||||
0x00, // iInterface
|
||||
|
||||
HID_DESCRIPTOR_LENGTH, // bLength
|
||||
HID_DESCRIPTOR, // bDescriptorType
|
||||
LSB(HID_VERSION_1_11), // bcdHID (LSB)
|
||||
MSB(HID_VERSION_1_11), // bcdHID (MSB)
|
||||
0x00, // bCountryCode
|
||||
0x01, // bNumDescriptors
|
||||
REPORT_DESCRIPTOR, // bDescriptorType
|
||||
(uint8_t)(LSB(reportDescLength())), // wDescriptorLength (LSB)
|
||||
(uint8_t)(MSB(reportDescLength())), // wDescriptorLength (MSB)
|
||||
|
||||
ENDPOINT_DESCRIPTOR_LENGTH, // bLength
|
||||
ENDPOINT_DESCRIPTOR, // bDescriptorType
|
||||
PHY_TO_DESC(EP1IN), // bEndpointAddress
|
||||
E_INTERRUPT, // bmAttributes
|
||||
LSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (LSB)
|
||||
MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB)
|
||||
1, // bInterval (milliseconds)
|
||||
};
|
||||
return configurationDescriptor;
|
||||
}
|
||||
|
||||
#if 0
|
||||
uint8_t * HIDKeyboard::deviceDesc() {
|
||||
static uint8_t deviceDescriptor[] = {
|
||||
DEVICE_DESCRIPTOR_LENGTH, /* bLength */
|
||||
DEVICE_DESCRIPTOR, /* bDescriptorType */
|
||||
LSB(USB_VERSION_2_0), /* bcdUSB (LSB) */
|
||||
MSB(USB_VERSION_2_0), /* bcdUSB (MSB) */
|
||||
0x00, /* bDeviceClass */
|
||||
0x00, /* bDeviceSubClass */
|
||||
0x00, /* bDeviceprotocol */
|
||||
MAX_PACKET_SIZE_EP0, /* bMaxPacketSize0 */
|
||||
(uint8_t)(LSB(0xfeed)), /* idVendor (LSB) */
|
||||
(uint8_t)(MSB(0xfeed)), /* idVendor (MSB) */
|
||||
(uint8_t)(LSB(0x1bed)), /* idProduct (LSB) */
|
||||
(uint8_t)(MSB(0x1bed)), /* idProduct (MSB) */
|
||||
(uint8_t)(LSB(0x0002)), /* bcdDevice (LSB) */
|
||||
(uint8_t)(MSB(0x0002)), /* bcdDevice (MSB) */
|
||||
0, /* iManufacturer */
|
||||
0, /* iProduct */
|
||||
0, /* iSerialNumber */
|
||||
0x01 /* bNumConfigurations */
|
||||
};
|
||||
return deviceDescriptor;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool HIDKeyboard::USBCallback_request() {
|
||||
bool success = false;
|
||||
CONTROL_TRANSFER *transfer = getTransferPtr();
|
||||
uint8_t * hidDescriptor;
|
||||
|
||||
// Process additional standard requests
|
||||
|
||||
if ((transfer->setup.bmRequestType.Type == STANDARD_TYPE)) {
|
||||
switch (transfer->setup.bRequest) {
|
||||
case GET_DESCRIPTOR:
|
||||
switch (DESCRIPTOR_TYPE(transfer->setup.wValue)) {
|
||||
case REPORT_DESCRIPTOR:
|
||||
if ((reportDesc() != NULL) && (reportDescLength() != 0)) {
|
||||
transfer->remaining = reportDescLength();
|
||||
transfer->ptr = reportDesc();
|
||||
transfer->direction = DEVICE_TO_HOST;
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
case HID_DESCRIPTOR:
|
||||
// Find the HID descriptor, after the configuration descriptor
|
||||
hidDescriptor = findDescriptor(HID_DESCRIPTOR);
|
||||
if (hidDescriptor != NULL) {
|
||||
transfer->remaining = HID_DESCRIPTOR_LENGTH;
|
||||
transfer->ptr = hidDescriptor;
|
||||
transfer->direction = DEVICE_TO_HOST;
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Process class-specific requests
|
||||
if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
|
||||
switch (transfer->setup.bRequest) {
|
||||
case SET_REPORT:
|
||||
// LED indicator
|
||||
// TODO: check Interface and Report length?
|
||||
// if (transfer->setup.wIndex == INTERFACE_KEYBOAD) { }
|
||||
// if (transfer->setup.wLength == 1)
|
||||
|
||||
transfer->remaining = 1;
|
||||
// transfer->ptr = ?? what ptr should be set when OUT(not used?)
|
||||
transfer->direction = HOST_TO_DEVICE;
|
||||
transfer->notify = true; /* notify with USBCallback_requestCompleted */
|
||||
success = true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
void HIDKeyboard::USBCallback_requestCompleted(uint8_t *buf, uint32_t length) {
|
||||
if (length > 0) {
|
||||
CONTROL_TRANSFER *transfer = getTransferPtr();
|
||||
if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
|
||||
switch (transfer->setup.bRequest) {
|
||||
case SET_REPORT:
|
||||
led_state = buf[0];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
#ifndef HIDKEYBOARD_H
|
||||
|
||||
# include "stdint.h"
|
||||
# include "stdbool.h"
|
||||
# include "USBHID.h"
|
||||
# include "report.h"
|
||||
|
||||
class HIDKeyboard : public USBDevice {
|
||||
public:
|
||||
HIDKeyboard(uint16_t vendor_id = 0xFEED, uint16_t product_id = 0xabed, uint16_t product_release = 0x0001);
|
||||
|
||||
bool sendReport(report_keyboard_t report);
|
||||
uint8_t leds(void);
|
||||
|
||||
protected:
|
||||
uint16_t reportLength;
|
||||
virtual bool USBCallback_setConfiguration(uint8_t configuration);
|
||||
virtual uint8_t* stringImanufacturerDesc();
|
||||
virtual uint8_t* stringIproductDesc();
|
||||
virtual uint8_t* stringIserialDesc();
|
||||
virtual uint16_t reportDescLength();
|
||||
virtual uint8_t* reportDesc();
|
||||
virtual uint8_t* configurationDesc();
|
||||
// virtual uint8_t * deviceDesc();
|
||||
virtual bool USBCallback_request();
|
||||
virtual void USBCallback_requestCompleted(uint8_t* buf, uint32_t length);
|
||||
|
||||
private:
|
||||
uint8_t led_state;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,21 +0,0 @@
|
|||
#include "HIDKeyboard.h"
|
||||
#include "host.h"
|
||||
#include "host_driver.h"
|
||||
#include "mbed_driver.h"
|
||||
|
||||
HIDKeyboard keyboard;
|
||||
|
||||
/* Host driver */
|
||||
static uint8_t keyboard_leds(void);
|
||||
static void send_keyboard(report_keyboard_t *report);
|
||||
static void send_mouse(report_mouse_t *report);
|
||||
static void send_system(uint16_t data);
|
||||
static void send_consumer(uint16_t data);
|
||||
|
||||
host_driver_t mbed_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
|
||||
|
||||
static uint8_t keyboard_leds(void) { return keyboard.leds(); }
|
||||
static void send_keyboard(report_keyboard_t *report) { keyboard.sendReport(*report); }
|
||||
static void send_mouse(report_mouse_t *report) {}
|
||||
static void send_system(uint16_t data) {}
|
||||
static void send_consumer(uint16_t data) {}
|
|
@ -1,3 +0,0 @@
|
|||
#include "host_driver.h"
|
||||
|
||||
extern host_driver_t mbed_driver;
|
|
@ -1,51 +0,0 @@
|
|||
#include <stdbool.h>
|
||||
#include "ps2_io.h"
|
||||
#include "gpio_api.h"
|
||||
|
||||
static gpio_t clock;
|
||||
static gpio_t data;
|
||||
|
||||
/*
|
||||
* Clock
|
||||
*/
|
||||
void clock_init(void) {
|
||||
gpio_init(&clock, P0_9);
|
||||
gpio_mode(&clock, OpenDrain | PullNone);
|
||||
}
|
||||
|
||||
void clock_lo(void) {
|
||||
gpio_dir(&clock, PIN_OUTPUT);
|
||||
gpio_write(&clock, 0);
|
||||
}
|
||||
void clock_hi(void) {
|
||||
gpio_dir(&clock, PIN_OUTPUT);
|
||||
gpio_write(&clock, 1);
|
||||
}
|
||||
|
||||
bool clock_in(void) {
|
||||
gpio_dir(&clock, PIN_INPUT);
|
||||
return gpio_read(&clock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Data
|
||||
*/
|
||||
void data_init(void) {
|
||||
gpio_init(&data, P0_8);
|
||||
gpio_mode(&data, OpenDrain | PullNone);
|
||||
}
|
||||
|
||||
void data_lo(void) {
|
||||
gpio_dir(&data, PIN_OUTPUT);
|
||||
gpio_write(&data, 0);
|
||||
}
|
||||
|
||||
void data_hi(void) {
|
||||
gpio_dir(&data, PIN_OUTPUT);
|
||||
gpio_write(&data, 1);
|
||||
}
|
||||
|
||||
bool data_in(void) {
|
||||
gpio_dir(&data, PIN_INPUT);
|
||||
return gpio_read(&data);
|
||||
}
|
Loading…
Reference in New Issue
Block a user