- SNAPcore API
- Functions
- call
- callback
- callout
- chr
- crossConnect
- dmCallout
- dmcastRpc
- eraseImage
- errno
- flowControl
- getChannel
- getEnergy
- getI2cResult
- getInfo
- getLq
- getMs
- getNetId
- getStat
- i2cInit
- i2cRead
- i2cWrite
- imageName
- initUart
- initVm
- int
- len
- loadNvParam
- localAddr
- mcastRpc
- mcastSerial
- monitorPin
- ord
- peek
- poke
- pulsePin
- random
- readAdc
- readPin
- reboot
- resetVm
- rpc
- rpcSourceAddr
- rx
- saveNvParam
- scanEnergy
- setChannel
- setNetId
- setPinDir
- setPinPullup
- setPinSlew
- setRadioRate
- setRate
- sleep
- spiInit
- spiRead
- spiWrite
- spiXfer
- stdinMode
- str
- txPwr
- type
- ucastSerial
- uniConnect
- vmStat
- writePin
- xrange
- Function Decorators
- NV Parameters
- SNAP Hooks
- Functions
- Release Notes
Functions¶
call¶
-
call
(rawOpcodes, *functionArgs)¶ Call embedded C code.
This function is for advanced users only. There is a separate Application Note that covers how to use this advanced feature.
Parameters: - rawOpcodes (str) – Machine code that implements the function to be called.
- *functionArgs (arbitrary argument list) – Parameters depend on the actual function implemented by
rawOpcodes
.
callback¶
-
callback
(callback, remoteFunction, *remoteFunctionArgs)¶ It is easy to invoke functions on another node using the
rpc()
built-in function; however, to get data back from that node, you either need to put a script in that node to explicitly send the value back, or use thecallback()
function.Parameters: - callback (str) – Specifies which function to invoke on the originating node, passing in the return value of the remote function.
- remoteFunction (str) – Specifies which function to invoke on the remote node.
- *remoteFunctionArgs (arbitrary argument list) – Used if the remote function takes any parameters.
Returns: Normally returns True, but it does not mean your RPC request was successfully sent and received
Returns False only if it was unable to attempt the Remote Procedure Call (for example, if the node is low on memory).
Return type: bool
Examples
Imagine having a function like the following in SNAP node A:
def showResult(obj): print str(obj)
Invoking
callback('showResult', 'functionOnB')
on node B will cause functionshowResult()
to get called on node A with the result of functionfunctionOnB()
on remote node B.The
remoteFunction
parameter can take parameters, so node A could also invoke the following on node B by passing0
to thereadAdc()
function:callback('showResult', 'readAdc', 0)
Node B would invoke
readAdc(0)
and then remotely invokeshowResult(the-actual-ADC-reading-from-readAdc(0))
on node A.The
callback()
function is most commonly used with therpc()
function:rpc(nodeB, 'callback', 'showResult', 'readAdc', 0)
Essentially,
callback()
allows you to ask one node to do something and then tell you how it turned out.Note
Even if you do not have a script that explicitly sends the return value back, you still must have some script in a node before you can call any function, including any of the built-in functions by name.
See also
- User Guide on Remote Procedure Calls
rpc()
callout¶
-
callout
(nodeAddress, callback, remoteFunction, *remoteFunctionArgs)¶ This function is similar to
callback()
, but instead of the final result being reported back to the originating node, you explicitly provide the address of the target node.Parameters: - nodeAddress (str) – Specifies the SNAP address of the target node that is to receive the callback.
- callback (str) – Specifies which function to invoke on the target node passing in the return value of the remote function.
- remoteFunction (str) – Specifies which function to invoke on the remote node.
- *remoteFunctionArgs (arbitrary argument list) – Used if the remote function takes any parameters.
Returns: Normally returns
True
, but it does not mean your RPC request was successfully sent and received.Returns
False
only if it was unable to attempt the Remote Procedure Call (for example, if the node is low on memory).Return type: bool
Examples
Node A could invoke the following on node B, which would automatically invoke node C:
callout(nodeC, 'showResult', 'readAdc', 0)
Node B would invoke
readAdc(0)
and then remotely invokeshowResult(the-actual-ADC-reading-from-readAdc(0))
on node C.The
callout()
function is most commonly used with therpc()
function:rpc(nodeB, 'callout', nodeC, 'showResult', 'readAdc' ,0)
Essentially,
callout()
allows you to have one node ask another node to do something, and then tell a third node how it turned out.Note
To understand this function, you should first be comfortable with using the
rpc()
andcallback()
built-ins.See also
- User Guide on Remote Procedure Calls
rpc()
callback()
chr¶
-
chr
(number)¶ Translates an ASCII code into a single-character string.
Parameters: number (int) – ASCII code as an integer. Returns: A single-character string based on the number given. Return type: str Example
Ways to obtain the string
'A'
:chr(0x41) # returns the string 'A' chr(65) # so does this
crossConnect¶
-
crossConnect
(dataSrc1, dataSrc2)¶ Cross-connect SNAP data sources.
Parameters: - dataSrc1 (int) – SNAP data source.
- dataSrc2 (int) – SNAP data source.
Returns: None
See also
- User Guide on The Switchboard for details
uniConnect()
dmCallout¶
-
dmCallout
(dstAddrs, dstGroups, ttl, delayFactor, callback, remoteFunction, *remoteFunctionArgs)¶ New in version SNAP 2.7.
Warning
If you provide a
dstAddrs
that is not a multiple of three characters in length, the call will fail and no message will be sent to any node.Parameters: - dstAddrs (str) – A string containing concatenated addresses of the target nodes that are to receive the final (result) function call.
- dstGroups (str) – Specifies which nodes should receive the outgoing message, based on their multicast processed groups. By default, all nodes belong to the broadcast group 0x0001.
- ttl (int) – Specifies the Time To Live (TTL) for the request. This specifies how many hops the message is allowed to make before being discarded.
- delayFactor (int) – Provides a mechanism to allow remote nodes to stagger their responses to the message. The parameter should be a one-byte integer specifying the amount of time, in milliseconds, that should pass between node responses, among the nodes targeted by the request. Setting this parameter to zero allows all remote nodes to respond immediately, which may cause packet loss due to interference.
- callback (str) – Specifies which function to invoke on the originating node, passing in the return value of the remote function.
- remoteFunction (str) – Specifies which function to invoke on the remote node.
- *remoteFunctionArgs (arbitrary argument list) – Used if the remote function takes any parameters.
Returns: This function normally returns
True
; however, it does not mean your RPC request was successfully sent and received.It returns
False
only if it was unable to attempt the Remote Procedure Call (for example, if the node is low on memory or the RPC was too large to send).Return type: bool
Note
As with a
dmcastRpc()
, any node that finds its address when it receives the multicast message will act on the message (assuming that the multicast processed groups setting is compatible). Also as withdmcastRpc()
, if you pass an empty string as thedstAddrs
parameter, the outgoing message will behave as a regularmcastRpc()
call.See also
- User Guide on Remote Procedure Calls
callout()
dmcastRpc()
dmcastRpc¶
-
dmcastRpc
(dstAddrs, dstGroups, ttl, delayFactor, remoteFunction, *remoteFunctionArgs)¶ New in version SNAP 2.6.
Directed multicast provides a means to send an RPC call to a list of remote nodes without incurring the route discovery overhead necessary for addressed RPC calls.
Parameters: - dstAddrs (str) –
A string containing concatenated addresses for any nodes you wish to act on the directed multicast.
If you provide an empty string (
""
), all remote nodes that receive the message that would otherwise act on the message (subject to thedstGroups
parameter and the existence of the function in the remote node’s script) will act on the request as though the call were a regularmcastRpc()
call; however, in this case added features available only for directed multicast (such as information available through severalgetInfo()
calls) are also available. - dstGroups (str) – Specifies which nodes should respond to the request. By default, all nodes belong to the broadcast group 0x0001.
- ttl (int) – Specifies the Time To Live (TTL) for the request. This specifies how many hops the message is allowed to make before being discarded.
- delayFactor (int) – Provides a mechanism to allow remote nodes to stagger their responses to the request. The parameter should be a one-byte integer specifying the amount of time, in milliseconds, that should pass between node responses, among the nodes targeted by the request. Setting this parameter to zero allows all remote nodes to respond immediately, which may cause packet loss due to interference.
- remoteFunction (str) – Specifies which function to invoke on the remote node.
- *remoteFunctionArgs (arbitrary argument list) – Used if the remote function takes any parameters.
Returns: This function normally returns
True
; however, it does not mean your RPC request was successfully sent and received.It returns
False
only if it was unable to attempt the Remote Procedure Call (for example, if the node is low on memory or the RPC was too large to send).Return type: bool
Warning
If you provide a
dstAddrs
that is not a multiple of three characters in length, the call will fail and no message will be sent to any node.See also
- User Guide on Remote Procedure Calls
mcastRpc()
for more information about groups and TTL settingsdmCallout()
getInfo()
- dstAddrs (str) –
eraseImage¶
-
eraseImage
()¶ This function is used by Portal and SNAPconnect as part of the script upload process and is not normally used by user scripts. Calling this function automatically invokes the
resetVm()
function before erasing the image (otherwise the SNAPpy VM would still be running the script, as you erased the image out from under it).Returns: None
errno¶
-
errno
()¶ Returns the most recent error code from the SNAPpy Virtual Machine (VM), clearing it out as it does so.
If you receive an
UNSUPPORTED_OPCODE
,UNRESOLVED_DEPENDENCY
,BAD_GLOBAL_INDEX
, orBAD_CONST_INDEX
error, please contact Synapse Wireless support and provide your SNAPpy script. These errors should not be reachable with a SNAPpy script, unless you are manipulating memory behind-the-scenes with pokes or with callable C strings.The
EXCEEDED_MAX_BLOCK_STACK
andEXCEEDED_MAX_OBJ_STACK
errors have been retired from SNAPpy code and can no longer be generated.Returns: The most recent error code. Return type: int The possible error codes are:
Value Enumeration Possible Cause 0 NO_ERROR 1 OP_NOT_DEFINED Are you trying to add or compare things where that is not an option, such as adding two functions, or two Nones? 2 UNSUPPORTED_OPCODE 3 UNRESOLVED_DEPENDENCY 4 INCOMPATIBLE_TYPES Are you trying to add a number to a string? 5 TARGET_NOT_CALLABLE Are you trying to invoke foo()
, but foo = 123?6 UNBOUND_LOCAL Are you trying to use a variable before you put something in it? 7 BAD_GLOBAL_INDEX 8 EXCEEDED_MAX_BLOCK_STACK Are you calling a function recursively to too great a depth, or having too many nested layers of function calls? 9 EXCEEDED_MAX_FRAME_STACK 10 EXCEEDED_MAX_OBJ_STACK 11 INVALID_FUNC_ARGS Are you passing the wrong type of parameters to a function? Are you passing the wrong quantity of parameters? 12 UNSUBSCRIPTABLE_OBJECT Are you trying to slice or index something other than a string, tuple, or byte list? 13 INVALID_SUBSCRIPT Are you trying to access str[3] when str = ‘ABC’? (When str = ‘ABC’, str[0] is ‘A’, str[1] is ‘B’, and str[2] is ‘C’.) 14 EXCEEDED_MAX_LOCAL_STACK Do you have too many local variables? Have you passed a large number of variables to nested levels of function calls? 15 BAD_CONST_INDEX 16 ALLOC_REF_UNDERFLOW Do you have more than 255 variables referencing the same buffer, such as a single string buffer? If so, as SNAP creates references to them with its one-byte reference counter, it will wrap past zero (causing an ALLOC_REF_OVERFLOW error), and as it releases references to them, it will wrap down past zero generating this error. (Debug builds only.) 17 ALLOC_REF_OVERFLOW Do you have more than 255 variables referencing the same buffer, such as a single string buffer? If so, as SNAP creates references to them with its one-byte reference counter, it will wrap past zero, generating this error, and as it releases references to them, it will wrap down past zero (generating an ALLOC_REF_UNDERFLOW error.) (Debug builds only.) 18 ALLOC_FAIL Are you trying to keep too many string results? As of version 2.2, you are no longer limited to a single buffer for each type of string operation, but they are still limited in number. 19 UNSUPPORTED_TYPE Have you tried to save an unsupported type, such as a tuple or iterator, to an NV parameter, or are you trying to pass an unsupported type (tuple, iterator, or byte list) in a SNAP packet? 20 MAX_PACKET_SIZE_EXCEEDED Are you passing too large of a string value? 21 MAX_STRING_SIZE_EXCEEDED Have you created a dynamic string too large for your platform? 22 EXCEEDED_C_DATA_SIZE Your C code is trying to use more space for data than the firmware allows. Normally, this would be caught at compile time. However, if you get this error, the SNAP firmware has ignored your script and will not run it to prevent it from causing problems. To fix this, build your script using the firmware version currently running on the node. 23 INVALID_C_METADATA The C code in the provided script was not compiled for the firmware image currently running. If you get this error, the SNAP firmware has ignored your script and will not run it to prevent it from causing problems. To fix this, build your script using the firmware version currently running on the node. Note
If you are including C code in your SNAPpy script, your C code can use the pyerr macro to return one-byte error codes of your own definition. You can also use this as a way to return a second value from your C functions.
flowControl¶
-
flowControl
(uart, isEnabled, isTxEnable)¶ Allows you to enable/disable flow control. Without flow control, there is a greater chance that characters will be dropped during communication; however, disabling flow control frees up two more pins (per UART) for use as other I/O. The initial state of flow control is set by bits 0x0080 (UART 1) and 0x0020 (UART 0) in NV11 - Feature Bits. By default, flow control is enabled. However, SNAP serial communications between nodes make no use of flow control.
When flow control is enabled, the SNAP node monitors the RTS pin from the attached serial device. As long as the SNAP node sees the RTS pin low, the node will continue sending characters to the attached serial device (assuming it has any characters to send). If the SNAP node sees the RTS pin go high, then it will stop sending characters to the attached serial device. By default, the SNAP node uses the CTS pin as a Clear To Send indication when flow control is enabled. The CTS pin indicates whether the SNAP node can accept more data. The CTS pin goes low if the SNAP node can accept more characters. The CTS pin goes high (temporarily) if the SNAP node is “full” and cannot accept any more characters. (The connected serial device can keep sending characters, but they will likely be dropped.)
It is important to realize that UART handshake lines are active-low. A low voltage level on the CTS pin is a boolean
False
but actually means that it is “Clear To Send.” A high voltage level on the CTS pins is a booleanTrue
but actually means it is not “Clear To Send.” RTS behaves similarly.The CTS pin can optionally act as a Transmit Enable (TXENA) indication using the
isTxEnable
parameter. In this mode, the CTS pin is normally high and transitions low before any characters are transmitted, remaining low until they have been completely sent.When flow control is disabled, both the RTS and CTS pins are ignored.
Parameters: - uartNum (int) – Specifies the UART (0 or 1).
- isEnabled (bool) – Enables/disables hardware flow control.
- isTxEnable (Optional[bool]) – Controls CTS behavior when flow control is enabled. If
True
, CTS acts as a TXENA pin. IfFalse
, CTS acts as Clear To Send. (Default isFalse
.)
Returns: None
Note
Remember that some SNAP nodes may have only one UART available. The RF266, based on the AT128RFA1, has two UARTS, but only UART1 comes out to pins on the module.
getChannel¶
-
getChannel
()¶ Get the SNAP channel (0-15) for SNAP devices operating in the 2.4 GHz range, which corresponds to the 802.15.4 channel.
Returns: SNAP channel that the node is currently on. Return type: int Possible return values are:
SNAP Channel 802.15.4 Channel 0 11 1 12 2 13 3 14 4 15 5 16 6 17 7 18 8 19 9 20 10 21 11 22 12 23 13 24 14 25 15 26
getEnergy¶
-
getEnergy
()¶ Returns a number indicating the result of a brief radio Energy Detection scan on the currently selected channel, providing an indication of the noise floor for radio energy at that frequency.
Returns: Energy detected on the current channel in (-) dBm. Return type: int See also
getLq()
returns the same unitsscanEnergy()
getI2cResult¶
-
getI2cResult
()¶ Returns the status code from most recent I2C operation, clearing the value in the process.
Returns: Result of the most recently attempted I2C operation. Return type: int The possible return values are:
Value Enumeration Meaning 0 I2C_OFF I2C was never initialized 1 I2C_SUCCESS The most recent I2C operation succeeded 2 I2C_BUS_BUSY I2C bus was in use by some other device 3 I2C_BUS_LOST Some other device stole the I2C bus 4 I2C_BUS_STUCK There is a hardware or configuration problem 5 I2C_NO_ACK The slave device did not respond properly Note
This function can only be used after function
i2cInit()
has been called.See also
- User Guide on I2C
getInfo¶
-
getInfo
(whichInfo)¶ Provides information about the RPC command currently being processed.
Parameters: whichInfo (int) – Specifies the type of information to be retrieved.
Value Information Returned 0 Vendor 1 Radio 2 CPU 3 Module Family 4 Build 5 Version (Major) 6 Version (Minor) 7 Version (Build) 8 Encryption 9 RPC Packet Buffer 10 Is Multicast 11 Remaining TTL 12 Remaining Small Strings 13 Remaining Medium Strings 14 Route Table Size 15 Routes in Route Table 16 Bank Free Space 17 Reserved 18 STDIN Hook Trigger 19 Remaining Tiny Strings 20 Remaining Large Strings 21 Script First Run 22 Script Base Address 23 Script Base Bank 24 Is Directed Multicast 25 Read and Reset Delay Factor (Directed Multicast Only) 26 Address Index (Directed Multicast Only) 27 Multicast Groups (Multicast & Directed Multicast Only) 28 Original TTL (Directed Multicast Only) 29 C Compiler ID 30 Build ID Returns: Varies based on the value of whichInfo. Return type: int - Vendor
Indicates the manufacturer of the radio module on which SNAP is running. Possible return values for
getInfo(0)
:Value Manufacturer 0 Synapse 2 Freescale 3 CEL 4 ATMEL 5 Silicon Labs 7 PC 9 STMicrosystems
- Radio
Indicates the method the node uses to connect to the rest of the network. Possible return values for
getInfo(1)
:Value Method 0 802.15.4-based 2.4 GHz 1 None (Serial only) 3 868 MHz 4 Powerline 5 900 MHz Frequency-Hopping 6 802.15.4-based 900 MHz
- CPU
Indicates the processor paired with the radio in the SNAP module. Possible return values for
getInfo(2)
:Value Processor 0 Freescale MC9S08GT60A 1 ZIC 8051 2 MC9S08QE 3 Coldfire 4 ARM7 5 ATmega 6 Si100x 8051 7 X86 8 UNKNOWN 10 ARM CORTEX M3
- Module Family
Indicates the module family. Possible return values for
getInfo(3)
:Value Module Family 0 Synapse RF100 SNAP Engine 3 CEL ZIC2410 5 MC1321x 6 ATmega128RFA1 7 SNAPcom 8 Si100x 9 MC1322x 11 Si100x KADEX 13 Synapse RF300 SNAP Engine 14 Synapse RF200 SNAP Engine or SNAPstick 200 15 Synapse SM300 Surface Mount Module 16 Synapse SM301 Surface Mount Module 17 Synapse SM200 Surface Mount Module 19 Synapse RF266 20 STM32W108xB 27 Synapse SM220 Surface Mount Module, RF220UF1 SNAP Engine, or SNAPstick 220 30 Synapse RF220SU SNAP Engine 31 Synapse RF220SU-EU SNAP Engine
- Build
Indicates whether the firmware in your SNAP module is a debug or release build. Possible return values for
getInfo(4)
:Value Type Trade-offs 0 debug More error checking, slower speed, less SNAPpy room 1 release Less error checking, faster speed, more SNAPpy room
- Version
- Indicates the Major, Minor and Build components of the firmware version. By using
getInfo(5)
,getInfo(6)
, andgetInfo(7)
, you can retrieve all three digits of the firmware version number.
- Encryption
Indicates the type of encryption that is available in the module; however, it does not indicate what encryption (if any) is enabled for the module. Possible return values for
getInfo(8)
:Value Encryption Support 0 Deprecated 1 AES-128 2 Basic encryption
- RPC Packet Buffer
- After you make an RPC call, a call to
getInfo(9)
returns an integer indicator of the packet buffer number used for the RPC call. That integer can be used in a function hooked to theHOOK_RPC_SENT
event to determine that the processing of the packet buffer is complete. See theHOOK_RPC_SENT
details for more information.
- Is Multicast
Indicates how the RPC command currently being processed was invoked. Possible return values for
getInfo(10)
:Value Meaning 0 Received via an addressed RPC command or was triggered by a system hook 1 Received via a multicast or directed multicast
- Remaining TTL
- Indicates how many “hops” the RPC command currently being processed had left before its end-of-life. You can use this information to tune your TTL values for your network to reduce broadcast chatter. This value is valid for both multicasts and directed multicasts, but not for addressed RPC commands.
- Remaining Small Strings
- Indicates how many “small” string buffers remain unused in your node. The size and number of small strings available on your node will vary depending on the underlying hardware and firmware.
- Remaining Medium Strings
Indicates how many “medium” string buffers remain unused in your node. The size and number of medium strings available on your node will vary depending on the underlying hardware and firmware.
See also
Refer to RF Modules
- Route Table Size
Indicates how many other nodes your node can keep track of in its address book. When a node needs to talk to another node, it must ask where that node is. It will find one of three things: that it can talk to the node directly, that it must communicate through another node, or that it cannot find the node at all. In these first two cases, SNAPpy keeps track of the path used to contact the node in a route table, so the next time it talks to the same node it does not have to query how to find the node first. How long the path to a node is kept depends on the mesh routing timeouts defined in the following NV parameters:
See also
User Guide on Preserving Unicast Routes
- Routes in Route Table
- Indicates how many of the routes in the node’s route table are in use, meaning how many other nodes the current node knows how to access without having to first perform a route request.
- Bank Free Space
- This query is only supported on platforms that support OTA Firmware Upload (it returns a value of 0 on the other platforms). This is how Portal knows if a given firmware image (.sfi file) will “fit” into the node.
- STDIN Hook Trigger
Indicates what kind of data input event occurred that would have triggered
HOOK_STDIN
. Possible return values forgetInfo(18)
:Value Meaning 0 In line mode, an end-of-line character (either \x0a
or\x0d
) was received, so the receive buffer contains a complete data transmission (less the EOL character, which is truncated) from the data source.1 In line mode, the receive buffer received more data than it could hold, so the data received is not (necessarily) a complete transmission from the data source. 2 In character mode, the receive buffer received one character (or, depending on the incoming data rate, possibly more than one character). See the
stdinMode()
function definition for a clarification of the difference between line mode and character mode.Warning
Calling
getInfo(18)
from someplace other than a function hooked toHOOK_STDIN
provides an undefined return value.
- Remaining Tiny Strings
New in version SNAP 2.6.
Indicates how many “tiny” string buffers remain unused in your node. The size and number of tiny strings available on your node will vary depending on the underlying hardware and firmware.
- Remaining Large Strings
New in version SNAP 2.6.
Indicates how many “large” string buffers remain unused in your node. The size and number of large strings available on your node will vary depending on the underlying hardware and firmware.
- Script First Run
New in version SNAP 2.6.
Indicates whether the node has been rebooted since the last time a script was loaded onto it. Possible return values for
getInfo(21)
:Value Meaning 0 There is no script on the node (either because it was empty when booted or because the script has been erased), or the node was rebooted since the script was loaded onto it. 1 The script has not been rebooted since the script was loaded onto it.
- Script Base Address
New in version SNAP 2.6.
Indicates the base address for where the script resides in Flash.
- Script Base Bank
New in version SNAP 2.6.
Indicates the base bank (zero-based) for where the script resides in Flash. For example, ATmega128RFA1’s Flash has two banks of 64K each and the SNAPpy script, by default, is located in the lower 64K bank. Therefore,
getInfo(23)
will return zero when called.
- Is Directed Multicast
New in version SNAP 2.6.
Similar to
getInfo(10)
, this indicates how the RPC command currently being processed was invoked and distinguishes between multicast and directed multicast. Possible return values forgetInfo(24)
:Value Meaning 0 Received via an addressed RPC command, a multicast command, or was triggered by a system hook 1 Received via a directed multicast
- Read and Reset Delay Factor
New in version SNAP 2.6.
Indicates the staggered delay (in milliseconds) that should be applied before targeted nodes make any reply to the directed multicast, giving nodes an opportunity to respond in sequence, without interfering with each other’s communications. See the description of the
delayFactor
parameter in thedmcastRpc()
description for more information.Invoking
getInfo(25)
clears the value, but also removes the staggered delay, putting the responsibility for avoiding communication collisions back in your hands. (There would be little reason to check this value without an intent to implement your own scheme to control communication timing.)Warning
If called outside the context of a directed multicast, the return value is undefined.
- Address Index
New in version SNAP 2.6.
Directed multicasts can target zero or more individual nodes by concatenating multiple addresses into the
dstAddrs
parameter. This indicates the (zero-based) position of this node’s address in a directed multicast address list.Warning
The value is only meaningful in the context of a directed multicast call that specifically targets multiple nodes. In any other context (an addressed RPC, a regular multicast, or a directed multicast with an empty string for the target list) the return value is undefined.
- Multicast Groups
New in version SNAP 2.6.
Indicates the multicast group mask specified for the call to the function being run. This is valid for both multicasts and directed multicasts. If the function is invoked with an addressed RPC call, this will return zero.
See
mcastRpc()
for more information about multicast groups.
- Original TTL
New in version SNAP 2.6.
Indicates the value set for the
ttl
parameter on thedmcastRpc()
call that invoked the running function. Note that this value is different from the Remaining TTL value, which provides the TTL remaining when the receiving node gets the message.Warning
If called outside the context of a directed multicast, the return value is undefined.
- C Compiler ID
New in version SNAP 2.7.
Indicates a unique identifier for the compiler version used to create any C code that has been compiled into the current SNAPpy script image. This has little practical value for the user at runtime, but it may be valuable in troubleshooting failures in scripts that include C code.
- Build ID
New in version SNAP 2.7.
Indicates a unique identifier for the firmware build in your node, combining the firmware compilation date, Module Family, Build, Version (major, minor, and build), and Encryption into one hashed value. This has little practical value for the user at runtime, but it is used by SNAP to ensure that a script containing compiled C code was appropriately created for the firmware on which it is being asked to run.
getLq¶
-
getLq
()¶ Get the most recent link quality (received signal strength) of the most recently received packet, regardless of which node that packet came from. Remember that the last packet could have come from a node that is close by or one that is far away.
Returns: A number in the range 0-127 (theoretical), representing the link quality in (-) dBm. Return type: int Note
Because this value represents (-) dBm, lower values represent stronger signals, and higher values represent weaker signals.
getMs¶
-
getMs
()¶ Get the value of a free-running counter within the SNAP Engine representing elapsed milliseconds since startup. Since the counter is only 16 bits, it rolls over every 65.536 seconds. Because all SNAPpy integers are signed, the counter’s full cycle is:
0, 1, 2, ..., 32766, 32767, -32768, -32767, -32766, ..., -3, -2, -1, 0, 1, ...
Some scripts use this function to measure elapsed (relative) times. The value for this function is only updated between script invocations (events), meaning that you will get the same value no matter how many times you call
getMs()
during the same event.Returns: 16 bit count of milliseconds since startup. Return type: int
getNetId¶
-
getNetId
()¶ Get the current Network Identifier (ID).
The node will only accept packets containing this ID, or a special wildcard value of
0xffff
which is used during the “find nodes” process.The Network ID and the Channel are what determine which radios can communicate with each other in a wireless network. Radios must be set to the same Channel and Network ID in order to communicate over the air. Nodes communicating over a serial link pay no attention to the Channel and Network ID.
Returns: The node’s current Network ID. Return type: int See also
getStat¶
-
getStat
(whichStat)¶ This function returns details about how busy the node has been with processing packets. Each return value ranges from 0 to 255. The values “peg” at 255 (i.e., once reaching 255 they stay there until cleared). Reading a value resets the counter to 0.
Parameters: whichStat (int) – Specifies the counter to be retrieved.
Value Counter Name What is being counted? 0 Null Transmit Buffers Buffers transmitted via a null serial port 1 UART0 Receive Buffers Buffers received via UART0 2 UART0 Transmit Buffers Buffers transmitted via UART0 3 UART1 Receive Buffers Buffers received via UART1 4 UART1 Transmit Buffers Buffers transmitted via UART1 5 Transparent Receive Buffers Buffers received via transparent serial mode 6 Transparent Transmit Buffers Buffers transmitted via transparent serial mode 7 Packet Serial Receive Buffers Buffers received via packet serial mode 8 Packet Serial Transmit Buffers Buffers transmitted via packet serial mode 9 Radio Receive Buffers Buffers received via the radio 10 Radio Transmit Buffers Buffers transmitted via the radio 11 Radio Forwarded Unicasts Unicasts forwarded to nodes via the radio 12 Packet Serial Forwarded Unicasts Unicasts forwarded to nodes via packet serial 13 Radio Forwarded Multicasts Multicasts forwarded to nodes via the radio 14 Packet Serial Forwarded Multicasts Multicasts forwarded to nodes via packet serial Returns: Varies based on the value of whichStat
.Return type: int
i2cInit¶
-
i2cInit
(enablePullups, SCL_pin, SDA_pin)¶ Performs the necessary setup for the I2C bus, including enabling internal pull-up resistors and optionally re-assigning the SCL and SDA I2C pins to another pair of SNAPpy IO pins.
The I2C clock and data lines require pull-ups. You can either choose to use your own external hardware or rely on the built-in internal ones. The internal pull-up resistors can come in handy when you are doing quick prototyping by dangling I2C devices directly off the SNAP Engine.
Parameters: - enablePullups (bool) – Internal pull-up resistors are enabled when
True
; disabled whenFalse
. - SCL_pin (Optional[int]) – Specifies which SNAPpy IO pin to be used for SCL.
- SDA_pin (Optional[int]) – Specifies which SNAPpy IO pin to be used for SDA.
Returns: None
Warning
Be careful not to “double pull-up” the I2C bus!
See also
- Refer to RF Modules for SNAPpy IO numbers
- User Guide on I2C
- enablePullups (bool) – Internal pull-up resistors are enabled when
i2cRead¶
-
i2cRead
(byteStr, numToRead, retries, ignoreFirstAck)¶ Since I2C devices must be addressed before data can be read out of them, this function performs a write followed by a read.
Parameters: - byteStr (str) – Specifies whatever “addressing” bytes must be sent to the device to get it to respond.
- numToRead (int) – Specifies how many bytes to read back from the external I2C device.
- retries (int) – Controls a spin-lock count used to give slow devices extra time to respond. Try an initial value of 1 and increase if needed.
- ignoreFirstAck (bool) –
True
for devices that do not send an initial “ack” response, which will prevent an I2C error based on lack of an initial acknowledgement;False
otherwise.
Returns: Bytes read from the external I2C device.
Return type: str
Note
This function can only be used after function
i2cInit()
has been called.See also
- User Guide on I2C
i2cWrite¶
-
i2cWrite
(byteStr, retries, ignoreFirstAck, endWithRestart="'False'")¶ Writes a byte string to the I2C bus.
Parameters: - byteStr (str) – Specifies the data to be sent to the external I2C device, including whatever “addressing” bytes must be sent to the device to get it to pay attention.
- retries (int) – Controls a spin-lock count used to give slow devices extra time to respond. Try an initial value of 1 and increase if needed.
- ignoreFirstAck (bool) –
True
for devices that do not send an initial “ack” response, which will prevent an I2C error based on lack of an initial acknowledgement;False
otherwise. - endWithRestart (Optional[bool]) –
True
for devices that expect an I2C restart between I2C commands;False
for devices that expect an I2C Start - Stop handshake sequence. Default isFalse
. This argument was added in SNAP 2.5.
Returns: Number of bytes actually written.
Return type: int
Note
This function can only be used after function
i2cInit()
has been called.See also
- User Guide on I2C
imageName¶
-
imageName
()¶ A SNAPpy script (.py file) gets compiled into a byte-code SNAPpy image (.spy file) using either SNAPbuild or Portal. The SNAPpy image name is assigned during this process from the underlying SNAPpy script. For example, image
foo.spy
would be generated from a script namedfoo.py
. In this case,imageName()
would return the stringfoo
, even if someone had renamed thefoo.spy
file to a different name before loading it.Returns: Name of currently loaded SNAPpy image. Return type: str Note
This returns the SNAPpy image that gets downloaded into the node, not the original (textual) source code.
initUart¶
-
initUart
(uart, bps, dataBits=8, parity='N', stopBits=1)¶ Programs the specified UART to the specified bits per second (bps), or baud rate. Optionally, the data bits, parity, and stop bits can also be set.
Flow control defaults to the setting specified in NV11 - Feature Bits, typically it’s ‘On’. Use the
flowControl()
function to specify a setting.Parameters: - uartNum (int) – The specified UART, 0 or 1.
- bps (int) – Usually set to the desired bits per second (1200, 2400, 9600, etc.); however, a value of 1 selects 115,200 bps (this large number would not fit into a SNAPpy integer and was treated as a special case). A value of 0 disables the UART.
- dataBits (Optional[int]) – 7 or 8. (Default is 8.)
- parity (Optional[str]) – ‘E’, ‘O’ or ‘N’, representing EVEN, ODD, or NO parity. (Default is ‘N’.)
- stopBits (Optional[int]) – Number of stop bits. (Default is 1.)
Returns: None
Note
You are not limited to “standard” baud rates. If you need 1234 bps, you are allowed to do that.
See also
flowControl()
- NV11 - Feature Bits
- Refer to RF Modules
initVm¶
-
initVm
()¶ Calling this function restarts the SNAPpy virtual machine. It will clear all globals you may have changed in your SNAPpy code back to their initially declared values, and it will cause all static or global variables declared in C code in SNAP 2.7 or newer to be reinitialized. It does not, however, reinvoke the SNAPpy script’s “startup” handler (the function hooked to the
HOOK_START
event).This function is normally only used by Portal and SNAPconnect at the end of the script upload process.
Returns: None
int¶
-
int
(obj)¶ Converts the specified object (usually a string) into numeric form.
Parameters: obj – Object to transform into a number. Returns: Numeric representation of obj
.Return type: int Examples
int('123') # Returns 123 int(``True``) # Returns 1 int(``False``) # Returns 0
Note
Unlike regular Python, the SNAPpy
int()
function does not take an optional second parameter indicating the numeric base to be used. Theobj
to be converted to a numeric value is required to be in base 10 (decimal).
len¶
-
len
(sequence)¶ This function returns the size of parameter
sequence
. This will be an element count for a tuple or the number of characters in a string.Parameters: sequence – Must be a string or a tuple. Returns: Number of items in sequence
.Return type: int Examples
len('ABC') # Returns 3
loadNvParam¶
-
loadNvParam
(id)¶ This function reads a single parameter from the SNAP node’s NV storage and returns it to the caller. For a full list of all the system (reserved) id values, refer to section 3. User parameters should have id values in the range 128-254.
Parameters: id (int) – Specifies which NV parameter to read. Returns: Depends on the NV parameter. See also
localAddr¶
-
localAddr
()¶ Get the node’s local network address on the SNAP network.
Tracking what is essentially a six-digit (hexadecimal) number as a three-character string means that representations of the SNAP address may not appear meaningful when displayed. For example, if you were to use Portal to invoke
localAddr()
on a node with a a SNAP address of5D.E3.AB
, Portal’s Event Log would display the return value as]ã«
. If you were to displayord("]")
orord(localAddr()[0])
you would get93
, which is the decimal equivalent of hex0x5D
. Similarly,ord("ã")
yields227
, which is the decimal equivalent of0xE3
, andord("«")
yields171
, which is the decimal equivalent of0xAB
. You could build this string directly as\x5d\xe3\xab
.This string representation of numbers as their separate character strings is a fundamental part of specifying addresses of nodes for SNAP communications.
Returns: String representation of the node’s 3-byte address on the SNAP network. Return type: str
mcastRpc¶
-
mcastRpc
(dstGroups, ttl, remoteFunction, *remoteFunctionArgs)¶ Make a remote procedure call (RPC) using multicast messaging, meaning this message could be acted upon by multiple SNAP nodes.
Parameters: - dstGroups (str) – Specifies which nodes should respond to the request.
- ttl (int) – Specifies the Time To Live (TTL) for the request, which is basically how many hops the message is allowed to make before being discarded.
- remoteFunction (str) – Specifies which function to invoke on the remote node.
- *remoteFunctionArgs (arbitrary argument list) – Used if the remote function takes any parameters.
Returns: This function normally returns
True
; however, it does not mean your RPC request was successfully sent and received.It returns
False
only if it was unable to attempt the Remote Procedure Call (for example, if the node is low on memory or the RPC was too large to send).Return type: bool
See also
- User Guide on Remote Procedure Calls
mcastSerial¶
-
mcastSerial
(dstGroups, ttl)¶ Set serial transparent mode to multicast.
Parameters: - dstGroups (int) – Specifies the multicast groups that are eligible to receive this data.
- ttl (int) – Specifies the maximum number of hops the data will be re-transmitted.
Returns: None
Warning
Multicast serial transparent mode is less reliable than unicast serial transparent mode, because the received serial characters will be sent using unacknowledged multicast messages.
See also
- User Guide on Wireless Serial
ucastSerial()
- transmit to a single node
monitorPin¶
-
monitorPin
(pin, isMonitored)¶ Enable background monitoring of a digital input pin’s level.
When a SNAPpy IO pin changes state, a
HOOK_GPIN
event is sent to the SNAPpy virtual machine. If you have assigned aHOOK_GPIN
handler, it will be invoked with the number of the SNAPpy IO pin that changed state and the pin’s new value.Parameters: - pin (int) – Specifies which SNAPpy IO pin to monitor.
- isMonitored (bool) – Enables monitoring when
True
, and disables monitoring whenFalse
.
Returns: None
Note
This SNAPpy IO pin must first be configured as a digital input pin using
setPinDir()
.See also
- Refer to RF Modules for SNAPpy IO pin numbers
- User Guide on Event-Driven Programming
setRate()
- controls the sampling rate of the background pin monitoring
ord¶
-
ord
(str)¶ Given a one-character string, this returns an integer of the ASCII for that character.
Parameters: str (str) – Specifies a single-character string to be converted. Returns: Integer value of the ASCII character str
.Return type: int Examples
The result of ord(‘A’) is 65 (0x41).
The result of ord(‘2’) is 50 (0x32).
peek¶
-
peek
(addr)¶ Read a byte from a specific memory location.
Parameters: addr (int) – Specifies which memory location to read (0-0x7FFF). A negative address will read a byte from internal EEPROM (-1 to -4096) Returns: This returns the memory contents of the specified memory address Return type: int See also
poke()
for writing the contents of a specific memory address
poke¶
-
poke
(addr, byteVal)¶ Write the value of a specific memory location.
Parameters: - addr (int) – Specifies which memory location to write (0-0x7FFF). A negative address will write a byte to internal EEPROM (-1 to -4096)
- byteVal (int) – Specifies the data value which will be written to the specified memory address
Returns: None
See also
peek()
for reading the contents of a specific memory address
pulsePin¶
-
pulsePin
(pin, msWidth, isPositive)¶ Apply a pulse with a specified duration to a digital output pin.
The
pulsePin()
function behaves differently based on the value ofmsWidth
:- Specifying a positive value for
msWidth
will generate a non-blocking pulse, meaning your SNAPpy script continues to run in parallel. This also allows you to have multiple pulses in progress at the same time. In this case,msWidth
specifies the desired pulse width in milliseconds (1-32767). - Specifying a negative value for
msWidth
makes the pulse generation blocking, meaning the pulse runs to completion, and then your SNAPpy script resumes execution at the next line of code. In this case, the value ofmsWidth
is platform-specific, but the desired pulse width is typically in microseconds. As a quick example, a value of-10000
on a Synapse RF200 would result in a pulse that is 10 milliseconds wide.
If you have multiple pulses on the same pin with the same
isPositive
setting, the first pulse to complete will set the pin to its final state, and the second pulse to complete will effectively have ended.Parameters: - pin (int) – Specifies which SNAPpy IO pin to pulse.
- msWidth (int) – Specifies the desired pulse width and determines if the function will return immediately or wait until the pulse is complete. Specifying a value of 0 will result in no pulse at all.
- isPositive (bool) – Controls the polarity of the pulse.
Returns: None
Note
This SNAPpy IO pin must first be configured as a digital output pin using
setPinDir()
.Warning
The timing of the
pulsePin()
function is not guaranteed to be precise. Pulses begin when the function invokes and end at a tick of the node’s internal clock. If you were to initiate a 1 ms pulse very shortly before the node’s next millisecond tick, the pulse would would be notably shorter than the 1 ms specified.See also
- Refer to RF Modules for SNAPpy IO pin numbers
- Specifying a positive value for
readAdc¶
-
readAdc
(channel)¶ Sample ADC on the specified analog input channel.
Some channels correspond to external analog input pins, the internal low voltage reference, or the internal high voltage reference. On some platforms, these can also return specialty readings such as processor temperature or voltage differences.
Parameters: channel (int) – Specifies which analog input channel to read. Returns: Value of the specified analog input channel. Return type: int See also
- Refer to RF Modules for channel numbers
readPin¶
-
readPin
(pin)¶ Reads the current level of either a digital input or digital output pin.
Parameters: pin (int) – Specifies which SNAPpy IO pin to read. Returns: The current logic level of the specified pin. It returns a “live value” for an input pin or the last value written for an output pin. Return type: bool Note
This SNAPpy IO pin must first be configured as a digital input or output pin using
setPinDir()
.See also
- Refer to RF Modules for SNAPpy IO pin numbers
reboot¶
-
reboot
(delay=200)¶ Reboot the node after an optional delay.
Providing for a delay allows the node time to acknowledge the
reboot()
request (in case it came in over-the-air). The delay parameter is treated as an unsigned integer. Sending 0xEA60 provides 60,000 ms, or one minute, of delay, as negative values (-5,536 in this case) are not meaningful.The delay parameter is available beginning in SNAP 2.6.
Parameters: delay (Optional[int]) – Specifies when the reboot is to occur, in milliseconds. (Default is 200.) New in SNAP 2.6. Returns: None Note
Once a reboot is issued, scheduling a reboot later than an already running countdown will have no effect. However, issuing a reboot with a shorter duration than the current countdown will work.
resetVm¶
rpc¶
-
rpc
(nodeAddress, remoteFunction, *remoteFunctionArgs)¶ Request that another SNAP node execute a function.
Parameters: - nodeAddress (str) – Specifies the SNAP address of the target node.
- remoteFunction (str) – Specifies which function to invoke on the remote node.
- *remoteFunctionArgs (arbitrary argument list) – Used if the remote function takes any parameters.
Returns: This function normally returns
True
; however, it does not mean your RPC request was successfully sent and received.It returns
False
only if it was unable to attempt the Remote Procedure Call (for example, if the node is low on memory or the RPC was too large to send).Return type: bool
See also
- User Guide on Remote Procedure Calls
rpcSourceAddr¶
-
rpcSourceAddr
()¶ If a function on a node is invoked remotely (via RPC), then the called function can invoke function
rpcSourceAddr()
to find out the network address of the node which initiated the call. (If you call this function when an RPC is not in progress, it just returns None.)This function allows a node to respond (answer back) directly to other nodes. An example will make this clearer. Imagine node “A” is loaded with a script containing the following function definition:
def pong(): print 'got a response!'
Now imagine node “B” is loaded with a script containing the following function:
def ping(): rpc(rpcSourceAddr(),'pong')
Node A can invoke function “ping” on node B. It can do this with a direct RPC, but it has to know node B’s address to do so:
rpc(node_B_address_goes_here, 'ping')
Or, it can do it with a multicast RPC, assuming that node B’s group membership is set appropriately:
mcastRpc(1, 1, 'ping')
When node B receives the RPC request packet, it will invoke local function “ping”, which will generate the remote “pong” request. Notice that node B can respond to a “ping” request from any node.
All SNAP network addresses are three-byte strings. Please see the
localAddr()
function for a description of how SNAP addresses are specified and notated.Returns:
See also
- User Guide on Remote Procedure Calls
rx¶
-
rx
(isEnabled)¶ This function allows you to power down the radio, extending battery life in applications that do not actually need the radio (or only need it intermittently).
The radio defaults to ON in SNAP nodes. If you invoke
rx(False)
, the radio will be powered down. Invokingrx(True)
, or sending any data over the radio, will power the radio back up.To be clear, a node can wake up its own radio by attempting to transmit. A node’s radio will not be woken up by transmissions from other nodes.
Parameters: isEnabled (bool) – Controls whether or not the radio is on. Returns: None Note
If you turn the radio off (using
rx(False)
), then you will not receive any more radio traffic!
saveNvParam¶
-
saveNvParam
(id, obj, bitmask)¶ Save object to indexed non-volatile storage location.
Parameters: - id (int) – Specifies which NV parameter to modify.
- obj – The data to be saved. Depending on the NV parameter, the data type could be boolean, integer, string, byte list, or None.
- bitmask (Optional [int]) – Specifies which bits in
obj
will update the NV parameter’s value. Omitting this argument will overwrite the previous value withobj
. This argument should only be used with integerobj
values. New in version SNAP 2.6.
Returns: A result code.
Return type: int
The possible return values are:
Value Enumeration 0 NV_SUCCESS 1 NV_NOT_FOUND 2 NV_DEST_TOO_SMALL 3 NV_FULL 4 NV_BAD_LENGTH 5 NV_FAILURE 6 NV_BAD_TYPE 7 NV_LOW_POWER Examples
Assume that NV11 - Feature Bits contains the value
0x001F
, which indicates that there is a power amplifier and that both UARTs are enabled. The following command will enable the Packet CRC bit (0x0400):saveNvParam(NV_FEATURE_BITS_ID, 0x0400) # NV11 = 0x0400
However, it will also overwrite all the other feature bits, disabling the power amplifier and both UARTs in the process. Instead, you need to combine the bit values:
saveNvParam(NV_FEATURE_BITS_ID, 0x041F) # NV11 = 0x041F
Beginning in SNAP 2.6, you can use the optional
bitmask
argument:saveNvParam(NV_FEATURE_BITS_ID, 0x0400, 0x0400) # NV11 = 0x041F
Note
NV parameters 128-254 are user-defined, so your script can use these parameters however you want. All values except
None
consume flash space. If you plan to no longer use a user-defined NV parameter, setting it toNone
will regain the flash space.See also
loadNvParam()
- API Reference for NV Parameters
scanEnergy¶
-
scanEnergy
()¶ The
getEnergy()
function returns the result of a brief radio energy detection scan, as an integer. FunctionscanEnergy()
is an extension ofgetEnergy()
. It essentially callsgetEnergy()
N times in a row, changing the frequency before eachgetEnergy()
scan. Here, ‘N’ refers to the number of frequencies supported by the radio.For 2.4 GHz radios, 16 frequencies are supported by the radios, each corresponding to one channel. For 900 MHz radios running FHSS (frequency hopping) firmware, the 16 channels cover 66 radio frequencies, with each channel making use of 25 of those frequencies. For 868 MHz radios, there are three frequencies used, regardless of the channel selected. See the
getChannel()
function explanation for more details about how each radio platform uses the various frequencies available to it.The
scanEnergy()
function returns an N-byte string, where the first character corresponds to the “detected energy level” on frequency 0, the next character corresponds to channel 1, and so on. (For 900 MHz FHSS radios, SNAP does not make use of the first and last frequencies but returns them as part of the string for completeness.) Thus,ord(scanEnergy()[4])
would return the same integer that callinggetEnergy()
from channel 4 would return.The units for the “detected energy level” are the same as that returned by
getLq()
. Refer to the documentation on that function for more info.Returns:
setChannel¶
-
setChannel
(channel, network_id)¶ Set the SNAP Channel, and optionally the SNAP Network ID, of the node.
Parameters: - channel (int) – Specify which frequency (or range of frequencies) the device should use for its communications. Values are platform specific.
- network_id (Optional[int]) – Specify the SNAP Network ID (0-0xFFFF); if excluded, the node’s SNAP Network ID will be unchanged. New in version SNAP 2.6.
Returns: None
Example
setChannel(7 ,0x0C70) # set the SNAP Channel to 7 and the SNAP Network ID to 0x0C70
Warning
This function only changes the “live” settings, so the effect lasts until the next reboot or power cycle. Use
saveNvParam()
to persist these settings into the correct NV Parameter.Note
channel
values 0-15 correspond to 802.15.4 channel 11-26 on 802.15.4/2.4 GHz devices.See also
setNetId¶
-
setNetId
(netId)¶ Set the SNAP Network ID of the node.
The combination of network ID and channel are what determine which radios can communicate with each other in a wireless network. Radios must be set to the same channel and network ID in order to communicate over the air. (Of course, they also must be transmitting in the same frequency band. 900 MHz radios set to a given channel cannot communicate over the air with 2.4 GHz radios set to the same channel.) Nodes communicating over a serial link pay no attention to the channel and network ID.
Parameters: netId (int) – Specify the SNAP Network ID (0-0xFFFF). Returns: None Note
- 0xFFFF is considered a “wildcard” network ID (matches all nodes), and you normally should only use network IDs of 0-0xFFFE.
- This function changes the “live” network ID setting, and the effect only lasts until the next reboot or power cycle, or until
setNetId()
is called again. You should also usesaveNvParam()
to save the “persisted” network ID setting in NV3 - Network ID, if you want the node to stay on that network ID after its next reboot.
setPinDir¶
-
setPinDir
(pin, isOutput)¶ Configures a SNAPpy IO pin as either a digital input or digital output.
Parameters: - pin (int) – Specifies which SNAPpy IO pin to configure.
- isOutput (bool) – Pin is output when
True
; input whenFalse
.
Returns: None
Note
- Calling setPinDir with a pin that is in use by another peripheral (eg UART or ADC) will automatically disable it.
See also
- Refer to RF Modules for SNAPpy IO pin numbers
setPinPullup¶
-
setPinPullup
(pin, isEnabled)¶ Enables the internal pull-up resistor for an IO pin.
Parameters: - pin (int) – Specifies which SNAPpy IO pin to configure.
- isEnabled – Enables the SNAPpy IO pin’s internal pull-up when
True
; disables whenFalse
.
Returns: None
Note
- A SNAPpy IO pin’s internal pull-up is disabled by default.
- This SNAPpy IO pin must first be configured as a digital input pin using
setPinDir()
.
See also
- Refer to RF Modules for SNAPpy IO pin numbers
setPinSlew¶
-
setPinSlew
(pin, isRateControl)¶ Enable slew rate-control (~30ns) for a digital output pin.
Parameters: - pin (int) – Specifies which SNAPpy IO pin to configure.
- isRateControl – Enables the SNAPpy IO pin’s slew rate-control when
True
; disables whenFalse
.
Returns: None
Note
- A SNAPpy IO pin’s slew rate-control is disabled by default.
- This SNAPpy IO pin must first be configured as a digital output pin using
setPinDir()
.
See also
- Refer to RF Modules for SNAPpy IO pin numbers
setRadioRate¶
-
setRadioRate
(rate)¶ Set the data rate of the radio. Only nodes set to the same rate can talk to each other over the air! All radios on the same frequency range and set to rate 0 will be interoperable.
Parameters: rate (int) – 0 specifies the standard data rate for the platform. Other rate values are platform-specific. Returns: None Warning
The “encoding” for non-standard data rates may differ between radio manufacturers. This means that different radio hardware may not be interoperable, even if set to the same (non-standard) rate.
See also
- Refer to RF Modules for
rate
values
- Refer to RF Modules for
setRate¶
-
setRate
(rateNum)¶ Adjusts the background sampling rate of digital IO pins.
Parameters: rateNum (int) – Specifies the background sampling rate. Returns: None The possible values for
rateNum
:Value Rate 0 OFF 1 Every 100 ms 2 Every 10 ms 3 Every 1 ms Note
- The background sampling rate is every 100 milliseconds by default.
- This function has no effect unless/until you are using the
monitorPin()
function.
See also
sleep¶
-
sleep
(mode, ticks)¶ This function puts the radio and CPU on the SNAP node into a low-power mode for a specified number of ticks. This is used to extend battery life.
A
ticks
parameter of 0 can be used to sleep until an IO pin interrupt occurs (see script pinWakeup.py), but SNAPpy is smart enough to know if you have not enabled a wakeup pin and will ignore asleep(mode, 0)
if there is no wakeup possible. Note that on some platforms not all processor pins come out to module pins; it might be possible to specify a wake pin that is not accessible, thus locking your node into a sleeping state. If this happens, make a serial connection to the node and use Portal ‘s Erase SNAPpy Image… menu option to clear the script and start over.Starting with version SNAP 2.2, a negative
ticks
parameter can be used to access alternate sleep timings.Starting with version SNAP 2.4.24, for most platforms the sleep function returns the remaining number of ticks if the node has been woken by a pin interrupt rather than the sleep call timing out. If the complete timed sleep has occurred, or if the sleep was untimed, the function returns zero. For example if you were to invoke
sleep(1, 60)
on a node but woke the node with an interrupt after 20 seconds, the function would return 40.Parameters: - mode – Chooses from the available sleep modes. The number of modes available and their characteristics, such as resolution and accuracy, is platform-specific.
- ticks –
Returns:
See also
- Refer to RF Modules
spiInit¶
-
spiInit
(clockPolarity, clockPhase, isMsbFirst, isFourWire)¶ Initializes the Serial Peripheral Interface (SPI) Bus for the SNAP node.
Parameters: - clockPolarity (bool) – Specifies the level of the CLK pin between SPI exchanges.
True
specifies that the clock is high when idle, andFalse
specifies that the clock is low when idle. - clockPhase (bool) – Specifies which clock edge the incoming data will be latched in. If you number clock edges
from 1, then
True
specifies the even clock edges for incoming data, andFalse
specifies the odd clock edges for incoming data. - isMsbFirst (bool) – Controls the order in which individual bits within each byte will be shifted out. Setting
this parameter to
True
will make the 0x80 bit go out first, and setting this parameter toFalse
will make the 0x01 bit go out first. - isFourWire (bool) – Select the variant of SPI you are connecting to:
True
is four-wire, andFalse
is three-wire.
Returns: None
Note
These settings depends on the device to which you are interfacing.
See also
- User Guide on SPI
spiInit()
spiWrite()
spiRead()
spiXfer()
- clockPolarity (bool) – Specifies the level of the CLK pin between SPI exchanges.
spiRead¶
-
spiRead
(byteCount, bitsInLastByte=8)¶ Reads data from a three-wire SPI device.
Parameters: - byteCount (int) – Specifies how many bytes to read.
- bitsInLastByte (int) – Makes it possible to accommodate devices with data widths that are not multiples of 8 bits. Value should be equal to the data width of device modulo 8. (Default is 8.)
Returns: Bytes received from SPI.
Return type: str
Note
This function can only be used after function
spiInit()
has been called.
spiWrite¶
-
spiWrite
(byteStr, bitsInLastByte=8)¶ Writes data to a three or four-wire SPI device.
Parameters: - byteStr (str) – Specifies the actual bytes to be shifted out.
- bitsInLastByte (int) – Makes it possible to accommodate devices with data widths that are not multiples of 8 bits. Value should be equal to the data width of device modulo 8. (Default is 8.)
Returns: None
Note
This function can only be used after function
spiInit()
has been called.
spiXfer¶
-
spiXfer
(byteStr, bitsInLastByte=8)¶ Bidirectional data transfer over a four-wire SPI device. As bits are being shifted out to the slave device on the MOSI pin, bits from the slave device on the MISO pin are simultaneously being shifted in.
Parameters: - byteStr (str) – Specifies the actual bytes to be shifted out.
- bitsInLastByte (int) – Makes it possible to accommodate devices with data widths that are not multiples of 8 bits. Value should be equal to the data width of device modulo 8. (Default is 8.)
Returns: - Byte string consisting of the bits that were shifted in (as the bits specified by parameter
byteStr
were shifted out).
Return type: str
Note
This function can only be used after function
spiInit()
has been called.See also
- User Guide on SPI
spiWrite()
- if using a write-only devicespiRead()
- if using a read-only device
stdinMode¶
-
stdinMode
(mode, echo)¶ This function controls whether or not received characters are echoed back to the user and how serial data is presented to your SNAPpy script via the
HOOK_STDIN
handler.You can choose between line mode or character mode:
- Line Mode
- Characters are buffered up until either a Carriage Return (CR) or Line Feed (LF) is received. The
complete string is then passed to your SNAPpy script via the
HOOK_STDIN
handler. Either the CR or LF character can trigger the hand-off, so if your terminal (or terminal emulator) is automatically adding extra CR or LF characters, you will see additional empty strings (""
) passed to your script. For example, the character sequenceA B C CR LF
(or\x41\x42\x43\x0d\x0a
) looks like two lines of input to SNAPpy. - Character Mode
- Characters are passed to your SNAPpy script as soon as they become available via the
HOOK_STDIN
handler. If characters are being received fast enough, it still is possible for your script to receive more than one character at a time; they are just not buffered waiting for a CR or LF.
Parameters: - mode (int) –
0
for line mode;1
for character mode. - echo (bool) –
True
will retransmit any received characters to the sender.
Returns: None
Note
While your node is in line mode, SNAP reserves one “medium” string buffer to accept incoming data from STDIN. If your script is heavy on string usage but does not make use of
HOOK_STDIN
, you can recover use of the medium string used by line mode by changing to character mode.See also
str¶
-
str
(obj)¶ Given an element, returns a string representation of the element.
Parameters: obj – Element to be transformed into a string. Returns: String representation of the element. Return type: str Examples
str(``True``) # returns '``True``' str(123) # returns '123' str('hello') # returns 'hello'
txPwr¶
-
txPwr
(power)¶ The radio on the SNAP node defaults to the maximum power allowed. Function
txPwr()
lets you reduce the power level from this default maximum.Parameter
power
specifies a transmit power level from 0-17, with 0 being the lowest power setting and 17 being the highest power setting. On some platforms, government regulations prevent the hardware from being usable above certain levels. On one of those platforms, setting the transmit power higher than allowed pegs the power output at the highest allowed amount, so there may be no practical difference between setting the power to 16 and setting it to 17, for example.Parameters: power (int) – The TX power level, in the range 0-17. Returns: None See also
- Refer to RF Modules
type¶
-
type
(arg)¶ Given a single argument, it returns an integer indicating the data type of the argument.
This function does not distinguish between constant or dynamic variables, nor between user functions or SNAPpy built-in functions.
Parameters: arg – Object to inspect. Returns: Integer indicating the type of the object passed to it. Return type: int The expected return values (different from that returned in Python) are:
0 None 1 Integer 2 String 3 Function 5 Boolean 6 Tuple 7 Iterator 8 Byte List 31 Unknown Note
Typically, you will not be able to create variables of an unknown type. However, if you have a Byte List variable and you use the
del
keyword to delete the entire list, the variable will be left with contents of an unknown type. Removing all elements from a list does not set the variable to an unknown type. Only deleting the list itself will do that.
ucastSerial¶
-
ucastSerial
(dstAddr)¶ Set serial transparent mode to unicast.
Parameters: dstAddr – Specifies the SNAP address of the destination node. Returns: None See also
- User Guide on Wireless Serial
mcastSerial()
- transmit to multiple nodes
uniConnect¶
-
uniConnect
(dst, src)¶ Establishes a one-way connection between two SNAP data-sources.
Parameters: - dst – SNAP data destination.
- src – SNAP data source.
Returns: None
See also
- User Guide on The Switchboard for details
crossConnect()
vmStat¶
-
vmStat
(statusCode, args)¶ This function is specialized for management applications like Portal and provides a range of control/callback functionality.
Parameters: - statusCode (int) – Controls what actions will be taken and what data will be returned via
tellVmStat()
. - args – Varies depending on the
statusCode
. See below for details.
Returns: This function does not return a value, but it causes a
tellVmStat()
call to be made to the node that requested thevmStat()
.The currently supported
statusCode
values are:0-3 RESERVED Internal Use Only 4 `VM_NVREAD`_ Read and return the specified NV parameter 5 `VM_NAME`_ Returns NODE NAME if set, else IMAGE NAME, plus Link Quality 6 `VM_VERSION`_ Returns software version number 7 `VM_NET`_ Returns Network ID and Channel 8 `VM_SPACE`_ Returns Total Image (script) Space Available 9 `VM_SCAN`_ Scans all RF channels for energy 10 `VM_INFO`_ Returns Image Name (script name) and Link Quality 11 `VM_DATA_SPACE`_ Returns the amount of space available for a SNAPpy image in auxiliary memory (valid only for the Si1000-based SNAP modules RF300, RF301, SM300, SM301) 12 `VM_TOPOLOGY`_ Returns a string providing a list of nodes with which the target node can directly communicate After the “varying”
args
parameter comes a final optional argument that specifies a “reply window” (in seconds) to randomly reply within. This helps prevent communication interference if you send avmStat()
command to multiple nodes concurrently.If you do not specify a “reply window” parameter (or specify zero), the nodes will respond as rapidly as they can (subject to network traffic, communication difficulties, etc.).
Some of these commands are multicast by Portal; the “reply window” provides a way to keep all of the nodes from trying to respond at once. Specifying a non-zero “reply window” tells the node to pick a random time within the next “reply window” seconds and wait until then to reply.
Return Value Format:
When a node receives a
vmStat()
call, it responds to the source node with a call totellVmStat(word, data)
.The least significant byte of
word
will be the originally requestedstatusCode
. The most significant byte will vary depending on thestatusCode
and is the “hiByte” described below. Thedata
value is the main return value and is also dependant on thestatusCode
. For example, if avmStat(4, 15, 3)
were called, the called node would, within 3 seconds, reply withtellVmStat(3844, {contents of NV parameter 15 on the node})
. Note that the second parameter could be an integer, a string, a Boolean, or None.The 3844 value that was returned as
word
equates to 0x0F04. The “hiByte” of this value, 0x0F, indicates which NV parameter was read. The “lowByte” of this value, 0x04, indicates that the returned value comes as a result of a VM_NVREAD call. If the value of the first returned parameter is greater than 10, the “lowByte” will always contain the calling code, while the significance of the “hiByte” will vary depending on what call was made.- VM_NVREAD
For VM_NVREAD, the
args
parameter is the ID of the NV parameter you want to read. (These are the same IDs used in thesaveNvParam()
andloadNvParam()
functions. The “system” NV parameter IDs are given in section 3.) You can also optionally specify a “reply window.”The reported values will be a “hiByte” of the NV parameter ID and a “data” of the actual NV parameter value.
- VM_NAME
For VM_NAME, the only parameter is the optional reply window.
The reported “data” value will be a string name and a Link Quality reading.
- VM_VERSION
For VM_VERSION, the only parameter is the optional reply window.
The reported “data” value will be a version number string.
- VM_NET
For VM_NET, the only parameter is the optional reply window.
The reported values will be a “hiByte” containing the currently active channel, and a “data” value of the current Network ID.
- VM_SPACE
For VM_SPACE, the only parameter is the optional reply window.
The reported “data” value will be the Total Image (script) Space Available.
- VM_SCAN
For VM_SCAN, the only parameter is the optional reply window.
The reported “data” value will be a string containing the detected energy levels on all channels. This value is identical to the value returned by the
scanEnergy()
function. Note that each scan just represents one point in time. You will probably have to initiate multiple scans to determine which channels actually have SNAP nodes on them.You can see this VM_SCAN function put to use in the Channel Analyzer feature of Portal.
- VM_INFO
For VM_INFO, the only parameter is the optional reply window.
The reported values will be a “hiByte” of the current Link Quality and a “data” of the currently loaded script name (a string).
- VM_DATA_SPACE
For VM_DATA_SPACE, the only parameter is the optional reply window.
The reported values will be a “hiByte” of the current Link Quality and a “data” of the space available in auxiliary memory for a SNAPpy script (an integer).
- VM_TOPOLOGY
For VM_TOPOLOGY, the only parameter is the optional reply window.
The reported values will be a “hiByte” of the current Link Quality and a “data” of details about nodes with which the reporting node can directly communicate (a string). Each node with which the reporting node can directly communicate will be represented by a block of five characters: The first three will be the node’s address, the fourth will be the link quality with which the neighboring node heard the reporting node, and the fifth will be the link quality with which the reporting node heard the neighboring node reply. Thus data[0:3] would be the address of one node and data[5:8] would be the address of another node (assuming that the reporting node could communicate with two neighbors).
It is possible that one call to
vmStat(12)()
may result in multiple calls back totellVmStat()
from a given node if that node has many neighbors with which it can directly communicate. In dense networks, it may be necessary to include the “reply window” parameter in order to provide enough time for all nodes to respond.This option for
vmStat()
was added in SNAP 2.6, and the reporting node must have version SNAP 2.6 (or later) firmware installed. However, neighboring nodes can have earlier firmware versions on them and still report correctly.
Note
Because of the
callback()
function, some of thevmStat()
capabilities are redundant.- statusCode (int) – Controls what actions will be taken and what data will be returned via
writePin¶
-
writePin
(pin, isHigh)¶ Sets the current level of a digital output pin.
Parameters: - pin (int) – Specifies which SNAPpy IO pin to configure.
- isHigh (bool) – Sets the SNAPpy IO pin high when
True
; low whenFalse
.
Returns: None
Note
This SNAPpy IO pin must first be configured as a digital output pin using
setPinDir()
.See also
- Refer to RF Modules for SNAPpy IO pin numbers
setPinSlew()
- controls how quickly the pin will transition to a new value
xrange¶
-
xrange
(args)¶ New in version SNAP 2.6.
Creates a sequence iterator.
Parameters: args – Given a single integer as an argument, returns an iterator that yields integers beginning with zero and stepping up to one less than the passed argument. Given two integers, it returns an iterator that yields integers beginning with the first argument and steps up to one less than the second argument. Given three integers, it returns an iterator that yields integers beginning with the first argument and steps toward (but stops just before reaching or passing) the second argument, stepping in increments of the third argument. Returns: An iterable that can be stepped through using a for
loop.Examples
There are three ways the function can be called:
for i in xrange(3): print i, # Prints 012 for i in xrange(3, 6): print i, # Prints 345 for i in xrange(3, 9, 2): print i, # prints 357
Note
Remember that SNAPpy integers are 16-bit signed numbers. Unlike a
while
loop that continually increments a counter until the stop value is reached,xrange()
will generate an iterable that yields no numbers if the start value is greater than the stop value, unless the step value is negative.