Skip to content

Commit f6514ff

Browse files
committed
Merge branch 'develop'
2 parents 8c389f2 + 02fd889 commit f6514ff

23 files changed

+610
-49
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/deploy.sh
33
.DS_Store
44
.pioenvs
5+
tags
56

67
# ignore any soft device source for testing
78
nrf_*
@@ -14,3 +15,6 @@ ant_interface.h
1415
.ycm*
1516
.platformio*
1617
*.swp
18+
19+
# ignore main file for testing
20+
src/main.cpp

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ env:
3333
- PLATFORMIO_CI_SRC=examples/Callbacks/Callbacks.ino
3434
- PLATFORMIO_CI_SRC=examples/OpenChannel/OpenChannel.ino
3535
- PLATFORMIO_CI_SRC=examples/ProximitySearch/ProximitySearch.ino
36+
- PLATFORMIO_CI_SRC=examples/RSSIScan/RSSIScan.ino
3637
- PLATFORMIO_CI_SRC=examples/SearchList/SearchList.ino
3738
- PLATFORMIO_CI_SRC=examples/SoftwareSerialOpenChannel/SoftwareSerialOpenChannel.ino
3839
- PLATFORMIO_CI_SRC=examples/TxCounter/TxCounter.ino

examples/RSSIScan/RSSIScan.ino

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
/***********************************
2+
* Ant RSSI Scan Example
3+
*
4+
* Opens a channel in rx scan mode
5+
* then reports all found devices
6+
* and their RSSI values
7+
*
8+
* Author Curtis Malainey
9+
************************************/
10+
11+
#include "ANT.h"
12+
#define BAUD_RATE 9600
13+
Ant ant = Ant();
14+
15+
const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
16+
17+
void parseMessage();
18+
void parseEventMessage(uint8_t code);
19+
20+
void setup()
21+
{
22+
AssignChannel ac;
23+
ResetSystem rs;
24+
SetNetworkKey snk;
25+
ChannelId ci;
26+
ChannelRfFrequency crf;
27+
LibConfig lb;
28+
OpenRxScanMode osm;
29+
30+
Serial1.begin(BAUD_RATE);
31+
ant.setSerial(Serial1);
32+
ant.send(rs);
33+
// Delay after resetting the radio to give the user time to connect on serial
34+
delay(10000);
35+
Serial.begin(9600);
36+
Serial.println("Running");
37+
parseMessage();
38+
39+
snk.setNetwork(0);
40+
snk.setKey((uint8_t*)NETWORK_KEY);
41+
ant.send(snk);
42+
parseMessage();
43+
44+
ac.setChannel(0);
45+
ac.setChannelType(CHANNEL_TYPE_BIDIRECTIONAL_RECEIVE); //can't wildcard this
46+
ac.setChannelNetwork(0);
47+
ant.send(ac);
48+
parseMessage();
49+
50+
ci.setChannel(0);
51+
ci.setDeviceNumber(0);
52+
ci.setDeviceType(0);
53+
ci.setTransmissionType(0);
54+
ant.send(ci);
55+
parseMessage();
56+
57+
lb.setConfig(LIB_CONFIG_RSSI | LIB_CONFIG_CHANNEL_ID);
58+
ant.send(lb);
59+
parseMessage();
60+
61+
crf.setChannel(0);
62+
crf.setRfFrequency(0); //can't wildcard this
63+
ant.send(crf);
64+
parseMessage();
65+
66+
ant.send(osm);
67+
parseMessage();
68+
}
69+
70+
void loop()
71+
{
72+
parseMessage();
73+
}
74+
75+
void parseMessage() {
76+
ant.readPacket();
77+
if(ant.getResponse().isAvailable())
78+
{
79+
uint8_t msgId = ant.getResponse().getMsgId();
80+
switch (msgId) {
81+
case CHANNEL_EVENT:
82+
{
83+
ChannelEventResponse cer;
84+
ant.getResponse().getChannelEventResponseMsg(cer);
85+
Serial.println("Received Msg: ChannelEventResponse");
86+
Serial.print("Channel: ");
87+
Serial.println(cer.getChannelNumber());
88+
parseEventMessage(cer.getCode());
89+
break;
90+
}
91+
92+
case START_UP_MESSAGE:
93+
{
94+
StartUpMessage sum;
95+
ant.getResponse().getStartUpMsg(sum);
96+
Serial.println("Received Msg: StartupMessage");
97+
Serial.print("Message: ");
98+
Serial.println(sum.getMessage());
99+
break;
100+
}
101+
102+
case BROADCAST_DATA:
103+
{
104+
BroadcastData bd;
105+
ant.getResponse().getBroadcastDataMsg(bd);
106+
if ((bd.getFlagByte() & LIB_CONFIG_RSSI) && (bd.getFlagByte() & LIB_CONFIG_CHANNEL_ID)) {
107+
Serial.print("Device Number: ");
108+
Serial.print(bd.getDeviceNumber());
109+
Serial.print(", Device Type: ");
110+
Serial.print(bd.getDeviceType());
111+
Serial.print(", RSSI: ");
112+
Serial.println(bd.getRSSIValue());
113+
}
114+
break;
115+
}
116+
117+
case ACKNOWLEDGED_DATA:
118+
{
119+
AcknowledgedData ad;
120+
ant.getResponse().getAcknowledgedDataMsg(ad);
121+
if ((ad.getFlagByte() & LIB_CONFIG_CHANNEL_ID) && (ad.getFlagByte() & LIB_CONFIG_RSSI)) {
122+
Serial.print("Device Number: ");
123+
Serial.print(ad.getDeviceNumber());
124+
Serial.print(", Device Type: ");
125+
Serial.print(ad.getDeviceType());
126+
Serial.print(", RSSI: ");
127+
Serial.println(ad.getRSSIValue());
128+
}
129+
}
130+
131+
default:
132+
Serial.print("Undefined Message: ");
133+
Serial.println(msgId, HEX);
134+
break;
135+
}
136+
}
137+
else if (ant.getResponse().isError())
138+
{
139+
Serial.print("ANT MSG ERROR: ");
140+
Serial.println(ant.getResponse().getErrorCode());
141+
}
142+
}
143+
144+
void parseEventMessage(uint8_t code)
145+
{
146+
BroadcastDataMsg bm;
147+
Serial.print("Code: ");
148+
switch (code)
149+
{
150+
case STATUS_RESPONSE_NO_ERROR:
151+
Serial.println("RESPONSE_NO_ERROR");
152+
break;
153+
154+
case STATUS_EVENT_CHANNEL_CLOSED:
155+
Serial.println("EVENT_CHANNEL_CLOSED");
156+
break;
157+
158+
default:
159+
Serial.println(code);
160+
break;
161+
}
162+
}

