Skip to content

Commit

Permalink
fc660c/fc980c: clean up actuation point adjustment code (#21964)
Browse files Browse the repository at this point in the history
Co-authored-by: Joel Challis <[email protected]>
  • Loading branch information
fauxpark and zvecr authored Sep 14, 2023
1 parent 20cbe37 commit f9ed1e3
Show file tree
Hide file tree
Showing 20 changed files with 254 additions and 630 deletions.
87 changes: 0 additions & 87 deletions keyboards/fc660c/actuation_point.c

This file was deleted.

52 changes: 52 additions & 0 deletions keyboards/fc660c/ad5258.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
Copyright 2017 Balz Guenat
based on work by Jun Wako <[email protected]>
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/>.
*/

#include "ad5258.h"
#include "i2c_master.h"

///////////////////////////////////////////////////////////////////////////////
//
// AD5258 I2C digital potentiometer
// http://www.analog.com/media/en/technical-documentation/data-sheets/AD5258.pdf
//
#define AD5258_I2C_ADDRESS 0x18
#define AD5258_INST_RDAC 0x00
#define AD5258_INST_EEPROM 0x20

void ad5258_init(void) {
i2c_init();
}

uint8_t ad5258_read_rdac(void) {
// read RDAC register
uint8_t ret = 0;
i2c_readReg(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &ret, 1, 100);
return ret;
}

uint8_t ad5258_read_eeprom(void) {
uint8_t ret = 0;
i2c_readReg(AD5258_I2C_ADDRESS, AD5258_INST_EEPROM, &ret, 1, 100);
return ret;
}

void ad5258_write_rdac(uint8_t rdac) {
// write RDAC register:
uint8_t data = rdac & 0x3F;
i2c_writeReg(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &data, 1, 100);
}
28 changes: 28 additions & 0 deletions keyboards/fc660c/ad5258.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
Copyright 2017 Balz Guenat
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

#include <stdint.h>

void ad5258_init(void);

uint8_t ad5258_read_rdac(void);

uint8_t ad5258_read_eeprom(void);

void ad5258_write_rdac(uint8_t rdac);
2 changes: 0 additions & 2 deletions keyboards/fc660c/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* These options are also useful to firmware size reduction.
*/

#define USE_I2C

/* disable debug print */
//#define NO_DEBUG

Expand Down
45 changes: 38 additions & 7 deletions keyboards/fc660c/fc660c.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,47 @@ 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/>.
*/
#include "quantum.h"

#ifdef ACTUATION_DEPTH_ADJUSTMENT
#include "actuation_point.h"
#endif
#include "fc660c.h"

void matrix_init_kb(void) {
#ifdef ACTUATION_DEPTH_ADJUSTMENT
void matrix_init_kb(void) {
adjust_actuation_point(ACTUATION_DEPTH_ADJUSTMENT);
#endif

matrix_init_user();
matrix_init_user();
}

void actuation_point_up(void) {
// write RDAC register: lower value makes actuation point shallow
uint8_t rdac = ad5258_read_rdac();
if (rdac == 0) {
ad5258_write_rdac(0);
} else {
ad5258_write_rdac(rdac - 1);
}
}

void actuation_point_down(void) {
// write RDAC register: higher value makes actuation point deep
uint8_t rdac = ad5258_read_rdac();
if (rdac == 63) {
ad5258_write_rdac(63);
} else {
ad5258_write_rdac(rdac + 1);
}
}

void adjust_actuation_point(int offset) {
ad5258_init();
uint8_t rdac = ad5258_read_eeprom() + offset;
if (rdac > 63) { // protects from under and overflows
if (offset > 0) {
ad5258_write_rdac(63);
} else {
ad5258_write_rdac(0);
}
} else {
ad5258_write_rdac(rdac);
}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.

#pragma once

#include <stdint.h>
#include "quantum.h"

#ifdef ACTUATION_DEPTH_ADJUSTMENT
# include "ad5258.h"

// see keymaps/actuation-point-example to see how these functions can be used.
uint8_t read_rdac(void);
uint8_t read_eeprom(void);
void actuation_point_up(void);
void actuation_point_down(void);

// be careful with this.
void adjust_actuation_point(int offset);
#endif
Loading

0 comments on commit f9ed1e3

Please sign in to comment.