12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include <util/delay.h>
- #include <avr/interrupt.h>
- #include "host.h"
- #include "usb_extra.h"
- int8_t usb_extra_send(uint8_t report_id, uint16_t data)
- {
- uint8_t intr_state, timeout;
- if (!usb_configured()) return -1;
- intr_state = SREG;
- cli();
- UENUM = EXTRA_ENDPOINT;
- timeout = UDFNUML + 50;
- while (1) {
-
- if (UEINTX & (1<<RWAL)) break;
- SREG = intr_state;
-
- if (!usb_configured()) return -1;
-
- if (UDFNUML == timeout) return -1;
-
- intr_state = SREG;
- cli();
- UENUM = EXTRA_ENDPOINT;
- }
- UEDATX = report_id;
- UEDATX = data&0xFF;
- UEDATX = (data>>8)&0xFF;
- UEINTX = 0x3A;
- SREG = intr_state;
- return 0;
- }
- int8_t usb_extra_consumer_send(uint16_t bits)
- {
- return usb_extra_send(REPORT_ID_CONSUMER, bits);
- }
- int8_t usb_extra_system_send(uint16_t bits)
- {
- return usb_extra_send(REPORT_ID_SYSTEM, bits);
- }
|