]> git.donarmstrong.com Git - kiibohd-controller.git/blobdiff - main.c
Cleanup.
[kiibohd-controller.git] / main.c
diff --git a/main.c b/main.c
index b6eb0e5285c075e0802c577096075f91caa4042b..13fde65a438e5440d352c7a384995d474a8d6d07 100644 (file)
--- a/main.c
+++ b/main.c
 
 // ----- Function Declarations -----
 
-void cliFunc_distRead    ( char* args );
-void cliFunc_free        ( char* args );
-void cliFunc_gaugeHelp   ( char* args );
-void cliFunc_single      ( char* args );
-void cliFunc_start       ( char* args );
-void cliFunc_zeroForce   ( char* args );
-void cliFunc_zeroPosition( char* args );
-
 
 
 // ----- Variables -----
@@ -147,57 +139,42 @@ int main(void)
 {
        // Configuring Pins
        pinSetup();
-       init_errorLED();
-
-       // Setup Output Module
-       output_setup();
 
        // Enable CLI
-       init_cli();
+       CLI_init();
+
+       // Setup Modules
+       Output_setup();
+       Macro_setup();
+       //scan_setup();
 
        // Setup ISR Timer for flagging a kepress send to USB
        usbTimerSetup();
 
        // Main Detection Loop
-       uint8_t ledTimer = F_CPU / 1000000; // Enable LED for a short time
        while ( 1 )
        {
-               // Setup the scanning module
-               scan_setup();
-
-               while ( 1 )
-               {
-                       // Acquire Key Indices
-                       // Loop continuously until scan_loop returns 0
-                       cli();
-                       while ( scan_loop() );
-                       sei();
-
-                       // Run Macros over Key Indices and convert to USB Keys
-                       process_macros();
-
-                       // Send keypresses over USB if the ISR has signalled that it's time
-                       if ( !sendKeypresses )
-                               continue;
-
-                       // Send USB Data
-                       usb_send();
+               // Process CLI
+               CLI_process();
 
-                       // Clear sendKeypresses Flag
-                       sendKeypresses = 0;
+               // Acquire Key Indices
+               // Loop continuously until scan_loop returns 0
+               cli();
+               //while ( scan_loop() );
+               sei();
 
-                       // Indicate Error, if valid
-                       errorLED( ledTimer );
+               // Run Macros over Key Indices and convert to USB Keys
+               Macro_process();
 
-                       if ( ledTimer > 0 )
-                               ledTimer--;
-               }
+               // Send keypresses over USB if the ISR has signalled that it's time
+               if ( !sendKeypresses )
+                       continue;
 
-               // Loop should never get here (indicate error)
-               ledTimer = 255;
+               // Send USB Data
+               Output_send();
 
-               // HID Debug Error message
-               erro_print("Detection loop error, this is very bad...bug report!");
+               // Clear sendKeypresses Flag
+               sendKeypresses = 0;
        }
 }
 
@@ -226,144 +203,4 @@ void pit0_isr(void)
 
 // ----- CLI Command Functions -----
 
