int TickFct_USART(int state){ unsigned char doorClosed = (~PIND & 0x10) >> 4; switch(state){ case usartInit: state = usartLocked; USART_Send(0x01, 1); break; case usartLocked: if(lockedFlag){ state = usartLocked; } else{ state = usartUnlocked; USART_Send(0x00, 1); LCD_DisplayString(1, "Unlocking..."); delay_ms(5000); LCD_DisplayString(1, "Press A to Lock C to Change Pin"); } break; case usartUnlocked: if(lockedFlag){ state = usartLocked; USART_Send(0x01, 1); LCD_DisplayString(1, "Locking..."); delay_ms(5000); if(!doorClosed && lockedFlag ){ LCD_DisplayString(1, "ALARM! Enter Pin: "); } else{ LCD_DisplayString(1, "A for Keypad B for Bluetooth"); } } else{ state = usartUnlocked; } break; default: state = usartInit; break; } return state; }
void USART_Echo(void *p_arg) { OS_ERR err; uint32_t recv_length; (void)p_arg; USART_SetRecvByteDoneISR(onRecvByteDone); USART_SetRecvTimeoutISR(onRecvTimeout); USART_SetSendDoneISR(onSendDone); while(1) { OSTaskSemPend(0, OS_OPT_PEND_BLOCKING, (void*)0, &err); recv_length = FIFO_Length(&USART_FIFO); recv_length = FIFO_Get(&USART_FIFO, recv_buffer, recv_length); USART_Send(recv_buffer, recv_length); } }
static int32_t USART1_Send (const void *data, uint32_t num) { return USART_Send (data, num, &USART1_Resources); }
void sendDir(unsigned char sendValue) { if(USART_IsSendReady(1)) { USART_Send(sendValue, 1); } }
/* Print the string through USART with blocking. */ void USART_Printf(USART_TypeDef* USARTx, char *str) { USART_Send(USARTx, str, strlen(str), BLOCKING); }
void mainTick(){ static unsigned char button; static unsigned char pressed; //decrease states for buttonpress button = ~PINA; switch(gameStatus){ case intro: if(GetBit(button,0)){ gameStatus = play; playTime = 0; pressed = 1; currScore = 0; lcdTick(); if(USART_IsSendReady()) USART_Send(0x41); } else if(USART_HasReceived()){ tempMessage = USART_Receive(); if( tempMessage == 0xC1 ){ gameStatus = highscore; playTime = 0; lcdTick(); } else if( tempMessage == 0xC2){ gameStatus = resetHighScore; currHighScore = 0; eeprom_write_byte ((uint8_t*) 46, currHighScore); playTime = 0; lcdTick(); } } else gameStatus = intro; break; case highscore: if(playTime == 500){ gameStatus = intro; lcdTick(); } else gameStatus = highscore; break; case resetHighScore: if(playTime == 500){ gameStatus = intro; lcdTick(); } else gameStatus = resetHighScore; break; case play: if(!(GetBit(button,0) && !pressed) && playTime < 4000 ) gameStatus = play; else if((GetBit(button,0) && !pressed) || playTime == 4000){ gameStatus = gameOver; lcdTick(); playTime = 0; if(currScore > currHighScore){ currHighScore = currScore; eeprom_write_byte ((uint8_t*) 46, currHighScore); } if(USART_IsSendReady()) USART_Send(0x40); } else gameStatus = play; break; case gameOver: if(playTime == 500){ gameStatus = intro; lcdTick(); } else if(playTime < 500) gameStatus = gameOver; else gameStatus = gameOver; break; } switch(gameStatus){ case intro: PORTB = 0; currScore = 0; break; case highscore: playTime++; break; case resetHighScore: playTime++; break; case play: if(!GetBit(button,0)) pressed = 0; playTime++; if(USART_HasReceived()){ tempMessage = USART_Receive(); if(GetBit(tempMessage,7) && !GetBit(tempMessage,6)) if((tempMessage & 0x3F) != currScore) updateScore(tempMessage & 0x3F); } break; case gameOver: playTime++; break; } }