On Wed, Apr 9, 2025 at 2:02 AM Lwazi Dube <lwa...@gmail.com> wrote:

> On Tue, 8 Apr 2025 at 13:32, Xiang Xiao <xiaoxiang781...@gmail.com> wrote:
>
> > On Wed, Apr 9, 2025 at 1:16 AM Lwazi Dube <lwa...@gmail.com> wrote:
> >
> > > On Tue, 8 Apr 2025 at 05:23, Sebastien Lorquet <sebast...@lorquet.fr>
> > > wrote:
> > >
> > > > Hello,
> > > >
> > > > Nathan proposal to have a kconfig, with a default to the historical
> > > > algorithm, is a good solution.
> > > >
> > >
> > > Kconfig will work if you mean this:
> > >
> > > int16_t crc16(FAR const uint8_t *src, size_t len)
> > > {
> > > #if defined(CONFIG_CRC16_IBM)
> > >   return crc16ibmpart(src, len, 0);
> > > #elif defined(CONFIG_CRC16_XMODEM)
> > >   return crc16xmodempart(src, len, 0);
> > > #endif
> > > }
> > >
> >
> > It's a very bad idea to use Kconfig to change the function's behaviour
> like
> > this.
> >
> For example, y/zmodem calls crc16 which expects the result same as
> > crc16xmodempart.
> > With this change, y/zmodem works fine when you select
> CONFIG_CRC16_XMODEM,
> > but stops working when you select CONFIG_CRC16_IBM.
> > To make y/zmodem working with any choice, you have to change crc16 to
> > crc16xmodempart.
> > All code which calls crc16 before, must change to either crc16ibmpart or
> > crc16xmodempart, which means crc16 can't be used in any portable code.
> > Do you really want this behaviour?
> >
> No. Going forward, you should call crc16 if you want IBM. Otherwise call
> the right thing.
>
Kconfig was for preserving historical nuttx behaviour for those who don't
> want to keep up with upstream. It is not perfect.
>

So, we should change onewire_crc16 to crc16 per your suggestion:
https://github.com/apache/nuttx/blob/master/drivers/1wire/1wire_crc.c#L73-L98
When a user upgraded to this version with CONFIG_CRC16_XMODEM, 1wire driver
stopped working suddenly.
Changing the function behaviour by Kconfig doesn't improve any
compatibility, but makes the user write the portable code very hard.

Reply via email to