int main() { struct node *binary_tree=NULL, *tmp; struct generator *g_ints; struct generator *g_bt; int *x; int y=190; x = &y; g_ints = generator_start((void*)(x), integer_next, integer_stop); while ((x = (int*)generator_next(g_ints)) != NULL ) { printf("%d\n", *x); } /** * Make a tree look like this * 7 * 3 11 * 2 5 8 14 * 1 10 */ insert(&binary_tree, 7); insert(&binary_tree, 3); insert(&binary_tree, 2); insert(&binary_tree, 1); insert(&binary_tree, 5); insert(&binary_tree, 11); insert(&binary_tree, 8); insert(&binary_tree, 10); insert(&binary_tree, 14); g_bt = generator_start((void*)binary_tree, bt_next, bt_stop); // I have to think of an elegant solution to go back nodes // F**K while ((tmp = (struct node *)generator_next(g_bt)) != NULL) { printf("%d\n", tmp->val); } return 0; }
int main(void) { uint32_t x = 0; uint32_t y = 0; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); if(RCC_WaitForHSEStartUp() == SUCCESS) { RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLKConfig(RCC_HCLK_Div1); RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_8); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); } generator_init(); generator_start(); delay_init(); lcd_init(); lcd_clear(); lcd_dma_start(); for (x=0;x<50;x++) { while (lcd_is_busy()); lcd_noise(); lcd_dma_start(); } while (lcd_is_busy()); for (x=0;x<patternWidthPages*patternHeightPixels;x++) lcd_buf[x] = patternBitmaps[x]; print(1,0,"PLEASE",6); print(0,7,"STAND_BY",8); while (lcd_is_busy()); lcd_dma_start(); delay_ms(20000); for (x=0;x<patternWidthPages*patternHeightPixels;x++) lcd_buf[x] = patternBitmaps[x]; for (x=9;x>0;x--) { putchar_big(3,3,'0'+x); while (lcd_is_busy()); lcd_dma_start(); delay_ms(3000); } lcd_clear(); print(1,1,"URGENT",6); print(0,6,"MESSAGE!",8); while (lcd_is_busy()); lcd_dma_start(); delay_ms(3000); scroll_text(MESSAGE); delay_ms(3000); lcd_clear(); print(1,1,"THAT'S",6); print(3,3,"ALL",3); print(1,5,"FOLKS!",6); while (lcd_is_busy()); lcd_dma_start(); delay_ms(100000); for (x=0;x<10000;x++) { while (lcd_is_busy()); lcd_noise(); lcd_dma_start(); } lcd_clear(); while (lcd_is_busy()); lcd_dma_start(); scroll_text(SECRET_MESSAGE); while(1) //Infinite loop! { while (lcd_is_busy()); lcd_noise(); lcd_dma_start(); } }
uint16_t ir_read_universal_from_PINC(uint8_t* buf, uint16_t maxlen, uint8_t* data, uint8_t pin, uint8_t frequency) { generator_set_freq(frequency); generator_start(); #define TIMEOUT_VALUE 65000 /* A hack to save memory */ const uint16_t output_num_len = DATA_SIZE/2; uint16_t* output_num = (uint16_t*)data; /* ***** */ uint8_t timeout = 0; uint16_t buf_position = 0; uint16_t position_num = 0; generator_tics = 0; while(bit_is_set(PINC, pin)) if(generator_tics >= TIMEOUT_VALUE){ timeout = 1; break; } if(!timeout){ while(position_num < output_num_len){ generator_tics = 0; if(bit_is_set(PINC, pin)){ PORTB &= ~(1 << PB1); while(bit_is_set(PINC, pin)) if(generator_tics >= TIMEOUT_VALUE){ timeout = 1; break; } if(timeout) break; output_num[position_num] = generator_tics; position_num++; }else{ PORTB |= 1 << PB1; while(bit_is_clear(PINC, pin)) if(generator_tics >= TIMEOUT_VALUE){ timeout = 1; break; } if(timeout) break; output_num[position_num] = generator_tics; position_num++; } } } generator_stop(); //we will not need it anymore if(timeout){ buf_position += snprintf_P(buf+buf_position, maxlen-buf_position, PSTR("TIMEOUT")); }else{ uint16_t i; uint16_t to_add; for(i=0; i<position_num; ++i){ to_add = snprintf_P((char*)buf+buf_position, maxlen-buf_position, PSTR("%u_"), output_num[i]); if(to_add + buf_position >= maxlen) break; else buf_position += to_add; } if(position_num > 0) { buf[buf_position] = '\0'; //clearing the last underscore buf_position--; } } PORTB &= ~(1 << PB1); //turn LED on return buf_position; }