void bt_init( void ) { uint8_t num_baudrates = sizeof(baudrates)/sizeof(uint32_t); uint8_t i = 0; int16_t received; /* first set BT module AT mode pin */ io_on( HC05_CMD_PORT, HC05_CMD_PIN); /* now wait 100ms */ delay(100); /* iterate through baudrates */ do { usart_config_baudrate( baudrates[i]); usart_flush(); /* send AT command */ usart_transmit( (uint8_t *)BTCMD_AT, BTCMD_AT_LEN); /* wait for response */ received = usart_receive( response_buffer, 4, RESPONSE_TIMEOUT); /* we found a valid answer */ if( received > 0) { break; } i++; }while(i < num_baudrates); if( i > 0) { /* module seems to be configured for default -> reprogram */ usart_transmit( (uint8_t *)BTCMD_SET_NAME, BTCMD_SET_NAME_LEN); received = usart_receive( response_buffer, RESPONSE_LENGTH, RESPONSE_TIMEOUT); /* module seems to be configured for default -> reprogram */ usart_transmit( (uint8_t *)BTCMD_SET_PW, BTCMD_SET_PW_LEN); received = usart_receive( response_buffer, RESPONSE_LENGTH, RESPONSE_TIMEOUT); /* module seems to be configured for default -> reprogram */ usart_transmit( (uint8_t *)BTCMD_SET_BAUD, BTCMD_SET_BAUD_LEN); received = usart_receive( response_buffer, RESPONSE_LENGTH, RESPONSE_TIMEOUT); } /* send reset */ usart_transmit( (uint8_t *)BTCMD_RESET, BTCMD_RESET_LEN); received = usart_receive( response_buffer, RESPONSE_LENGTH, RESPONSE_TIMEOUT); /* leave AT mode */ io_off( HC05_CMD_PORT, HC05_CMD_PIN); /* wait a bit */ delay( 100); usart_config_baudrate( baudrates[0]); usart_flush(); bt_ready = 1; }
/* Get character from stream */ int uart_getchar(FILE *stream) { char data = usart_receive(); // Temporarily store the received data if(data == '\r') { data = '\n'; // Convert for terminal to understand } // stream_printf(data, stream); // Send to console what has been received, so we can see when typing return data; }
int8_t debug_process(const message_t *msg) { int8_t msg_recognized = 1; switch (msg->cmd) { default: msg_recognized = 0; break; } if (usart_rx_ischar()) { unsigned char ch = usart_receive(); switch (ch) { case 'v': { message_t *nmsg = loop_put_msg_begin(); nmsg->cmd = Cmd_SayTime; nmsg->arg1p = &gv_clock_main; // WARN: discards volatile loop_put_msg_end(nmsg); break; } #define SBUF_SIZE (2*SNDBUF_SIZE) case 'O': { char *sbuf = (char*)g_sound_buf; usart_sendstr_P(PSTR(" / file open: Enter abs. file name = ")); usart_getline(sbuf, SBUF_SIZE); usart_sendstr_P(PSTR("\nFile name: '")); usart_sendstr(sbuf); usart_sendstr_P(PSTR("'\n")); message_t *nmsg = loop_put_msg_begin(); nmsg->cmd = Cmd_PlayFileName; nmsg->arg1p = sbuf; loop_put_msg_end(nmsg); break; } default: { usart_sendstr_P(PSTR("\nCmd? ")); break; } } } return msg_recognized; }