[Nut-upsdev] Patch for the bestfortress driver 0.02

Oliver Kluge ok23 at kluge-digital.de
Thu Jul 12 18:48:41 UTC 2012


Hi,

nice to read. Sorry, I've been busy for several weeks and just following up.

Thanks
Oliver

Stuart D Gathman wrote:
> Applied this to nut-2.6.3 on fedora, and bestfortress seems to still
> work.  The patch seems reasonable as well.  As to why it isn't needed
> for me, I suspect it has to do with serial IO buffering.  Driver was
> depending on upsflushin() to empty the input buffer before triggering
> another status update.  That doesn't always kill everything (I was
> getting occasional misreads on a server), and the patch simply skips to
> just after '\n' before and after reading a status line.
>
> Long ago, Nostradamus foresaw that on 05/25/2012 10:31 AM, Arnaud Quette
> would write:
>> Hi Jørgen, Oliver and Stuart,
>>
>> I'm not forgetting you...
>> while looking again at bestfortress, I realized I completely missed
>> Jørgen's patch!
>>
>> 2010/4/19 J. Thomsen<list at jth.net>:
>>> --- nut-2.4.3/drivers/bestfortress.c    2010-02-11 22:43:23.000000000 +0100
>>> +++ nut-2.4.3j/drivers/bestfortress.c   2010-04-19 12:17:07.929852889 +0200
>>> @@ -34,7 +34,7 @@
>>>   #endif
>>>
>>>   #define DRIVER_NAME             "Best Fortress UPS driver"
>>> -#define DRIVER_VERSION  "0.02"
>>> +#define DRIVER_VERSION  "0.03"
>>>
>>>   /* driver description structure */
>>>   upsdrv_info_t   upsdrv_info = {
>>> @@ -203,20 +203,26 @@
>>>         int loadva;
>>>         int len;
>>>         int retry;
>>> +       char ch;
>>>
>>>         int checksum_ok, is_online=1, is_off, low_batt, trimming, boosting;
>>>
>>>         for (retry = 0; retry<  5; ++retry) {
>>>                 upsflushin (0, 0, "\r ");
>>>                 upssend ("f\r");
>>> +               while (ser_get_char(upsfd,&ch, 0, UPSDELAY)>  0&&  ch != '\n'); // response starts with \r\n
>>> +               temp[2] = 0;
>>>                 do {
>>> -                       if (upsrecv (temp+2, sizeof temp - 2, ENDCHAR, IGNCHARS)<= 0) {
>>> +                       if ((len = upsrecv (temp+2, sizeof temp - 2, ENDCHAR, IGNCHARS))<= 0) {
>>>                                 upsflushin (0, 0, "\r ");
>>>                                 upssend ("f\r");
>>> +                               while (ser_get_char(upsfd,&ch, 0, UPSDELAY)>  0&&  ch != '\n'); // response starts with \r\n
>>>                         }
>>>                 } while (temp[2] == 0);
>>>
>>> -               /*syslog (LOG_DAEMON | LOG_NOTICE,"ups: got '%s'\n", p);*/
>>> +               /* syslog (LOG_DAEMON | LOG_NOTICE,"ups: got %d chars '%s'\n", len, temp + 2); */
>>> +
>>> +               upsdebugx(5, "data from UPS: len=%d '%s'", len,&temp[2]);
>>>                 /* status example:
>>>                    000000000001000000000000012201210000001200014500000280600000990025000000000301BE
>>>                    000000000001000000000000012401230000001200014800000280600000990025000000000301B7
>>
>
>
> _______________________________________________
> Nut-upsdev mailing list
> Nut-upsdev at lists.alioth.debian.org
> http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/nut-upsdev





More information about the Nut-upsdev mailing list