src/ANT_defines.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,16 @@
231231
#define CONFIG_ID_LIST_EXCLUSION_INCLUSION 0x00
232232
#define CONFIG_ID_LIST_EXCLUSION_EXCLUSION 0x01
233233

234+
/**
235+
* Set Encryption Info Defines
236+
*/
237+
#define SET_ENCRYPTION_INFO_SET_PARAMETER_ENCRYPTION_ID 0
238+
#define SET_ENCRYPTION_INFO_SET_PARAMETER_USER_INFORMATION_STRING 1
239+
#define SET_ENCRYPTION_INFO_SET_PARAMETER_RANDOM_NUMBER_SEED 2
240+
#define SET_ENCRYPTION_INFO_DATA_STRING_ENCRYPTION_ID_SIZE 4
241+
#define SET_ENCRYPTION_INFO_DATA_STRING_USER_INFORMATION_STRING_SIZE 19
242+
#define SET_ENCRYPTION_INFO_DATA_STRING_RANDOM_NUMBER_SEED_SIZE 16
243+
234244
/**
235245
* Driver Error Codes
236246
*/
@@ -244,6 +254,7 @@
244254
* Framework Defines
245255
*/
246256
#define NETWORK_KEY_SIZE 0x08
257+
#define ENCRYPTION_KEY_SIZE 0x10
247258
#define MESSAGE_SIZE 0x08
248259
#define INVALID_REQUEST 0xFF
249260
#define BITS_IN_BYTE 0x08

