Merge branch 'xxxajk'

Conflicts:
	XBOXUSB.h
	examples/ftdi/USBFTDILoopback/USBFTDILoopback.ino
	hiduniversal.h
	settings.h
	usbhost.h
This commit is contained in:
Kristian Sloth Lauszus 2015-02-22 18:25:22 +01:00
commit 6047962d60
72 changed files with 788 additions and 351 deletions

22
BTD.h
View file

@ -214,13 +214,13 @@ public:
* Used to pass acldata to the Bluetooth service. * Used to pass acldata to the Bluetooth service.
* @param ACLData Pointer to the incoming acldata. * @param ACLData Pointer to the incoming acldata.
*/ */
virtual void ACLData(uint8_t* ACLData); virtual void ACLData(uint8_t* ACLData){};
/** Used to run the different state machines in the Bluetooth service. */ /** Used to run the different state machines in the Bluetooth service. */
virtual void Run(); virtual void Run(){};
/** Used to reset the Bluetooth service. */ /** Used to reset the Bluetooth service. */
virtual void Reset(); virtual void Reset(){};
/** Used to disconnect both the L2CAP Channel and the HCI Connection for the Bluetooth service. */ /** Used to disconnect both the L2CAP Channel and the HCI Connection for the Bluetooth service. */
virtual void disconnect(); virtual void disconnect(){};
}; };
/** /**
@ -243,7 +243,7 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed); uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Initialize the Bluetooth dongle. * Initialize the Bluetooth dongle.
* @param parent Hub number. * @param parent Hub number.
@ -251,17 +251,17 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Release the USB device. * Release the USB device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Release(); uint8_t Release();
/** /**
* Poll the USB Input endpoints and run the state machines. * Poll the USB Input endpoints and run the state machines.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Poll(); uint8_t Poll();
/** /**
* Get the device address. * Get the device address.
@ -284,7 +284,7 @@ public:
* @param klass The device's USB class. * @param klass The device's USB class.
* @return Returns true if the device's USB class matches this driver. * @return Returns true if the device's USB class matches this driver.
*/ */
virtual boolean DEVCLASSOK(uint8_t klass) { virtual bool DEVCLASSOK(uint8_t klass) {
return (klass == USB_CLASS_WIRELESS_CTRL); return (klass == USB_CLASS_WIRELESS_CTRL);
}; };
@ -295,7 +295,7 @@ public:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
if(vid == IOGEAR_GBU521_VID && pid == IOGEAR_GBU521_PID) if(vid == IOGEAR_GBU521_VID && pid == IOGEAR_GBU521_PID)
return true; return true;
if(my_bdaddr[0] != 0x00 || my_bdaddr[1] != 0x00 || my_bdaddr[2] != 0x00 || my_bdaddr[3] != 0x00 || my_bdaddr[4] != 0x00 || my_bdaddr[5] != 0x00) { // Check if Bluetooth address is set if(my_bdaddr[0] != 0x00 || my_bdaddr[1] != 0x00 || my_bdaddr[2] != 0x00 || my_bdaddr[3] != 0x00 || my_bdaddr[4] != 0x00 || my_bdaddr[5] != 0x00) { // Check if Bluetooth address is set
@ -315,7 +315,7 @@ public:
* @param proto Interface Protocol. * @param proto Interface Protocol.
* @param ep Endpoint Descriptor. * @param ep Endpoint Descriptor.
*/ */
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
/**@}*/ /**@}*/
/** Disconnects both the L2CAP Channel and the HCI Connection for all Bluetooth services. */ /** Disconnects both the L2CAP Channel and the HCI Connection for all Bluetooth services. */

View file

@ -41,13 +41,13 @@ public:
* Used to pass acldata to the services. * Used to pass acldata to the services.
* @param ACLData Incoming acldata. * @param ACLData Incoming acldata.
*/ */
virtual void ACLData(uint8_t* ACLData); void ACLData(uint8_t* ACLData);
/** Used to run part of the state machine. */ /** Used to run part of the state machine. */
virtual void Run(); void Run();
/** Use this to reset the service. */ /** Use this to reset the service. */
virtual void Reset(); void Reset();
/** Used this to disconnect the devices. */ /** Used this to disconnect the devices. */
virtual void disconnect(); void disconnect();
/**@}*/ /**@}*/
/** /**

View file

@ -45,13 +45,13 @@ public:
* Used to pass acldata to the services. * Used to pass acldata to the services.
* @param ACLData Incoming acldata. * @param ACLData Incoming acldata.
*/ */
virtual void ACLData(uint8_t* ACLData); void ACLData(uint8_t* ACLData);
/** Used to run part of the state machine. */ /** Used to run part of the state machine. */
virtual void Run(); void Run();
/** Use this to reset the service. */ /** Use this to reset the service. */
virtual void Reset(); void Reset();
/** Used this to disconnect any of the controllers. */ /** Used this to disconnect any of the controllers. */
virtual void disconnect(); void disconnect();
/**@}*/ /**@}*/
/** @name PS3 Controller functions */ /** @name PS3 Controller functions */

View file

@ -71,17 +71,17 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Release the USB device. * Release the USB device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Release(); uint8_t Release();
/** /**
* Poll the USB Input endpoins and run the state machines. * Poll the USB Input endpoins and run the state machines.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Poll(); uint8_t Poll();
/** /**
* Get the device address. * Get the device address.
@ -105,7 +105,7 @@ public:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return (vid == PS3_VID && (pid == PS3_PID || pid == PS3NAVIGATION_PID || pid == PS3MOVE_PID)); return (vid == PS3_VID && (pid == PS3_PID || pid == PS3NAVIGATION_PID || pid == PS3MOVE_PID));
}; };
/**@}*/ /**@}*/

View file

@ -119,7 +119,7 @@ protected:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return (vid == PS4_VID && pid == PS4_PID); return (vid == PS4_VID && pid == PS4_PID);
}; };
/**@}*/ /**@}*/

View file

@ -143,14 +143,14 @@ protected:
* @param len The length of the incoming data. * @param len The length of the incoming data.
* @param buf Pointer to the data buffer. * @param buf Pointer to the data buffer.
*/ */
virtual void ParseHIDData(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf); void ParseHIDData(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
/** /**
* Called when a device is successfully initialized. * Called when a device is successfully initialized.
* Use attachOnInit(void (*funcOnInit)(void)) to call your own function. * Use attachOnInit(void (*funcOnInit)(void)) to call your own function.
* This is useful for instance if you want to set the LEDs in a specific way. * This is useful for instance if you want to set the LEDs in a specific way.
*/ */
virtual uint8_t OnInitSuccessful(); uint8_t OnInitSuccessful();
/**@}*/ /**@}*/
/** Used to reset the different buffers to their default values */ /** Used to reset the different buffers to their default values */
@ -169,7 +169,7 @@ protected:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return (vid == PSBUZZ_VID && pid == PSBUZZ_PID); return (vid == PSBUZZ_VID && pid == PSBUZZ_PID);
}; };
/**@}*/ /**@}*/

22
SPP.h
View file

@ -83,13 +83,13 @@ public:
* Used to pass acldata to the services. * Used to pass acldata to the services.
* @param ACLData Incoming acldata. * @param ACLData Incoming acldata.
*/ */
virtual void ACLData(uint8_t* ACLData); void ACLData(uint8_t* ACLData);
/** Used to establish the connection automatically. */ /** Used to establish the connection automatically. */
virtual void Run(); void Run();
/** Use this to reset the service. */ /** Use this to reset the service. */
virtual void Reset(); void Reset();
/** Used this to disconnect the virtual serial port. */ /** Used this to disconnect the virtual serial port. */
virtual void disconnect(); void disconnect();
/**@}*/ /**@}*/
/** @name Serial port profile (SPP) Print functions */ /** @name Serial port profile (SPP) Print functions */
@ -97,7 +97,7 @@ public:
* Get number of bytes waiting to be read. * Get number of bytes waiting to be read.
* @return Return the number of bytes ready to be read. * @return Return the number of bytes ready to be read.
*/ */
virtual int available(void); int available(void);
/** Send out all bytes in the buffer. */ /** Send out all bytes in the buffer. */
virtual void flush(void) { virtual void flush(void) {
@ -107,12 +107,12 @@ public:
* Used to read the next value in the buffer without advancing to the next one. * Used to read the next value in the buffer without advancing to the next one.
* @return Return the byte. Will return -1 if no bytes are available. * @return Return the byte. Will return -1 if no bytes are available.
*/ */
virtual int peek(void); int peek(void);
/** /**
* Used to read the buffer. * Used to read the buffer.
* @return Return the byte. Will return -1 if no bytes are available. * @return Return the byte. Will return -1 if no bytes are available.
*/ */
virtual int read(void); int read(void);
#if defined(ARDUINO) && ARDUINO >=100 #if defined(ARDUINO) && ARDUINO >=100
/** /**
@ -120,14 +120,14 @@ public:
* @param data The byte to write. * @param data The byte to write.
* @return Return the number of bytes written. * @return Return the number of bytes written.
*/ */
virtual size_t write(uint8_t data); size_t write(uint8_t data);
/** /**
* Writes the bytes to send to a buffer. The message is send when either send() or after Usb.Task() is called. * Writes the bytes to send to a buffer. The message is send when either send() or after Usb.Task() is called.
* @param data The data array to send. * @param data The data array to send.
* @param size Size of the data. * @param size Size of the data.
* @return Return the number of bytes written. * @return Return the number of bytes written.
*/ */
virtual size_t write(const uint8_t* data, size_t size); size_t write(const uint8_t* data, size_t size);
/** Pull in write(const char *str) from Print */ /** Pull in write(const char *str) from Print */
using Print::write; using Print::write;
#else #else
@ -135,13 +135,13 @@ public:
* Writes the byte to send to a buffer. The message is send when either send() or after Usb.Task() is called. * Writes the byte to send to a buffer. The message is send when either send() or after Usb.Task() is called.
* @param data The byte to write. * @param data The byte to write.
*/ */
virtual void write(uint8_t data); void write(uint8_t data);
/** /**
* Writes the bytes to send to a buffer. The message is send when either send() or after Usb.Task() is called. * Writes the bytes to send to a buffer. The message is send when either send() or after Usb.Task() is called.
* @param data The data array to send. * @param data The data array to send.
* @param size Size of the data. * @param size Size of the data.
*/ */
virtual void write(const uint8_t* data, size_t size); void write(const uint8_t* data, size_t size);
#endif #endif
/** Discard all the bytes in the buffer. */ /** Discard all the bytes in the buffer. */

View file

@ -143,15 +143,15 @@ public:
return; return;
} // Note used for hubs only! } // Note used for hubs only!
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return false; return false;
} }
virtual boolean DEVCLASSOK(uint8_t klass) { virtual bool DEVCLASSOK(uint8_t klass) {
return false; return false;
} }
virtual boolean DEVSUBCLASSOK(uint8_t subklass) { virtual bool DEVSUBCLASSOK(uint8_t subklass) {
return true; return true;
} }
@ -241,8 +241,8 @@ public:
uint8_t setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr); uint8_t setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr);
uint8_t setConf(uint8_t addr, uint8_t ep, uint8_t conf_value); uint8_t setConf(uint8_t addr, uint8_t ep, uint8_t conf_value);
/**/ /**/
uint8_t ctrlData(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr, boolean direction); uint8_t ctrlData(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr, bool direction);
uint8_t ctrlStatus(uint8_t ep, boolean direction, uint16_t nak_limit); uint8_t ctrlStatus(uint8_t ep, bool direction, uint16_t nak_limit);
uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data); uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data);
uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data); uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data);
uint8_t dispatchPkt(uint8_t token, uint8_t ep, uint16_t nak_limit); uint8_t dispatchPkt(uint8_t token, uint8_t ep, uint16_t nak_limit);

8
Wii.h
View file

@ -59,13 +59,13 @@ public:
* Used to pass acldata to the services. * Used to pass acldata to the services.
* @param ACLData Incoming acldata. * @param ACLData Incoming acldata.
*/ */
virtual void ACLData(uint8_t* ACLData); void ACLData(uint8_t* ACLData);
/** Used to run part of the state machine. */ /** Used to run part of the state machine. */
virtual void Run(); void Run();
/** Use this to reset the service. */ /** Use this to reset the service. */
virtual void Reset(); void Reset();
/** Used this to disconnect any of the controllers. */ /** Used this to disconnect any of the controllers. */
virtual void disconnect(); void disconnect();
/**@}*/ /**@}*/
/** @name Wii Controller functions */ /** @name Wii Controller functions */

