-/* Copyright (C) 2014 by Jacob Alexander
+/* Copyright (C) 2014-2015 by Jacob Alexander
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
// USB Includes
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
-#include "../uartOut/arm/uart_serial.h"
-#include "../pjrcUSB/arm/usb_dev.h"
-#include "../pjrcUSB/arm/usb_keyboard.h"
-#include "../pjrcUSB/arm/usb_serial.h"
+#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
+#include <uartOut/arm/uart_serial.h>
+#include <pjrcUSB/arm/usb_dev.h>
+#include <pjrcUSB/arm/usb_keyboard.h>
+#include <pjrcUSB/arm/usb_serial.h>
#endif
// Local Includes
// ----- Variables -----
// Output Module command dictionary
-const char outputCLIDictName[] = "USB Module Commands";
-const CLIDictItem outputCLIDict[] = {
- { "kbdProtocol", "Keyboard Protocol Mode: 0 - Boot, 1 - OS/NKRO Mode", cliFunc_kbdProtocol },
- { "readLEDs", "Read LED byte:" NL "\t\t1 NumLck, 2 CapsLck, 4 ScrlLck, 16 Kana, etc.", cliFunc_readLEDs },
- { "readUART", "Read UART buffer until empty.", cliFunc_readUART },
- { "sendKeys", "Send the prepared list of USB codes and modifier byte.", cliFunc_sendKeys },
- { "sendUART", "Send characters over UART0.", cliFunc_sendUART },
- { "setKeys", "Prepare a space separated list of USB codes (decimal). Waits until \033[35msendKeys\033[0m.", cliFunc_setKeys },
- { "setMod", "Set the modfier byte:" NL "\t\t1 LCtrl, 2 LShft, 4 LAlt, 8 LGUI, 16 RCtrl, 32 RShft, 64 RAlt, 128 RGUI", cliFunc_setMod },
+CLIDict_Entry( kbdProtocol, "Keyboard Protocol Mode: 0 - Boot, 1 - OS/NKRO Mode" );
+CLIDict_Entry( readLEDs, "Read LED byte:" NL "\t\t1 NumLck, 2 CapsLck, 4 ScrlLck, 16 Kana, etc." );
+CLIDict_Entry( readUART, "Read UART buffer until empty." );
+CLIDict_Entry( sendKeys, "Send the prepared list of USB codes and modifier byte." );
+CLIDict_Entry( sendUART, "Send characters over UART0." );
+CLIDict_Entry( setKeys, "Prepare a space separated list of USB codes (decimal). Waits until \033[35msendKeys\033[0m." );
+CLIDict_Entry( setMod, "Set the modfier byte:" NL "\t\t1 LCtrl, 2 LShft, 4 LAlt, 8 LGUI, 16 RCtrl, 32 RShft, 64 RAlt, 128 RGUI" );
+
+CLIDict_Def( outputCLIDict, "USB Module Commands" ) = {
+ CLIDict_Item( kbdProtocol ),
+ CLIDict_Item( readLEDs ),
+ CLIDict_Item( readUART ),
+ CLIDict_Item( sendKeys ),
+ CLIDict_Item( sendUART ),
+ CLIDict_Item( setKeys ),
+ CLIDict_Item( setMod ),
{ 0, 0, 0 } // Null entry for dictionary end
};
// the idle configuration, how often we send the report to the
// host (ms * 4) even when it hasn't changed
- uint8_t USBKeys_Idle_Config = 125;
+ uint8_t USBKeys_Idle_Config = 125;
// count until idle timeout
uint8_t USBKeys_Idle_Count = 0;
+// Indicates whether the Output module is fully functional
+// 0 - Not fully functional, 1 - Fully functional
+// 0 is often used to show that a USB cable is not plugged in (but has power)
+ uint8_t Output_Available = 0;
+
// ----- Capabilities -----
// USB Module Setup
inline void Output_setup()
{
+ // Setup UART
+ uart_serial_setup();
+ print("\033[2J"); // Clear screen
+
// Initialize the USB, and then wait for the host to set configuration.
// This will hang forever if USB does not initialize
usb_init();
- // Setup UART
- uart_serial_setup();
-
while ( !usb_configured() );
// Register USB Output CLI dictionary
{
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
uint16_t count = 0;
-#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) // ARM
+#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM
uint32_t count = 0;
#endif
// Count characters until NULL character, then send the amount counted