OpenRTX/platform/targets/ttwrplus/platform.c

134 wiersze
3.4 KiB
C

/***************************************************************************
* Copyright (C) 2023 by Federico Amedeo Izzo IU2NUO, *
* Niccolò Izzo IU2KIN *
* Silvano Seva IU2KWO *
* *
* 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 3 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 <interfaces/platform.h>
#include <hwconfig.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/sensor.h>
#define BUTTON_PTT_NODE DT_NODELABEL(button_ptt)
static const struct gpio_dt_spec button_ptt = GPIO_DT_SPEC_GET_OR(BUTTON_PTT_NODE, gpios, {0});
static const struct device *const qdec_dev = DEVICE_DT_GET(DT_ALIAS(qdec0));
static const hwInfo_t hwInfo =
{
.uhf_maxFreq = 430,
.uhf_minFreq = 440,
.uhf_band = 1,
.name = "ttwrplus"
};
void platform_init()
{
// Setup GPIO for PTT and rotary encoder
if(gpio_is_ready_dt(&button_ptt) == false)
printk("Error: button device %s is not ready\n", button_ptt.port->name);
int ret = gpio_pin_configure_dt(&button_ptt, GPIO_INPUT);
if (ret != 0)
{
printk("Error %d: failed to configure %s pin %d\n", ret,
button_ptt.port->name, button_ptt.pin);
}
// Rotary encoder is read using hardware pulse counter
if(device_is_ready(qdec_dev) == false)
printk("Qdec device is not ready\n");
}
void platform_terminate()
{
}
uint16_t platform_getVbat()
{
return 0;
}
uint8_t platform_getMicLevel()
{
return 0;
}
uint8_t platform_getVolumeLevel()
{
return 0;
}
int8_t platform_getChSelector()
{
int rc = sensor_sample_fetch(qdec_dev);
if (rc != 0)
{
printk("Failed to fetch sample (%d)\n", rc);
return 0;
}
struct sensor_value val;
rc = sensor_channel_get(qdec_dev, SENSOR_CHAN_ROTATION, &val);
if (rc != 0)
{
printk("Failed to get data (%d)\n", rc);
return 0;
}
// The esp32-pcnt sensor returns a signed 16-bit value: we remap it into a
// signed 8-bit one.
return (int8_t) val.val1;
}
bool platform_getPttStatus()
{
return gpio_pin_get_dt(&button_ptt);
}
bool platform_pwrButtonStatus()
{
return true;
}
void platform_ledOn(led_t led)
{
(void) led;
}
void platform_ledOff(led_t led)
{
(void) led;
}
void platform_beepStart(uint16_t freq)
{
(void) freq;
}
void platform_beepStop()
{
;
}
const hwInfo_t *platform_getHwInfo()
{
return &hwInfo;
}