<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>2 button  state update after reseat</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/35113/2-button-state-update-after-reseat</link><description>Hello 
 We have two boards PCA10040, client and peripheral. Blinky exemple. 
 The project is with two buttons on peripheral side and 2 leds on the client side. 
 If we hold down button1 on the peripheral and then after reseat the central led3 toggle on</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 06 Jun 2018 18:27:27 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/35113/2-button-state-update-after-reseat" /><item><title>RE: 2 button  state update after reseat</title><link>https://devzone.nordicsemi.com/thread/135002?ContentTypeID=1</link><pubDate>Wed, 06 Jun 2018 18:27:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2ada31bd-7297-4643-9068-41f4c16b24b8</guid><dc:creator>mc</dc:creator><description>&lt;p&gt;Hello Edvin&lt;/p&gt;
&lt;p&gt;Thank you very much for the answer.&lt;/p&gt;
&lt;p&gt;I have do it with a second message for the button1&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;void init_state_update2(ble_lbs_t * p_lbs)&amp;quot;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;and &lt;/p&gt;
&lt;p&gt;else if (p_evt_write-&amp;gt;handle == p_lbs-&amp;gt;button_char_handles.cccd_handle)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(p_ble_evt-&amp;gt;evt.gatts_evt.params.write.len == 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; init_state_update(p_lbs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; init_state_update2(p_lbs);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;It works fine!&lt;/p&gt;
&lt;p&gt;This with the mask i will try out.&lt;/p&gt;
&lt;p&gt;Thank you very much&lt;/p&gt;
&lt;p&gt;Best regards &lt;br /&gt;mc&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 2 button  state update after reseat</title><link>https://devzone.nordicsemi.com/thread/134940?ContentTypeID=1</link><pubDate>Wed, 06 Jun 2018 12:33:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:25632ca6-f9e0-4963-a213-e6b409a25441</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;You call this function only once upon reset, right? The&amp;nbsp;init_state_update()?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you have pressed both buttons, then&amp;nbsp;if(nrf_gpio_pin_read(BSP_BUTTON_0)==0) will trigger, and sett button_state = 1. Then it continues to&amp;nbsp;if(nrf_gpio_pin_read(BSP_BUTTON_1)==0), which will also trigger, and overwrite button_state = 3, and then send the button_state (= 3).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A workaround to get your application to work is either to send 2 messages, one with button 1 and one with button 2, or you can (which I recommend you to try) create a button mask.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;uint8_t button_state = 0;&lt;/p&gt;
&lt;p&gt;if(button0)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; button_state |= (1 &amp;lt;&amp;lt; 0);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;if(button1)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; button_state |= (1&amp;lt;&amp;lt; 1);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;this will result in button state being the following:&lt;/p&gt;
&lt;p&gt;btn_1_pressed&amp;nbsp; &amp;nbsp; &amp;nbsp; btn_2_pressed&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; button_state(bits):&amp;nbsp; &amp;nbsp; &amp;nbsp;button_state(hex)&lt;/p&gt;
&lt;p&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0b00000000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x00&lt;/p&gt;
&lt;p&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0b00000001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x01&lt;/p&gt;
&lt;p&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0b00000010&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x02&lt;/p&gt;
&lt;p&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0b00000011&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x03&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When you send this byte to the central, you will have to decode it there. You can do something like this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;uint8_t button_state = 0;
button_state |= (1 &amp;lt;&amp;lt; 0);
button_state |= (1 &amp;lt;&amp;lt; 1);
NRF_LOG_INFO(&amp;quot;button_state = 0x%2x&amp;quot;, button_state);

uint8_t button1_state = (0x01 &amp;amp; (button_state &amp;gt;&amp;gt; 0));
uint8_t button2_state = (0x01 &amp;amp; (button_state &amp;gt;&amp;gt; 1));

NRF_LOG_INFO(&amp;quot;button1: %d, button2: %d&amp;quot;, button1_state, button2_state);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;play around with the button_state |= (1 &amp;lt;&amp;lt; n) to see how it behaves. Of course, you should use the byte that you sent, and not change button_state in the central. Just play around with this on one of the DKs to see how it behaves.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>