/* * Copyright (C) 2018 SoloKeys, Inc. * * This file is part of Solo. * * Solo 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. * * Solo 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 Solo. If not, see * * This code is available under licenses for commercial use. * Please contact SoloKeys for more information. */ #include #include #include #include "stm32l4xx.h" #include "stm32l4xx_ll_gpio.h" #include "stm32l4xx_ll_rcc.h" #include "stm32l4xx_ll_system.h" #include "stm32l4xx_ll_pwr.h" #include "stm32l4xx_ll_utils.h" #include "stm32l4xx_ll_cortex.h" #include "stm32l4xx_ll_gpio.h" #include "stm32l4xx_ll_usart.h" #include "stm32l4xx_ll_bus.h" #include "stm32l4xx_ll_usb.h" #include "stm32l4xx_hal_pcd.h" #include "usbd_core.h" #include "usbd_desc.h" #include "usbd_hid.h" /*#include "usbd_hid.h"*/ #include APP_CONFIG #include "flash.h" #include "rng.h" #include "led.h" #include "device.h" #include "util.h" #include "fifo.h" #include "log.h" #ifdef TEST_SOLO_STM32 #define Error_Handler() _Error_Handler(__FILE__,__LINE__) #define PAGE_SIZE 2048 #define PAGES 128 // Pages 119-127 are data #define COUNTER2_PAGE (PAGES - 4) #define COUNTER1_PAGE (PAGES - 3) #define STATE2_PAGE (PAGES - 2) #define STATE1_PAGE (PAGES - 1) uint32_t __90_ms = 0; #define IS_BUTTON_PRESSED() (0 == (LL_GPIO_ReadInputPort(SOLO_BUTTON_PORT) & SOLO_BUTTON_PIN)) // Timer6 overflow handler. happens every ~90ms. void TIM6_DAC_IRQHandler() { // timer is only 16 bits, so roll it over here TIM6->SR = 0; __90_ms += 1; } uint32_t millis() { return (((uint32_t)TIM6->CNT) + (__90_ms * 90)); } void _Error_Handler(char *file, int line) { while(1) { } } int main(void) { uint32_t i = 5; hw_init(); LL_GPIO_SetPinMode(SOLO_BUTTON_PORT,SOLO_BUTTON_PIN,LL_GPIO_MODE_INPUT); LL_GPIO_SetPinPull(SOLO_BUTTON_PORT,SOLO_BUTTON_PIN,LL_GPIO_PULL_UP); flash_option_bytes_init(1); while (1) { uint32_t t0 = millis() % 750; if (! IS_BUTTON_PRESSED()) { if (t0 < 750*1/3) { led_rgb(0 | (0 << 8) | (i << 17)); } else if (t0 < 750*2/3) { led_rgb(0 | (i << 8) | (0 << 16)); } else { led_rgb(i | (0 << 8) | (0 << 16)); } } else { led_rgb(0x151515); } } } #endif