QMK-ify some GPIO macros (#8315)
This commit is contained in:
		
							parent
							
								
									37a4b53c4f
								
							
						
					
					
						commit
						16a15c1cfc
					
				
					 12 changed files with 34 additions and 94 deletions
				
			
		|  | @ -30,8 +30,8 @@ | |||
| void inline apa102_setleds(LED_TYPE *ledarray, uint16_t leds) { apa102_setleds_pin(ledarray, leds, _BV(RGB_DI_PIN & 0xF), _BV(RGB_CLK_PIN & 0xF)); } | ||||
| 
 | ||||
| void static inline apa102_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask_DI, uint8_t pinmask_CLK) { | ||||
|     pinMode(RGB_DI_PIN, PinDirectionOutput); | ||||
|     pinMode(RGB_CLK_PIN, PinDirectionOutput); | ||||
|     setPinOutput(RGB_DI_PIN); | ||||
|     setPinOutput(RGB_CLK_PIN); | ||||
| 
 | ||||
|     apa102_send_array((uint8_t *)ledarray, leds) | ||||
| } | ||||
|  | @ -90,7 +90,7 @@ void apa102_end_frame(uint16_t leds) { | |||
| void apa102_send_byte(uint8_t byte) { | ||||
|     uint8_t i; | ||||
|     for (i = 0; i < 8; i++) { | ||||
|     digitalWrite(RGB_DI_PIN, !!(byte & (1 << (7-i))); | ||||
|     digitalWrite(RGB_CLK_PIN, PinLevelHigh); | ||||
|         writePin(RGB_DI_PIN, !!(byte & (1 << (7 - i)))); | ||||
|         writePinHigh(RGB_CLK_PIN); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "config.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| #include "drashna.h" | ||||
| #include "analog.h" | ||||
| #include "pointing_device.h" | ||||
| #include "pincontrol.h" | ||||
| 
 | ||||
| #define KC_X0 LT(_FN, KC_ESC) | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "action.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  | @ -88,4 +87,4 @@ void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); | |||
| void matrix_write_P(struct CharacterMatrix *matrix, const char *data); | ||||
| void matrix_render(struct CharacterMatrix *matrix); | ||||
| 
 | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "action.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  | @ -88,4 +87,4 @@ void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); | |||
| void matrix_write_P(struct CharacterMatrix *matrix, const char *data); | ||||
| void matrix_render(struct CharacterMatrix *matrix); | ||||
| 
 | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
|  |  | |||
|  | @ -20,7 +20,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||
| #include QMK_KEYBOARD_H | ||||
| #include "protocol/serial.h" | ||||
| #include "timer.h" | ||||
| #include "pincontrol.h" | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -96,27 +95,27 @@ void pins_init(void) { | |||
|  // set pins for pullups, Rts , power &etc. 
 | ||||
| 
 | ||||
|     //print ("pins setup\n");
 | ||||
|     pinMode(VCC_PIN, PinDirectionOutput); | ||||
|     digitalWrite(VCC_PIN, PinLevelLow); | ||||
|     setPinOutput(VCC_PIN); | ||||
|     writePinLow(VCC_PIN); | ||||
| 
 | ||||
| #if ( HANDSPRING == 0) | ||||
| 
 | ||||
| #ifdef CY835 | ||||
|     pinMode(GND_PIN, PinDirectionOutput); | ||||
|     digitalWrite(GND_PIN, PinLevelLow); | ||||
|     setPinOutput(GND_PIN); | ||||
|     writePinLow(GND_PIN); | ||||
| 
 | ||||
|     pinMode(PULLDOWN_PIN, PinDirectionOutput); | ||||
|     digitalWrite(PULLDOWN_PIN, PinLevelLow); | ||||
|     setPinOutput(PULLDOWN_PIN); | ||||
|     writePinLow(PULLDOWN_PIN); | ||||
| #endif | ||||
| 
 | ||||
|     pinMode(DCD_PIN, PinDirectionInput); | ||||
|     pinMode(RTS_PIN, PinDirectionInput);  | ||||
|     setPinInput(DCD_PIN); | ||||
|     setPinInput(RTS_PIN); | ||||
| #endif | ||||
| 
 | ||||
| /* check that the other side isn't powered up. 
 | ||||
|     test=digitalRead(DCD_PIN); | ||||
|     test=readPin(DCD_PIN); | ||||
|     xprintf("b%02X:", test); | ||||
|     test=digitalRead(RTS_PIN); | ||||
|     test=readPin(RTS_PIN); | ||||
|     xprintf("%02X\n", test); | ||||
| */ | ||||
|   | ||||
|  | @ -129,20 +128,20 @@ uint8_t rts_reset(void) { | |||
| // On boot, we keep rts as input, then switch roles here
 | ||||
| // on leaving sleep, we toggle the same way
 | ||||
| 
 | ||||
|     firstread=digitalRead(RTS_PIN); | ||||
|     firstread=readPin(RTS_PIN); | ||||
|    // printf("r%02X:", firstread);
 | ||||
| 
 | ||||
|     pinMode(RTS_PIN, PinDirectionOutput); | ||||
|     setPinOutput(RTS_PIN); | ||||
| 
 | ||||
|     if (firstread == PinLevelHigh) { | ||||
|         digitalWrite(RTS_PIN, PinLevelLow); | ||||
|     if (firstread) { | ||||
|         writePinLow(RTS_PIN); | ||||
|     }  | ||||
|      _delay_ms(10); | ||||
|     digitalWrite(RTS_PIN, PinLevelHigh);   | ||||
|     writePinHigh(RTS_PIN); | ||||
|      | ||||
| 
 | ||||
| /* the future is Arm 
 | ||||
|     if (palReadPad(RTS_PIN_IOPRT) == PinLevelLow) | ||||
|     if (!palReadPad(RTS_PIN_IOPRT)) | ||||
|   { | ||||
|     _delay_ms(10); | ||||
|     palSetPadMode(RTS_PINn_IOPORT, PinDirectionOutput_PUSHPULL); | ||||
|  | @ -224,9 +223,9 @@ uint8_t handspring_handshake(void) { | |||
| } | ||||
| 
 | ||||
| uint8_t handspring_reset(void) { | ||||
|     digitalWrite(VCC_PIN, PinLevelLow); | ||||
|     writePinLow(VCC_PIN); | ||||
|     _delay_ms(5); | ||||
|     digitalWrite(VCC_PIN, PinLevelHigh); | ||||
|     writePinHigh(VCC_PIN); | ||||
| 
 | ||||
|     if ( handspring_handshake() ) { | ||||
|         last_activity = timer_read(); | ||||
|  | @ -250,7 +249,7 @@ void matrix_init(void) | |||
| #endif | ||||
| 
 | ||||
|     print("power up\n"); | ||||
|     digitalWrite(VCC_PIN, PinLevelHigh); | ||||
|     writePinHigh(VCC_PIN); | ||||
| 
 | ||||
|     // wait for DCD strobe from keyboard - it will do this 
 | ||||
|     // up to 3 times, then the board needs the RTS toggled to try again
 | ||||
|  | @ -265,7 +264,7 @@ void matrix_init(void) | |||
|     } | ||||
| 
 | ||||
| #else  /// Palm / HP  device with DCD
 | ||||
|     while( digitalRead(DCD_PIN) != PinLevelHigh ) {;}  | ||||
|     while( !readPin(DCD_PIN) ) {;}  | ||||
|     print("dcd\n"); | ||||
| 
 | ||||
|     rts_reset(); // at this point the keyboard should think all is well. 
 | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "action.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  | @ -88,4 +87,4 @@ void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); | |||
| void matrix_write_P(struct CharacterMatrix *matrix, const char *data); | ||||
| void matrix_render(struct CharacterMatrix *matrix); | ||||
| 
 | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "action.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "action.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  | @ -88,4 +87,4 @@ void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); | |||
| void matrix_write_P(struct CharacterMatrix *matrix, const char *data); | ||||
| void matrix_render(struct CharacterMatrix *matrix); | ||||
| 
 | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include "pincontrol.h" | ||||
| #include "action.h" | ||||
| 
 | ||||
| enum ssd1306_cmds { | ||||
|  | @ -93,4 +92,4 @@ void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); | |||
| void matrix_write_P(struct CharacterMatrix *matrix, const char *data); | ||||
| void matrix_render(struct CharacterMatrix *matrix); | ||||
| 
 | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record); | ||||
|  |  | |||
|  | @ -1,50 +0,0 @@ | |||
| /* Copyright 2016 Wez Furlong
 | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  */ | ||||
| #pragma once | ||||
| // Some helpers for controlling gpio pins
 | ||||
| #include <avr/io.h> | ||||
| 
 | ||||
| enum { | ||||
|     PinDirectionInput  = 0, | ||||
|     PinDirectionOutput = 1, | ||||
|     PinLevelHigh       = 1, | ||||
|     PinLevelLow        = 0, | ||||
| }; | ||||
| 
 | ||||
| // ex: pinMode(B0, PinDirectionOutput);
 | ||||
| static inline void pinMode(uint8_t pin, int mode) { | ||||
|     uint8_t bv = _BV(pin & 0xf); | ||||
|     if (mode == PinDirectionOutput) { | ||||
|         _SFR_IO8((pin >> 4) + 1) |= bv; | ||||
|     } else { | ||||
|         _SFR_IO8((pin >> 4) + 1) &= ~bv; | ||||
|         _SFR_IO8((pin >> 4) + 2) &= ~bv; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // ex: digitalWrite(B0, PinLevelHigh);
 | ||||
| static inline void digitalWrite(uint8_t pin, int mode) { | ||||
|     uint8_t bv = _BV(pin & 0xf); | ||||
|     if (mode == PinLevelHigh) { | ||||
|         _SFR_IO8((pin >> 4) + 2) |= bv; | ||||
|     } else { | ||||
|         _SFR_IO8((pin >> 4) + 2) &= ~bv; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Return true if the pin is HIGH
 | ||||
| // digitalRead(B0)
 | ||||
| static inline bool digitalRead(uint8_t pin) { return _SFR_IO8(pin >> 4) & _BV(pin & 0xf); } | ||||
|  | @ -2,7 +2,6 @@ | |||
| #define SOLENOID_H | ||||
| 
 | ||||
| #include <timer.h> | ||||
| #include "pincontrol.h" | ||||
| 
 | ||||
| 
 | ||||
| #define SOLENOID_DEFAULT_DWELL 12 | ||||
|  | @ -45,7 +44,7 @@ void solenoid_toggle(void) { | |||
| } | ||||
| 
 | ||||
| void solenoid_stop(void) { | ||||
|   digitalWrite(SOLENOID_PIN, PinLevelLow); | ||||
|   writePinLow(SOLENOID_PIN); | ||||
|   solenoid_on = false; | ||||
|   solenoid_buzzing = false; | ||||
| } | ||||
|  | @ -59,7 +58,7 @@ void solenoid_fire(void) { | |||
|   solenoid_on = true; | ||||
|   solenoid_buzzing = true; | ||||
|   solenoid_start = timer_read(); | ||||
|   digitalWrite(SOLENOID_PIN, PinLevelHigh); | ||||
|   writePinHigh(SOLENOID_PIN); | ||||
| } | ||||
| 
 | ||||
| void solenoid_check(void) { | ||||
|  | @ -80,20 +79,20 @@ void solenoid_check(void) { | |||
|     if (elapsed / SOLENOID_MIN_DWELL % 2 == 0){ | ||||
|       if (!solenoid_buzzing) { | ||||
|         solenoid_buzzing = true; | ||||
|         digitalWrite(SOLENOID_PIN, PinLevelHigh); | ||||
|         writePinHigh(SOLENOID_PIN); | ||||
|       } | ||||
|     } | ||||
|     else { | ||||
|       if (solenoid_buzzing) { | ||||
|         solenoid_buzzing = false; | ||||
|         digitalWrite(SOLENOID_PIN, PinLevelLow); | ||||
|         writePinLow(SOLENOID_PIN); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void solenoid_setup(void) { | ||||
|   pinMode(SOLENOID_PIN, PinDirectionOutput); | ||||
|   setPinOutput(SOLENOID_PIN); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ryan
						Ryan