View file

@ -62,17 +62,17 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Release the USB device. * Release the USB device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Release(); uint8_t Release();
/** /**
* Poll the USB Input endpoins and run the state machines. * Poll the USB Input endpoins and run the state machines.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Poll(); uint8_t Poll();
/** /**
* Get the device address. * Get the device address.
@ -96,7 +96,7 @@ public:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return ((vid == XBOX_VID || vid == MADCATZ_VID || vid == JOYTECH_VID) && (pid == XBOX_OLD_PID1 || pid == XBOX_OLD_PID2 || pid == XBOX_OLD_PID3 || pid == XBOX_OLD_PID4)); return ((vid == XBOX_VID || vid == MADCATZ_VID || vid == JOYTECH_VID) && (pid == XBOX_OLD_PID1 || pid == XBOX_OLD_PID2 || pid == XBOX_OLD_PID3 || pid == XBOX_OLD_PID4));
}; };
/**@}*/ /**@}*/

View file

@ -68,7 +68,7 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed); uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Initialize the Xbox wireless receiver. * Initialize the Xbox wireless receiver.
* @param parent Hub number. * @param parent Hub number.
@ -76,17 +76,17 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Release the USB device. * Release the USB device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Release(); uint8_t Release();
/** /**
* Poll the USB Input endpoins and run the state machines. * Poll the USB Input endpoins and run the state machines.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Poll(); uint8_t Poll();
/** /**
* Get the device address. * Get the device address.
@ -110,7 +110,7 @@ public:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return ((vid == XBOX_VID || vid == MADCATZ_VID || vid == JOYTECH_VID) && (pid == XBOX_WIRELESS_RECEIVER_PID || pid == XBOX_WIRELESS_RECEIVER_THIRD_PARTY_PID)); return ((vid == XBOX_VID || vid == MADCATZ_VID || vid == JOYTECH_VID) && (pid == XBOX_WIRELESS_RECEIVER_PID || pid == XBOX_WIRELESS_RECEIVER_THIRD_PARTY_PID));
}; };
/**@}*/ /**@}*/

View file

@ -69,17 +69,17 @@ public:
* @param lowspeed Speed of the device. * @param lowspeed Speed of the device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
/** /**
* Release the USB device. * Release the USB device.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Release(); uint8_t Release();
/** /**
* Poll the USB Input endpoins and run the state machines. * Poll the USB Input endpoins and run the state machines.
* @return 0 on success. * @return 0 on success.
*/ */
virtual uint8_t Poll(); uint8_t Poll();
/** /**
* Get the device address. * Get the device address.
@ -103,7 +103,7 @@ public:
* @param pid The device's PID. * @param pid The device's PID.
* @return Returns true if the device's VID and PID matches this driver. * @return Returns true if the device's VID and PID matches this driver.
*/ */
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return ((vid == XBOX_VID || vid == MADCATZ_VID || vid == JOYTECH_VID || vid == GAMESTOP_VID) && (pid == XBOX_WIRED_PID || pid == MADCATZ_WIRED_PID || pid == GAMESTOP_WIRED_PID || pid == AFTERGLOW_WIRED_PID || pid == JOYTECH_WIRED_PID)); return ((vid == XBOX_VID || vid == MADCATZ_VID || vid == JOYTECH_VID || vid == GAMESTOP_VID) && (pid == XBOX_WIRED_PID || pid == MADCATZ_WIRED_PID || pid == GAMESTOP_WIRED_PID || pid == AFTERGLOW_WIRED_PID || pid == JOYTECH_WIRED_PID));
}; };
/**@}*/ /**@}*/

10
adk.h
View file

@ -96,9 +96,9 @@ public:
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed); uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll() { virtual uint8_t Poll() {
return 0; return 0;
@ -112,12 +112,12 @@ public:
return ready; return ready;
}; };
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return (vid == ADK_VID && (pid == ADK_PID || pid == ADB_PID)); return (vid == ADK_VID && (pid == ADK_PID || pid == ADB_PID));
}; };
//UsbConfigXtracter implementation //UsbConfigXtracter implementation
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
}; //class ADK : public USBDeviceConfig ... }; //class ADK : public USBDeviceConfig ...
/* get ADK protocol version */ /* get ADK protocol version */

View file

@ -1020,4 +1020,49 @@ MAKE_PIN(P24, Pin_nRF51822_to_Arduino(D24));
#endif // __arm__ #endif // __arm__
#if defined(__MIPSEL__)
// MIPSEL (MIPS architecture using a little endian byte order)
// MIPS size_t = 4
#define pgm_read_pointer(p) pgm_read_dword(p)
#define MAKE_PIN(className, pin) \
class className { \
public: \
static void Set() { \
digitalWrite(pin, HIGH);\
} \
static void Clear() { \
digitalWrite(pin, LOW); \
} \
static void SetDirRead() { \
pinMode(pin, INPUT); \
} \
static void SetDirWrite() { \
pinMode(pin, OUTPUT); \
} \
static uint8_t IsSet() { \
return digitalRead(pin); \
} \
};
// 0 .. 13 - Digital pins
MAKE_PIN(P0, 0); // RX
MAKE_PIN(P1, 1); // TX
MAKE_PIN(P2, 2); //
MAKE_PIN(P3, 3); //
MAKE_PIN(P4, 4); //
MAKE_PIN(P5, 5); //
MAKE_PIN(P6, 6); //
MAKE_PIN(P7, 7); //
MAKE_PIN(P8, 8); //
MAKE_PIN(P9, 9); //
MAKE_PIN(P10, 10); //
MAKE_PIN(P11, 11); //
MAKE_PIN(P12, 12); //
MAKE_PIN(P13, 13); //
#undef MAKE_PIN
#endif
#endif //_avrpins_h_ #endif //_avrpins_h_

View file

@ -127,7 +127,9 @@ class ACM;
class CDCAsyncOper { class CDCAsyncOper {
public: public:
virtual uint8_t OnInit(ACM *pacm) = 0;
virtual uint8_t OnInit(ACM *pacm) {
};
//virtual void OnDataRcvd(ACM *pacm, uint8_t nbytes, uint8_t *dataptr) = 0; //virtual void OnDataRcvd(ACM *pacm, uint8_t nbytes, uint8_t *dataptr) = 0;
//virtual void OnDisconnected(ACM *pacm) = 0; //virtual void OnDisconnected(ACM *pacm) = 0;
}; };
@ -173,9 +175,9 @@ public:
uint8_t SndData(uint16_t nbytes, uint8_t *dataptr); uint8_t SndData(uint16_t nbytes, uint8_t *dataptr);
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll(); uint8_t Poll();
virtual uint8_t GetAddress() { virtual uint8_t GetAddress() {
return bAddress; return bAddress;
@ -186,7 +188,7 @@ public:
}; };
// UsbConfigXtracter implementation // UsbConfigXtracter implementation
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
}; };
#endif // __CDCACM_H__ #endif // __CDCACM_H__

View file

@ -78,8 +78,12 @@ class FTDI;
class FTDIAsyncOper { class FTDIAsyncOper {
public: public:
virtual uint8_t OnInit(FTDI *pftdi) = 0;
virtual uint8_t OnRelease(FTDI *pftdi) = 0; virtual uint8_t OnInit(FTDI *pftdi) {
};
virtual uint8_t OnRelease(FTDI *pftdi) {
};
}; };
@ -119,18 +123,18 @@ public:
uint8_t SndData(uint16_t nbytes, uint8_t *dataptr); uint8_t SndData(uint16_t nbytes, uint8_t *dataptr);
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll(); uint8_t Poll();
virtual uint8_t GetAddress() { virtual uint8_t GetAddress() {
return bAddress; return bAddress;
}; };
// UsbConfigXtracter implementation // UsbConfigXtracter implementation
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) { virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
return (vid == FTDI_VID && pid == FTDI_PID); return (vid == FTDI_VID && pid == FTDI_PID);
} }

View file

