Skip to content

Commit

Permalink
first working (unoptimized) poller version tested with i2c only
Browse files Browse the repository at this point in the history
  • Loading branch information
FearlessSpiff committed Nov 12, 2023
1 parent 9130582 commit b00f035
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 8 deletions.
22 changes: 20 additions & 2 deletions app/boards/shields/splitkb_aurora_corne/trackpad.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,29 @@
#include <zephyr/logging/log.h>

#include <zmk/hid.h>
#include <zephyr/device.h>
#include <zephyr/kernel.h>
#include <zmk/endpoints.h>
#include <zmk/keymap.h>
#include <dt-bindings/zmk/mouse.h>

#define SCROLL_DIV_FACTOR 5

#define THREAD_STACK_SIZE 1024
#define THREAD_PRIORITY 5

LOG_MODULE_REGISTER(trackpad, CONFIG_SENSOR_LOG_LEVEL);

const struct device *trackpad = DEVICE_DT_GET(DT_INST(0, cirque_pinnacle));
const struct device *trackpad = DEVICE_DT_GET(DT_NODELABEL(trackpad));

static void handle_trackpad(const struct device *dev, const struct sensor_trigger *trig) {
static uint8_t last_pressed = 0;
int ret = sensor_sample_fetch(dev);
if (ret < 0) {
if (ret < 0 && ret != -EAGAIN) {
LOG_ERR("fetch: %d", ret);
return;
} else if (ret == -EAGAIN) {
return;
}
struct sensor_value dx, dy, btn;
ret = sensor_channel_get(dev, SENSOR_CHAN_POS_DX, &dx);
Expand Down Expand Up @@ -63,6 +70,7 @@ static void handle_trackpad(const struct device *dev, const struct sensor_trigge
last_pressed = btn.val1;
}

#ifdef CONFIG_PINNACLE_TRIGGER
static int trackpad_init() {
struct sensor_trigger trigger = {
.type = SENSOR_TRIG_DATA_READY,
Expand All @@ -77,3 +85,13 @@ static int trackpad_init() {
}

SYS_INIT(trackpad_init, APPLICATION, CONFIG_KSCAN_INIT_PRIORITY);
#else
void poll_trackpad(void *a, void *b, void *c) {
while (1) {
handle_trackpad(trackpad, NULL);
k_sleep(K_MSEC(10));
}
}

K_THREAD_DEFINE(my_tid, THREAD_STACK_SIZE, poll_trackpad, NULL, NULL, NULL, THREAD_PRIORITY, 0, 0);
#endif
30 changes: 24 additions & 6 deletions app/module/drivers/sensor/pinnacle/pinnacle.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ static int pinnacle_channel_get(const struct device *dev, enum sensor_channel ch
static int pinnacle_sample_fetch(const struct device *dev, enum sensor_channel chan) {
uint8_t packet[3];
int ret;
ret = pinnacle_seq_read(dev, PINNACLE_STATUS1, packet, 0);
ret = pinnacle_seq_read(dev, PINNACLE_STATUS1, packet, 1);
if (ret < 0) {
LOG_ERR("read status: %d", ret);
return ret;
Expand All @@ -113,13 +113,24 @@ static int pinnacle_sample_fetch(const struct device *dev, enum sensor_channel c
data->btn = packet[0] & PINNACLE_PACKET0_BTN_PRIM;
data->dx = (int16_t) (int8_t) packet[1];
data->dy = (int16_t) (int8_t) packet[2];
#ifdef CONFIG_PINNACLE_TRIGGER
if (!data->in_int) {
ret = pinnacle_write(dev, PINNACLE_STATUS1, 0); // Clear SW_DR
ret = pinnacle_write(dev, PINNACLE_STATUS1, 0); // Clear SW_DR & SW_CC
if (ret < 0) {
LOG_ERR("clear dr: %d", ret);
return ret;
}
}
#else
// Clear SW_DR & SW_CC
ret = pinnacle_write(dev, PINNACLE_STATUS1, 0);
if (ret < 0) {
LOG_ERR("clear dr & cc: %d", ret);
return ret;
}
k_sleep(K_MSEC(50));
#endif

return 0;
}

Expand Down Expand Up @@ -196,7 +207,7 @@ static int pinnacle_init(const struct device *dev) {
LOG_ERR("can't reset %d", ret);
return ret;
}
k_msleep(20);
k_msleep(30);
ret = pinnacle_write(dev, PINNACLE_STATUS1, 0); // Clear CC
if (ret < 0) {
LOG_ERR("can't write %d", ret);
Expand Down Expand Up @@ -235,6 +246,13 @@ static int pinnacle_init(const struct device *dev) {
LOG_ERR("can't write %d", ret);
return ret;
}
// Clear SW_DR & SW_CC
ret = pinnacle_write(dev, PINNACLE_STATUS1, 0);
if (ret < 0) {
LOG_ERR("clear dr & cc: %d", ret);
return ret;
}
k_sleep(K_MSEC(50));

#ifdef CONFIG_PINNACLE_TRIGGER
data->dev = dev;
Expand Down Expand Up @@ -263,10 +281,10 @@ static int pinnacle_init(const struct device *dev) {

static const struct sensor_driver_api pinnacle_driver_api = {
#if CONFIG_PINNACLE_TRIGGER
.trigger_set = pinnacle_trigger_set,
.trigger_set = pinnacle_trigger_set,
#endif
.sample_fetch = pinnacle_sample_fetch,
.channel_get = pinnacle_channel_get,
.sample_fetch = pinnacle_sample_fetch,
.channel_get = pinnacle_channel_get,
};

#define PINNACLE_INST(n) \
Expand Down

0 comments on commit b00f035

Please sign in to comment.