annotate Discovery/Src/cv_heartbeat.c @ 1035:5b913cdaa9dc Puls_Integration

Degub message logger: Added functionality to handle logger view (in case it is enabled via compile switch) like a normal t7 custom view.
author Ideenmodellierer
date Sat, 09 Aug 2025 16:55:20 +0200
parents 195bfbdf961d
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