@ -19,69 +19,61 @@ e-mail : support@circuitsathome.com
#include "cdcacm.h" #include "cdcacm.h"
#define PL_VID 0x067B #define PL_VID 0x067B
#define PL_PID ( 0x2303 || 0x0609 ) #define PL_PID ( 0x2303 || 0x0609 )
//#define PL_PID 0x0609 //#define PL_PID 0x0609
#define PROLIFIC_REV_H 0x0202 #define PROLIFIC_REV_H 0x0202
#define PROLIFIC_REV_X 0x0300 #define PROLIFIC_REV_X 0x0300
#define PROLIFIC_REV_HX_CHIP_D 0x0400 #define PROLIFIC_REV_HX_CHIP_D 0x0400
#define PROLIFIC_REV_1 0x0001 #define PROLIFIC_REV_1 0x0001
#define kXOnChar '\x11' #define kXOnChar '\x11'
#define kXOffChar '\x13' #define kXOffChar '\x13'
#define SPECIAL_SHIFT (5) #define SPECIAL_SHIFT (5)
#define SPECIAL_MASK ((1<<SPECIAL_SHIFT) - 1) #define SPECIAL_MASK ((1<<SPECIAL_SHIFT) - 1)
#define STATE_ALL ( PD_RS232_S_MASK | PD_S_MASK ) #define STATE_ALL ( PD_RS232_S_MASK | PD_S_MASK )
#define FLOW_RX_AUTO ( PD_RS232_A_RFR | PD_RS232_A_DTR | PD_RS232_A_RXO ) #define FLOW_RX_AUTO ( PD_RS232_A_RFR | PD_RS232_A_DTR | PD_RS232_A_RXO )
#define FLOW_TX_AUTO ( PD_RS232_A_CTS | PD_RS232_A_DSR | PD_RS232_A_TXO | PD_RS232_A_DCD ) #define FLOW_TX_AUTO ( PD_RS232_A_CTS | PD_RS232_A_DSR | PD_RS232_A_TXO | PD_RS232_A_DCD )
#define CAN_BE_AUTO ( FLOW_RX_AUTO | FLOW_TX_AUTO ) #define CAN_BE_AUTO ( FLOW_RX_AUTO | FLOW_TX_AUTO )
#define CAN_NOTIFY ( PD_RS232_N_MASK ) #define CAN_NOTIFY ( PD_RS232_N_MASK )
#define EXTERNAL_MASK ( PD_S_MASK | (PD_RS232_S_MASK & ~PD_RS232_S_LOOP) ) #define EXTERNAL_MASK ( PD_S_MASK | (PD_RS232_S_MASK & ~PD_RS232_S_LOOP) )
#define INTERNAL_DELAY ( PD_RS232_S_LOOP ) #define INTERNAL_DELAY ( PD_RS232_S_LOOP )
#define DEFAULT_AUTO ( PD_RS232_A_DTR | PD_RS232_A_RFR | PD_RS232_A_CTS | PD_RS232_A_DSR ) #define DEFAULT_AUTO ( PD_RS232_A_DTR | PD_RS232_A_RFR | PD_RS232_A_CTS | PD_RS232_A_DSR )
#define DEFAULT_NOTIFY 0x00 #define DEFAULT_NOTIFY 0x00
#define DEFAULT_STATE ( PD_S_TX_ENABLE | PD_S_RX_ENABLE | PD_RS232_A_TXO | PD_RS232_A_RXO ) #define DEFAULT_STATE ( PD_S_TX_ENABLE | PD_S_RX_ENABLE | PD_RS232_A_TXO | PD_RS232_A_RXO )
#define CONTINUE_SEND 1 #define CONTINUE_SEND 1
#define PAUSE_SEND 2 #define PAUSE_SEND 2
#define kRxAutoFlow ((UInt32)( PD_RS232_A_RFR | PD_RS232_A_DTR | PD_RS232_A_RXO )) #define kRxAutoFlow ((UInt32)( PD_RS232_A_RFR | PD_RS232_A_DTR | PD_RS232_A_RXO ))
#define kTxAutoFlow ((UInt32)( PD_RS232_A_CTS | PD_RS232_A_DSR | PD_RS232_A_TXO | PD_RS232_A_DCD )) #define kTxAutoFlow ((UInt32)( PD_RS232_A_CTS | PD_RS232_A_DSR | PD_RS232_A_TXO | PD_RS232_A_DCD ))
#define kControl_StateMask ((UInt32)( PD_RS232_S_CTS | PD_RS232_S_DSR | PD_RS232_S_CAR | PD_RS232_S_RI )) #define kControl_StateMask ((UInt32)( PD_RS232_S_CTS | PD_RS232_S_DSR | PD_RS232_S_CAR | PD_RS232_S_RI ))
#define kRxQueueState ((UInt32)( PD_S_RXQ_EMPTY | PD_S_RXQ_LOW_WATER | PD_S_RXQ_HIGH_WATER | PD_S_RXQ_FULL )) #define kRxQueueState ((UInt32)( PD_S_RXQ_EMPTY | PD_S_RXQ_LOW_WATER | PD_S_RXQ_HIGH_WATER | PD_S_RXQ_FULL ))
#define kTxQueueState ((UInt32)( PD_S_TXQ_EMPTY | PD_S_TXQ_LOW_WATER | PD_S_TXQ_HIGH_WATER | PD_S_TXQ_FULL )) #define kTxQueueState ((UInt32)( PD_S_TXQ_EMPTY | PD_S_TXQ_LOW_WATER | PD_S_TXQ_HIGH_WATER | PD_S_TXQ_FULL ))
#define kCONTROL_DTR 0x01 #define kCONTROL_DTR 0x01
#define kCONTROL_RTS 0x02 #define kCONTROL_RTS 0x02
enum tXO_State { #define kStateTransientMask 0x74
kXOnSent = -2, #define kBreakError 0x04
kXOffSent = -1, #define kFrameError 0x10
kXO_Idle = 0, #define kParityError 0x20
kXOffNeeded = 1, #define kOverrunError 0x40
kXOnNeeded = 2
};
#define kStateTransientMask 0x74 #define kCTS 0x80
#define kBreakError 0x04 #define kDSR 0x02
#define kFrameError 0x10 #define kRI 0x08
#define kParityError 0x20 #define kDCD 0x01
#define kOverrunError 0x40 #define kHandshakeInMask ((UInt32)( PD_RS232_S_CTS | PD_RS232_S_DSR | PD_RS232_S_CAR | PD_RS232_S_RI ))
#define kCTS 0x80 #define VENDOR_WRITE_REQUEST_TYPE 0x40
#define kDSR 0x02 #define VENDOR_WRITE_REQUEST 0x01
#define kRI 0x08
#define kDCD 0x01
#define kHandshakeInMask ((UInt32)( PD_RS232_S_CTS | PD_RS232_S_DSR | PD_RS232_S_CAR | PD_RS232_S_RI ))
#define VENDOR_WRITE_REQUEST_TYPE 0x40 #define VENDOR_READ_REQUEST_TYPE 0xc0
#define VENDOR_WRITE_REQUEST 0x01 #define VENDOR_READ_REQUEST 0x01
#define VENDOR_READ_REQUEST_TYPE 0xc0
#define VENDOR_READ_REQUEST 0x01
// Device Configuration Registers (DCR0, DCR1, DCR2) // Device Configuration Registers (DCR0, DCR1, DCR2)
#define SET_DCR0 0x00 #define SET_DCR0 0x00
@ -104,6 +96,17 @@ enum tXO_State {
#define RESET_DOWNSTREAM_DATA_PIPE 0x08 #define RESET_DOWNSTREAM_DATA_PIPE 0x08
#define RESET_UPSTREAM_DATA_PIPE 0x09 #define RESET_UPSTREAM_DATA_PIPE 0x09
#define PL_MAX_ENDPOINTS 4
enum tXO_State {
kXOnSent = -2,
kXOffSent = -1,
kXO_Idle = 0,
kXOffNeeded = 1,
kXOnNeeded = 2
};
enum pl2303_type { enum pl2303_type {
unknown, unknown,
type_1, /* don't know the difference between type 0 and */ type_1, /* don't know the difference between type 0 and */
@ -113,8 +116,6 @@ enum pl2303_type {
}; };
#define PL_MAX_ENDPOINTS 4
class PL2303 : public ACM { class PL2303 : public ACM {
uint16_t wPLType; // Type of chip uint16_t wPLType; // Type of chip
@ -122,7 +123,7 @@ public:
PL2303(USB *pusb, CDCAsyncOper *pasync); PL2303(USB *pusb, CDCAsyncOper *pasync);
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
//virtual uint8_t Release(); //virtual uint8_t Release();
//virtual uint8_t Poll(); //virtual uint8_t Poll();
//virtual uint8_t GetAddress() { return bAddress; }; //virtual uint8_t GetAddress() { return bAddress; };

View file

@ -24,7 +24,9 @@ class UsbConfigXtracter {
public: public:
//virtual void ConfigXtract(const USB_CONFIGURATION_DESCRIPTOR *conf) = 0; //virtual void ConfigXtract(const USB_CONFIGURATION_DESCRIPTOR *conf) = 0;
//virtual void InterfaceXtract(uint8_t conf, const USB_INTERFACE_DESCRIPTOR *iface) = 0; //virtual void InterfaceXtract(uint8_t conf, const USB_INTERFACE_DESCRIPTOR *iface) = 0;
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep) = 0;
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep) {
};
}; };
#define CP_MASK_COMPARE_CLASS 1 #define CP_MASK_COMPARE_CLASS 1
@ -63,7 +65,7 @@ public:
UseOr = true; UseOr = true;
} }
ConfigDescParser(UsbConfigXtracter *xtractor); ConfigDescParser(UsbConfigXtracter *xtractor);
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset); void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset);
}; };
template <const uint8_t CLASS_ID, const uint8_t SUBCLASS_ID, const uint8_t PROTOCOL_ID, const uint8_t MASK> template <const uint8_t CLASS_ID, const uint8_t SUBCLASS_ID, const uint8_t PROTOCOL_ID, const uint8_t MASK>

View file

