void print_packet(uint8_t* rx_buffer) { uint8_t length = rx_buffer[0] - 3; uart_newline(); uart_sendstr_p(PSTR("Data Length: ")); utoa(length, (char *)msg_buf, 10); uart_sendstr((char *)msg_buf); uart_newline(); uart_sendstr_p(PSTR("Dec\tHex\tChr")); uart_newline(); uint8_t i; for (i = 1; i <= length; i++) { utoa(rx_buffer[i], (char *)msg_buf, 10); uart_sendstr((char *)msg_buf); uart_sendchar('\t'); utoa(rx_buffer[i], (char *)msg_buf, 16); uart_sendstr((char *)msg_buf); uart_sendchar('\t'); uart_sendchar(rx_buffer[i]); uart_newline(); } uart_newline(); }
void uart_sendstr(char *data) { while (*data) { uart_sendchar(*data); data++; } }
// Read a max of 2 digits from the serial line // return value of -1 means no change (user just hit return) signed char terminalmode_readnum(unsigned char chr_nl){ unsigned char ch; unsigned char lineendcnt=1; unsigned char digits=2; // you can enter max 2 digits signed char rval=-1; if (chr_nl){ // we expect \r\n as line end lineendcnt=2; } ch=uart_getchar(1); while(ch != '\r' && ch !='\n' && digits){ if ((ch >= '0') && (ch <= '9')){ if (rval==-1){ rval=0; } uart_sendchar(ch); // echo number back to terminal rval=rval*10 + (ch - (unsigned char)'0'); digits--; } ch=uart_getchar(1); } // user just pressed return or enter just 1 digit if (ch == '\r' || ch == '\n'){ lineendcnt--; } // get \n or \r\n after a number was entered: while(lineendcnt){ ch=uart_getchar(1); lineendcnt--; } return(rval); }
void print_bits(uint16_t* bits) { utoa(((*bits) & 0x3f) << 4, (char *)msg_buf, 2); uart_sendstr((char *)msg_buf); uart_sendchar(' '); utoa((*bits) >> 6, (char *)msg_buf, 2); uart_sendstr((char *)msg_buf); uart_newline(); }
void uart_sendstr_p(const char *progmem_s) { // print string from program memory char c; while ((c = pgm_read_byte(progmem_s++))) { uart_sendchar(c); } }
/* transmit an answer back to the programmer software, message is * in msg_buf, seqnum is the seqnum of the last message from the programmer software, * len=1..275 according to avr068 */ void transmit_answer(unsigned char seqnum,unsigned int len) { unsigned char cksum; unsigned char ch; int i; if (len>285 || len <1){ // software error len = 2; // msg_buf[0]: not changed msg_buf[1] = STATUS_CMD_FAILED; } uart_sendchar(MESSAGE_START); // 0x1B cksum = MESSAGE_START^0; uart_sendchar(seqnum); cksum^=seqnum; ch=(len>>8)&0xFF; uart_sendchar(ch); cksum^=ch; ch=len&0xFF; uart_sendchar(ch); cksum^=ch; uart_sendchar(TOKEN); // 0x0E cksum^=TOKEN; wd_kick(); for(i=0;i<len;i++){ uart_sendchar(msg_buf[i]); cksum^=msg_buf[i]; } uart_sendchar(cksum); }
int main (void) { init_hw(); LCD_init(); SR_DAT_IN; while (1) { uart_sendchar('A'); uart_sendstr("0123456789abcdef"); // dly_ms(40); if (rcvd_flag) { rcvd_flag=0; uart_sendstr("R:"); if (f_gsm_ok) { f_gsm_ok=0; uart_sendstr("G_OK"); } if (f_gsm_nc) { f_gsm_nc=0; uart_sendstr("G_NC"); } if (f_gsm_cr) { f_gsm_cr=0; uart_sendstr("G_CR"); } if (f_gsm_ring) { f_gsm_ring=0; uart_sendstr("G_RI"); } uart_sendstr("\r\n"); } keys = read_keys(); if (keys==0x01) update_lcd("K1"); else if (keys==0x02) update_lcd("K2"); else if (keys==0x04) update_lcd("K3"); else if (keys==0x08) update_lcd("K4"); else if (keys==0x10) update_lcd("K5"); else if (keys==0x20) update_lcd("K6"); else if (keys==0x40) update_lcd("K7"); else if (keys==0x00) update_lcd("0123456789ABCDEF"); else update_lcd("Kx"); /* if (keys_handling(&key)) { keys = key; } */ } }
void terminalmode(unsigned char chr_nl) { signed char i; // Init terminal uart_sendstr_p(terminal_init); // uart_sendstr_P("AvrUsb500-1.4 terminal mode\r\n"); uart_sendstr_P("Enter SW Version Major ["); utoa(CONFIG_PARAM_SW_MAJOR,(char *)msg_buf, 10); uart_sendstr((char *)msg_buf); uart_sendstr_P("]: "); i=terminalmode_readnum(chr_nl); if (i >=0){ CONFIG_PARAM_SW_MAJOR=(unsigned char)i; } terminalmode_next_line(); uart_sendstr_P("Enter SW Version Minor ["); utoa(CONFIG_PARAM_SW_MINOR,(char *)msg_buf, 10); uart_sendstr((char *)msg_buf); uart_sendstr_P("]: "); i=terminalmode_readnum(chr_nl); if (i >=0){ CONFIG_PARAM_SW_MINOR=(unsigned char)i; } terminalmode_next_line(); eeprom_write_byte(EEPROM_MINOR, CONFIG_PARAM_SW_MINOR); eeprom_write_byte(EEPROM_MAJOR, CONFIG_PARAM_SW_MAJOR); eeprom_write_byte(EEPROM_MAGIC, 20);// magic number=data is valid uart_sendstr_P("\r\nOK, my SW version is now: "); utoa(CONFIG_PARAM_SW_MAJOR,(char *)msg_buf, 10); uart_sendstr((char *)msg_buf); uart_sendchar('.'); if (CONFIG_PARAM_SW_MINOR < 10){ uart_sendchar('0'); } utoa(CONFIG_PARAM_SW_MINOR,(char *)msg_buf, 10); uart_sendstr((char *)msg_buf); uart_sendstr_P("\r\n"); uart_sendstr_P("Ready. Just close the terminal. No reset needed.\r\n"); }
void uart_newline(void) { uart_sendchar('\x1B'); uart_sendchar('E'); }
void terminalmode_next_line(void) { uart_sendchar('\x1B'); uart_sendchar('E'); }