diff --git a/cmd_parser.c b/cmd_parser.c index 5b15188..209a689 100644 --- a/cmd_parser.c +++ b/cmd_parser.c @@ -803,6 +803,109 @@ err: } +void parse_phyget(void) +{ + __xdata uint8_t phy_id, dev_id, hex_size; + __xdata uint16_t reg; + + if (cmd_words_b[1] < 0 || cmd_words_b[2] < 0 || cmd_words_b[3] < 0) { + goto err; + } + + if (atoi_byte(&phy_id, cmd_words_b[1])) { + goto err; + } + + if (atoi_byte(&dev_id, cmd_words_b[2])) { + goto err; + } + + hex_size = atoi_hex(cmd_words_b[3]); + if (hex_size == 0 || hex_size > 2) { + goto err; + } + reg = hexvalue[0]; + if (hex_size == 2) { + reg <<= 8; + reg |= hexvalue[1]; + } + + print_string("PHYGET: "); + itoa(phy_id); + print_string(":"); + itoa(dev_id); + print_string("."); + print_short(reg); + print_string(": VAL: "); + + phy_read(phy_id, dev_id, reg); + print_phy_data(); + write_char('\n'); + return; + +err: + print_string("usage: phyget \n"); + return; +} + + +void parse_physet(void) +{ + __xdata uint8_t phy_id, dev_id, hex_size; + __xdata uint16_t reg, val; + + if (cmd_words_b[1] < 0 || cmd_words_b[2] < 0 || cmd_words_b[3] < 0 || cmd_words_b[4] < 0) { + goto err; + } + + if (atoi_byte(&phy_id, cmd_words_b[1])) { + goto err; + } + + if (atoi_byte(&dev_id, cmd_words_b[2])) { + goto err; + } + + hex_size = atoi_hex(cmd_words_b[3]); + if (hex_size == 0 || hex_size > 2) { + goto err; + } + reg = hexvalue[0]; + if (hex_size == 2) { + reg <<= 8; + reg |= hexvalue[1]; + } + + hex_size = atoi_hex(cmd_words_b[4]); + if (hex_size == 0 || hex_size > 2) { + goto err; + } + val = hexvalue[0]; + if (hex_size == 2) { + val <<= 8; + val |= hexvalue[1]; + } + + print_string("PHYSET: "); + itoa(phy_id); + print_string(":"); + itoa(dev_id); + print_string("."); + print_short(reg); + print_string(": VAL: "); + + phy_write(phy_id, dev_id, reg, val); + + print_short(val); + write_char('\n'); + return; + +err: + print_string("usage: physet \n"); + return; +} + + void parse_rnd(void) { // In order to get a new random numner, this bit has to be set each time! @@ -1205,6 +1308,10 @@ void cmd_parser(void) __banked parse_sdsget(); } else if (cmd_compare(0, "sdsset")) { parse_sdsset(); + } else if (cmd_compare(0, "phyget")) { + parse_phyget(); + } else if (cmd_compare(0, "physet")) { + parse_physet(); } else if (cmd_compare(0, "rnd")) { parse_rnd(); } else if (cmd_compare(0, "passwd")) {