On Tue, Jan 26, 2016 at 10:36 AM, Olliver Schinagl <o.schin...@ultimaker.com> wrote: > Hey Joe, > > > On 26-01-16 17:31, Joe Hershberger wrote: >> >> On Tue, Jan 26, 2016 at 10:27 AM, Olliver Schinagl >> <o.schin...@ultimaker.com> wrote: >>> >>> Hey Joe, >>> >>> >>> On 26-01-16 01:45, Joe Hershberger wrote: >>>> >>>> On Mon, Dec 14, 2015 at 6:41 AM, Olliver Schinagl >>>> <o.schin...@ultimaker.com> wrote: >>>>> >>>>> This patch adds a little tool that takes a generic MAC address and >>>>> generates a CRC byte for it. The output is the full MAC address without >>>>> any separators, ready written into an EEPROM. >>>>> >>>>> Signed-off-by: Olliver Schinagl <o.schin...@ultimaker.com> >>>>> --- >>>>> tools/Makefile | 4 ++++ >>>>> tools/gen_mac_addr.c | 51 >>>>> +++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>> 2 files changed, 55 insertions(+) >>>>> create mode 100644 tools/gen_mac_addr.c >>>>> >>>>> diff --git a/tools/Makefile b/tools/Makefile >>>>> index 4a50744..6191c26 100644 >>>>> --- a/tools/Makefile >>>>> +++ b/tools/Makefile >>>>> @@ -43,6 +43,10 @@ envcrc-objs := envcrc.o lib/crc32.o >>>>> common/env_embedded.o lib/sha1.o >>>>> hostprogs-$(CONFIG_CMD_NET) += gen_eth_addr >>>>> HOSTCFLAGS_gen_eth_addr.o := -pedantic >>>>> >>>>> +hostprogs-$(CONFIG_CMD_NET) += gen_mac_addr >>>>> +gen_mac_addr-objs := gen_mac_addr.o lib/crc8.o >>>>> +HOSTCFLAGS_gen_mac_addr.o := -pedantic >>>>> + >>>>> hostprogs-$(CONFIG_CMD_LOADS) += img2srec >>>>> HOSTCFLAGS_img2srec.o := -pedantic >>>>> >>>>> diff --git a/tools/gen_mac_addr.c b/tools/gen_mac_addr.c >>>>> new file mode 100644 >>>>> index 0000000..bd8688f >>>>> --- /dev/null >>>>> +++ b/tools/gen_mac_addr.c >>>> >>>> This is not "generating a mac address", right? Its point is to create >>>> a CRC for the user-supplied MAC address. >>>> >>>> Perhaps a better name would be "gen_ethaddr_rom_crc". >>> >>> Yes, it takes a mac address as input and generates a macaddress + crc as >>> output. >>> >>> e.g. 11:22:33:44:55:66 -> 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0xcc >>> >>> But maybe it should get some flags to output either both (as described >>> here) >>> or just the crc based on the input, and then a few flags to either output >>> it >>> in hex format or as an int? >> >> What ever features you think will be useful for the users of this dev >> board I guess. I'm not sure if this is a platform (the included >> eeprom) that would carry over into other products. > > Why not? It just reads a mac address and generates a crc8-appended mac > address (or just the crc8) everybody that uses a mac address to be stored > somewhere (even if the env is pre-generated) could use this. I don't think > it is limited to our platform since it does something very generic.
OK. > >> >>>>> @@ -0,0 +1,51 @@ >>>>> +/* >>>>> + * (C) Copyright 2016 >>>>> + * Olliver Schinagl <o.schin...@ultimaker.com> >>>>> + * >>>>> + * SPDX-License-Identifier: GPL-2.0+ >>>>> + */ >>>>> + >>>>> +#include <ctype.h> >>>>> +#include <stdint.h> >>>>> +#include <stdio.h> >>>>> +#include <stdlib.h> >>>>> +#include <string.h> >>>>> +#include <u-boot/crc.h> >>>>> + >>>>> + >>>>> +int main(int argc, char *argv[]) >>>>> +{ >>>>> + uint_fast8_t i; >>>>> + uint8_t mac_addr[7] = { 0x00 }; >>>>> + >>>>> + if (argc < 2) { >>>>> + puts("Please supply a MAC address."); >>>>> + return -1; >>>>> + } >>>>> + >>>>> + if (!((strlen(argv[1]) == 12) || (strlen(argv[1]) == 17))) { >>>>> + puts("Please supply a valid MAC address with >>>>> optionaly\n" >>>>> + "dashes (-) or colons (:) as seperators."); >>>>> + return -1; >>>>> + } >>>> >>>> You could use the eth_validate_ethaddr_str() function here instead of >>>> this >>>> code. >>> >>> A right, well when I first wrote this, I think this didn't exist there >>> yet. >>> I'll replace it and use it instead. >>>> >>>> >>>>> + >>>>> + i = 0; >>>>> + while (*argv[1] != '\0') { >>>>> + char nibble[2] = { 0x00, '\n' }; /* for strtol */ >>>>> + >>>>> + nibble[0] = *argv[1]++; >>>>> + if (isxdigit(nibble[0])) { >>>>> + if (isupper(nibble[0])) >>>>> + nibble[0] = tolower(nibble[0]); >>>>> + mac_addr[i >> 1] |= strtol(nibble, NULL, 16) << >>>>> ((i % 2) ? 0 : 4) & ((i % 2) ? 0x0f : 0xf0); >>>>> + i++; >>>>> + } >>>>> + } >>>> >>>> Instead of all this you could just compile in (maybe it already is?) >>>> the eth_parse_enetaddr() function that U-Boot uses for this very >>>> purpose. >>> >>> I'll see if I can have access to this function and then rewrite this to >>> use >>> that. >>> >>>>> + mac_addr[6] = crc8(mac_addr, 6); >>>>> + >>>>> + for (i = 0; i < 7; i++) >>>>> + printf("%.2x", mac_addr[i]); >>>>> + putchar('\n'); >>>>> + >>>>> + return 0; >>>>> +} >>>>> -- >>>>> 2.6.2 >>>>> >>>>> _______________________________________________ >>>>> U-Boot mailing list >>>>> U-Boot@lists.denx.de >>>>> http://lists.denx.de/mailman/listinfo/u-boot >>> >>> >>> -- >>> Met vriendelijke groeten, Kind regards, 与亲切的问候 >>> >>> Olliver Schinagl >>> Software Engineer >>> Research & Development >>> Ultimaker B.V. >>> > > -- > Met vriendelijke groeten, Kind regards, 与亲切的问候 > > Olliver Schinagl > Software Engineer > Research & Development > Ultimaker B.V. > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot