Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fc660c/fc980c: clean up actuation point adjustment code #21964

Merged
merged 2 commits into from
Sep 14, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -15,15 +15,15 @@ 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 "quantum.h"
fauxpark marked this conversation as resolved.
Show resolved Hide resolved

#include <stdint.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