forked from LairdCP/BL600-Applications
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbtn.press.release.gpioassignevent.sb
87 lines (75 loc) · 4.17 KB
/
btn.press.release.gpioassignevent.sb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright (c) 2015, Laird
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
// SPDX-License-Identifier:ISC
//
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++ ++
// +++++ When UwTerminal downloads the app it will store it as a filenname ++
// +++++ which consists of all characters up to the first . and excluding it ++
// +++++ ++
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//
// Power efficient button press/release example using GpioAssignEvent
// Shows how to detect a button press and release seperately by switching
// GpioAssignEvent, works on DVK-BL600 development board.
//
//******************************************************************************
//******************************************************************************
// Global Variable Declarations
//******************************************************************************
dim rc //Result code variable
//******************************************************************************
// Function and Subroutine definitions
//******************************************************************************
FUNCTION Btn0Up()
//Runs when button 0 has been released
print "Button 0 has been released!\n"
rc = SendMsgApp(1, 0)
ENDFUNC 1
FUNCTION Btn0Down()
//Runs when button 0 has been pressed
print "Button 0 has been pressed!\n"
rc = SendMsgApp(0, 0)
ENDFUNC 1
FUNCTION HandlerMsgApp(BYVAL nMsgId AS INTEGER, BYVAL nMsgCtx AS INTEGER) AS INTEGER
//Used to handle messages sent to switch events
IF nMsgID == 1 then
//Switch to button press 2 event
rc = GPIOUnassignEvent(0) //Removes the previous assignment
rc = GPIOASSIGNEVENT(0, 16, 1) //Assign a high-to-low transition event for button 0
ONEVENT EVDETECTCHAN0 CALL Btn0Down //Reassign the event for when button is pressed
else
//Switch to button press 1 event
rc = GPIOUnassignEvent(0) //Removes the previous assignment
rc = GPIOAssignEvent(0, 16, 0) //Assign a low-to-high transition event for button 0
ONEVENT EVDETECTCHAN0 CALL Btn0Up //Reassign the event for when button is released
endif
ENDFUNC 1
//******************************************************************************
// Equivalent to main() in C
//******************************************************************************
rc = GPIOSetFunc(16,1,2) //Sets sio16 (Button 0) as a digital in with a weak pull up resistor
rc = GPIOAssignEvent(0, 16, 1) //Assign a high-to-low transition event for button 0
//******************************************************************************
// Handler definitions
//******************************************************************************
ONEVENT EVMSGAPP CALL HandlerMsgApp //This is the handler for application messages
ONEVENT EVDETECTCHAN0 CALL Btn0Down //This is the handler for when button 0 has been pressed
//------------------------------------------------------------------------------
// Wait for a synchronous event.
// An application can have multiple <WaitEvent> statements
//------------------------------------------------------------------------------
WAITEVENT //When program is run it waits here until an event is detected