Пример #1
0
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;
}
Пример #2
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();
	}
}
Пример #3
0
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;
}