fiatlux/firmware/lux.cpp
jedi 75060bc8a8
Some checks failed
continuous-integration/drone/push Build is failing
stash
2022-09-07 22:31:04 +02:00

71 lines
No EOL
1.5 KiB
C++

//
// Created by jedi on 25.06.21.
//
#include "lux.h"
#include <stdio.h>
#include <string.h>
#include <FreeRTOS.h>
#include <task.h>
#include <esp/spi.h>
const int signal_led_pin = 2;
const int cs0 = 15;
const int nint_pin = 4;
const int init_pin = 5;
extern "C" void signal_led(bool state) {
gpio_write(signal_led_pin, !state);
}
void int_to_hex(uint8_t i, char buf[2]) {
uint8_t hex_charset[] = "0123456789ABCDEF";
buf[0] = hex_charset[i >> 4];
buf[1] = hex_charset[i & 0x0F];
}
const gpio_inttype_t int_type = GPIO_INTTYPE_EDGE_NEG;
void gpio_intr_handler(uint8_t gpio_num)
{
uint8_t buf[2];
spi_read(1, 0x0000, buf, 2, SPI_8BIT);
char hex[5] = {0};
int_to_hex(buf[0], hex);
int_to_hex(buf[1], hex + 2);
hex[4] = '\0';
printf("lux_task output: %s\n", hex);
}
extern "C" void lux_task(void *pvParameters) {
gpio_enable(signal_led_pin, GPIO_OUTPUT);
gpio_enable(cs0, GPIO_OUTPUT);
gpio_enable(nint_pin, GPIO_INPUT);
gpio_enable(init_pin, GPIO_OUTPUT);
spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_BIG_ENDIAN, 1);
gpio_set_interrupt(nint_pin, int_type, gpio_intr_handler);
uint8_t charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
uint8_t cnt = 0;
while(1) {
uint8_t out[2];
out[1] = 0x0F;
out[0] = charset[cnt++];
spi_transfer_16(1, *(uint16_t*)out);
vTaskDelay(2000/portTICK_PERIOD_MS);
cnt %= sizeof(charset);
}
vTaskDelete(nullptr);
}