#include #include #include #include #include "cfs/cfs.h" static struct { char *screen; uint8_t value; } baud[] = { {" 300 baud", SER_BAUD_300}, {" 600 baud", SER_BAUD_600}, {" 1200 baud", SER_BAUD_1200}, {" 2400 baud", SER_BAUD_2400}, {" 4800 baud", SER_BAUD_4800}, {" 9600 baud", SER_BAUD_9600}, {"19200 baud", SER_BAUD_19200} }; static struct { char *screen; uint8_t value; } stop[] = { {"1 stop bit", SER_STOP_1}, {"2 stop bits", SER_STOP_2} }; static struct { char *screen; uint8_t value; } parity[] = { {" No parity", SER_PAR_NONE}, {" Odd parity", SER_PAR_ODD}, {"Even parity", SER_PAR_EVEN} }; uint8_t ipcfg[16]; struct ser_params params; /*-----------------------------------------------------------------------------------*/ uint8_t choose(uint8_t max) { char val; do { printf("\n?"); val = getchar(); } while(val < '0' || val > max + '0'); putchar('\n'); if(val == '0') { exit(0); } putchar('\n'); return val - '0'; } /*-----------------------------------------------------------------------------------*/ void main(void) { int f; uint8_t c; f = cfs_open("contiki.cfg", CFS_READ); if(f == -1) { printf("Loading Config - Error\n"); return; } cfs_read(f, ipcfg, sizeof(ipcfg)); cfs_close(f); for(c = 0; c < sizeof(baud) / sizeof(baud[0]); ++c) { printf("%d: %s\n", c + 1, baud[c].screen); } params.baudrate = baud[choose(c) - 1].value; params.databits = SER_BITS_8; for(c = 0; c < sizeof(stop) / sizeof(stop[0]); ++c) { printf("%d: %s\n", c + 1, stop[c].screen); } params.stopbits = stop[choose(c) - 1].value; for(c = 0; c < sizeof(parity) / sizeof(parity[0]); ++c) { printf("%d: %s\n", c + 1, parity[c].screen); } params.parity = parity[choose(c) - 1].value; params.handshake = SER_HS_HW; f = cfs_open("contiki.cfg", CFS_WRITE); if(f == -1) { printf("\nSaving Config - Error\n"); return; } cfs_write(f, ipcfg, sizeof(ipcfg)); cfs_write(f, ¶ms, sizeof(params)); cfs_close(f); printf("Saving Config - Done\n"); } /*-----------------------------------------------------------------------------------*/