diff --git a/Output/pjrcUSB/arm/usb_dev.c b/Output/pjrcUSB/arm/usb_dev.c index 6511310..c4c60b8 100644 --- a/Output/pjrcUSB/arm/usb_dev.c +++ b/Output/pjrcUSB/arm/usb_dev.c @@ -1098,12 +1098,17 @@ restart: -void usb_init() +uint8_t usb_init() { #ifdef UART_DEBUG print("USB INIT"NL); #endif + // If no USB cable is attached, do not initialize usb + // XXX Test -HaaTa + //if ( USB0_OTGISTAT & USB_OTGSTAT_ID ) + // return 0; + // Clear out endpoints table for ( int i = 0; i <= NUM_ENDPOINTS * 4; i++ ) { @@ -1147,6 +1152,8 @@ void usb_init() // enable d+ pullup USB0_CONTROL = USB_CONTROL_DPPULLUPNONOTG; + + return 1; } // return 0 if the USB is not configured, or the configuration diff --git a/Output/pjrcUSB/arm/usb_dev.h b/Output/pjrcUSB/arm/usb_dev.h index 01f98cb..ddfc6f3 100644 --- a/Output/pjrcUSB/arm/usb_dev.h +++ b/Output/pjrcUSB/arm/usb_dev.h @@ -61,8 +61,8 @@ extern volatile uint8_t usb_cdc_transmit_flush_timer; // ----- Functions ----- uint8_t usb_configured(); // is the USB port configured +uint8_t usb_init(); // Returns 1 on success, 0 if no cable is attached -void usb_init(); void usb_isr(); void usb_tx( uint32_t endpoint, usb_packet_t *packet ); void usb_tx_isr( uint32_t endpoint, usb_packet_t *packet ); diff --git a/Output/pjrcUSB/avr/usb_keyboard_serial.c b/Output/pjrcUSB/avr/usb_keyboard_serial.c index 5458680..1403c9a 100644 --- a/Output/pjrcUSB/avr/usb_keyboard_serial.c +++ b/Output/pjrcUSB/avr/usb_keyboard_serial.c @@ -590,8 +590,13 @@ void wdt_init() // initialize USB -void usb_init() +uint8_t usb_init() { + // Check to see if a usb cable has been plugged in + // XXX Not tested (also, not currently needed) -HaaTa + //if ( USB0_STAT & (1 << 1) + // return 0; + HW_CONFIG(); USB_FREEZE(); // enable USB PLL_CONFIG(); // config PLL @@ -604,6 +609,8 @@ void usb_init() // Disable watchdog timer after possible software reset //wdt_init(); // XXX Not working...seems to be ok without this, not sure though + + return 1; } // return 0 if the USB is not configured, or the configuration diff --git a/Output/pjrcUSB/avr/usb_keyboard_serial.h b/Output/pjrcUSB/avr/usb_keyboard_serial.h index 2e490d4..0c5c585 100644 --- a/Output/pjrcUSB/avr/usb_keyboard_serial.h +++ b/Output/pjrcUSB/avr/usb_keyboard_serial.h @@ -46,7 +46,7 @@ // ----- Function Declarations ----- // Basic USB Configuration -void usb_init(); // initialize everything +uint8_t usb_init(); // initialize everything uint8_t usb_configured(); // is the USB port configured // Keyboard HID Functions diff --git a/Output/pjrcUSB/output_com.c b/Output/pjrcUSB/output_com.c index cc35edd..1651222 100644 --- a/Output/pjrcUSB/output_com.c +++ b/Output/pjrcUSB/output_com.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2014 by Jacob Alexander +/* Copyright (C) 2011-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 @@ -124,6 +124,11 @@ USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None; // 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 ----- @@ -473,9 +478,11 @@ inline void Output_setup() { // Initialize the USB, and then wait for the host to set configuration. // This will hang forever if USB does not initialize - usb_init(); - - while ( !usb_configured() ); + // If no USB cable is attached, does not try and initialize USB + if ( usb_init() ) + { + while ( !usb_configured() ); + } // Register USB Output CLI dictionary CLI_registerDictionary( outputCLIDict, outputCLIDictName ); diff --git a/Output/pjrcUSB/output_com.h b/Output/pjrcUSB/output_com.h index 7938040..22b3871 100644 --- a/Output/pjrcUSB/output_com.h +++ b/Output/pjrcUSB/output_com.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2014 by Jacob Alexander +/* Copyright (C) 2013-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 @@ -79,6 +79,8 @@ extern uint8_t USBKeys_Idle_Count; extern USBKeyChangeState USBKeys_Changed; +extern uint8_t Output_Available; // 0 - Output module not fully functional, 1 - Output module working + // ----- Capabilities ----- diff --git a/Output/uartOut/output_com.c b/Output/uartOut/output_com.c index 0839360..3b18ee2 100644 --- a/Output/uartOut/output_com.c +++ b/Output/uartOut/output_com.c @@ -1,4 +1,4 @@ -/* 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 @@ -107,6 +107,11 @@ USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None; // 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 ----- diff --git a/Output/uartOut/output_com.h b/Output/uartOut/output_com.h index 983ab09..684d58a 100644 --- a/Output/uartOut/output_com.h +++ b/Output/uartOut/output_com.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2014 by Jacob Alexander +/* Copyright (C) 2013-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 @@ -76,6 +76,8 @@ extern uint8_t USBKeys_Idle_Count; extern USBKeyChangeState USBKeys_Changed; +extern uint8_t Output_Available; // 0 - Output module not fully functional, 1 - Output module working + // ----- Capabilities ----- diff --git a/Output/usbMuxUart/output_com.c b/Output/usbMuxUart/output_com.c index fd0f9b5..5c883e7 100644 --- a/Output/usbMuxUart/output_com.c +++ b/Output/usbMuxUart/output_com.c @@ -1,4 +1,4 @@ -/* 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 @@ -33,10 +33,10 @@ // USB Includes #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) #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" +#include +#include +#include +#include #endif // Local Includes @@ -130,6 +130,11 @@ USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None; // 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 ----- diff --git a/Output/usbMuxUart/output_com.h b/Output/usbMuxUart/output_com.h index b76b525..b041ea7 100644 --- a/Output/usbMuxUart/output_com.h +++ b/Output/usbMuxUart/output_com.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2014 by Jacob Alexander +/* Copyright (C) 2013-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 @@ -78,6 +78,8 @@ extern uint8_t USBKeys_Idle_Count; extern USBKeyChangeState USBKeys_Changed; +extern uint8_t Output_Available; // 0 - Output module not fully functional, 1 - Output module working + // ----- Capabilities ----- diff --git a/Scan/MD2/setup.cmake b/Scan/MD2/setup.cmake index 3b6ea0c..375d2e7 100644 --- a/Scan/MD2/setup.cmake +++ b/Scan/MD2/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller Scan Module |### # -# Written by Jacob Alexander in 2014 for the Kiibohd Controller +# Written by Jacob Alexander in 2014-2015 for the Kiibohd Controller # # Released into the Public Domain # @@ -8,27 +8,24 @@ ### -# Module C files +# Required Sub-modules # - -set( SCAN_SRCS - scan_loop.c - ../MatrixARM/matrix_scan.c -) +AddModule ( Scan ISSILed ) +AddModule ( Scan MatrixARM ) ### -# Module Specific Options +# Module C files # -add_definitions( - -I${HEAD_DIR}/Scan/MatrixARM +set( Module_SRCS + scan_loop.c ) ### # Compiler Family Compatibility # -set( ScanModuleCompatibility +set( ModuleCompatibility arm )