@@ -60,11 +60,10 @@ typedef struct {
6060 *
6161 */
6262typedef struct Button {
63- uint16_t ticks ;
64- uint16_t long_press_ticks ; /*! Trigger ticks for long press*/
65- uint16_t short_press_ticks ; /*! Trigger ticks for repeat press*/
66- uint16_t long_press_hold_cnt ; /*! Record long press hold count*/
67- uint16_t long_press_ticks_default ;
63+ uint32_t ticks ; /*!< Count for the current button state. */
64+ uint32_t long_press_ticks ; /*!< Trigger ticks for long press, */
65+ uint32_t short_press_ticks ; /*!< Trigger ticks for repeat press */
66+ uint32_t long_press_hold_cnt ; /*!< Record long press hold count */
6867 uint8_t repeat ;
6968 uint8_t state : 3 ;
7069 uint8_t debounce_cnt : 3 ;
@@ -153,9 +152,10 @@ static void button_handler(button_dev_t *btn)
153152 btn -> event = (uint8_t )BUTTON_LONG_PRESS_START ;
154153 btn -> state = 4 ;
155154 /** Calling callbacks for BUTTON_LONG_PRESS_START */
156- uint16_t ticks_time = iot_button_get_ticks_time (btn );
155+ uint32_t ticks_time = iot_button_get_ticks_time (btn );
156+ int32_t diff = ticks_time - btn -> long_press_ticks * TICKS_INTERVAL ;
157157 if (btn -> cb_info [btn -> event ] && btn -> count [0 ] == 0 ) {
158- if (abs (ticks_time - ( btn -> long_press_ticks * TICKS_INTERVAL ) ) <= TOLERANCE && btn -> cb_info [btn -> event ][btn -> count [0 ]].event_data .long_press .press_time == (btn -> long_press_ticks * TICKS_INTERVAL )) {
158+ if (abs (diff ) <= TOLERANCE && btn -> cb_info [btn -> event ][btn -> count [0 ]].event_data .long_press .press_time == (btn -> long_press_ticks * TICKS_INTERVAL )) {
159159 do {
160160 btn -> cb_info [btn -> event ][btn -> count [0 ]].cb (btn , btn -> cb_info [btn -> event ][btn -> count [0 ]].usr_data );
161161 btn -> count [0 ]++ ;
@@ -234,7 +234,7 @@ static void button_handler(button_dev_t *btn)
234234 CALL_EVENT_CB (BUTTON_LONG_PRESS_HOLD );
235235
236236 /** Calling callbacks for BUTTON_LONG_PRESS_START based on press_time */
237- uint16_t ticks_time = iot_button_get_ticks_time (btn );
237+ uint32_t ticks_time = iot_button_get_ticks_time (btn );
238238 if (btn -> cb_info [BUTTON_LONG_PRESS_START ]) {
239239 button_cb_info_t * cb_info = btn -> cb_info [BUTTON_LONG_PRESS_START ];
240240 uint16_t time = cb_info [btn -> count [0 ]].event_data .long_press .press_time ;
@@ -247,7 +247,7 @@ static void button_handler(button_dev_t *btn)
247247 }
248248 }
249249 }
250- if (btn -> count [0 ] < btn -> size [BUTTON_LONG_PRESS_START ] && abs (ticks_time - time ) <= TOLERANCE ) {
250+ if (btn -> count [0 ] < btn -> size [BUTTON_LONG_PRESS_START ] && abs (( int ) ticks_time - ( int ) time ) <= TOLERANCE ) {
251251 btn -> event = (uint8_t )BUTTON_LONG_PRESS_START ;
252252 do {
253253 cb_info [btn -> count [0 ]].cb (btn , cb_info [btn -> count [0 ]].usr_data );
@@ -272,7 +272,7 @@ static void button_handler(button_dev_t *btn)
272272 }
273273 }
274274 }
275- if (btn -> count [1 ] + 1 < btn -> size [BUTTON_LONG_PRESS_UP ] && abs (ticks_time - time ) <= TOLERANCE ) {
275+ if (btn -> count [1 ] + 1 < btn -> size [BUTTON_LONG_PRESS_UP ] && abs (( int ) ticks_time - ( int ) time ) <= TOLERANCE ) {
276276 do {
277277 btn -> count [1 ]++ ;
278278 if (btn -> count [1 ] + 1 >= btn -> size [BUTTON_LONG_PRESS_UP ]) {
@@ -377,7 +377,6 @@ static button_dev_t *button_create_com(uint8_t active_level, uint8_t (*hal_get_k
377377 btn -> hal_button_Level = hal_get_key_state ;
378378 btn -> button_level = !active_level ;
379379 btn -> long_press_ticks = long_press_ticks ;
380- btn -> long_press_ticks_default = btn -> long_press_ticks ;
381380 btn -> short_press_ticks = short_press_ticks ;
382381
383382 /** Add handle to list */
@@ -541,7 +540,7 @@ esp_err_t iot_button_register_cb(button_handle_t btn_handle, button_event_t even
541540 };
542541
543542 if ((event == BUTTON_LONG_PRESS_START || event == BUTTON_LONG_PRESS_UP ) && !event_cfg .event_data .long_press .press_time ) {
544- event_cfg .event_data .long_press .press_time = btn -> long_press_ticks_default * TICKS_INTERVAL ;
543+ event_cfg .event_data .long_press .press_time = btn -> long_press_ticks * TICKS_INTERVAL ;
545544 }
546545
547546 return iot_button_register_event_cb (btn_handle , event_cfg , cb , usr_data );
@@ -746,7 +745,7 @@ uint8_t iot_button_get_repeat(button_handle_t btn_handle)
746745 return btn -> repeat ;
747746}
748747
749- uint16_t iot_button_get_ticks_time (button_handle_t btn_handle )
748+ uint32_t iot_button_get_ticks_time (button_handle_t btn_handle )
750749{
751750 BTN_CHECK (NULL != btn_handle , "Pointer of handle is invalid" , 0 );
752751 button_dev_t * btn = (button_dev_t * ) btn_handle ;
0 commit comments