src/ANT_private_defines.h

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
#include <ANT_defines.h>
2-
1+
/**
2+
* Private definitions for the library
3+
* Users of the library do not need to use this and
4+
* the header is not available by default
5+
*/
36
#ifndef ANT_PRIVATE_DEFINES_h
47
#define ANT_PRIVATE_DEFINES_h
58

9+
#include <ANT_defines.h>
10+
611
#define ANT_START_BYTE 0xA4
712

813
// start/length/msg/checksum bytes
@@ -34,6 +39,7 @@
3439
#define CONFIGURE_EVENT_FILTER_LENTGH 0x03
3540
#define CONFIGURE_SELECTIVE_DATA_UPDATES_LENGTH 0x02
3641
#define CW_INIT_LENGTH 0x01
42+
#define CW_TEST_LENGTH 0x03
3743
#define ENABLE_EXT_RX_MESSAGES_LENGTH 0x02
3844
#define ENABLE_SINGLE_CHANNEL_ENCRYPTION_LENGTH 0x04
3945
#define FREQUENCY_AGILITY_LENGTH 0x04
@@ -48,6 +54,8 @@
4854
#define SEARCH_WAVEFORM_LENGTH 0x03
4955
#define SERIAL_NUMBER_SET_CHANNEL_ID_LENGTH 0x03
5056
#define SET_CHANNEL_TRANSMIT_POWER_LENGTH 0x02
57+
#define SET_ENCRYPTION_INFO_LENGTH 0x01
58+
#define SET_ENCRYPTION_KEY_LENGTH 0x11
5159
#define SET_NETWORK_KEY_LENGTH 0x09
5260
#define TRANSMIT_POWER_LENGTH 0x02
5361
#define UNASSIGN_CHANNEL_LENGTH 0x01
@@ -78,4 +86,29 @@
7886
#define CONFIGURE_SELECTIVE_DATA_UPDATES_SDU_NUMBER_MASK 0x1F
7987
#define CONFIGURE_SELECTIVE_DATA_UPDATES_FILTER_BIT_MASK 0x80
8088

89+
/**
90+
* Extended Data definitions
91+
*/
92+
#define EXTENDEDDATA_FLAGBYTE_BYTE 9
93+
#define EXTENDEDDATA_DEVICENUMBER_LSB_BYTE 10
94+
#define EXTENDEDDATA_DEVICENUMBER_MSB_BYTE 11
95+
#define EXTENDEDDATA_DEVICENUMBER_MSB_SHIFT 8
96+
#define EXTENDEDDATA_DEVICETYPE_BYTE 12
97+
#define EXTENDEDDATA_TRANSMISSIONTYPE_BYTE 13
98+
#define EXTENDEDDATA_CHANNELID_SIZE 4
99+
#define EXTENDEDDATA_MEASUREMENTTYPE_BYTE 10
100+
#define EXTENDEDDATA_RSSIVALUE_BYTE 11
101+
#define EXTENDEDDATA_THRESHOLDCONFIGURATIONVALUE_BYTE 12
102+
#define EXTENDEDDATA_RSSIOUTPUT_SIZE 3
103+
#define EXTENDEDDATA_RXTIMESTAMP_LSB_BYTE 10
104+
#define EXTENDEDDATA_RXTIMESTAMP_MSB_BYTE 11
105+
#define EXTENDEDDATA_RXTIMESTAMP_MSB_SHIFT 8
106+
107+
/**
108+
* Default data message length
109+
*/
110+
#define BROADCASTDATA_DEFAULT_MSG_LENGTH 9
111+
#define ACKNOWLEDGEDDATA_DEFAULT_MSG_LENGTH 9
112+
#define BURSTTRANSFERDATA_DEFAULT_MSG_LENGTH 9
113+
81114
#endif // ANT_PRIVATE_DEFINES_h

