qmk-dactyl-manuform-a/lib/usbhost/USB_Host_Shield_2.0/examples/adk/demokit_20/demokit_20.ino

104 lines
2.0 KiB
C++

#include <adk.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;
USBHub hub0(&Usb);
USBHub hub1(&Usb);
ADK adk(&Usb,"Google, Inc.",
"DemoKit",
"DemoKit Arduino Board",
"1.0",
"http://www.android.com",
"0000000012345678");
uint8_t b, b1;
#define LED1_RED 3
#define BUTTON1 2
void init_buttons()
{
pinMode(BUTTON1, INPUT);
// enable the internal pullups
digitalWrite(BUTTON1, HIGH);
}
void init_leds()
{
digitalWrite(LED1_RED, 0);
pinMode(LED1_RED, OUTPUT);
}
void setup()
{
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
#endif
Serial.println("\r\nADK demo start");
if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert");
while(1); //halt
}//if (Usb.Init() == -1...
init_leds();
init_buttons();
b1 = digitalRead(BUTTON1);
}
void loop()
{
uint8_t rcode;
uint8_t msg[3] = { 0x00 };
Usb.Task();
if( adk.isReady() == false ) {
analogWrite(LED1_RED, 255);
return;
}
uint16_t len = sizeof(msg);
rcode = adk.RcvData(&len, msg);
if( rcode ) {
USBTRACE2("Data rcv. :", rcode );
}
if(len > 0) {
USBTRACE("\r\nData Packet.");
// assumes only one command per packet
if (msg[0] == 0x2) {
switch( msg[1] ) {
case 0:
analogWrite(LED1_RED, 255 - msg[2]);
break;
}//switch( msg[1]...
}//if (msg[0] == 0x2...
}//if( len > 0...
msg[0] = 0x1;
b = digitalRead(BUTTON1);
if (b != b1) {
USBTRACE("\r\nButton state changed");
msg[1] = 0;
msg[2] = b ? 0 : 1;
rcode = adk.SndData( 3, msg );
if( rcode ) {
USBTRACE2("Button send: ", rcode );
}
b1 = b;
}//if (b != b1...
delay( 10 );
}