annotate Discovery/Src/cv_heartbeat.c @ 1034:195bfbdf961d Puls_Integration

Pulse measurement integration: Added function to parse standart GATT pulse service. Added compile switch to remove code from non dev builds.
author Ideenmodellierer
date Thu, 07 Aug 2025 20:18:52 +0200
parents 5f66e44d69f0
children 5b913cdaa9dc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
1 ///////////////////////////////////////////////////////////////////////////////
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
2 /// -*- coding: UTF-8 -*-
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
3 ///
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
4 /// \file Discovery/Src/cv_heartbeat.c
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
5 /// \brief providing functionality to connect OSTC to a Polar HC10 heartbeat sensor
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
6 /// \author heinrichs weikamp gmbh
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
7 /// \date 03-July-2025
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
8 ///
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
9 /// $Id$
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
10 ///////////////////////////////////////////////////////////////////////////////
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
11 /// \par Copyright (c) 2014-2025 Heinrichs Weikamp gmbh
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
12 ///
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
13 /// This program is free software: you can redistribute it and/or modify
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
14 /// it under the terms of the GNU General Public License as published by
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
15 /// the Free Software Foundation, either version 3 of the License, or
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
16 /// (at your option) any later version.
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
17 ///
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
18 /// This program is distributed in the hope that it will be useful,
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
19 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
20 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
21 /// GNU General Public License for more details.
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
22 ///
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
23 /// You should have received a copy of the GNU General Public License
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
24 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
25 //////////////////////////////////////////////////////////////////////////////
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
26
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
27 #include "configuration.h"
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
28
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
29 #ifdef ENABLE_PULSE_SENSOR_BT
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
30 #include "cv_heartbeat.h"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
31 #include "tMenuEdit.h"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
32
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
33 #include "gfx_fonts.h"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
34 #include "tHome.h"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
35 #include "ostc.h"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
36 #include "tComm.h"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
37 #include "tInfoLogger.h"
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
38 #include "stdlib.h"
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
39
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
40 static sensorHeartbeat_State_t heartbeatState = SENSOR_HB_OFFLINE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
41
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
42 static uint8_t OnAction_Heartbeat(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
43 static uint32_t startDetection_ms;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
44
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
45 #define MAX_BT_DEVICE 10 /* max number of device which may be handled */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
46 static btDdeviceData_t btDeviceList[MAX_BT_DEVICE];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
47 static btDeviceService_t curDeviceService[10];
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
48 static btDeviceCharacteristic_t curDevCharacteristic[10];
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
49 static btDeviceDescriptor_t curDevDescriptor;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
50
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
51
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
52 static uint8_t curCharacteristicIndex = 0;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
53 static uint8_t curServiceIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
54 static uint8_t curBtIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
55 static uint8_t connHandle = ' ';
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
56 static uint8_t evaluateDevIndex = 0xFF;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
57 static uint8_t evaluateSrvIndex = 0xFF;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
58 static uint8_t evaluateCharIndex = 0xFF;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
59
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
60 static void parsePulseMeasurement(uint8_t* pData, uint8_t length)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
61 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
62 uint8_t rawData[10];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
63 char text[40];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
64 char* enptr;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
65 uint8_t flags = 0;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
66 uint16_t rr = 0;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
67 uint8_t index = 0;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
68 uint8_t* pRaw = (uint8_t*)&rawData;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
69 char tmpStr[3];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
70
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
71 tmpStr[2] = 0;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
72
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
73 HRMeasurement_t pulseData;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
74
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
75 for(index = 0; index < length; index +=2)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
76 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
77 memcpy(tmpStr,&pData[index],2);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
78 rawData[index / 2] = strtol(tmpStr, &enptr,16);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
79 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
80 flags = pRaw[0];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
81 index = 1;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
82 /* 0: Heart Rate Format bit (0 = UINT8, 1 = UINT16) */
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
83 if (flags & 0x01)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
84 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
85 pulseData.heart_rate = pRaw[index] | (pRaw[index + 1] << 8);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
86 index += 2;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
87 } else
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
88 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
89 pulseData.heart_rate = pRaw[index];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
90 index += 1;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
91 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
92
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
93 /* 3: Energy Expended Status */
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
94 if (flags & 0x08)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
95 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
96 pulseData.energy_expended = pRaw[index] | (pRaw[index + 1] << 8);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
97 index += 2;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
98 } else
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
99 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
100 pulseData.energy_expended = 0;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
101 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
102 /* 4: RR-Interval bit */
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
103 pulseData.rr_count = 0;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
104 if (flags & 0x10)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
105 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
106 while (index + 1 < 4 && pulseData.rr_count < 10)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
107 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
108 rr = pRaw[index] | (pRaw[index + 1] << 8);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
109 pulseData.rr_intervals[pulseData.rr_count++] = rr;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
110 index += 2;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
111 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
112 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
113 // snprintf(text,40,"Pulse: %d",pulseData.heart_rate);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
114 // InfoLogger_writeLine((uint8_t*)text,strlen(text),0);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
115 }
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
116
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
117 static indicatior_t checkIndicators(uint8_t* pdata)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
118 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
119 indicatior_t ret = NO_INDICATOR;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
120
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
121 if(strcmp((char*)pdata,"+UBTD:") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
122 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
123 ret = DEVICE_INDICATOR;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
124 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
125 else if(strcmp((char*)pdata,"+UUBTACLC:") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
126 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
127 ret = CONNECTION_INDICATOR;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
128 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
129 else if(strcmp((char*)pdata,"+UBTGDP:") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
130 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
131 ret = SERVICE_INDICATOR;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
132 }
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
133 else if(strcmp((char*)pdata,"+UBTGDCS:") == 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
134 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
135 ret = CHARACTERISTIC_INDICATOR;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
136 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
137 else if(strcmp((char*)pdata,"+UBTGDCD:") == 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
138 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
139 ret = DESCRIPTOR_INDICATOR;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
140 }
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
141 else if(strcmp((char*)pdata,"+UUBTGN:") == 0)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
142 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
143 ret = PULSE_INDICATOR;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
144 }
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
145 return ret;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
146 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
147
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
148 static void handleOK()
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
149 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
150 uint8_t index = 0;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
151
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
152 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
153 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
154 case SENSOR_HB_ENABLE_BLE: heartbeatState = SENSOR_HB_CHECK_CONFIG;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
155 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
156 case SENSOR_HB_CHECK_CONFIG: heartbeatState = SENSOR_HB_DISCOVER;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
157 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
158 case SENSOR_HB_RESTART: heartbeatState = SENSOR_HB_OFFLINE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
159 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
160 case SENSOR_HB_DISCOVER: if(curBtIndex > 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
161 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
162 heartbeatState = SENSOR_HB_CONNECT;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
163 evaluateDevIndex = 0;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
164 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
165 else
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
166 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
167 heartbeatState = SENSOR_HB_OFFLINE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
168 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
169
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
170 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
171 case SENSOR_HB_SERVICES: evaluateSrvIndex = 0xFF;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
172 if(curServiceIndex != 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
173 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
174 for(index = 0; index <= curServiceIndex; index++)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
175 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
176 if(strcmp((char*)curDeviceService[index].uuid,"180D") == 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
177 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
178 heartbeatState = SENSOR_HB_CHARACTERISTIC;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
179 evaluateSrvIndex = index;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
180 curCharacteristicIndex = 0;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
181 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
182 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
183 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
184 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
185 if(evaluateSrvIndex == 0xFF) /* device does not provide heartbeat data => disconnect */
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
186 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
187 heartbeatState = SENSOR_HB_DISCONNECT;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
188 }
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
189 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
190 case SENSOR_HB_CHARACTERISTIC: evaluateCharIndex = 0xFF;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
191 if(curCharacteristicIndex != 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
192 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
193 for(index = 0; index < curCharacteristicIndex; index++)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
194 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
195 if(strcmp((char*)curDevCharacteristic[index].uuid,"2A37") == 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
196 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
197 heartbeatState = SENSOR_HB_DESCRIPTOR;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
198 evaluateCharIndex = index;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
199 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
200 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
201 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
202 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
203 if(evaluateCharIndex == 0xFF) /* device does not provide heartbeat data => disconnect */
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
204 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
205 heartbeatState = SENSOR_HB_DISCONNECT;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
206 }
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
207 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
208 case SENSOR_HB_DESCRIPTOR: if(strcmp((char*)curDevDescriptor.uuid,"2902") == 0)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
209 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
210 heartbeatState = SENSOR_HB_SUBSCRIBE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
211 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
212 else
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
213 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
214 heartbeatState = SENSOR_HB_DISCONNECT;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
215 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
216 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
217
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
218 case SENSOR_HB_SUBSCRIBE: heartbeatState = SENSOR_HB_CONNECTED;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
219 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
220 case SENSOR_HB_DISCONNECT: evaluateDevIndex++;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
221 connHandle= ' ';
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
222 if(evaluateDevIndex < curBtIndex) /* more devices to be evaluated? */
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
223 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
224 heartbeatState = SENSOR_HB_CONNECT;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
225 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
226 else
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
227 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
228 heartbeatState = SENSOR_HB_OFFLINE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
229 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
230 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
231 case SENSOR_HB_CONNECT: /* handled in data rx section */
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
232 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
233 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
234 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
235 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
236
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
237 static void handleERROR()
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
238 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
239 switch(heartbeatState)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
240 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
241 case SENSOR_HB_DISCONNECT: evaluateDevIndex++;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
242 connHandle= ' ';
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
243 if(evaluateDevIndex < curBtIndex) /* more devices to be evaluated? */
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
244 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
245 heartbeatState = SENSOR_HB_CONNECT;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
246 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
247 else
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
248 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
249 heartbeatState = SENSOR_HB_OFFLINE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
250 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
251 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
252 default:
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
253 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
254 }
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
255 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
256
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
257 uint8_t cv_heartbeat_HandleData()
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
258 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
259 static uint8_t firstDevice = 1;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
260 static uint8_t curLine[MAX_CHAR_PER_LINE]; /* holds complete line and is used for logging */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
261 static uint8_t curLineIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
262 static uint8_t parameter[40]; /* content of the parameter in read state */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
263 static uint8_t writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
264 static uint8_t complete = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
265
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
266 static readDataType_t readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
267
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
268 char text[40];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
269 uint8_t data = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
270 data = UART_getChar();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
271
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
272 while((data != 0) && (complete == 0))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
273 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
274 if(curLineIndex == MAX_CHAR_PER_LINE - 1) /* avoid overflow */
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
275 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
276 InfoLogger_writeLine(curLine,curLineIndex,0);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
277 memset(curLine,0,sizeof(curLine));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
278 curLineIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
279 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
280 if((data == '\r') || (data == '\n'))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
281 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
282 if(curLineIndex > 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
283 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
284 InfoLogger_writeLine(curLine,curLineIndex,0);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
285 if(strcmp((char*)curLine,"OK") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
286 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
287 handleOK();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
288 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
289 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
290 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
291 if(strcmp((char*)curLine,"ERROR") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
292 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
293 handleERROR();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
294 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
295 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
296 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
297 switch(readType)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
298 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
299 case BT_READ_DEVICE_NAME: if(writeIndex < BLUEMOD_NAME_SIZE)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
300 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
301 memcpy (btDeviceList[curBtIndex].name, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
302 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
303 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
304 case BT_READ_SERV_UUID: if((writeIndex < 50) && (curServiceIndex < 10))
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
305 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
306 memcpy(curDeviceService[curServiceIndex].uuid, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
307 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
308 curServiceIndex++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
309 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
310 case BT_READ_CHAR_UUID: if(writeIndex < 50)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
311 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
312 memcpy(curDevCharacteristic[curCharacteristicIndex].uuid, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
313 curCharacteristicIndex++;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
314 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
315 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
316 case BT_READ_DESC_UUID: if(writeIndex < 50)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
317 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
318 memcpy(curDevDescriptor.uuid, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
319 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
320 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
321 case BT_READ_PULSE_DATA: if(writeIndex < 50)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
322 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
323 parsePulseMeasurement(parameter, writeIndex);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
324 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
325 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
326 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
327 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
328 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
329 curLineIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
330 writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
331 memset(curLine,0,sizeof(curLine));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
332 readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
333 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
334 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
335 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
336 if(curLineIndex < MAX_CHAR_PER_LINE) curLine[curLineIndex++] = data;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
337
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
338 if(data == ':')
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
339 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
340 switch(checkIndicators(curLine))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
341 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
342 case DEVICE_INDICATOR: readType = BT_READ_DEVICE_ADDR;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
343 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
344 case CONNECTION_INDICATOR: readType = BT_READ_CON_DETAILS;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
345 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
346 case SERVICE_INDICATOR: readType = BT_READ_SERV_HANDLE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
347 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
348 case CHARACTERISTIC_INDICATOR: readType = BT_READ_CHAR_CONHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
349 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
350 case DESCRIPTOR_INDICATOR: readType = BT_READ_DESC_CONHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
351 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
352 case PULSE_INDICATOR: readType = BT_READ_PULSE_CONHANDLE;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
353 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
354 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
355 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
356 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
357 writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
358 memset(parameter,0,sizeof(parameter));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
359 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
360 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
361 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
362 if(data == ',') /* parameter end */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
363 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
364 switch(readType)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
365 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
366 case BT_READ_DEVICE_ADDR: if(writeIndex < BLUEMOD_ADDR_SIZE-1)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
367 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
368 if(firstDevice)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
369 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
370 firstDevice = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
371 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
372 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
373 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
374 curBtIndex++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
375 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
376 parameter[writeIndex-1] = 0; /*remove 'p' from address */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
377 strcpy((char*)btDeviceList[curBtIndex].address, (char*)parameter);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
378 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
379 readType = BT_READ_DEVICE_RSSI;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
380 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
381 case BT_READ_DEVICE_RSSI: if(writeIndex < BLUEMOD_RSSI_SIZE-1)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
382 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
383 strcpy((char*)btDeviceList[curBtIndex].rssi, (char*)parameter);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
384 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
385 readType = BT_READ_DEVICE_NAME;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
386 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
387 case BT_READ_DEVICE_NAME: if(writeIndex < BLUEMOD_NAME_SIZE-1)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
388 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
389 memcpy(btDeviceList[curBtIndex].name, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
390 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
391 readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
392 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
393 case BT_READ_CON_DETAILS: connHandle = parameter[0];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
394 heartbeatState = SENSOR_HB_SERVICES;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
395 readType = BT_READ_NOTHING;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
396 curServiceIndex = 0;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
397 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
398 case BT_READ_SERV_HANDLE: curDeviceService[curServiceIndex].handle = parameter[0];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
399 readType = BT_READ_SERV_START;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
400 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
401 case BT_READ_SERV_START: if(writeIndex < 6)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
402 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
403 memcpy(curDeviceService[curServiceIndex].start, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
404 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
405 readType = BT_READ_SERV_END;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
406 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
407 case BT_READ_SERV_END: if(writeIndex < 6)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
408 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
409 memcpy(curDeviceService[curServiceIndex].end, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
410 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
411 readType = BT_READ_SERV_UUID;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
412 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
413 case BT_READ_CHAR_CONHANDLE: curDevCharacteristic[curCharacteristicIndex].conHandle = parameter[0];
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
414 readType = BT_READ_CHAR_ATTRIBUTE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
415 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
416 case BT_READ_CHAR_ATTRIBUTE: if(writeIndex < 10)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
417 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
418 memcpy(curDevCharacteristic[curCharacteristicIndex].attrHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
419 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
420 readType = BT_READ_CHAR_PROPERTY;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
421 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
422 case BT_READ_CHAR_PROPERTY: if(writeIndex < 10)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
423 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
424 memcpy(curDevCharacteristic[curCharacteristicIndex].properties, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
425 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
426 readType = BT_READ_CHAR_VALUEHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
427 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
428 case BT_READ_CHAR_VALUEHANDLE: if(writeIndex < 10)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
429 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
430 memcpy(curDevCharacteristic[curCharacteristicIndex].valueHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
431 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
432 readType = BT_READ_CHAR_UUID;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
433 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
434 case BT_READ_DESC_CONHANDLE: curDevDescriptor.conHandle = parameter[0];
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
435 readType = BT_READ_DESC_CHARHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
436 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
437 case BT_READ_DESC_CHARHANDLE: if(writeIndex < 10)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
438 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
439 memcpy(curDevDescriptor.charHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
440 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
441 readType = BT_READ_DESC_DESCHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
442 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
443 case BT_READ_DESC_DESCHANDLE: if(writeIndex < 10)
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
444 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
445 memcpy(curDevDescriptor.descHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
446 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
447 readType = BT_READ_DESC_UUID;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
448 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
449 case BT_READ_PULSE_CONHANDLE: curDevDescriptor.conHandle = parameter[0];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
450 readType = BT_READ_PULSE_VALUEHANDLE;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
451 break;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
452 case BT_READ_PULSE_VALUEHANDLE: if(writeIndex < 10)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
453 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
454 // if(strcmp((char*)curDevCharacteristic[evaluateCharIndex].valueHandle,(char*) parameter) == 0)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
455 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
456 readType = BT_READ_PULSE_DATA;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
457 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
458 #if 0
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
459 else
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
460 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
461 readType = BT_READ_NOTHING;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
462 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
463 #endif
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
464 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
465 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
466 default: readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
467 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
468 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
469 writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
470 memset(parameter,0 , sizeof(parameter));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
471 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
472 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
473 {
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
474 if(readType != BT_READ_NOTHING)
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
475 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
476 parameter[writeIndex++] = data;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
477 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
478 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
479 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
480 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
481 data = UART_getChar();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
482 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
483 return complete;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
484 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
485
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
486 sensorHeartbeat_State_t cv_heartbeat_getState()
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
487 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
488 return heartbeatState;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
489 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
490
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
491 void openEdit_Heartbeat(void)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
492 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
493 SSettings *settings = settingsGetPointer();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
494
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
495 char text[32];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
496 snprintf(text, 32, "\001%c%c", TXT_2BYTE, TXT2BYTE_Pulse);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
497 write_topline(text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
498
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
499 set_globalState(StMOption_Heartbeat);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
500 resetMenuEdit(CLUT_MenuPageCvOption);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
501
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
502 snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_SensorDetect);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
503 write_field_button(StMOption_Heartbeat, 30, 299, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
504
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
505 write_buttonTextline(TXT2BYTE_ButtonMinus, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonPlus);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
506
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
507 setEvent(StMOption_Heartbeat, (uint32_t)OnAction_Heartbeat);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
508 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
509
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
510 static uint8_t OnAction_Heartbeat(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
511 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
512 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
513 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
514 case SENSOR_HB_OFFLINE:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
515 HAL_UART_AbortReceive_IT(&UartHandle);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
516 MX_UART_BT_Init_DMA();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
517 UART_StartDMARx();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
518 heartbeatState = SENSOR_HB_ENABLE_BLE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
519 startDetection_ms = HAL_GetTick();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
520 curBtIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
521 memset(btDeviceList, 0, sizeof(btDeviceList));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
522 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
523
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
524 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
525 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
526 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
527 return UNSPECIFIC_RETURN;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
528 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
529
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
530 void cv_heartbeat_Control(void)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
531 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
532 static uint8_t action = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
533 static uint8_t retry = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
534 static uint8_t lastState = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
535 char cmd[50];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
536
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
537 cmd[0] = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
538
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
539 if(action == 3)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
540 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
541 action = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
542 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
543 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
544 case SENSOR_HB_ENABLE_BLE: HAL_Delay(1000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
545 snprintf(cmd, sizeof(cmd), "+++" ); //"AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
546 InfoLogger_writeLine((uint8_t*)cmd,3,1);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
547 HAL_UART_Transmit(&UartHandle, (uint8_t*)cmd, 3, 5000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
548 HAL_Delay(1000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
549 cmd[0] = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
550 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
551 case SENSOR_HB_CHECK_CONFIG: snprintf(cmd, sizeof(cmd), "AT+UBTCFG=2\r\n" ); // AT+UBTLE?
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
552
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
553 #if 0
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
554 if(settingsGetPointer()->dive_mode == DIVEMODE_OC)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
555 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
556 snprintf(cmd, sizeof(cmd), "AT+UBTLE=2\r\n" ); //+UBTLE=1 //"AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
557 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
558 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
559 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
560 snprintf(cmd, sizeof(cmd), "AT+UBTLE=3\r\n" ); //+UBTLE=1 //"AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
561 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
562 #endif
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
563 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
564 case SENSOR_HB_DISCOVER: if(lastState != SENSOR_HB_DISCOVER)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
565 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
566 snprintf(cmd, sizeof(cmd), "AT+UBTD=2,1\r\n" ); //+UBTLE=1 //"AT+UBTD=2,1,5000\r\n"
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
567 curBtIndex = 0;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
568 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
569
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
570 //snprintf(cmd, sizeof(cmd), "AT&W\r\n" ); // AT+UBTD=2,1\r\n "AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
571 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
572 #if 0
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
573 case SENSOR_HB_RESTART: snprintf(cmd, sizeof(cmd), "AT+UBTD=2,1\r\n" ); //+UBTLE=1 //"AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
574
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
575 // snprintf(cmd, sizeof(cmd), "AT+CPWROFF\r\n" ); // AT+UBTD=2,1\r\n "AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
576 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
577 #endif
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
578 case SENSOR_HB_CONNECT: if(evaluateDevIndex < curBtIndex)
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
579 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
580 snprintf(cmd, sizeof(cmd), "AT+UBTACLC=%s\r\n",btDeviceList[evaluateDevIndex].address);
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
581 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
582 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
583 case SENSOR_HB_DISCONNECT: snprintf(cmd, sizeof(cmd), "AT+UBTACLD=%c\r\n",connHandle);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
584 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
585 case SENSOR_HB_SERVICES: if((connHandle >= '0') && (connHandle <= '9') && (lastState != SENSOR_HB_SERVICES))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
586 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
587 snprintf(cmd, sizeof(cmd), "AT+UBTGDP=%c\r\n",connHandle);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
588 memset(curDeviceService, 0, sizeof(curDeviceService));
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
589 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
590 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
591 case SENSOR_HB_CHARACTERISTIC: snprintf(cmd, sizeof(cmd), "AT+UBTGDCS=%c,%s,%s\r\n",connHandle,curDeviceService[evaluateSrvIndex].start
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
592 ,curDeviceService[evaluateSrvIndex].end);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
593 memset(curDevCharacteristic, 0, sizeof(curDevCharacteristic));
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
594 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
595 case SENSOR_HB_DESCRIPTOR: snprintf(cmd, sizeof(cmd), "AT+UBTGDCD=%c,%s,%s\r\n",connHandle,curDevCharacteristic[evaluateCharIndex].valueHandle
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
596 ,curDeviceService[evaluateSrvIndex].end);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
597 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
598 case SENSOR_HB_SUBSCRIBE: snprintf(cmd, sizeof(cmd), "AT+UBTGWC=%c,%s,1\r\n",connHandle,curDevDescriptor.descHandle);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
599 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
600 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
601 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
602 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
603 if(cmd[0] != 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
604 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
605 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
606 InfoLogger_writeLine((uint8_t*)cmd,strlen(cmd),1);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
607 HAL_UART_Transmit(&UartHandle, (uint8_t*)cmd, strlen(cmd), 5000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
608 retry++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
609 if(retry == 3)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
610 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
611 heartbeatState = SENSOR_HB_OFFLINE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
612 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
613 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
614 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
615 if(lastState != heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
616 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
617 lastState = heartbeatState;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
618 retry = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
619 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
620 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
621 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
622 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
623 action++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
624 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
625 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
626 void refresh_Heartbeat(void)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
627 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
628 char text[32];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
629 uint8_t index = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
630
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
631 snprintf(text, 32, "\001%c%c", TXT_2BYTE, TXT2BYTE_Pulse);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
632 write_topline(text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
633
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
634 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
635 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
636 case SENSOR_HB_OFFLINE:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
637 default: snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_SensorDetect);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
638 write_label_var(30, 299, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
639
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
640 if(curBtIndex > 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
641 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
642 while((index < curBtIndex) && (index < 3))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
643 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
644 snprintf(text, 40, "%s", btDeviceList[index].address);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
645 write_label_var( 30, 300, ME_Y_LINE3 + (index * ME_Y_LINE_STEP), &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
646 index++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
647 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
648 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
649 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
650 case SENSOR_HB_ENABLE_BLE: snprintf(text, 32, "Activate BLE");
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
651 write_label_var( 30, 300, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
652 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
653 case SENSOR_HB_DISCOVER:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
654 snprintf(text, 32, "Searching");
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
655 write_label_var( 30, 300, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
656
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
657 if(curBtIndex > 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
658 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
659 while((index < curBtIndex) && (index < 4))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
660 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
661 snprintf(text, 40, "%s", btDeviceList[index].address);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
662 write_label_var( 30, 300, ME_Y_LINE2 + (index * ME_Y_LINE_STEP), &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
663 index++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
664 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
665 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
666 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
667 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
668
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
669 write_buttonTextline(TXT2BYTE_ButtonMinus, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonPlus);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
670 }
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
671 #endif