src/RX/ANT_AntResponse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,4 @@ void AntResponse::reset() {
205205
_checksum = 0;
206206

207207
_errorCode = NO_ERROR;
208-
}
208+
}

src/RX/ANT_AntResponse.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,4 @@ class AntResponse {
144144
bool _complete;
145145
uint8_t _errorCode;
146146
};
147-
#endif // ANT_ANTRESPONSE_h
147+
#endif // ANT_ANTRESPONSE_h

src/RX/ANT_AntRxDataResponse.cpp

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,79 @@ uint8_t* AntRxDataResponse::getData() {
1616

1717
uint8_t AntRxDataResponse::getDataOffset() {
1818
return ANT_MSG_FRONT_OVERHEAD;
19-
}
19+
}
20+
21+
uint16_t AntRxDataResponse::getDeviceNumber() {
22+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
23+
return getData(EXTENDEDDATA_DEVICENUMBER_LSB_BYTE) | (getData(EXTENDEDDATA_DEVICENUMBER_LSB_BYTE) << EXTENDEDDATA_DEVICENUMBER_MSB_SHIFT);
24+
} else {
25+
return 0;
26+
}
27+
}
28+
29+
uint8_t AntRxDataResponse::getDeviceType() {
30+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
31+
return getData(EXTENDEDDATA_DEVICETYPE_BYTE);
32+
} else {
33+
return 0;
34+
}
35+
}
36+
37+
uint8_t AntRxDataResponse::getTransmissionType() {
38+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
39+
return getData(EXTENDEDDATA_TRANSMISSIONTYPE_BYTE);
40+
} else {
41+
return 0;
42+
}
43+
}
44+
45+
uint8_t AntRxDataResponse::getMeasurementType() {
46+
if (getFlagByte() & LIB_CONFIG_RSSI) {
47+
uint8_t offset = 0;
48+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
49+
offset += EXTENDEDDATA_CHANNELID_SIZE;
50+
}
51+
return getData(EXTENDEDDATA_MEASUREMENTTYPE_BYTE + offset);
52+
} else {
53+
return 0;
54+
}
55+
}
56+
57+
int8_t AntRxDataResponse::getRSSIValue() {
58+
if (getFlagByte() & LIB_CONFIG_RSSI) {
59+
uint8_t offset = 0;
60+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
61+
offset += EXTENDEDDATA_CHANNELID_SIZE;
62+
}
63+
return getData(EXTENDEDDATA_RSSIVALUE_BYTE + offset);
64+
} else {
65+
return 0;
66+
}
67+
}
68+
69+
int8_t AntRxDataResponse::getThresholdConfigurationValue() {
70+
if (getFlagByte() & LIB_CONFIG_RSSI) {
71+
uint8_t offset = 0;
72+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
73+
offset += EXTENDEDDATA_CHANNELID_SIZE;
74+
}
75+
return getData(EXTENDEDDATA_THRESHOLDCONFIGURATIONVALUE_BYTE + offset);
76+
} else {
77+
return 0;
78+
}
79+
}
80+
81+
uint16_t AntRxDataResponse::getRxTimestamp() {
82+
if (getFlagByte() & LIB_CONFIG_RX_TIMESTAMP) {
83+
uint8_t offset = 0;
84+
if (getFlagByte() & LIB_CONFIG_CHANNEL_ID) {
85+
offset += EXTENDEDDATA_CHANNELID_SIZE;
86+
}
87+
if (getFlagByte() & LIB_CONFIG_RSSI) {
88+
offset += EXTENDEDDATA_RSSIOUTPUT_SIZE;
89+
}
90+
return getData(EXTENDEDDATA_RXTIMESTAMP_LSB_BYTE + offset) | (getData(EXTENDEDDATA_DEVICENUMBER_MSB_BYTE + offset) << EXTENDEDDATA_RXTIMESTAMP_MSB_SHIFT);
91+
} else {
92+
return 0;
93+
}
94+
}

0 commit comments

Comments
 (0)