-uint32_t readDistanceGauge()
-{
-       // Setup distance read parameters for iGaging Distance Scale
-       //       freq = 9kHz
-       // duty_cycle = 20%
-       // high_delay = (1/freq) *       (duty_cycle/100)
-       //  low_delay = (1/freq) * ((100-duty_cycle)/100)
-       uint8_t  bits       = 21; // 21 clock pulses, for 21 bits
-       uint32_t high_delay = 22; // Clock high time per pulse
-       uint32_t  low_delay = 89; // Clock low  time per pulse
-
-       // Data
-       uint32_t distInput = 0;
-
-       // Make sure clock is low initially
-       GPIOC_PCOR |= (1<<2); // Set Clock low
-
-       // Scan each of the bits
-       for ( uint8_t bit = 0; bit < bits; bit++ )
-       {
-               // Begin clock pulse
-               GPIOC_PSOR |= (1<<2); // Set Clock high
-
-               // Delay for duty cycle
-               delayMicroseconds( high_delay );
-
-               // End clock pulse
-               GPIOC_PCOR |= (1<<2); // Set Clock low
-
-               // Read Data Bit
-               distInput |= GPIOC_PDIR & (1<<1) ? (1 << bit) : 0;
-
-               // Delay for duty cycle
-               delayMicroseconds( low_delay );
-       }
-
-       return distInput;
-}
-
-void cliFunc_distRead( char* args )
-{
-       // Parse number from argument
-       //  NOTE: Only first argument is used
-       char* arg1Ptr;
-       char* arg2Ptr;
-       argumentIsolation_cli( args, &arg1Ptr, &arg2Ptr );
-
-       // Convert the argument into an int
-       int read_count = decToInt( arg1Ptr ) + 1;
-
-       // If no argument specified, default to 1 read
-       if ( *arg1Ptr == '\0' )
-       {
-               read_count = 2;
-       }
-
-       // Repeat reading as many times as specified in the argument
-       print( NL );
-       while ( --read_count > 0 )
-       {
-               // Prepare to print output
-               info_msg("Distance: ");
-
-               // Data
-               uint32_t distInput = readDistanceGauge();
-
-               // Output result
-               printInt32( distInput );
-
-               // Convert to mm
-               // As per http://www.shumatech.com/web/21bit_protocol?page=0,1
-               // 21 bits is 2560 CPI (counts per inch) (C/inch)
-               // 1 inch is 25.4 mm
-               // 2560 / 25.4 = 100.7874016... CPMM (C/mm)
-               // Or
-               // 1 count is 1/2560 = 0.000390625... inches
-               // 1 count is (1/2560) * 25.4 = 0.00992187500000000 mm = 9.92187500000000 um = 9921.87500000000 nm
-               // Since there are 21 bits (2 097 152 positions) converting to um is possible by multiplying by 1000
-               //    which is 2 097 152 000, and within 32 bits (4 294 967 295).
-               // However, um is still not convenient, so 64 bits (18 446 744 073 709 551 615) is a more accurate alternative.
-               // For each nm there are 2 097 152 000 000 positions.
-               // And for shits:
-               //    mm is 2 097 152                 :          0.009 921 875 000 mm : 32 bit
-               //    um is 2 097 152 000             :          9.921 875 000     um : 32 bit (ideal acc. for 32 bit)
-               //    nm is 2 097 152 000 000         :      9 921.875 000         nm : 64 bit
-               //    pm is 2 097 152 000 000 000     :  9 921 875.000             pm : 64 bit (ideal acc. for 64 bit)
-
-               // XXX Apparently shumatech was sorta wrong about the 21 bits of usage
-               // Yes there are 21 bits, but the values only go from ~338 to ~30681 which is less than 16 bits...
-               // This means that the conversion at NM can use 32 bits :D
-               // It's been noted that the multiplier should be 100.6 (and that it could vary from scale to scale)
-               uint32_t distNM = distInput * 9921;;
-               uint32_t distUM = distNM / 1000;
-               uint32_t distMM = distUM / 1000;
-
-               print("  ");
-               printInt32( distMM );
-               print(" mm  ");
-               printInt32( distUM );
-               print(" um  ");
-               printInt32( distNM );
-               print(" nm  ");
-
-               print( NL );
-
-               // Only delay if still counting
-               if ( read_count > 1 )
-                       delay( 50 );
-       }
-}
-
-
-void cliFunc_free( char* args )
-{
-}
-
-
-void cliFunc_gaugeHelp( char* args )
-{
-}
-
-
-void cliFunc_single( char* args )
-{
-}
-
-
-void cliFunc_start( char* args )
-{
-}
-
-
-void cliFunc_zeroForce( char* args )
-{
-}
-
-
-void cliFunc_zeroPosition( char* args )
-{
-}