@ -11,6 +11,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -30,7 +31,9 @@ MouseRptParser mousePrs;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); // Halt while (1); // Halt

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -19,12 +20,14 @@ BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
PS3BT PS3(&Btd); // This will just create the instance PS3BT PS3(&Btd); // This will just create the instance
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch //PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
boolean printTemperature; bool printTemperature;
boolean printAngle; bool printAngle;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -10,6 +10,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -18,8 +19,8 @@ USB Usb;
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
PS3BT *PS3[2]; // We will use this pointer to store the two instance, you can easily make it larger if you like, but it will use a lot of RAM! PS3BT *PS3[2]; // We will use this pointer to store the two instance, you can easily make it larger if you like, but it will use a lot of RAM!
const uint8_t length = sizeof(PS3) / sizeof(PS3[0]); // Get the lenght of the array const uint8_t length = sizeof(PS3) / sizeof(PS3[0]); // Get the lenght of the array
boolean printAngle[length]; bool printAngle[length];
boolean oldControllerState[length]; bool oldControllerState[length];
void setup() { void setup() {
for (uint8_t i = 0; i < length; i++) { for (uint8_t i = 0; i < length; i++) {
@ -28,7 +29,9 @@ void setup() {
} }
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -15,6 +15,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -28,12 +29,14 @@ SPP SerialBT(&Btd); // This will set the name to the defaults: "Arduino" and the
PS3BT PS3(&Btd); // This will just create the instance PS3BT PS3(&Btd); // This will just create the instance
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch //PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
boolean firstMessage = true; bool firstMessage = true;
String output = ""; // We will store the data in this string String output = ""; // We will store the data in this string
void setup() { void setup() {
Serial.begin(115200); // This wil lprint the debugging from the libraries Serial.begin(115200); // This wil lprint the debugging from the libraries
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -10,6 +10,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -24,12 +25,14 @@ PS4BT PS4(&Btd, PAIR);
// After that you can simply create the instance like so and then press the PS button on the device // After that you can simply create the instance like so and then press the PS button on the device
//PS4BT PS4(&Btd); //PS4BT PS4(&Btd);
boolean printAngle, printTouch; bool printAngle, printTouch;
uint8_t oldL2Value, oldR2Value; uint8_t oldL2Value, oldR2Value;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); // Halt while (1); // Halt

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -19,11 +20,13 @@ BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
SPP SerialBT(&Btd); // This will set the name to the defaults: "Arduino" and the pin to "0000" SPP SerialBT(&Btd); // This will set the name to the defaults: "Arduino" and the pin to "0000"
//SPP SerialBT(&Btd, "Lauszus's Arduino", "1234"); // You can also set the name and pin like so //SPP SerialBT(&Btd, "Lauszus's Arduino", "1234"); // You can also set the name and pin like so
boolean firstMessage = true; bool firstMessage = true;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -6,9 +6,10 @@
#include <SPP.h> #include <SPP.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statement in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -19,14 +20,16 @@ BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
const uint8_t length = 2; // Set the number of instances here const uint8_t length = 2; // Set the number of instances here
SPP *SerialBT[length]; // We will use this pointer to store the instances, you can easily make it larger if you like, but it will use a lot of RAM! SPP *SerialBT[length]; // We will use this pointer to store the instances, you can easily make it larger if you like, but it will use a lot of RAM!
boolean firstMessage[length] = { true }; // Set all to true bool firstMessage[length] = { true }; // Set all to true
void setup() { void setup() {
for (uint8_t i = 0; i < length; i++) for (uint8_t i = 0; i < length; i++)
SerialBT[i] = new SPP(&Btd); // This will set the name to the default: "Arduino" and the pin to "0000" for all connections SerialBT[i] = new SPP(&Btd); // This will set the name to the default: "Arduino" and the pin to "0000" for all connections
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); // Halt while (1); // Halt

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -23,7 +24,9 @@ bool printAngle;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -16,6 +16,7 @@ Otherwise, wire up a IR LED yourself.
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
#ifndef WIICAMERA // Used to check if WIICAMERA is defined #ifndef WIICAMERA // Used to check if WIICAMERA is defined
@ -35,7 +36,9 @@ uint8_t printObjects;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -10,6 +10,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -18,8 +19,8 @@ USB Usb;
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
WII *Wii[2]; // We will use this pointer to store the two instance, you can easily make it larger if you like, but it will use a lot of RAM! WII *Wii[2]; // We will use this pointer to store the two instance, you can easily make it larger if you like, but it will use a lot of RAM!
const uint8_t length = sizeof(Wii) / sizeof(Wii[0]); // Get the lenght of the array const uint8_t length = sizeof(Wii) / sizeof(Wii[0]); // Get the lenght of the array
boolean printAngle[length]; bool printAngle[length];
boolean oldControllerState[length]; bool oldControllerState[length];
void setup() { void setup() {
for (uint8_t i = 0; i < length; i++) { for (uint8_t i = 0; i < length; i++) {
@ -28,7 +29,9 @@ void setup() {
} }
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -21,7 +22,9 @@ WII Wii(&Btd, PAIR); // This will start an inquiry and then pair with your Wiimo
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -3,6 +3,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class KbdRptParser : public KeyboardReportParser class KbdRptParser : public KeyboardReportParser
@ -10,11 +11,11 @@ class KbdRptParser : public KeyboardReportParser
void PrintKey(uint8_t mod, uint8_t key); void PrintKey(uint8_t mod, uint8_t key);
protected: protected:
virtual void OnControlKeysChanged(uint8_t before, uint8_t after); void OnControlKeysChanged(uint8_t before, uint8_t after);
virtual void OnKeyDown (uint8_t mod, uint8_t key); void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyUp (uint8_t mod, uint8_t key); void OnKeyUp (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key); void OnKeyPressed(uint8_t key);
}; };
void KbdRptParser::PrintKey(uint8_t m, uint8_t key) void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
@ -105,7 +106,9 @@ KbdRptParser Prs;
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -1,16 +1,21 @@
#include <hidboot.h> #include <hidboot.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
class MouseRptParser : public MouseReportParser class MouseRptParser : public MouseReportParser
{ {
protected: protected:
virtual void OnMouseMove (MOUSEINFO *mi); void OnMouseMove(MOUSEINFO *mi);
virtual void OnLeftButtonUp (MOUSEINFO *mi); void OnLeftButtonUp(MOUSEINFO *mi);
virtual void OnLeftButtonDown (MOUSEINFO *mi); void OnLeftButtonDown(MOUSEINFO *mi);
virtual void OnRightButtonUp (MOUSEINFO *mi); void OnRightButtonUp(MOUSEINFO *mi);
virtual void OnRightButtonDown (MOUSEINFO *mi); void OnRightButtonDown(MOUSEINFO *mi);
virtual void OnMiddleButtonUp (MOUSEINFO *mi); void OnMiddleButtonUp(MOUSEINFO *mi);
virtual void OnMiddleButtonDown (MOUSEINFO *mi); void OnMiddleButtonDown(MOUSEINFO *mi);
}; };
void MouseRptParser::OnMouseMove(MOUSEINFO *mi) void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{ {
@ -49,11 +54,10 @@ class KbdRptParser : public KeyboardReportParser
void PrintKey(uint8_t mod, uint8_t key); void PrintKey(uint8_t mod, uint8_t key);
protected: protected:
virtual void OnControlKeysChanged(uint8_t before, uint8_t after); void OnControlKeysChanged(uint8_t before, uint8_t after);
void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyDown (uint8_t mod, uint8_t key); void OnKeyUp (uint8_t mod, uint8_t key);
virtual void OnKeyUp (uint8_t mod, uint8_t key); void OnKeyPressed(uint8_t key);
virtual void OnKeyPressed(uint8_t key);
}; };
void KbdRptParser::PrintKey(uint8_t m, uint8_t key) void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
@ -148,7 +152,9 @@ MouseRptParser MousePrs;
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -3,18 +3,19 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class MouseRptParser : public MouseReportParser class MouseRptParser : public MouseReportParser
{ {
protected: protected:
virtual void OnMouseMove (MOUSEINFO *mi); void OnMouseMove (MOUSEINFO *mi);
virtual void OnLeftButtonUp (MOUSEINFO *mi); void OnLeftButtonUp (MOUSEINFO *mi);
virtual void OnLeftButtonDown (MOUSEINFO *mi); void OnLeftButtonDown (MOUSEINFO *mi);
virtual void OnRightButtonUp (MOUSEINFO *mi); void OnRightButtonUp (MOUSEINFO *mi);
virtual void OnRightButtonDown (MOUSEINFO *mi); void OnRightButtonDown (MOUSEINFO *mi);
virtual void OnMiddleButtonUp (MOUSEINFO *mi); void OnMiddleButtonUp (MOUSEINFO *mi);
virtual void OnMiddleButtonDown (MOUSEINFO *mi); void OnMiddleButtonDown (MOUSEINFO *mi);
}; };
void MouseRptParser::OnMouseMove(MOUSEINFO *mi) void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{ {
@ -59,7 +60,9 @@ MouseRptParser Prs;
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -1,6 +1,11 @@
#include <hid.h> #include <hid.h>
#include <hiduniversal.h> #include <hiduniversal.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
#include "hidjoystickrptparser.h" #include "hidjoystickrptparser.h"
@ -12,7 +17,9 @@ JoystickReportParser Joy(&JoyEvents);
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -6,6 +6,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class HIDUniversal2 : public HIDUniversal class HIDUniversal2 : public HIDUniversal
@ -14,7 +15,7 @@ public:
HIDUniversal2(USB *usb) : HIDUniversal(usb) {}; HIDUniversal2(USB *usb) : HIDUniversal(usb) {};
protected: protected:
virtual uint8_t OnInitSuccessful(); uint8_t OnInitSuccessful();
}; };
uint8_t HIDUniversal2::OnInitSuccessful() uint8_t HIDUniversal2::OnInitSuccessful()
@ -54,7 +55,9 @@ UniversalReportParser Uni;
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -8,6 +8,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -19,7 +20,9 @@ JoystickReportParser Joy(&JoyEvents);
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -21,7 +22,9 @@ ScaleReportParser Scale(&ScaleEvents);
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -1,7 +1,7 @@
#if !defined(__SCALERPTPARSER_H__) #if !defined(__SCALERPTPARSER_H__)
#define __SCALERPTPARSER_H__ #define __SCALERPTPARSER_H__
#include <Max_LCD.h> #include <max_LCD.h>
#include <hid.h> #include <hid.h>
/* Scale status constants */ /* Scale status constants */
@ -19,22 +19,22 @@ struct ScaleEventData
{ {
uint8_t reportID; //must be 3 uint8_t reportID; //must be 3
uint8_t status; uint8_t status;
uint8_t unit; uint8_t unit;
int8_t exp; //scale factor for the weight int8_t exp; //scale factor for the weight
uint16_t weight; // uint16_t weight; //
}; };
class ScaleEvents class ScaleEvents
{ {
Max_LCD* pLcd; Max_LCD* pLcd;
void LcdPrint( const char* str ); void LcdPrint( const char* str );
public: public:
ScaleEvents( Max_LCD* pLCD ); ScaleEvents( Max_LCD* pLCD );
virtual void OnScaleChanged(const ScaleEventData *evt); virtual void OnScaleChanged(const ScaleEventData *evt);
}; };

View file

@ -8,6 +8,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -15,12 +16,14 @@ USB Usb;
PS3USB PS3(&Usb); // This will just create the instance PS3USB PS3(&Usb); // This will just create the instance
//PS3USB PS3(&Usb,0x00,0x15,0x83,0x3D,0x0A,0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch //PS3USB PS3(&Usb,0x00,0x15,0x83,0x3D,0x0A,0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
boolean printAngle; bool printAngle;
uint8_t state = 0; uint8_t state = 0;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -9,17 +9,20 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
PS4USB PS4(&Usb); PS4USB PS4(&Usb);
boolean printAngle, printTouch; bool printAngle, printTouch;
uint8_t oldL2Value, oldR2Value; uint8_t oldL2Value, oldR2Value;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); // Halt while (1); // Halt

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -16,7 +17,9 @@ PSBuzz Buzz(&Usb);
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); // Halt while (1); // Halt

View file

@ -4,6 +4,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -49,7 +50,9 @@ void PrintAddress(uint8_t addr)
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)
@ -336,7 +339,7 @@ void printunkdescr( uint8_t* descr_ptr )
/* Print a string from Program Memory directly to save RAM */ /* Print a string from Program Memory directly to save RAM */
void printProgStr(const prog_char str[]) void printProgStr(prog_char str[])
{ {
char c; char c;
if(!str) return; if(!str) return;

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -17,7 +18,9 @@ XBOXOLD Xbox(&Usb);
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); // halt while (1); // halt

View file

@ -9,6 +9,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -16,7 +17,9 @@ XBOXRECV Xbox(&Usb);
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -8,6 +8,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -15,7 +16,9 @@ XBOXUSB Xbox(&Usb);
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start")); Serial.print(F("\r\nOSC did not start"));
while (1); //halt while (1); //halt

View file

@ -6,12 +6,13 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class ACMAsyncOper : public CDCAsyncOper class ACMAsyncOper : public CDCAsyncOper
{ {
public: public:
virtual uint8_t OnInit(ACM *pacm); uint8_t OnInit(ACM *pacm);
}; };
uint8_t ACMAsyncOper::OnInit(ACM *pacm) uint8_t ACMAsyncOper::OnInit(ACM *pacm)
@ -48,7 +49,9 @@ ACM Acm(&Usb, &AsyncOper);
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -2,6 +2,27 @@
// The code for the Android application is heavily based on this guide: http://allaboutee.com/2011/12/31/arduino-adk-board-blink-an-led-with-your-phone-code-and-explanation/ by Miguel // The code for the Android application is heavily based on this guide: http://allaboutee.com/2011/12/31/arduino-adk-board-blink-an-led-with-your-phone-code-and-explanation/ by Miguel
#include <adk.h> #include <adk.h>
//
// CAUTION! WARNING! ATTENTION! VORSICHT! ADVARSEL! ¡CUIDADO! ВНИМАНИЕ!
//
// Pin 13 is occupied by the SCK pin on various Arduino boards,
// including Uno, Duemilanove, etc., so use a different pin for those boards.
//
// CAUTION! WARNING! ATTENTION! VORSICHT! ADVARSEL! ¡CUIDADO! ВНИМАНИЕ!
//
#if defined(LED_BUILTIN)
#define LED LED_BUILTIN // Use built in LED
#else
#define LED 9 // Set to something here that makes sense for your board.
#endif
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb; USB Usb;
ADK adk(&Usb, "TKJElectronics", // Manufacturer Name ADK adk(&Usb, "TKJElectronics", // Manufacturer Name
"ArduinoBlinkLED", // Model Name "ArduinoBlinkLED", // Model Name
@ -10,14 +31,14 @@ ADK adk(&Usb, "TKJElectronics", // Manufacturer Name
"http://www.tkjelectronics.dk/uploads/ArduinoBlinkLED.apk", // URL (web page to visit if no installed apps support the accessory) "http://www.tkjelectronics.dk/uploads/ArduinoBlinkLED.apk", // URL (web page to visit if no installed apps support the accessory)
"123456789"); // Serial Number (optional) "123456789"); // Serial Number (optional)
#define LED LED_BUILTIN // Use built in LED - note that pin 13 is occupied by the SCK pin on a normal Arduino (Uno, Duemilanove etc.), so use a different pin
uint32_t timer; uint32_t timer;
boolean connected; bool connected;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.print("\r\nOSCOKIRQ failed to assert"); Serial.print("\r\nOSCOKIRQ failed to assert");
while (1); // halt while (1); // halt

View file

@ -4,10 +4,15 @@
#include <adk.h> #include <adk.h>
#include <hidboot.h> #include <hidboot.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb; USB Usb;
USBHub Hub1(&Usb); USBHub Hub1(&Usb);
USBHub Hub2(&Usb); USBHub Hub2(&Usb);
HIDBoot<HID_PROTOCOL_KEYBOARD> Keyboard(&Usb); HIDBoot<HID_PROTOCOL_KEYBOARD> Keyboard(&Usb);
ADK adk(&Usb,"Circuits@Home, ltd.", ADK adk(&Usb,"Circuits@Home, ltd.",
@ -20,22 +25,22 @@ ADK adk(&Usb,"Circuits@Home, ltd.",
class KbdRptParser : public KeyboardReportParser class KbdRptParser : public KeyboardReportParser
{ {
protected: protected:
virtual void OnKeyDown (uint8_t mod, uint8_t key); void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key); void OnKeyPressed(uint8_t key);
}; };
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key) void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{ {
uint8_t c = OemToAscii(mod, key); uint8_t c = OemToAscii(mod, key);
if (c) if (c)
OnKeyPressed(c); OnKeyPressed(c);
} }
/* what to do when symbol arrives */ /* what to do when symbol arrives */
void KbdRptParser::OnKeyPressed(uint8_t key) void KbdRptParser::OnKeyPressed(uint8_t key)
{ {
const char* new_line = "\n"; const char* new_line = "\n";
uint8_t rcode; uint8_t rcode;
@ -44,36 +49,38 @@ uint8_t keylcl;
if( adk.isReady() == false ) { if( adk.isReady() == false ) {
return; return;
} }
keylcl = key; keylcl = key;
if( keylcl == 0x13 ) { if( keylcl == 0x13 ) {
rcode = adk.SndData( strlen( new_line ), (uint8_t *)new_line ); rcode = adk.SndData( strlen( new_line ), (uint8_t *)new_line );
} }
else { else {
rcode = adk.SndData( 1, &keylcl ); rcode = adk.SndData( 1, &keylcl );
} }
Serial.print((char) keylcl ); Serial.print((char) keylcl );
Serial.print(" : "); Serial.print(" : ");
Serial.println( keylcl, HEX ); Serial.println( keylcl, HEX );
}; };
KbdRptParser Prs; KbdRptParser Prs;
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("\r\nADK demo start"); Serial.println("\r\nADK demo start");
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert"); Serial.println("OSCOKIRQ failed to assert");
while(1); //halt while(1); //halt
}//if (Usb.Init() == -1... }//if (Usb.Init() == -1...
Keyboard.SetReportParser(0, (HIDReportParser*)&Prs); Keyboard.SetReportParser(0, (HIDReportParser*)&Prs);
delay( 200 ); delay( 200 );
} }

View file

@ -1,5 +1,10 @@
#include <adk.h> #include <adk.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb; USB Usb;
USBHub hub0(&Usb); USBHub hub0(&Usb);
@ -16,9 +21,6 @@ uint8_t b, b1;
#define LED1_RED 3 #define LED1_RED 3
#define BUTTON1 2 #define BUTTON1 2
void setup();
void loop();
void init_buttons() void init_buttons()
{ {
pinMode(BUTTON1, INPUT); pinMode(BUTTON1, INPUT);
@ -37,9 +39,11 @@ void init_leds()
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("\r\nADK demo start"); Serial.println("\r\nADK demo start");
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert"); Serial.println("OSCOKIRQ failed to assert");
while(1); //halt while(1); //halt
@ -56,17 +60,17 @@ void loop()
uint8_t rcode; uint8_t rcode;
uint8_t msg[3] = { 0x00 }; uint8_t msg[3] = { 0x00 };
Usb.Task(); Usb.Task();
if( adk.isReady() == false ) { if( adk.isReady() == false ) {
analogWrite(LED1_RED, 255); analogWrite(LED1_RED, 255);
return; return;
} }
uint16_t len = sizeof(msg); uint16_t len = sizeof(msg);
rcode = adk.RcvData(&len, msg); rcode = adk.RcvData(&len, msg);
if( rcode ) { if( rcode ) {
USBTRACE2("Data rcv. :", rcode ); USBTRACE2("Data rcv. :", rcode );
} }
if(len > 0) { if(len > 0) {
USBTRACE("\r\nData Packet."); USBTRACE("\r\nData Packet.");
// assumes only one command per packet // assumes only one command per packet
@ -75,10 +79,10 @@ void loop()
case 0: case 0:
analogWrite(LED1_RED, 255 - msg[2]); analogWrite(LED1_RED, 255 - msg[2]);
break; break;
}//switch( msg[1]... }//switch( msg[1]...
}//if (msg[0] == 0x2... }//if (msg[0] == 0x2...
}//if( len > 0... }//if( len > 0...
msg[0] = 0x1; msg[0] = 0x1;
b = digitalRead(BUTTON1); b = digitalRead(BUTTON1);
@ -94,5 +98,5 @@ void loop()
}//if (b != b1... }//if (b != b1...
delay( 10 ); delay( 10 );
} }

View file

@ -1,5 +1,10 @@
#include <adk.h> #include <adk.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb; USB Usb;
//USBHub Hub(&Usb); //USBHub Hub(&Usb);
@ -14,9 +19,11 @@ ADK adk(&Usb,"Circuits@Home, ltd.",
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("\r\nADK demo start"); Serial.println("\r\nADK demo start");
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert"); Serial.println("OSCOKIRQ failed to assert");
while(1); //halt while(1); //halt
@ -27,31 +34,31 @@ void loop()
{ {
uint8_t rcode; uint8_t rcode;
uint8_t msg[64] = { 0x00 }; uint8_t msg[64] = { 0x00 };
const char* recv = "Received: "; const char* recv = "Received: ";
Usb.Task(); Usb.Task();
if( adk.isReady() == false ) { if( adk.isReady() == false ) {
return; return;
} }
uint16_t len = 64; uint16_t len = 64;
rcode = adk.RcvData(&len, msg); rcode = adk.RcvData(&len, msg);
if( rcode & ( rcode != hrNAK )) { if( rcode & ( rcode != hrNAK )) {
USBTRACE2("Data rcv. :", rcode ); USBTRACE2("Data rcv. :", rcode );
} }
if(len > 0) { if(len > 0) {
USBTRACE("\r\nData Packet."); USBTRACE("\r\nData Packet.");
for( uint8_t i = 0; i < len; i++ ) { for( uint8_t i = 0; i < len; i++ ) {
Serial.print((char)msg[i]); Serial.print((char)msg[i]);
} }
/* sending back what was received */ /* sending back what was received */
rcode = adk.SndData( strlen( recv ), (uint8_t *)recv ); rcode = adk.SndData( strlen( recv ), (uint8_t *)recv );
rcode = adk.SndData( strlen(( char * )msg ), msg ); rcode = adk.SndData( strlen(( char * )msg ), msg );
}//if( len > 0 )... }//if( len > 0 )...
delay( 1000 ); delay( 1000 );
} }

View file

@ -1,5 +1,10 @@
#include <adk.h> #include <adk.h>
#include <usbhub.h> #include <usbhub.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb; USB Usb;
@ -13,9 +18,11 @@ ADK adk(&Usb,"Circuits@Home, ltd.",
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("\r\nADK demo start"); Serial.println("\r\nADK demo start");
if (Usb.Init() == -1) { if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert"); Serial.println("OSCOKIRQ failed to assert");
while(1); //halt while(1); //halt
@ -27,16 +34,16 @@ void loop()
uint8_t buf[ 12 ] = { 0 }; //buffer to convert unsigned long to ASCII uint8_t buf[ 12 ] = { 0 }; //buffer to convert unsigned long to ASCII
const char* sec_ela = " seconds elapsed\r"; const char* sec_ela = " seconds elapsed\r";
uint8_t rcode; uint8_t rcode;
Usb.Task(); Usb.Task();
if( adk.isReady() == false ) { if( adk.isReady() == false ) {
return; return;
} }
ultoa( millis()/1000, (char *)buf, 10 ); ultoa( millis()/1000, (char *)buf, 10 );
rcode = adk.SndData( strlen((char *)buf), buf ); rcode = adk.SndData( strlen((char *)buf), buf );
rcode = adk.SndData( strlen( sec_ela), (uint8_t *)sec_ela ); rcode = adk.SndData( strlen( sec_ela), (uint8_t *)sec_ela );
delay( 1000 ); delay( 1000 );
} }

View file

@ -7,6 +7,8 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <../../../../hardware/pic32/libraries/SPI/SPI.h> // Hack to use the SPI library
#include <SPI.h> // Hack to use the SPI library
#endif #endif
/* variables */ /* variables */
@ -23,7 +25,9 @@ USB Usb;
void setup() { void setup() {
laststate = 0; laststate = 0;
Serial.begin(115200); Serial.begin(115200);
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #if !defined(__MIPSEL__)
while(!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
E_Notify(PSTR("\r\nCircuits At Home 2011"), 0x80); E_Notify(PSTR("\r\nCircuits At Home 2011"), 0x80);
E_Notify(PSTR("\r\nUSB Host Shield Quality Control Routine"), 0x80); E_Notify(PSTR("\r\nUSB Host Shield Quality Control Routine"), 0x80);
/* SPI quick test - check revision register */ /* SPI quick test - check revision register */
@ -31,7 +35,7 @@ void setup() {
Usb.Init(); // Initializes SPI, we don't care about the return value here Usb.Init(); // Initializes SPI, we don't care about the return value here
{ {
uint8_t tmpbyte = Usb.regRd(rREVISION); uint8_t tmpbyte = Usb.regRd(rREVISION);
switch (tmpbyte) { switch(tmpbyte) {
case( 0x01): //rev.01 case( 0x01): //rev.01
E_Notify(PSTR("01"), 0x80); E_Notify(PSTR("01"), 0x80);
break; break;
@ -54,11 +58,11 @@ void setup() {
uint8_t sample_wr = 0; uint8_t sample_wr = 0;
uint8_t sample_rd = 0; uint8_t sample_rd = 0;
uint8_t gpinpol_copy = Usb.regRd(rGPINPOL); uint8_t gpinpol_copy = Usb.regRd(rGPINPOL);
for (uint8_t i = 0; i < 16; i++) { for(uint8_t i = 0; i < 16; i++) {
for (uint16_t j = 0; j < 65535; j++) { for(uint16_t j = 0; j < 65535; j++) {
Usb.regWr(rGPINPOL, sample_wr); Usb.regWr(rGPINPOL, sample_wr);
sample_rd = Usb.regRd(rGPINPOL); sample_rd = Usb.regRd(rGPINPOL);
if (sample_rd != sample_wr) { if(sample_rd != sample_wr) {
E_Notify(PSTR("\r\nTest failed. "), 0x80); E_Notify(PSTR("\r\nTest failed. "), 0x80);
E_Notify(PSTR("Value written: "), 0x80); E_Notify(PSTR("Value written: "), 0x80);
print_hex(sample_wr, 8); print_hex(sample_wr, 8);
@ -79,12 +83,12 @@ void setup() {
{ {
uint8_t tmpbyte; uint8_t tmpbyte;
E_Notify(PSTR("\r\nGPIO test. Connect GPIN0 to GPOUT7, GPIN1 to GPOUT6, and so on"), 0x80); E_Notify(PSTR("\r\nGPIO test. Connect GPIN0 to GPOUT7, GPIN1 to GPOUT6, and so on"), 0x80);
for (uint8_t sample_gpio = 0; sample_gpio < 255; sample_gpio++) { for(uint8_t sample_gpio = 0; sample_gpio < 255; sample_gpio++) {
Usb.gpioWr(sample_gpio); Usb.gpioWr(sample_gpio);
tmpbyte = Usb.gpioRd(); tmpbyte = Usb.gpioRd();
/* bit reversing code copied vetbatim from http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious */ /* bit reversing code copied vetbatim from http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious */
tmpbyte = ((tmpbyte * 0x0802LU & 0x22110LU) | (tmpbyte * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16; tmpbyte = ((tmpbyte * 0x0802LU & 0x22110LU) | (tmpbyte * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
if (sample_gpio != tmpbyte) { if(sample_gpio != tmpbyte) {
E_Notify(PSTR("\r\nTest failed. Value written: "), 0x80); E_Notify(PSTR("\r\nTest failed. Value written: "), 0x80);
print_hex(sample_gpio, 8); print_hex(sample_gpio, 8);
E_Notify(PSTR(" Value read: "), 0x80); E_Notify(PSTR(" Value read: "), 0x80);
@ -100,31 +104,31 @@ void setup() {
{ {
E_Notify(PSTR("\r\nPLL test. 100 chip resets will be performed"), 0x80); E_Notify(PSTR("\r\nPLL test. 100 chip resets will be performed"), 0x80);
/* check current state of the oscillator */ /* check current state of the oscillator */
if (!(Usb.regRd(rUSBIRQ) & bmOSCOKIRQ)) { //wrong state - should be on if(!(Usb.regRd(rUSBIRQ) & bmOSCOKIRQ)) { //wrong state - should be on
E_Notify(PSTR("\r\nCurrent oscillator state unexpected."), 0x80); E_Notify(PSTR("\r\nCurrent oscillator state unexpected."), 0x80);
press_any_key(); press_any_key();
} }
/* Restart oscillator */ /* Restart oscillator */
E_Notify(PSTR("\r\nResetting oscillator\r\n"), 0x80); E_Notify(PSTR("\r\nResetting oscillator\r\n"), 0x80);
for (uint16_t i = 0; i < 100; i++) { for(uint16_t i = 0; i < 100; i++) {
E_Notify(PSTR("\rReset number "), 0x80); E_Notify(PSTR("\rReset number "), 0x80);
Serial.print(i, DEC); Serial.print(i, DEC);
Usb.regWr(rUSBCTL, bmCHIPRES); //reset Usb.regWr(rUSBCTL, bmCHIPRES); //reset
if (Usb.regRd(rUSBIRQ) & bmOSCOKIRQ) { //wrong state - should be off if(Usb.regRd(rUSBIRQ) & bmOSCOKIRQ) { //wrong state - should be off
E_Notify(PSTR("\r\nCurrent oscillator state unexpected."), 0x80); E_Notify(PSTR("\r\nCurrent oscillator state unexpected."), 0x80);
halt55(); halt55();
} }
Usb.regWr(rUSBCTL, 0x00); //release from reset Usb.regWr(rUSBCTL, 0x00); //release from reset
uint16_t j = 0; uint16_t j = 0;
for (j = 0; j < 65535; j++) { //tracking off to on time for(j = 0; j < 65535; j++) { //tracking off to on time
if (Usb.regRd(rUSBIRQ) & bmOSCOKIRQ) { if(Usb.regRd(rUSBIRQ) & bmOSCOKIRQ) {
E_Notify(PSTR(" Time to stabilize - "), 0x80); E_Notify(PSTR(" Time to stabilize - "), 0x80);
Serial.print(j, DEC); Serial.print(j, DEC);
E_Notify(PSTR(" cycles\r\n"), 0x80); E_Notify(PSTR(" cycles\r\n"), 0x80);
break; break;
} }
}//for( uint16_t j = 0; j < 65535; j++ }//for( uint16_t j = 0; j < 65535; j++
if (j == 0) { if(j == 0) {
E_Notify(PSTR("PLL failed to stabilize"), 0x80); E_Notify(PSTR("PLL failed to stabilize"), 0x80);
press_any_key(); press_any_key();
} }
@ -132,7 +136,7 @@ void setup() {
}//PLL test }//PLL test
/* initializing USB stack */ /* initializing USB stack */
if (Usb.Init() == -1) { if(Usb.Init() == -1) {
E_Notify(PSTR("\r\nOSCOKIRQ failed to assert"), 0x80); E_Notify(PSTR("\r\nOSCOKIRQ failed to assert"), 0x80);
halt55(); halt55();
} }
@ -143,10 +147,10 @@ void loop() {
delay(200); delay(200);
Usb.Task(); Usb.Task();
usbstate = Usb.getUsbTaskState(); usbstate = Usb.getUsbTaskState();
if (usbstate != laststate) { if(usbstate != laststate) {
laststate = usbstate; laststate = usbstate;
/**/ /**/
switch (usbstate) { switch(usbstate) {
case( USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE): case( USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE):
E_Notify(PSTR("\r\nWaiting for device..."), 0x80); E_Notify(PSTR("\r\nWaiting for device..."), 0x80);
break; break;
@ -166,7 +170,7 @@ void loop() {
E_Notify(PSTR("\r\nGetting device descriptor"), 0x80); E_Notify(PSTR("\r\nGetting device descriptor"), 0x80);
rcode = Usb.getDevDescr(1, 0, sizeof (USB_DEVICE_DESCRIPTOR), (uint8_t*) & buf); rcode = Usb.getDevDescr(1, 0, sizeof (USB_DEVICE_DESCRIPTOR), (uint8_t*) & buf);
if (rcode) { if(rcode) {
E_Notify(PSTR("\r\nError reading device descriptor. Error code "), 0x80); E_Notify(PSTR("\r\nError reading device descriptor. Error code "), 0x80);
print_hex(rcode, 8); print_hex(rcode, 8);
} else { } else {
@ -201,7 +205,7 @@ void loop() {
print_hex(buf.bNumConfigurations, 8); print_hex(buf.bNumConfigurations, 8);
/**/ /**/
E_Notify(PSTR("\r\n\nAll tests passed. Press RESET to restart test"), 0x80); E_Notify(PSTR("\r\n\nAll tests passed. Press RESET to restart test"), 0x80);
while (1); while(1);
} }
break; break;
case( USB_STATE_ERROR): case( USB_STATE_ERROR):
@ -221,7 +225,7 @@ void halt55() {
E_Notify(PSTR("\r\n0x55 pattern is transmitted via SPI"), 0x80); E_Notify(PSTR("\r\n0x55 pattern is transmitted via SPI"), 0x80);
E_Notify(PSTR("\r\nPress RESET to restart test"), 0x80); E_Notify(PSTR("\r\nPress RESET to restart test"), 0x80);
while (1) { while(1) {
Usb.regWr(0x55, 0x55); Usb.regWr(0x55, 0x55);
} }
} }
@ -230,25 +234,25 @@ void halt55() {
void print_hex(int v, int num_places) { void print_hex(int v, int num_places) {
int mask = 0, n, num_nibbles, digit; int mask = 0, n, num_nibbles, digit;
for (n = 1; n <= num_places; n++) { for(n = 1; n <= num_places; n++) {
mask = (mask << 1) | 0x0001; mask = (mask << 1) | 0x0001;
} }
v = v & mask; // truncate v to specified number of places v = v & mask; // truncate v to specified number of places
num_nibbles = num_places / 4; num_nibbles = num_places / 4;
if ((num_places % 4) != 0) { if((num_places % 4) != 0) {
++num_nibbles; ++num_nibbles;
} }
do { do {
digit = ((v >> (num_nibbles - 1) * 4)) & 0x0f; digit = ((v >> (num_nibbles - 1) * 4)) & 0x0f;
Serial.print(digit, HEX); Serial.print(digit, HEX);
} while (--num_nibbles); } while(--num_nibbles);
} }
/* prints "Press any key" and returns when key is pressed */ /* prints "Press any key" and returns when key is pressed */
void press_any_key() { void press_any_key() {
E_Notify(PSTR("\r\nPress any key to continue..."), 0x80); E_Notify(PSTR("\r\nPress any key to continue..."), 0x80);
while (Serial.available() <= 0); //wait for input while(Serial.available() <= 0); //wait for input
Serial.read(); //empty input buffer Serial.read(); //empty input buffer
return; return;
} }

View file

@ -5,13 +5,13 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class FTDIAsync : public FTDIAsyncOper class FTDIAsync : public FTDIAsyncOper
{ {
public: public:
virtual uint8_t OnInit(FTDI *pftdi); uint8_t OnInit(FTDI *pftdi);
virtual uint8_t OnRelease(FTDI *pftdi) {};
}; };
uint8_t FTDIAsync::OnInit(FTDI *pftdi) uint8_t FTDIAsync::OnInit(FTDI *pftdi)
@ -43,7 +43,9 @@ uint32_t next_time;
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -3,6 +3,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
USB Usb; USB Usb;
@ -45,7 +46,9 @@ void PrintAddress(uint8_t addr)
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)
@ -332,7 +335,7 @@ void printunkdescr( uint8_t* descr_ptr )
/* Print a string from Program Memory directly to save RAM */ /* Print a string from Program Memory directly to save RAM */
void printProgStr(const prog_char str[]) void printProgStr(prog_char str[])
{ {
char c; char c;
if(!str) return; if(!str) return;

View file

@ -4,6 +4,11 @@
// pinout: D[4-7] -> GPOUT[4-7], RS-> GPOUT[2], E ->GPOUT[3] // pinout: D[4-7] -> GPOUT[4-7], RS-> GPOUT[2], E ->GPOUT[3]
#include <max_LCD.h> #include <max_LCD.h>
// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb; USB Usb;
Max_LCD lcd(&Usb); Max_LCD lcd(&Usb);

View file

@ -7,12 +7,13 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class PLAsyncOper : public CDCAsyncOper class PLAsyncOper : public CDCAsyncOper
{ {
public: public:
virtual uint8_t OnInit(ACM *pacm); uint8_t OnInit(ACM *pacm);
}; };
uint8_t PLAsyncOper::OnInit(ACM *pacm) uint8_t PLAsyncOper::OnInit(ACM *pacm)
@ -50,7 +51,9 @@ PL2303 Pl(&Usb, &AsyncOper);
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -8,11 +8,12 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class PLAsyncOper : public CDCAsyncOper { class PLAsyncOper : public CDCAsyncOper {
public: public:
virtual uint8_t OnInit(ACM *pacm); uint8_t OnInit(ACM *pacm);
}; };
uint8_t PLAsyncOper::OnInit(ACM *pacm) { uint8_t PLAsyncOper::OnInit(ACM *pacm) {
@ -49,7 +50,9 @@ uint32_t read_delay;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
while(!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if(Usb.Init() == -1) if(Usb.Init() == -1)

View file

@ -14,6 +14,7 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
/* This sample code demonstrates the normal use of a TinyGPS object. /* This sample code demonstrates the normal use of a TinyGPS object.
@ -24,7 +25,7 @@
class PLAsyncOper : public CDCAsyncOper class PLAsyncOper : public CDCAsyncOper
{ {
public: public:
virtual uint8_t OnInit(ACM *pacm); uint8_t OnInit(ACM *pacm);
}; };
uint8_t PLAsyncOper::OnInit(ACM *pacm) uint8_t PLAsyncOper::OnInit(ACM *pacm)
@ -68,7 +69,9 @@ void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version()); Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart"); Serial.println("by Mikal Hart");

View file

@ -8,12 +8,13 @@
// Satisfy IDE, which only needs to see the include statment in the ino. // Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude #ifdef dobogusinclude
#include <spi4teensy3.h> #include <spi4teensy3.h>
#include <SPI.h>
#endif #endif
class PLAsyncOper : public CDCAsyncOper class PLAsyncOper : public CDCAsyncOper
{ {
public: public:
virtual uint8_t OnInit(ACM *pacm); uint8_t OnInit(ACM *pacm);
}; };
uint8_t PLAsyncOper::OnInit(ACM *pacm) uint8_t PLAsyncOper::OnInit(ACM *pacm)
@ -50,7 +51,9 @@ PL2303 Pl(&Usb, &AsyncOper);
void setup() void setup()
{ {
Serial.begin( 115200 ); Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start"); Serial.println("Start");
if (Usb.Init() == -1) if (Usb.Init() == -1)

View file

@ -80,14 +80,14 @@ USB Usb;
volatile uint8_t current_state = 1; volatile uint8_t current_state = 1;
volatile uint8_t last_state = 0; volatile uint8_t last_state = 0;
volatile boolean fatready = false; volatile bool fatready = false;
volatile boolean partsready = false; volatile bool partsready = false;
volatile boolean notified = false; volatile bool notified = false;
volatile boolean runtest = false; volatile bool runtest = false;
volatile boolean usbon = false; volatile bool usbon = false;
volatile uint32_t usbon_time; volatile uint32_t usbon_time;
volatile boolean change = false; volatile bool change = false;
volatile boolean reportlvl = false; volatile bool reportlvl = false;
int cpart = 0; int cpart = 0;
PCPartition *PT; PCPartition *PT;
@ -178,7 +178,7 @@ extern "C" {
#endif #endif
void setup() { void setup() {
boolean serr = false; bool serr = false;
for(int i = 0; i < _VOLUMES; i++) { for(int i = 0; i < _VOLUMES; i++) {
Fats[i] = NULL; Fats[i] = NULL;
sto[i].private_data = new pvt_t; sto[i].private_data = new pvt_t;
@ -454,14 +454,14 @@ void loop() {
} }
// This is horrible, and needs to be moved elsewhere! // This is horrible, and needs to be moved elsewhere!
for(int B = 0; B < MAX_USB_MS_DRIVERS; B++) { for(int B = 0; B < MAX_USB_MS_DRIVERS; B++) {
if(!partsready && (UHS_USB_BulkOnly[B]->GetAddress() != NULL)) { if(!partsready && (UHS_USB_Storage[B]->GetAddress() != NULL)) {
// Build a list. // Build a list.
int ML = UHS_USB_BulkOnly[B]->GetbMaxLUN(); int ML = UHS_USB_Storage[B]->GetbMaxLUN();
//printf("MAXLUN = %i\r\n", ML); //printf("MAXLUN = %i\r\n", ML);
ML++; ML++;
for(int i = 0; i < ML; i++) { for(int i = 0; i < ML; i++) {
if(UHS_USB_BulkOnly[B]->LUNIsGood(i)) { if(UHS_USB_Storage[B]->LUNIsGood(i)) {
partsready = true; partsready = true;
((pvt_t *)(sto[i].private_data))->lun = i; ((pvt_t *)(sto[i].private_data))->lun = i;
((pvt_t *)(sto[i].private_data))->B = B; ((pvt_t *)(sto[i].private_data))->B = B;
@ -470,8 +470,8 @@ void loop() {
sto[i].Status = *UHS_USB_BulkOnly_Status; sto[i].Status = *UHS_USB_BulkOnly_Status;
sto[i].Initialize = *UHS_USB_BulkOnly_Initialize; sto[i].Initialize = *UHS_USB_BulkOnly_Initialize;
sto[i].Commit = *UHS_USB_BulkOnly_Commit; sto[i].Commit = *UHS_USB_BulkOnly_Commit;
sto[i].TotalSectors = UHS_USB_BulkOnly[B]->GetCapacity(i); sto[i].TotalSectors = UHS_USB_Storage[B]->GetCapacity(i);
sto[i].SectorSize = UHS_USB_BulkOnly[B]->GetSectorSize(i); sto[i].SectorSize = UHS_USB_Storage[B]->GetSectorSize(i);
printf_P(PSTR("LUN:\t\t%u\r\n"), i); printf_P(PSTR("LUN:\t\t%u\r\n"), i);
printf_P(PSTR("Total Sectors:\t%08lx\t%lu\r\n"), sto[i].TotalSectors, sto[i].TotalSectors); printf_P(PSTR("Total Sectors:\t%08lx\t%lu\r\n"), sto[i].TotalSectors, sto[i].TotalSectors);
printf_P(PSTR("Sector Size:\t%04x\t\t%u\r\n"), sto[i].SectorSize, sto[i].SectorSize); printf_P(PSTR("Sector Size:\t%04x\t\t%u\r\n"), sto[i].SectorSize, sto[i].SectorSize);
@ -524,7 +524,7 @@ void loop() {
if(Fats[0] != NULL) { if(Fats[0] != NULL) {
struct Pvt * p; struct Pvt * p;
p = ((struct Pvt *)(Fats[0]->storage->private_data)); p = ((struct Pvt *)(Fats[0]->storage->private_data));
if(!UHS_USB_BulkOnly[p->B]->LUNIsGood(p->lun)) { if(!UHS_USB_Storage[p->B]->LUNIsGood(p->lun)) {
// media change // media change
#if !defined(CORE_TEENSY) && defined(__AVR__) #if !defined(CORE_TEENSY) && defined(__AVR__)
fadeAmount = 80; fadeAmount = 80;

View file

@ -36,7 +36,7 @@ public:
byteTotal = 0; byteTotal = 0;
}; };
virtual void Parse(const LEN_TYPE len, const uint8_t *pbuf, const OFFSET_TYPE &offset); void Parse(const LEN_TYPE len, const uint8_t *pbuf, const OFFSET_TYPE &offset);
}; };
template <class BASE_CLASS, class LEN_TYPE, class OFFSET_TYPE> template <class BASE_CLASS, class LEN_TYPE, class OFFSET_TYPE>

5
hid.h
View file

@ -156,7 +156,7 @@ protected:
void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR* ep_ptr); void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR* ep_ptr);
void PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc); void PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc);
virtual HIDReportParser* GetReportParser(uint8_t id); virtual HIDReportParser* GetReportParser(uint8_t id) {};
public: public:
@ -166,7 +166,8 @@ public:
const USB* GetUsb() { const USB* GetUsb() {
return pUsb; return pUsb;
}; };
virtual bool SetReportParser(uint8_t id, HIDReportParser *prs);
virtual bool SetReportParser(uint8_t id, HIDReportParser *prs) {};
uint8_t SetProtocol(uint8_t iface, uint8_t protocol); uint8_t SetProtocol(uint8_t iface, uint8_t protocol);
uint8_t GetProtocol(uint8_t iface, uint8_t* dataptr); uint8_t GetProtocol(uint8_t iface, uint8_t* dataptr);

View file

@ -157,27 +157,6 @@ void KeyboardReportParser::Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t
prevState.bInfo[i] = buf[i]; prevState.bInfo[i] = buf[i];
}; };
uint8_t KeyboardReportParser::HandleLockingKeys(HID *hid, uint8_t key) {
uint8_t old_keys = kbdLockingKeys.bLeds;
switch (key) {
case UHS_HID_BOOT_KEY_NUM_LOCK:
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
break;
case UHS_HID_BOOT_KEY_CAPS_LOCK:
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
break;
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
break;
}
if (old_keys != kbdLockingKeys.bLeds && hid)
return (hid->SetReport(0, 0/*hid->GetIface()*/, 2, 0, 1, &kbdLockingKeys.bLeds));
return 0;
}
const uint8_t KeyboardReportParser::numKeys[10] PROGMEM = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'}; const uint8_t KeyboardReportParser::numKeys[10] PROGMEM = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'};
const uint8_t KeyboardReportParser::symKeysUp[12] PROGMEM = {'_', '+', '{', '}', '|', '~', ':', '"', '~', '<', '>', '?'}; const uint8_t KeyboardReportParser::symKeysUp[12] PROGMEM = {'_', '+', '{', '}', '|', '~', ':', '"', '~', '<', '>', '?'};
const uint8_t KeyboardReportParser::symKeysLo[12] PROGMEM = {'-', '=', '[', ']', '\\', ' ', ';', '\'', '`', ',', '.', '/'}; const uint8_t KeyboardReportParser::symKeysLo[12] PROGMEM = {'-', '=', '[', ']', '\\', ' ', ';', '\'', '`', ',', '.', '/'};

View file

@ -56,7 +56,7 @@ class MouseReportParser : public HIDReportParser {
} prevState; } prevState;
public: public:
virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf); void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
protected: protected:
@ -144,10 +144,30 @@ public:
kbdLockingKeys.bLeds = 0; kbdLockingKeys.bLeds = 0;
}; };
virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf); void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
protected: protected:
virtual uint8_t HandleLockingKeys(HID* hid, uint8_t key);
virtual uint8_t HandleLockingKeys(HID* hid, uint8_t key) {
uint8_t old_keys = kbdLockingKeys.bLeds;
switch(key) {
case UHS_HID_BOOT_KEY_NUM_LOCK:
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
break;
case UHS_HID_BOOT_KEY_CAPS_LOCK:
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
break;
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
break;
}
if(old_keys != kbdLockingKeys.bLeds && hid)
return (hid->SetReport(0, 0/*hid->GetIface()*/, 2, 0, 1, &kbdLockingKeys.bLeds));
return 0;
};
virtual void OnControlKeysChanged(uint8_t before, uint8_t after) { virtual void OnControlKeysChanged(uint8_t before, uint8_t after) {
}; };
@ -204,9 +224,9 @@ public:
}; };
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll(); uint8_t Poll();
virtual uint8_t GetAddress() { virtual uint8_t GetAddress() {
return bAddress; return bAddress;
@ -217,13 +237,14 @@ public:
}; };
// UsbConfigXtracter implementation // UsbConfigXtracter implementation
// Method should be defined here if virtual.
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
virtual boolean DEVCLASSOK(uint8_t klass) { virtual bool DEVCLASSOK(uint8_t klass) {
return (klass == USB_CLASS_HID); return (klass == USB_CLASS_HID);
} }
virtual boolean DEVSUBCLASSOK(uint8_t subklass) { virtual bool DEVSUBCLASSOK(uint8_t subklass) {
return (subklass == BOOT_PROTOCOL); return (subklass == BOOT_PROTOCOL);
} }
}; };

View file

@ -111,6 +111,7 @@ protected:
uint16_t totalSize; // Report size in bits uint16_t totalSize; // Report size in bits
// Method should be defined here if virtual.
virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn); virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn);
UsagePageFunc pfUsage; UsagePageFunc pfUsage;
@ -132,7 +133,7 @@ public:
theSkipper.Initialize(&theBuffer); theSkipper.Initialize(&theBuffer);
}; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset); void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset);
enum { enum {
enErrorSuccess = 0 enErrorSuccess = 0
@ -156,6 +157,7 @@ class ReportDescParser2 : public ReportDescParserBase {
uint8_t bLen; // Report length uint8_t bLen; // Report length
protected: protected:
// Method should be defined here if virtual.
virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn); virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn);
public: public:
@ -167,6 +169,7 @@ public:
class UniversalReportParser : public HIDReportParser { class UniversalReportParser : public HIDReportParser {
public: public:
// Method should be defined here if virtual.
virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf); virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
}; };

View file

@ -69,7 +69,7 @@ protected:
uint16_t PID, VID; // PID and VID of connected device uint16_t PID, VID; // PID and VID of connected device
// HID implementation // HID implementation
virtual HIDReportParser* GetReportParser(uint8_t id); HIDReportParser* GetReportParser(uint8_t id);
virtual uint8_t OnInitSuccessful() { virtual uint8_t OnInitSuccessful() {
return 0; return 0;
@ -83,12 +83,12 @@ public:
HIDUniversal(USB *p); HIDUniversal(USB *p);
// HID implementation // HID implementation
virtual bool SetReportParser(uint8_t id, HIDReportParser *prs); bool SetReportParser(uint8_t id, HIDReportParser *prs);
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll(); uint8_t Poll();
virtual uint8_t GetAddress() { virtual uint8_t GetAddress() {
return bAddress; return bAddress;
@ -99,9 +99,9 @@ public:
}; };
// UsbConfigXtracter implementation // UsbConfigXtracter implementation
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
//Send report - do not mix with SetReport()! // Send report - do not mix with SetReport()!
uint8_t SndRpt(uint16_t nbytes, uint8_t *dataptr); uint8_t SndRpt(uint16_t nbytes, uint8_t *dataptr);
}; };

View file

@ -67,7 +67,7 @@ bool BulkOnly::LUNIsGood(uint8_t lun) {
* @param lun Logical Unit Number * @param lun Logical Unit Number
* @return cached status of write protect switch * @return cached status of write protect switch
*/ */
boolean BulkOnly::WriteProtected(uint8_t lun) { bool BulkOnly::WriteProtected(uint8_t lun) {
return WriteOk[lun]; return WriteOk[lun];
} }
@ -599,7 +599,7 @@ uint8_t BulkOnly::Release() {
* @param lun Logical Unit Number * @param lun Logical Unit Number
* @return true if LUN is ready for use. * @return true if LUN is ready for use.
*/ */
boolean BulkOnly::CheckLUN(uint8_t lun) { bool BulkOnly::CheckLUN(uint8_t lun) {
uint8_t rcode; uint8_t rcode;
Capacity capacity; Capacity capacity;
for(uint8_t i = 0; i < 8; i++) capacity.data[i] = 0; for(uint8_t i = 0; i < 8; i++) capacity.data[i] = 0;
@ -1020,11 +1020,11 @@ uint8_t BulkOnly::Transaction(CommandBlockWrapper *pcbw, uint16_t buf_size, void
printf("Transfersize %i\r\n", bytes); printf("Transfersize %i\r\n", bytes);
delay(1000); delay(1000);
boolean callback = (flags & MASS_TRANS_FLG_CALLBACK) == MASS_TRANS_FLG_CALLBACK; bool callback = (flags & MASS_TRANS_FLG_CALLBACK) == MASS_TRANS_FLG_CALLBACK;
#else #else
uint16_t bytes = buf_size; uint16_t bytes = buf_size;
#endif #endif
boolean write = (pcbw->bmCBWFlags & MASS_CMD_DIR_IN) != MASS_CMD_DIR_IN; bool write = (pcbw->bmCBWFlags & MASS_CMD_DIR_IN) != MASS_CMD_DIR_IN;
uint8_t ret = 0; uint8_t ret = 0;
uint8_t usberr; uint8_t usberr;
CommandStatusWrapper csw; // up here, we allocate ahead to save cpu cycles. CommandStatusWrapper csw; // up here, we allocate ahead to save cpu cycles.

View file

@ -507,7 +507,7 @@ public:
return bTheLUN; // Active LUN return bTheLUN; // Active LUN
} }
boolean WriteProtected(uint8_t lun); bool WriteProtected(uint8_t lun);
uint8_t MediaCTL(uint8_t lun, uint8_t ctl); uint8_t MediaCTL(uint8_t lun, uint8_t ctl);
uint8_t Read(uint8_t lun, uint32_t addr, uint16_t bsize, uint8_t blocks, uint8_t *buf); uint8_t Read(uint8_t lun, uint32_t addr, uint16_t bsize, uint8_t blocks, uint8_t *buf);
uint8_t Read(uint8_t lun, uint32_t addr, uint16_t bsize, uint8_t blocks, USBReadParser *prs); uint8_t Read(uint8_t lun, uint32_t addr, uint16_t bsize, uint8_t blocks, USBReadParser *prs);
@ -519,20 +519,20 @@ public:
uint16_t GetSectorSize(uint8_t lun); uint16_t GetSectorSize(uint8_t lun);
// USBDeviceConfig implementation // USBDeviceConfig implementation
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed); uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll(); uint8_t Poll();
virtual uint8_t GetAddress() { virtual uint8_t GetAddress() {
return bAddress; return bAddress;
}; };
// UsbConfigXtracter implementation // UsbConfigXtracter implementation
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep); void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
virtual boolean DEVCLASSOK(uint8_t klass) { virtual bool DEVCLASSOK(uint8_t klass) {
return (klass == USB_CLASS_MASS_STORAGE); return (klass == USB_CLASS_MASS_STORAGE);
} }
@ -551,7 +551,7 @@ private:
uint8_t ReadCapacity10(uint8_t lun, uint8_t *buf); uint8_t ReadCapacity10(uint8_t lun, uint8_t *buf);
void ClearAllEP(); void ClearAllEP();
void CheckMedia(); void CheckMedia();
boolean CheckLUN(uint8_t lun); bool CheckLUN(uint8_t lun);
uint8_t Page3F(uint8_t lun); uint8_t Page3F(uint8_t lun);
bool IsValidCBW(uint8_t size, uint8_t *pcbw); bool IsValidCBW(uint8_t size, uint8_t *pcbw);
bool IsMeaningfulCBW(uint8_t size, uint8_t *pcbw); bool IsMeaningfulCBW(uint8_t size, uint8_t *pcbw);

View file

@ -88,10 +88,10 @@ public:
void command(uint8_t); void command(uint8_t);
#if defined(ARDUINO) && ARDUINO >=100 #if defined(ARDUINO) && ARDUINO >=100
virtual size_t write(uint8_t); size_t write(uint8_t);
using Print::write; using Print::write;
#else #else
virtual void write(uint8_t); void write(uint8_t);
#endif #endif
private: private:

View file

@ -78,15 +78,7 @@ e-mail : support@circuitsathome.com
// No user serviceable parts below this line. // No user serviceable parts below this line.
// DO NOT change anything below here unless you are a developer! // DO NOT change anything below here unless you are a developer!
#if defined(ARDUINO) && ARDUINO >=100 #include "version_helper.h"
#include <Arduino.h>
#else
#include <WProgram.h>
#include <pins_arduino.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#define F(str) (str)
#endif
#if defined(__GNUC__) && defined(__AVR__) #if defined(__GNUC__) && defined(__AVR__)
#ifndef GCC_VERSION #ifndef GCC_VERSION
@ -140,5 +132,7 @@ e-mail : support@circuitsathome.com
#if (defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822) #if (defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822)
#include <SPI.h> // Use the Arduino SPI library for the Arduino Due and RedBearLab nRF51822 #include <SPI.h> // Use the Arduino SPI library for the Arduino Due and RedBearLab nRF51822
#endif #endif
#if defined(__PIC32MX__) || defined(__PIC32MZ__)
#include <../../../../hardware/pic32/libraries/SPI/SPI.h> // Hack to use the SPI library
#endif
#endif /* SETTINGS_H */ #endif /* SETTINGS_H */

View file

@ -40,12 +40,16 @@ public:
SPI_SS::SetDirWrite(); SPI_SS::SetDirWrite();
SPI_SS::Set(); SPI_SS::Set();
} }
#elif defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__) #elif !defined(SPDR)
static void init() { static void init() {
SPI_SS::SetDirWrite(); SPI_SS::SetDirWrite();
SPI_SS::Set(); SPI_SS::Set();
SPI.begin(); SPI.begin();
#if defined(__MIPSEL__)
SPI.setClockDivider(1);
#else
SPI.setClockDivider(4); // Set speed to 84MHz/4=21MHz - the MAX3421E can handle up to 26MHz SPI.setClockDivider(4); // Set speed to 84MHz/4=21MHz - the MAX3421E can handle up to 26MHz
#endif
} }
#elif defined(RBL_NRF51822) #elif defined(RBL_NRF51822)
static void init() { static void init() {
@ -84,6 +88,8 @@ typedef SPi< P13, P11, P12, P10 > spi;
typedef SPi< P76, P75, P74, P10 > spi; typedef SPi< P76, P75, P74, P10 > spi;
#elif defined(RBL_NRF51822) #elif defined(RBL_NRF51822)
typedef SPi< P16, P18, P17, P10 > spi; typedef SPi< P16, P18, P17, P10 > spi;
#elif defined(__MIPSEL__)
typedef SPi< P13, P11, P12, P10 > spi;
#else #else
#error "No SPI entry in usbhost.h" #error "No SPI entry in usbhost.h"
#endif #endif
@ -145,7 +151,7 @@ void MAX3421e< SPI_SS, INTR >::regWr(uint8_t reg, uint8_t data) {
c[0] = reg | 0x02; c[0] = reg | 0x02;
c[1] = data; c[1] = data;
spi4teensy3::send(c, 2); spi4teensy3::send(c, 2);
#elif (defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822) #elif !defined(SPDR)
SPI.transfer(reg | 0x02); SPI.transfer(reg | 0x02);
SPI.transfer(data); SPI.transfer(data);
#else #else
@ -169,7 +175,7 @@ uint8_t* MAX3421e< SPI_SS, INTR >::bytesWr(uint8_t reg, uint8_t nbytes, uint8_t*
spi4teensy3::send(reg | 0x02); spi4teensy3::send(reg | 0x02);
spi4teensy3::send(data_p, nbytes); spi4teensy3::send(data_p, nbytes);
data_p += nbytes; data_p += nbytes;
#elif (defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822) #elif !defined(SPDR)
SPI.transfer(reg | 0x02); SPI.transfer(reg | 0x02);
while(nbytes) { while(nbytes) {
SPI.transfer(*data_p); SPI.transfer(*data_p);
@ -211,7 +217,7 @@ uint8_t MAX3421e< SPI_SS, INTR >::regRd(uint8_t reg) {
spi4teensy3::send(reg); spi4teensy3::send(reg);
uint8_t rv = spi4teensy3::receive(); uint8_t rv = spi4teensy3::receive();
SPI_SS::Set(); SPI_SS::Set();
#elif (defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822) #elif !defined(SPDR)
SPI.transfer(reg); SPI.transfer(reg);
uint8_t rv = SPI.transfer(0); uint8_t rv = SPI.transfer(0);
SPI_SS::Set(); SPI_SS::Set();
@ -237,7 +243,7 @@ uint8_t* MAX3421e< SPI_SS, INTR >::bytesRd(uint8_t reg, uint8_t nbytes, uint8_t*
spi4teensy3::send(reg); spi4teensy3::send(reg);
spi4teensy3::receive(data_p, nbytes); spi4teensy3::receive(data_p, nbytes);
data_p += nbytes; data_p += nbytes;
#elif (defined(ARDUINO_SAM_DUE) && defined(__SAM3X8E__)) || defined(RBL_NRF51822) #elif !defined(SPDR)
SPI.transfer(reg); SPI.transfer(reg);
while(nbytes) { while(nbytes) {
*data_p++ = SPI.transfer(0); *data_p++ = SPI.transfer(0);

View file

@ -191,16 +191,16 @@ public:
void PrintHubStatus(); void PrintHubStatus();
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed); uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
virtual uint8_t Release(); uint8_t Release();
virtual uint8_t Poll(); uint8_t Poll();
virtual void ResetHubPort(uint8_t port); void ResetHubPort(uint8_t port);
virtual uint8_t GetAddress() { virtual uint8_t GetAddress() {
return bAddress; return bAddress;
}; };
virtual boolean DEVCLASSOK(uint8_t klass) { virtual bool DEVCLASSOK(uint8_t klass) {
return (klass == 0x09); return (klass == 0x09);
} }

222
version_helper.h Normal file
View file

@ -0,0 +1,222 @@
/* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
Contact information
-------------------
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
/*
* Universal Arduino(tm) "IDE" fixups.
* Includes fixes for versions as low as 0023, used by Digilent.
*/
#if defined(ARDUINO) && ARDUINO >=100
#include <Arduino.h>
#else
#include <WProgram.h>
#include <pins_arduino.h>
#ifdef __AVR__
#include <avr/pgmspace.h>
#include <avr/io.h>
#else
#endif
#endif
#ifndef __PGMSPACE_H_
#define __PGMSPACE_H_ 1
#include <inttypes.h>
#ifndef PROGMEM
#define PROGMEM
#endif
#ifndef PGM_P
#define PGM_P const char *
#endif
#ifndef PSTR
#define PSTR(str) (str)
#endif
#ifndef F
#define F(str) (str)
#endif
#ifndef _SFR_BYTE
#define _SFR_BYTE(n) (n)
#endif
#ifndef prog_void
typedef void prog_void;
#endif
#ifndef prog_char
typedef char prog_char;
#endif
#ifndef prog_uchar
typedef unsigned char prog_uchar;
#endif
#ifndef prog_int8_t
typedef int8_t prog_int8_t;
#endif
#ifndef prog_uint8_t
typedef uint8_t prog_uint8_t;
#endif
#ifndef prog_int16_t
typedef int16_t prog_int16_t;
#endif
#ifndef prog_uint16_t
typedef uint16_t prog_uint16_t;
#endif
#ifndef prog_int32_t
typedef int32_t prog_int32_t;
#endif
#ifndef prog_uint32_t
typedef uint32_t prog_uint32_t;
#endif
#ifndef memchr_P
#define memchr_P(str, c, len) memchr((str), (c), (len))
#endif
#ifndef memcmp_P
#define memcmp_P(a, b, n) memcmp((a), (b), (n))
#endif
#ifndef memcpy_P
#define memcpy_P(dest, src, num) memcpy((dest), (src), (num))
#endif
#ifndef memmem_P
#define memmem_P(a, alen, b, blen) memmem((a), (alen), (b), (blen))
#endif
#ifndef memrchr_P
#define memrchr_P(str, val, len) memrchr((str), (val), (len))
#endif
#ifndef strcat_P
#define strcat_P(dest, src) strcat((dest), (src))
#endif
#ifndef strchr_P
#define strchr_P(str, c) strchr((str), (c))
#endif
#ifndef strchrnul_P
#define strchrnul_P(str, c) strchrnul((str), (c))
#endif
#ifndef strcmp_P
#define strcmp_P(a, b) strcmp((a), (b))
#endif
#ifndef strcpy_P
#define strcpy_P(dest, src) strcpy((dest), (src))
#endif
#ifndef strcasecmp_P
#define strcasecmp_P(a, b) strcasecmp((a), (b))
#endif
#ifndef strcasestr_P
#define strcasestr_P(a, b) strcasestr((a), (b))
#endif
#ifndef strlcat_P
#define strlcat_P(dest, src, len) strlcat((dest), (src), (len))
#endif
#ifndef strlcpy_P
#define strlcpy_P(dest, src, len) strlcpy((dest), (src), (len))
#endif
#ifndef strlen_P
#define strlen_P(s) strlen((const char *)(s))
#endif
#ifndef strnlen_P
#define strnlen_P(str, len) strnlen((str), (len))
#endif
#ifndef strncmp_P
#define strncmp_P(a, b, n) strncmp((a), (b), (n))
#endif
#ifndef strncasecmp_P
#define strncasecmp_P(a, b, n) strncasecmp((a), (b), (n))
#endif
#ifndef strncat_P
#define strncat_P(a, b, n) strncat((a), (b), (n))
#endif
#ifndef strncpy_P
#define strncpy_P(a, b, n) strncmp((a), (b), (n))
#endif
#ifndef strpbrk_P
#define strpbrk_P(str, chrs) strpbrk((str), (chrs))
#endif
#ifndef strrchr_P
#define strrchr_P(str, c) strrchr((str), (c))
#endif
#ifndef strsep_P
#define strsep_P(strp, delim) strsep((strp), (delim))
#endif
#ifndef strspn_P
#define strspn_P(str, chrs) strspn((str), (chrs))
#endif
#ifndef strstr_P
#define strstr_P(a, b) strstr((a), (b))
#endif
#ifndef sprintf_P
#define sprintf_P(s, ...) sprintf((s), __VA_ARGS__)
#endif
#ifndef vfprintf_P
#define vfprintf_P(s, ...) vfprintf((s), __VA_ARGS__)
#endif
#ifndef printf_P
#define printf_P(...) printf(__VA_ARGS__)
#endif
#ifndef snprintf_P
#define snprintf_P(s, n, ...) ((s), (n), __VA_ARGS__)
#endif
#ifndef vsprintf_P
#define vsprintf_P(s, ...) ((s),__VA_ARGS__)
#endif
#ifndef vsnprintf_P
#define vsnprintf_P(s, n, ...) ((s), (n),__VA_ARGS__)
#endif
#ifndef fprintf_P
#define fprintf_P(s, ...) ((s), __VA_ARGS__)
#endif
#ifndef pgm_read_byte
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
#endif
#ifndef pgm_read_word
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
#endif
#ifndef pgm_read_dword
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))
#endif
#ifndef pgm_read_float
#define pgm_read_float(addr) (*(const float *)(addr))
#endif
#ifndef pgm_read_byte_near
#define pgm_read_byte_near(addr) pgm_read_byte(addr)
#endif
#ifndef pgm_read_word_near
#define pgm_read_word_near(addr) pgm_read_word(addr)
#endif
#ifndef pgm_read_dword_near
#define pgm_read_dword_near(addr) pgm_read_dword(addr)
#endif
#ifndef pgm_read_float_near
#define pgm_read_float_near(addr) pgm_read_float(addr)
#endif
#ifndef pgm_read_byte_far
#define pgm_read_byte_far(addr) pgm_read_byte(addr)
#endif
#ifndef pgm_read_word_far
#define pgm_read_word_far(addr) pgm_read_word(addr)
#endif
#ifndef pgm_read_dword_far
#define pgm_read_dword_far(addr) pgm_read_dword(addr)
#endif
#ifndef pgm_read_float_far
#define pgm_read_float_far(addr) pgm_read_float(addr)
#endif
#ifndef pgm_read_pointer
#define pgm_read_pointer
#endif
#endif