mirror of
https://github.com/digistump/DigistumpArduino.git
synced 2025-04-27 23:29:01 -07:00
mouse and cdc fixes
This commit is contained in:
parent
56dda1007d
commit
a9864c18e8
@ -42,21 +42,26 @@ void DigiCDCDevice::begin(){
|
|||||||
usbBegin();
|
usbBegin();
|
||||||
|
|
||||||
}
|
}
|
||||||
size_t DigiCDCDevice::write(uint8_t chr)
|
size_t DigiCDCDevice::write(uint8_t c)
|
||||||
{
|
{
|
||||||
if(RingBuffer_IsFull(&txBuf))
|
if(RingBuffer_IsFull(&txBuf))
|
||||||
{
|
{
|
||||||
|
refresh();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int DigiCDCDevice::available()
|
int DigiCDCDevice::available()
|
||||||
{
|
{
|
||||||
|
refresh();
|
||||||
return RingBuffer_GetCount(&rxBuf);
|
return RingBuffer_GetCount(&rxBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,12 +69,15 @@ int DigiCDCDevice::read()
|
|||||||
{
|
{
|
||||||
if(RingBuffer_IsEmpty(&rxBuf))
|
if(RingBuffer_IsEmpty(&rxBuf))
|
||||||
{
|
{
|
||||||
|
refresh();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
refresh();
|
||||||
return RingBuffer_Remove(&rxBuf);
|
return RingBuffer_Remove(&rxBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int DigiCDCDevice::peek()
|
int DigiCDCDevice::peek()
|
||||||
@ -82,22 +90,21 @@ int DigiCDCDevice::peek()
|
|||||||
{
|
{
|
||||||
return RingBuffer_Peek(&rxBuf);
|
return RingBuffer_Peek(&rxBuf);
|
||||||
}
|
}
|
||||||
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DigiCDCDevice::task(void)
|
void DigiCDCDevice::task(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
usbPollWrapper();
|
refresh();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DigiCDCDevice::refresh(void)
|
void DigiCDCDevice::refresh(void)
|
||||||
{
|
{
|
||||||
|
_delay_ms(1);
|
||||||
usbPollWrapper();
|
usbPollWrapper();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -112,7 +119,7 @@ void DigiCDCDevice::end(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DigiCDCDevice::operator bool() {
|
DigiCDCDevice::operator bool() {
|
||||||
usbPollWrapper();
|
refresh();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,10 +47,6 @@ class DigiCDCDevice : public Stream {
|
|||||||
virtual int read(void);
|
virtual int read(void);
|
||||||
virtual void flush(void);
|
virtual void flush(void);
|
||||||
virtual size_t write(uint8_t);
|
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;
|
using Print::write;
|
||||||
operator bool();
|
operator bool();
|
||||||
private:
|
private:
|
||||||
|
@ -150,33 +150,25 @@ void clearMove() {
|
|||||||
class DigiMouseDevice {
|
class DigiMouseDevice {
|
||||||
public:
|
public:
|
||||||
DigiMouseDevice () {
|
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_usbHidReportDescriptor = mouse_usbHidReportDescriptor;
|
||||||
rt_usbHidReportDescriptorSize = sizeof(mouse_usbHidReportDescriptor);
|
rt_usbHidReportDescriptorSize = sizeof(mouse_usbHidReportDescriptor);
|
||||||
rt_usbDeviceDescriptor = usbDescrDevice;
|
rt_usbDeviceDescriptor = usbDescrDevice;
|
||||||
rt_usbDeviceDescriptorSize = sizeof(usbDescrDevice);
|
rt_usbDeviceDescriptorSize = sizeof(usbDescrDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
void begin() {
|
||||||
|
cli();
|
||||||
|
usbDeviceDisconnect();
|
||||||
|
_delay_ms(200);
|
||||||
|
usbDeviceConnect();
|
||||||
|
|
||||||
usbInit();
|
usbInit();
|
||||||
|
|
||||||
sei();
|
sei();
|
||||||
last_report_time = millis();
|
last_report_time = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void refresh() {
|
void refresh() {
|
||||||
@ -293,7 +285,6 @@ extern "C"{
|
|||||||
// USB_PUBLIC uchar usbFunctionSetup
|
// USB_PUBLIC uchar usbFunctionSetup
|
||||||
|
|
||||||
uchar usbFunctionSetup(uchar data[8]) {
|
uchar usbFunctionSetup(uchar data[8]) {
|
||||||
usb_hasCommed = 1;
|
|
||||||
usbRequest_t *rq = (usbRequest_t *)data;
|
usbRequest_t *rq = (usbRequest_t *)data;
|
||||||
|
|
||||||
usbMsgPtr = reportBuffer;
|
usbMsgPtr = reportBuffer;
|
||||||
@ -344,4 +335,4 @@ extern "C"{
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif // __DigiKeyboard_h__
|
#endif // __DigiMouse_h__
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
DigiMouse.begin(); //start or reenumerate USB - BREAKING CHANGE from old versions that didn't require this
|
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() {
|
void loop() {
|
||||||
@ -32,8 +31,11 @@ void loop() {
|
|||||||
|
|
||||||
//or you can use these functions to click
|
//or you can use these functions to click
|
||||||
DigiMouse.rightClick();
|
DigiMouse.rightClick();
|
||||||
|
DigiMouse.delay(500);
|
||||||
DigiMouse.leftClick();
|
DigiMouse.leftClick();
|
||||||
|
DigiMouse.delay(500);
|
||||||
DigiMouse.middleClick();
|
DigiMouse.middleClick();
|
||||||
|
DigiMouse.delay(500);
|
||||||
|
|
||||||
//for compatability with other libraries you can also use DigiMouse.move(X, Y, scroll, buttons)
|
//for compatability with other libraries you can also use DigiMouse.move(X, Y, scroll, buttons)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user