Mercurial > avr_jtag
view tests/cptest.c @ 1:f7c60e525801
cptest and cp_ping.py to test cmd_proto.c.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sat, 21 Feb 2009 20:20:06 +0800 |
parents | |
children | e410832c3280 |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include <util/delay.h> #include "avriotools.h" #include "cmd_proto.h" #define BAUD_RATE 420000 void flash_init(void) { pin_mode(&PORTB, PINB0, PM_OUTPUT); pin_mode(&PORTB, PINB1, PM_OUTPUT); pin_lo(PORTB, PINB0); pin_lo(PORTB, PINB1); } void flash_led(void) { pin_hi(PORTB, PINB0); _delay_ms(50); pin_lo(PORTB, PINB0); } int main(int argc, char * const argv[]) { int c; cmd_proto_t *cp; cp_cmd_t *cmd; char buf[255 + CP_CMD_OVERHEAD]; int sz; int i; flash_init(); uart_init(BAUD_RATE); cp = cmd_proto_new(); while(1) { uart_getc(c); cmd = cmd_proto_rcv(cp, c); if(cmd == NULL) continue; flash_led(); if(cmd == &BAD_CMD) { memcpy(buf + CP_CMD_HEAD_SZ, "bad cmd", 7); sz = cmd_proto_cmd_fill(buf, cmd->seq, CPCMD_NAK, 7); for(i = 0; i < sz; i++) uart_putc(buf[i]); continue; } if(cmd == &CSUM_ERR_CMD) { memcpy(buf + CP_CMD_HEAD_SZ, "csum err", 8); sz = cmd_proto_cmd_fill(buf, cmd->seq, CPCMD_NAK, 8); for(i = 0; i < sz; i++) uart_putc(buf[i]); continue; } switch(cmd->code) { case CPCMD_PING: memcpy(buf + CP_CMD_HEAD_SZ, cmd->data, cmd->data_sz); sz = cmd_proto_cmd_fill(buf, cmd->seq, CPCMD_PONG, cmd->data_sz); for(i = 0; i < sz; i++) uart_putc(buf[i]); break; default: memcpy(buf + CP_CMD_HEAD_SZ, cmd->data, cmd->data_sz); sz = cmd_proto_cmd_fill(buf, cmd->seq, CPCMD_DATA, cmd->data_sz); for(i = 0; i < sz; i++) uart_putc(buf[i]); } } }