mouse and cdc fixes

This commit is contained in:
Erik Tylek Kettenburg 2015-01-06 14:27:24 -08:00
parent 56dda1007d
commit a9864c18e8
4 changed files with 26 additions and 30 deletions

View File

@ -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;
}

View File

@ -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:

View File

@ -151,26 +151,17 @@ 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();
@ -179,6 +170,7 @@ class DigiMouseDevice {
}
void refresh() {
update();
}
@ -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__

View File

@ -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)
}