diff options
Diffstat (limited to 'src/cw-example/main.c')
-rw-r--r-- | src/cw-example/main.c | 215 |
1 files changed, 0 insertions, 215 deletions
diff --git a/src/cw-example/main.c b/src/cw-example/main.c deleted file mode 100644 index ba0e9c0..0000000 --- a/src/cw-example/main.c +++ /dev/null @@ -1,215 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <math.h> -#include "stm32f4xx_conf.h" -#include "audio.h" - -/* Kernel includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "semphr.h" - -#include "cw.h" - -// Private variables -volatile uint32_t time_var1, time_var2; - -// Private function prototypes -void init(); - -// Tasks -static void detect_button_press(void *pvParameters); -static void audio_task(void *pvParameters); - -struct cw_msg_s { - const char* msg; - int freq; - int dit_duration; -}; - -void vApplicationStackOverflowHook( TaskHandle_t xTask, - signed char *pcTaskName ) -{ - while (1) {}; -} - -int main(void) { - init(); - - cw_init(16000); - - InitializeAudio(Audio16000HzSettings); - SetAudioVolume(128); - - xTaskCreate( - detect_button_press, - "TaskButton", - 4*configMINIMAL_STACK_SIZE, - (void*) NULL, - tskIDLE_PRIORITY + 2UL, - NULL); - - xTaskCreate( - audio_task, - "TaskAudio", - configMINIMAL_STACK_SIZE, - (void*) NULL, - tskIDLE_PRIORITY + 2UL, - NULL); - - /* Start the RTOS Scheduler */ - vTaskStartScheduler(); - - /* HALT */ - while(1); -} - - -static void detect_button_press(void *pvParameters) -{ - int message_select = 0; - struct cw_msg_s msg1 = { "HB9G 1628M", 400, 100 }; - struct cw_msg_s msg2 = { "HB9G JN36BK", 500, 100 }; - struct cw_msg_s msg3 = { "HB9G U 12.5 73", 400, 130 }; - - GPIO_SetBits(GPIOD, GPIO_Pin_12); - - while (1) { - if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)>0) { - - while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) > 0) { - vTaskDelay(100 / portTICK_RATE_MS); /* Button Debounce Delay */ - } - - if (message_select == 0) { - GPIO_ResetBits(GPIOD, GPIO_Pin_12); - GPIO_SetBits(GPIOD, GPIO_Pin_15); - cw_push_message(msg1.msg, msg1.dit_duration, msg1.freq); - message_select++; - } - else if (message_select == 1) { - GPIO_SetBits(GPIOD, GPIO_Pin_12); - cw_push_message(msg2.msg, msg2.dit_duration, msg2.freq); - message_select++; - } - else if (message_select == 2) { - GPIO_ResetBits(GPIOD, GPIO_Pin_15); - cw_push_message(msg3.msg, msg3.dit_duration, msg3.freq); - message_select = 0; - } - - while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0) { - vTaskDelay(100 / portTICK_RATE_MS); /* Button Debounce Delay */ - } - } - taskYIELD(); - } -} - -static void audio_callback(void* context, int select_buffer) -{ - static int16_t audio_buffer0[AUDIO_BUF_LEN]; - static int16_t audio_buffer1[AUDIO_BUF_LEN]; - int16_t *samples; - - if (select_buffer == 0) { - samples = audio_buffer0; - GPIO_SetBits(GPIOD, GPIO_Pin_13); - GPIO_ResetBits(GPIOD, GPIO_Pin_14); - select_buffer = 1; - } else { - samples = audio_buffer1; - GPIO_SetBits(GPIOD, GPIO_Pin_14); - GPIO_ResetBits(GPIOD, GPIO_Pin_13); - select_buffer = 0; - } - - size_t samples_len = cw_fill_buffer(samples, AUDIO_BUF_LEN); - - if (samples_len == 0) { - for (int i = 0; i < AUDIO_BUF_LEN; i++) { - samples[i] = 0; - } - - samples_len = AUDIO_BUF_LEN; - } - - ProvideAudioBufferWithoutBlocking(samples, samples_len); -} - -static void audio_task(void *pvParameters) -{ - int select_buffer = 0; - - PlayAudioWithCallback(audio_callback, NULL); - - while (1) { - taskYIELD(); - } -} - - -void init() { - GPIO_InitTypeDef GPIO_InitStructure; - USART_InitTypeDef USART_InitStructure; - // ---------- SysTick timer -------- // - if (SysTick_Config(SystemCoreClock / 1000)) { - // Capture error - while (1){}; - } - - // Enable full access to FPU (Should be done automatically in system_stm32f4xx.c): - //SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); // set CP10 and CP11 Full Access - - // GPIOD Periph clock enable - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); - - // Configure PD12, PD13, PD14 and PD15 in output pushpull mode - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(GPIOD, &GPIO_InitStructure); - - // Init PushButton - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - - // ------ UART ------ // - - // Clock - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); - - // IO - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(GPIOD, &GPIO_InitStructure); - - GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART1); - GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART1); - - // Conf - USART_InitStructure.USART_BaudRate = 115200; - USART_InitStructure.USART_WordLength = USART_WordLength_8b; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_Parity = USART_Parity_No; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; - USART_Init(USART2, &USART_InitStructure); - - // Enable - USART_Cmd(USART2, ENABLE); -} - |