diff --git a/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.cpp b/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.cpp index 5323eda..460d2fb 100644 --- a/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.cpp +++ b/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.cpp @@ -42,21 +42,26 @@ void DigiCDCDevice::begin(){ usbBegin(); } -size_t DigiCDCDevice::write(uint8_t chr) +size_t DigiCDCDevice::write(uint8_t c) { if(RingBuffer_IsFull(&txBuf)) { + refresh(); return 0; } else { - RingBuffer_Insert(&txBuf,chr); + RingBuffer_Insert(&txBuf,c); + DigiCDCDevice::delay(45); //ouch its slow but it ensures it will work no matter how long of a string is thrown at it return 1; } + + } int DigiCDCDevice::available() { + refresh(); return RingBuffer_GetCount(&rxBuf); } @@ -64,12 +69,15 @@ int DigiCDCDevice::read() { if(RingBuffer_IsEmpty(&rxBuf)) { + refresh(); return 0; } else { + refresh(); return RingBuffer_Remove(&rxBuf); } + } int DigiCDCDevice::peek() @@ -82,22 +90,21 @@ int DigiCDCDevice::peek() { return RingBuffer_Peek(&rxBuf); } + refresh(); } void DigiCDCDevice::task(void) { - usbPollWrapper(); + refresh(); } void DigiCDCDevice::refresh(void) { - + _delay_ms(1); usbPollWrapper(); - - } @@ -112,7 +119,7 @@ void DigiCDCDevice::end(void) } DigiCDCDevice::operator bool() { - usbPollWrapper(); + refresh(); return true; } diff --git a/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.h b/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.h index 46179f4..36cc9cb 100644 --- a/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.h +++ b/hardware/digistump/avr/libraries/DigisparkCDC/DigiCDC.h @@ -47,10 +47,6 @@ class DigiCDCDevice : public Stream { virtual int read(void); virtual void flush(void); virtual size_t write(uint8_t); - inline size_t write(unsigned long n) { return write((uint8_t)n); } - inline size_t write(long n) { return write((uint8_t)n); } - inline size_t write(unsigned int n) { return write((uint8_t)n); } - inline size_t write(int n) { return write((uint8_t)n); } using Print::write; operator bool(); private: diff --git a/hardware/digistump/avr/libraries/DigisparkMouse/DigiMouse.h b/hardware/digistump/avr/libraries/DigisparkMouse/DigiMouse.h index a4cbc5b..497325c 100644 --- a/hardware/digistump/avr/libraries/DigisparkMouse/DigiMouse.h +++ b/hardware/digistump/avr/libraries/DigisparkMouse/DigiMouse.h @@ -150,33 +150,25 @@ void clearMove() { class DigiMouseDevice { public: DigiMouseDevice () { - - } - char isConnected() - { - return usb_hasCommed; - } - - void begin(){ - - cli(); - PORTB &= ~(_BV(USB_CFG_DMINUS_BIT) | _BV(USB_CFG_DPLUS_BIT)); - usbDeviceDisconnect(); - _delay_ms(250); - usbDeviceConnect(); - rt_usbHidReportDescriptor = mouse_usbHidReportDescriptor; rt_usbHidReportDescriptorSize = sizeof(mouse_usbHidReportDescriptor); rt_usbDeviceDescriptor = usbDescrDevice; rt_usbDeviceDescriptorSize = sizeof(usbDescrDevice); - + } + + void begin() { + cli(); + usbDeviceDisconnect(); + _delay_ms(200); + usbDeviceConnect(); usbInit(); sei(); last_report_time = millis(); } + void refresh() { @@ -293,7 +285,6 @@ extern "C"{ // USB_PUBLIC uchar usbFunctionSetup uchar usbFunctionSetup(uchar data[8]) { - usb_hasCommed = 1; usbRequest_t *rq = (usbRequest_t *)data; usbMsgPtr = reportBuffer; @@ -344,4 +335,4 @@ extern "C"{ #endif -#endif // __DigiKeyboard_h__ +#endif // __DigiMouse_h__ diff --git a/hardware/digistump/avr/libraries/DigisparkMouse/examples/Mouse/Mouse.ino b/hardware/digistump/avr/libraries/DigisparkMouse/examples/Mouse/Mouse.ino index c17225e..17f14ff 100644 --- a/hardware/digistump/avr/libraries/DigisparkMouse/examples/Mouse/Mouse.ino +++ b/hardware/digistump/avr/libraries/DigisparkMouse/examples/Mouse/Mouse.ino @@ -6,7 +6,6 @@ void setup() { DigiMouse.begin(); //start or reenumerate USB - BREAKING CHANGE from old versions that didn't require this - //while(!DigiMouse.isConnected()) {} //don't run sketch until USB is connected } void loop() { @@ -32,8 +31,11 @@ void loop() { //or you can use these functions to click DigiMouse.rightClick(); + DigiMouse.delay(500); DigiMouse.leftClick(); + DigiMouse.delay(500); DigiMouse.middleClick(); + DigiMouse.delay(500); //for compatability with other libraries you can also use DigiMouse.move(X, Y, scroll, buttons) }