Пример #1
0
void main(){
    if (wiringPiSetup() == -1) {printf("pi setup error\n");exit(1);}
    init_led_pins();
    sleeper.tv_sec  = 0;
    sleeper.tv_nsec  = 1 *   1000000 ;
    sleeper2.tv_sec  = 0;
    sleeper2.tv_nsec = 1 * 200000000 ;
    
    unsigned char c_ne;
    unsigned char c_nw;
    unsigned char c_se;
    unsigned char c_sw;
    
    int rc,old_scheduler_policy;
    struct sched_param my_params;

    old_scheduler_policy=sched_getscheduler(0);

    my_params.sched_priority=sched_get_priority_max(SCHED_RR);
    rc=sched_setscheduler(0,SCHED_RR,&my_params);
    if(rc<0){
       perror("sched_setscheduler to SCHED_RR error");
       exit(0);
    }
    old_scheduler_policy=sched_getscheduler(0);
    rc=sched_setscheduler(0,SCHED_FIFO,&my_params);
    if(rc<0){
       perror("sched_setscheduler to SCHED_FIFO error");
       exit(0);
    }
    old_scheduler_policy=sched_getscheduler(0);
    
    FILE *f;
    int i = 0;
    int rest = 0;
    char buf[255];
    int status = 0;  // 0:loading, 1:playing_time, 2:stop, 3:cry, 4:qrcode, 5:qr_success
    int time = 0;
    while (1) {
        if (rest <= 0) status = 0;
        
        if(status == 0 && (f=fopen("/dev/shm/led_camera.buf","rb"))!=NULL){
          fgets(buf, 255, f);
          if (buf[0] == '2') {
            status = 5;
          } else if (buf[0] == '1' ) {
            status = 4;
          }
          fclose(f);
        }
        
        if(status == 0 && (f=fopen("/dev/shm/led_network.buf","rb"))!=NULL){
          fgets(buf, 255, f);
          if (buf[0] == '1' ) {
            status = 3;
          }
          fclose(f);
        }
        
        if(status == 0 && (f=fopen("/dev/shm/led_ce.buf","rb"))!=NULL){
          fgets(buf, 255, f);
          if (strlen(buf) > 0) {
            if (buf[0] == 'p'){
              status = 2;
            }else{
              status = 1;
              sscanf(buf, "%d", &time);
            }
          }
          fclose(f);
        }
        
        switch(status){
        case 0:
          print_loading(i);
          break;
        case 1:
          print_time(time);
          if (rest <= 0) rest = 20;
          break;
        case 2:
          print_led(stop);
          if (rest <= 0) rest = 20;
          break;
        case 3:
          print_led(cry);
          if (rest <= 0) rest = 20;
          break;
        case 4:
          print_led(qrcode);
          if (rest <= 0) rest = 20;
          break;
        case 5:
          print_led(right);
          if (rest <= 0) rest = 20;
          break;
        }
        
        i++;
        rest--;
    }
}
Пример #2
0
Файл: main.c Проект: anates/Cape
int main (void)
{
	/* Insert system clock initialization code here (sysclk_init()). */

	board_init();
	sysclk_init();
	ioport_init();
	/* Insert application code here, after the board has been initialized. */
	//Own variables
	bool running = true;
	bool error = false;
	uint8_t spi_counter = 0;
	//Testdata
	uint32_t testdata = 0;
	//Create command & data storage
	uint8_t commandUSART[NUMBER_CTRL_BYTES];
	uint8_t commandSPI[NUMBER_CTRL_BYTES];
	//Memory
	uint8_t write_page[EEPROM_PAGE_SIZE];
	uint8_t read_page[EEPROM_PAGE_SIZE];
	//Own inits
	init_led_pins();
	//Boot sequence initiated
	switch_led(BOOT, true);
	init_usart_driver(PIN3_bm, PIN2_bm, &USART_data_Stepper, &USARTD0);
	init_usart_driver(PIN3_bm, PIN2_bm, &USART_data_PreAmp, &USARTC0);
	//Test blinking
	for(int i = 0; i < 10; i++)
	{
		blink_led(BOOT, 100);
		blink_led(RUNNING, 50);
		blink_led(RXTX, 50);
		blink_led(FAILURE, 100);
		blink_led(RXTX, 50);
		blink_led(RUNNING, 50);
	}
	//Load Stuff from memory, no clue what I should load
	memset(read_page, 0x0, EEPROM_PAGE_SIZE);
	nvm_eeprom_read_buffer(POSITION_ADDR, read_page, EEPROM_PAGE_SIZE);
	testdata = ((uint32_t)read_page[3] << 24) | ((uint32_t)read_page[2] << 16) | ((uint32_t)read_page[1] << 8) | read_page[0];
	memset(read_page, 0x0, EEPROM_PAGE_SIZE);
	nvm_eeprom_read_buffer(SPEED_ADDR, read_page, EEPROM_PAGE_SIZE);
	//currentSpeed = ((uint32_t)read_page[0] << 24) | ((uint32_t)read_page[1] << 16) | ((uint32_t)read_page[2] << 8) | read_page[3];
	memset(read_page, 0x0, EEPROM_PAGE_SIZE);
	//Boot sequence finished
	switch_led(BOOT, false);
	//Test of data
	if(testdata != 3)
	{
		switch_led(RXTX, true);
		//testdata = 10;
	}
	else
		switch_led(RUNNING, true);	
	delay_ms(1000);
	testdata = 3;
	//End of test data;	
	if(error != true)
	{
		memset(write_page, 0x0, EEPROM_PAGE_SIZE);
		write_page[3] = testdata >> 24;
		write_page[2] = testdata >> 16;
		write_page[1] = testdata >> 8;
		write_page[0] = testdata;
		nvm_eeprom_load_page_to_buffer(write_page);
		nvm_eeprom_atomic_write_page(POSITION_ADDR);
		memset(write_page, 0x0, EEPROM_PAGE_SIZE);
		write_page[3] = testdata >> 24;
		write_page[2] = testdata >> 16;
		write_page[1] = testdata >> 8;
		write_page[0] = testdata;
		nvm_eeprom_load_page_to_buffer(write_page);
		nvm_eeprom_atomic_write_page(POSITION_ADDR);
		memset(write_page, 0x0, EEPROM_PAGE_SIZE);
		switch_led(RUNNING, false);
		switch_led(RXTX, true);
		switch_led(BOOT, true);
		//Shutdown procedure can be executed
	}