annotate Discovery/Src/cv_heartbeat.c @ 1046:1d7c7a36df15 GasConsumption

Bugfix OSTC5 BT and enabling fast mode: The OSTC5 BT was operating at default speed of 115200. To enable the faster communication some init steps have been added to set speed to 460800. Having the UART enabled while the module was shut down caused problems during initialisation. To avoid these the BT UART is now initialized after the the module is powered on and deinitialized while the module is switched off.
author Ideenmodellierer
date Fri, 14 Nov 2025 18:54:20 +0100
parents 5b913cdaa9dc
children
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];
1035
5b913cdaa9dc Degub message logger:
Ideenmodellierer
parents: 1034
diff changeset
63
1034
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 uint8_t data = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
269 data = UART_getChar();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
270
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
271 while((data != 0) && (complete == 0))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
272 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
273 if(curLineIndex == MAX_CHAR_PER_LINE - 1) /* avoid overflow */
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
274 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
275 InfoLogger_writeLine(curLine,curLineIndex,0);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
276 memset(curLine,0,sizeof(curLine));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
277 curLineIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
278 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
279 if((data == '\r') || (data == '\n'))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
280 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
281 if(curLineIndex > 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
282 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
283 InfoLogger_writeLine(curLine,curLineIndex,0);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
284 if(strcmp((char*)curLine,"OK") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
285 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
286 handleOK();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
287 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
288 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
289 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
290 if(strcmp((char*)curLine,"ERROR") == 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
291 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
292 handleERROR();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
293 }
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 switch(readType)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
297 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
298 case BT_READ_DEVICE_NAME: if(writeIndex < BLUEMOD_NAME_SIZE)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
299 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
300 memcpy (btDeviceList[curBtIndex].name, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
301 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
302 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
303 case BT_READ_SERV_UUID: if((writeIndex < 50) && (curServiceIndex < 10))
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
304 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
305 memcpy(curDeviceService[curServiceIndex].uuid, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
306 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
307 curServiceIndex++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
308 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
309 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
310 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
311 memcpy(curDevCharacteristic[curCharacteristicIndex].uuid, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
312 curCharacteristicIndex++;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
313 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
314 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
315 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
316 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
317 memcpy(curDevDescriptor.uuid, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
318 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
319 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
320 case BT_READ_PULSE_DATA: if(writeIndex < 50)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
321 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
322 parsePulseMeasurement(parameter, writeIndex);
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
323 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
324 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
325 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
326 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
327 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
328 curLineIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
329 writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
330 memset(curLine,0,sizeof(curLine));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
331 readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
332 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
333 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
334 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
335 if(curLineIndex < MAX_CHAR_PER_LINE) curLine[curLineIndex++] = data;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
336
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
337 if(data == ':')
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
338 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
339 switch(checkIndicators(curLine))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
340 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
341 case DEVICE_INDICATOR: readType = BT_READ_DEVICE_ADDR;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
342 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
343 case CONNECTION_INDICATOR: readType = BT_READ_CON_DETAILS;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
344 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
345 case SERVICE_INDICATOR: readType = BT_READ_SERV_HANDLE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
346 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
347 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
348 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
349 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
350 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
351 case PULSE_INDICATOR: readType = BT_READ_PULSE_CONHANDLE;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
352 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
353 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
354 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
355 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
356 writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
357 memset(parameter,0,sizeof(parameter));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
358 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
359 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
360 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
361 if(data == ',') /* parameter end */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
362 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
363 switch(readType)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
364 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
365 case BT_READ_DEVICE_ADDR: if(writeIndex < BLUEMOD_ADDR_SIZE-1)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
366 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
367 if(firstDevice)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
368 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
369 firstDevice = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
370 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
371 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
372 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
373 curBtIndex++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
374 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
375 parameter[writeIndex-1] = 0; /*remove 'p' from address */
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
376 strcpy((char*)btDeviceList[curBtIndex].address, (char*)parameter);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
377 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
378 readType = BT_READ_DEVICE_RSSI;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
379 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
380 case BT_READ_DEVICE_RSSI: if(writeIndex < BLUEMOD_RSSI_SIZE-1)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
381 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
382 strcpy((char*)btDeviceList[curBtIndex].rssi, (char*)parameter);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
383 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
384 readType = BT_READ_DEVICE_NAME;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
385 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
386 case BT_READ_DEVICE_NAME: if(writeIndex < BLUEMOD_NAME_SIZE-1)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
387 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
388 memcpy(btDeviceList[curBtIndex].name, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
389 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
390 readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
391 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
392 case BT_READ_CON_DETAILS: connHandle = parameter[0];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
393 heartbeatState = SENSOR_HB_SERVICES;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
394 readType = BT_READ_NOTHING;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
395 curServiceIndex = 0;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
396 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
397 case BT_READ_SERV_HANDLE: curDeviceService[curServiceIndex].handle = parameter[0];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
398 readType = BT_READ_SERV_START;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
399 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
400 case BT_READ_SERV_START: if(writeIndex < 6)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
401 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
402 memcpy(curDeviceService[curServiceIndex].start, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
403 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
404 readType = BT_READ_SERV_END;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
405 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
406 case BT_READ_SERV_END: if(writeIndex < 6)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
407 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
408 memcpy(curDeviceService[curServiceIndex].end, parameter, writeIndex);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
409 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
410 readType = BT_READ_SERV_UUID;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
411 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
412 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
413 readType = BT_READ_CHAR_ATTRIBUTE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
414 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
415 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
416 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
417 memcpy(curDevCharacteristic[curCharacteristicIndex].attrHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
418 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
419 readType = BT_READ_CHAR_PROPERTY;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
420 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
421 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
422 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
423 memcpy(curDevCharacteristic[curCharacteristicIndex].properties, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
424 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
425 readType = BT_READ_CHAR_VALUEHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
426 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
427 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
428 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
429 memcpy(curDevCharacteristic[curCharacteristicIndex].valueHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
430 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
431 readType = BT_READ_CHAR_UUID;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
432 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
433 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
434 readType = BT_READ_DESC_CHARHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
435 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
436 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
437 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
438 memcpy(curDevDescriptor.charHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
439 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
440 readType = BT_READ_DESC_DESCHANDLE;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
441 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
442 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
443 {
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
444 memcpy(curDevDescriptor.descHandle, parameter, writeIndex);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
445 }
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
446 readType = BT_READ_DESC_UUID;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
447 break;
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
448 case BT_READ_PULSE_CONHANDLE: curDevDescriptor.conHandle = parameter[0];
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
449 readType = BT_READ_PULSE_VALUEHANDLE;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
450 break;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
451 case BT_READ_PULSE_VALUEHANDLE: if(writeIndex < 10)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
452 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
453 // if(strcmp((char*)curDevCharacteristic[evaluateCharIndex].valueHandle,(char*) parameter) == 0)
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
454 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
455 readType = BT_READ_PULSE_DATA;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
456 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
457 #if 0
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
458 else
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
459 {
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
460 readType = BT_READ_NOTHING;
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
461 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
462 #endif
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
463 }
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
464 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
465 default: readType = BT_READ_NOTHING;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
466 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
467 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
468 writeIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
469 memset(parameter,0 , sizeof(parameter));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
470 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
471 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
472 {
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
473 if(readType != BT_READ_NOTHING)
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
474 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
475 parameter[writeIndex++] = data;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
476 }
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 data = UART_getChar();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
481 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
482 return complete;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
483 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
484
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
485 sensorHeartbeat_State_t cv_heartbeat_getState()
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
486 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
487 return heartbeatState;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
488 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
489
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
490 void openEdit_Heartbeat(void)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
491 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
492 char text[32];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
493 snprintf(text, 32, "\001%c%c", TXT_2BYTE, TXT2BYTE_Pulse);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
494 write_topline(text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
495
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
496 set_globalState(StMOption_Heartbeat);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
497 resetMenuEdit(CLUT_MenuPageCvOption);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
498
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
499 snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_SensorDetect);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
500 write_field_button(StMOption_Heartbeat, 30, 299, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
501
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
502 write_buttonTextline(TXT2BYTE_ButtonMinus, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonPlus);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
503
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
504 setEvent(StMOption_Heartbeat, (uint32_t)OnAction_Heartbeat);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
505 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
506
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
507 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
508 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
509 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
510 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
511 case SENSOR_HB_OFFLINE:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
512 HAL_UART_AbortReceive_IT(&UartHandle);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
513 MX_UART_BT_Init_DMA();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
514 UART_StartDMARx();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
515 heartbeatState = SENSOR_HB_ENABLE_BLE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
516 startDetection_ms = HAL_GetTick();
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
517 curBtIndex = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
518 memset(btDeviceList, 0, sizeof(btDeviceList));
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
519 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
520
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
521 default:
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 return UNSPECIFIC_RETURN;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
525 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
526
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
527 void cv_heartbeat_Control(void)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
528 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
529 static uint8_t action = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
530 static uint8_t retry = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
531 static uint8_t lastState = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
532 char cmd[50];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
533
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
534 cmd[0] = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
535
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
536 if(action == 3)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
537 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
538 action = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
539 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
540 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
541 case SENSOR_HB_ENABLE_BLE: HAL_Delay(1000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
542 snprintf(cmd, sizeof(cmd), "+++" ); //"AT+UBTD=2,1,5000\r\n"
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
543 InfoLogger_writeLine((uint8_t*)cmd,3,1);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
544 HAL_UART_Transmit(&UartHandle, (uint8_t*)cmd, 3, 5000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
545 HAL_Delay(1000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
546 cmd[0] = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
547 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
548 case SENSOR_HB_CHECK_CONFIG: snprintf(cmd, sizeof(cmd), "AT+UBTCFG=2\r\n" ); // AT+UBTLE?
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
549
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
550 #if 0
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
551 if(settingsGetPointer()->dive_mode == DIVEMODE_OC)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
552 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
553 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
554 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
555 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
556 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
557 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
558 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
559 #endif
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
560 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
561 case SENSOR_HB_DISCOVER: if(lastState != SENSOR_HB_DISCOVER)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
562 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
563 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
564 curBtIndex = 0;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
565 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
566
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
567 //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
568 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
569 #if 0
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
570 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
571
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
572 // 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
573 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
574 #endif
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
575 case SENSOR_HB_CONNECT: if(evaluateDevIndex < curBtIndex)
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
576 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
577 snprintf(cmd, sizeof(cmd), "AT+UBTACLC=%s\r\n",btDeviceList[evaluateDevIndex].address);
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
578 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
579 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
580 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
581 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
582 case SENSOR_HB_SERVICES: if((connHandle >= '0') && (connHandle <= '9') && (lastState != SENSOR_HB_SERVICES))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
583 {
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
584 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
585 memset(curDeviceService, 0, sizeof(curDeviceService));
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
586 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
587 break;
1033
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
588 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
589 ,curDeviceService[evaluateSrvIndex].end);
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
590 memset(curDevCharacteristic, 0, sizeof(curDevCharacteristic));
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
591 break;
5f66e44d69f0 Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents: 1032
diff changeset
592 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
593 ,curDeviceService[evaluateSrvIndex].end);
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_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
596 break;
1032
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
597 default:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
598 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
599 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
600 if(cmd[0] != 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
601 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
602 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
603 InfoLogger_writeLine((uint8_t*)cmd,strlen(cmd),1);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
604 HAL_UART_Transmit(&UartHandle, (uint8_t*)cmd, strlen(cmd), 5000);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
605 retry++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
606 if(retry == 3)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
607 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
608 heartbeatState = SENSOR_HB_OFFLINE;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
609 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
610 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
611 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
612 if(lastState != heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
613 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
614 lastState = heartbeatState;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
615 retry = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
616 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
617 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
618 else
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
619 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
620 action++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
621 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
622 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
623 void refresh_Heartbeat(void)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
624 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
625 char text[32];
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
626 uint8_t index = 0;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
627
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
628 snprintf(text, 32, "\001%c%c", TXT_2BYTE, TXT2BYTE_Pulse);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
629 write_topline(text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
630
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
631 switch(heartbeatState)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
632 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
633 case SENSOR_HB_OFFLINE:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
634 default: snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_SensorDetect);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
635 write_label_var(30, 299, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
636
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
637 if(curBtIndex > 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
638 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
639 while((index < curBtIndex) && (index < 3))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
640 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
641 snprintf(text, 40, "%s", btDeviceList[index].address);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
642 write_label_var( 30, 300, ME_Y_LINE3 + (index * ME_Y_LINE_STEP), &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
643 index++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
644 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
645 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
646 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
647 case SENSOR_HB_ENABLE_BLE: snprintf(text, 32, "Activate BLE");
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
648 write_label_var( 30, 300, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
649 break;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
650 case SENSOR_HB_DISCOVER:
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
651 snprintf(text, 32, "Searching");
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
652 write_label_var( 30, 300, ME_Y_LINE1, &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
653
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
654 if(curBtIndex > 0)
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
655 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
656 while((index < curBtIndex) && (index < 4))
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
657 {
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
658 snprintf(text, 40, "%s", btDeviceList[index].address);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
659 write_label_var( 30, 300, ME_Y_LINE2 + (index * ME_Y_LINE_STEP), &FontT48, text);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
660 index++;
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
661 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
662 }
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
663 break;
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 write_buttonTextline(TXT2BYTE_ButtonMinus, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonPlus);
33b91584d827 New CV Pulse:
Ideenmodellierer
parents:
diff changeset
667 }
1034
195bfbdf961d Pulse measurement integration:
Ideenmodellierer
parents: 1033
diff changeset
668 #endif