Проблема срока времени данных BLEC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема срока времени данных BLE

Сообщение Anonymous »

Фон:
У меня есть приложение, разработанное в Android Studios, которое считывает данные с устройства BLE и отображает данные в приложении. Данные являются историческими данными, которые содержат 3 типа данных, давайте назовем их X, Y и Z, и они собираются с датчика. Одна точка данных содержит все три типа, а одна точка данных собирается в час. Это генерирует массив данных, которые похожи на: < /p>
x1,1,1,1,2,y2,12,....xn,yn,1,1,1,1,2,y2, заказ. Это означает, что для приложения правильно разрабатывать данные, и по этой причине первые два байта массива указывают, сколько часов было собрано. В качестве примера, полный массив может выглядеть как: < /p>
первые 20 значений (часы 40-20)
[0x00, 0x28, x1, y1, z1, x2, y2, z2, ..., x20, y20, z20] < /p>
X21, Y21, Z21, X22, Y22, Z22, ..., X40, Y40, Z40] < /p>
Приложение будет читать первые два байта, и в зависимости от них будет решать, принести ли следующие 20 значений или нет. В этом случае, если приложение получает первый массив, оно попытается извлечь данные еще раз, поскольку массив содержит значения данных для часов 40-20. Осталось 20 часов данных. Однако, когда приложение получает второй массив, оно содержит данные для часов 20-0, после чего приложение будет получать больше данных. Принесите данные снова. Если начинающий байт составляет 20 или меньше, приложение не попытается снова принести данные. Если мои стартовые байты составляют 0x28, приложение считывает начальный байт как 40 и будет анализировать 20 точек данных (40-20). Я не могу снова обновить массив, пока в следующий раз, когда приложение попытается получить данные, что заставляет приложение приносить один и тот же массив снова и снова. Я думаю, что мне нужно сделать обновление массива с правильным байтом в качестве начального индекса, прежде чем приложение принесет данные во второй раз. Я ищу как конкретные примеры кода, как решить проблему, так и более общие предложения по механике всего этого. Кроме того, если что -то не хватает в моем описании, я с радостью предоставлю его. Я не предоставил никакого кода из моего приложения, так как я не думаю, что необходимо решить проблему, но я могу ошибаться. < /P>
void updateHistoricalData() {
Serial.println("Updating Historical Data...");
uint8_t historicalData[PAGE_SIZE];

// Set different start indices for different pages
if (currentPage == 0) {
Serial.println("First page, setting start index to 40");
historicalData[0] = 0x28; // High byte
historicalData[1] = 0x00; // Low byte (40 in hex)
} else {
Serial.println("Second page, setting start index to 20");
historicalData[0] = 0x14; // High byte
historicalData[1] = 0x00; // Low byte (20 in hex)
}

uint8_t drainGain = 0b01000001; // 10mA
uint8_t voltage = 0xD1; // 3.25V

// Fill the rest of the page with data points
for (int i = 0; i < 20; i++) {
int offset = 2 + i * 3;
historicalData[offset] = drainGain; // Drain
historicalData[offset + 1] = drainGain; // Gain
historicalData[offset + 2] = voltage; // Voltage
}

Serial.println("Historical data filled. Sending to characteristic...");
pHistoricalDataCharacteristic->setValue(historicalData, sizeof(historicalData));
Serial.print("Sent Page: ");
Serial.println(currentPage);
}

private:
// Callback for Historical Data characteristic
class HistoricalDataCallback : public BLECharacteristicCallbacks {
void onRead(BLECharacteristic* pCharacteristic) override {
Serial.println("[BLE READ] Historical data characteristic read request received.");
Serial.print("Current page before read: ");
Serial.println(currentPage);

// Use the global pointer to access the PowerfoyleBLEServer instance
if (g_PowerfoyleBLEServerInstance) {
if (currentPage < TOTAL_PAGES) {
currentPage++; // Move to next page
Serial.print("Moving to next page: ");
Serial.println(currentPage);
g_PowerfoyleBLEServerInstance->updateHistoricalData(); // Update
characteristic with next page
} else {
Serial.println("All pages sent. Resetting index.");
currentPage = 0; // Reset after last page
}
} else {
Serial.println("[ERROR] g_PowerfoyleBLEServerInstance is null!");
}
}
};

void createHistoricalDataCharacteristic() {
Serial.println("Creating Historical Data Characteristic...");
pHistoricalDataCharacteristic = pService->createCharacteristic(
POWERFOYLE_HISTORICAL_DATA_UUID,
BLECharacteristic::PROPERTY_READ
);

Serial.println("Initializing with first page...");
updateHistoricalData(); // Send first page

pHistoricalDataCharacteristic->setCallbacks(new HistoricalDataCallback());
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... ming-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»