
Hi Nikolay,
On 23/04/2015 16:38, Nikolay Dimitrov wrote:
As more and more board variants are supported by unified source files, functions like "is_specificboard()" are not scaling well - there's a repetitive code for extracting hw-specific info, and then there's the multiple functions that return true/false for each board variant.
ok - let's see what we can do. I have not thinking about it, because how to get model / version is quite always very specific. Some boards as this one are reading GPIOs, some other are reading from I2C / SPI, some other ones check if some hardware is present.
Here's one proposal how this can be simplified a bit:
typedef enum { BOARD_ALPHA, BOARD_BRAVO, BOARD_CHARLIE, } model_t;
/* Can be also named is_board_variant() or something like this */ static bool is_board_model(model_t m) { /* ... Extract HW info */
switch (m) { case BOARD_ALPHA: if (check for this board model) return true;
The check must be done in board code, because only the board knows the details.
break; /* do same for the other board models */ /* ... */ } return false;
}
Not sure whether such code can be shared between different boards, but can be a step towards unifying the handling of board models/variants.
Trying to get further and see if we can factorize it. Maybe not a lot. We can also think that is_board_model() becomes get_board_model(), or we generalize what was done in tqma6 with a sort of get_board_name(). Maybe we can factorize just a few code, but at least we could provide a "standard" method without having all boards doing the same in different way.
I'm perfectly fine with Fabio's code here, just using the occasion to share my idea.
Thanks - by sharing ideas we can improve code !
Best regards, Stefano