<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Jack,<div><br></div><div>can.c has the logic. This is related to two messages B1=0x96 (doors) and B1=0x95 (charging mode) handed on can id#100 (in can_poll0 function). The logic was originally inherited from scott451 via RCM, and there doesn't seem to be a 100% match between what is documented and what we are seeing on the bus.</div><div><br></div><div>The logic we are aiming for is to alert whenever charging is stopped. Done is ok, but stopped (however) should be alerted.</div><div><br></div><div>Two global variables are used:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'Andale Mono'">extern unsigned char car_charging; // 1=yes/0=no<br>extern unsigned char car_stopped; // 1=yes,0=no</font><br></div></blockquote><div><br></div><div>The car_charging variable is set depending on bit #4 of B2 of message B1=0x96 (the doors message) and is designed to purely reflect whether the car is currently being charged or not. The car_stopped variable is set when charging stops (ie; a transition from charging -> not charging), and cleared after any necessary alert has been issued. This is also done on B1=0x96 (the doors message):</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">if ((car_charging) && !(can_databuffer[1] & 0x10)) // Already Charging? Stopped?</span><br><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">  {</span><br><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">  car_stopped = 1; // Yes Roadster stopped charging, set flag.</span><br><div><div><font class="Apple-style-span" face="'Andale Mono'">  }</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'">car_charging = (can_databuffer[1] >> 4) & 0x01; //Charging status</font></div></div><div><br></div></blockquote><div>That seems a bit messy, and maybe better implemented by as:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><div><font class="Apple-style-span" face="'Andale Mono'">// Suggested improvement:</font></div><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">if ((car_charging) && !(can_databuffer[1] & 0x10)) // Already Charging? Stopped?</span><br><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">  {</span><br><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">  car_stopped = 1; // Yes Roadster stopped charging, set flag.</span><br><div><div><font class="Apple-style-span" face="'Andale Mono'">  }</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'">car_charging = (can_databuffer[1] & 0x10); //Charging status</font></div></div></div></blockquote><div><font class="Apple-style-span" face="'Andale Mono'"><br></font></div><div>The alert itself is raised in the processing of id#100 message B1=0x95 (the charge status message):</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font class="Apple-style-span" face="'Andale Mono'">if ((car_chargestate >= 0x15)&&(car_stopped)) // Stopped charging?</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  {</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  car_stopped = 0;</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  net_notify_status();</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  }</font></div></div></blockquote><div><br></div><div><div><div>The car_chargestate is B2 from the same message (id#100 B1=0x95 charge status). The data we have on that byte is:</div><div><br></div></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><div>0x01=charging</div><div>0x02=top off</div><div>0x04=done</div><div>0x0d=preparing to charge</div><div>0x0f=heating</div><div>0x15-0x19=stopped charging</div></div></div></blockquote><div><div><div><br></div><div>I can see one issue, that when the charge stops of car_chargestate is <0x15, the car_stopped can never get cleared. Perhaps we need to change that code to:</div><div><br></div><div><blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div><div><font class="Apple-style-span" face="'Andale Mono'">// Suggested improvement:</font></div><div><font class="Apple-style-span" face="'Andale Mono'">if (car_stopped) // Stopped charging?</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  {</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  car_stopped = 0;</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  if (car_chargestate >= 0x15)</font></div><div><font class="Apple-style-span" face="'Andale Mono'">    {</font></div><div><span class="Apple-style-span" style="font-family: 'Andale Mono'; ">    net_notify_status();</span></div><div><font class="Apple-style-span" face="'Andale Mono'">    }</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'">  }</font></div></blockquote></div><div><br></div><div>But, I still can't see why that would raise an alert, as it can't unless car_chargestate >= 0x15 (which should never happen according to what we know, unless the charge is stopped somehow).</div><div><br></div><div>Theory: Perhaps there is some momentary status change, when you plugin or when the charge starts, to a 0x95 B2 charge state > 0x15 that we don't know of. We won't see it in the net_notify_status() because that happens a second or so later (the net_notify_status just sets a flag for the status to be notified in the next ticker of the event loop about a second later). I checked my can bus dumps, but can only find the following values for B2 of B1=0x95 id#100:</div><div><br></div></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><div>0x01<br>0x04<br>0x0D<br>0x0E<br>0x17</div></div></div></blockquote><div><div><div><br></div><div>and none of those were momentary.</div><div><br></div><div>Regards, Mark.</div><div><br></div><div>On 13 Feb, 2012, at 3:51 PM, Jack West wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Mark, Michael and others,<br><div><br></div><div>I flashed the 1.2.0 rc3  and installed in our 2.5 non sport US car.  I plugged in the car which was cold (<0C) after being left outside all day.  This is what I saw:</div><div><br></div><div>VDS = "Preparing to charge, battery heating, 0% complete"  (the car was heating the battery with 8amps/240V)</div><div>SMS  STATUS = "charging, heating"</div><div>IOS app= standard 'non charging' screen.  no "preparing" or "heating".  car icon shows charge port  door open</div><div><br></div><div>slide pilot switch off</div><div><br></div><div>did not get SMS alert that charging stopped</div><div>SMS STATUS = "preparing"</div><div>IOS app = no change, no alerts or msg.  does correctly see doors open and close (server connected) </div><div><br></div><div>cycle charge port door</div><div>connect cable</div><div>slide pilot on</div><div><br></div><div>VDS = "Preparing to charge, battery heating, 16% complete"</div><div>SMS STATUS= "charging, heating"</div><div>IOS app = no change, standard non charging screen</div><div><br></div><div>Push "stop" on VDS</div><div>IOS app = "charging stopped"</div><div>I did not get a SMS msg or a net alert </div><div><br></div><div>I started to look at the code to see whats up but I'm out of time tonight.  Will get back to it tomorrow night.</div><div><br></div><div>Jack</div><div><br></div><div><br><div><div>On Feb 12, 2012, at 5:34 PM, Mark Webb-Johnson wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Guys,<div><br></div><div>A few developers have asked me how they can best help out.</div><div><br></div><div>Here is what we have at the moment (in no particular order, and apologies if I've missed anything):</div><div><br></div><div><ol class="MailOutline"><li>Mark W-J (me): iOS App and finalising the 1.2 car firmware</li><li>Michael S, Jack W: car firmware (particularly the can bus area)</li><li>Sonny C: Android App, simulator, car firmware (particularly modem work)</li><li>Felix B: Graphics</li><li>Pierre U, Piotr P: Debugging sub-zero temperature issues</li><li>Udo W: Offered to help with Android</li><li>Manuel M: Drupal module (Web App) for car registration</li><li>Oliver W: hardware module design</li><li>Andrew B: Use of OVMS as a data logger for other projects</li><li>Several: Helping users get this deployed, and debugging hardware issues ;-)</li></ol><div><br></div></div><div>Weak points that I see are (a) server, (b) high-level functions (charging options, trip and charging logs, etc), (c) server (drupal) web apps, and (d) applicability to other EVs (eg; Leaf). But, there is so much that can be done, please feel free to jump in wherever - please just let us know what you are doing.</div><div><br></div><div>The most important thing at the moment is testing, and acting as regional support for an end-user release (helping with installation and support for your part of the world). Please update to the 1.2.0 release candidate firmware, and try out the new functions. Let us know what doesn't work (and probably just as importantly, what works for you).</div><div><br></div><div>If anyone has access to older (v2.0, v1.5) cars, or non-metric cars (USA?), please try the module in those cars and let us know the result.</div><div><br></div><div>Regards, and thanks,</div><div>Mark.</div><div><br></div></div>_______________________________________________<br>OvmsDev mailing list<br><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br></blockquote></div><br></div></div></blockquote></div><br></div></body></html>