[Upload Code]:add Alg Part of x,y
This commit is contained in:
parent
4d01ccc890
commit
fb8308188d
3
CAN/XM-01/.vscode/settings.json
vendored
3
CAN/XM-01/.vscode/settings.json
vendored
@ -6,6 +6,7 @@
|
|||||||
"usart.h": "c",
|
"usart.h": "c",
|
||||||
"main.h": "c",
|
"main.h": "c",
|
||||||
"mymattress_ctrl.h": "c",
|
"mymattress_ctrl.h": "c",
|
||||||
"can.h": "c"
|
"can.h": "c",
|
||||||
|
"mcu_body_analyzer.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
106
CAN/XM-01/Core/Inc/mcu_body_analyzer.h
Normal file
106
CAN/XM-01/Core/Inc/mcu_body_analyzer.h
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* MCU Body Detection and Analysis System - Header File
|
||||||
|
*
|
||||||
|
* Lightweight implementation for microcontroller deployment
|
||||||
|
* Compatible with 26x10 sensing mat (260 sensors)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MCU_BODY_ANALYZER_H
|
||||||
|
#define MCU_BODY_ANALYZER_H
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#include "rtthread.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEBUG_PRINT
|
||||||
|
|
||||||
|
// Configuration constants
|
||||||
|
#define MAT_WIDTH 26
|
||||||
|
#define MAT_HEIGHT 10
|
||||||
|
#define TOTAL_SENSORS (MAT_WIDTH * MAT_HEIGHT)
|
||||||
|
#define MAX_BODIES 2
|
||||||
|
|
||||||
|
// Physical dimensions (in mm)
|
||||||
|
#define POINT_SPACING_X_MM 44 // 4.4cm = 44mm
|
||||||
|
#define POINT_SPACING_Y_MM 64 // 6.4cm = 64mm
|
||||||
|
#define MAT_WIDTH_MM (MAT_WIDTH * POINT_SPACING_X_MM) // ~1144mm
|
||||||
|
#define MAT_HEIGHT_MM (MAT_HEIGHT * POINT_SPACING_Y_MM) // ~640mm
|
||||||
|
|
||||||
|
// Data structures
|
||||||
|
typedef struct {
|
||||||
|
uint16_t x_mm; // X coordinate in millimeters
|
||||||
|
uint16_t y_mm; // Y coordinate in millimeters
|
||||||
|
} Point_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t body_id; // Body identifier (1 or 2)
|
||||||
|
Point_t waist_center; // Waist center coordinates
|
||||||
|
Point_t center_of_mass; // Center of mass coordinates
|
||||||
|
uint16_t width_mm; // Body width in mm
|
||||||
|
uint16_t height_mm; // Body height in mm
|
||||||
|
uint32_t total_pressure; // Sum of all pressure values
|
||||||
|
uint8_t posture; // 0=supine, 1=side
|
||||||
|
uint8_t confidence; // Confidence score (0-100)
|
||||||
|
} BodyInfo_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t num_bodies; // Number of detected bodies (0-2)
|
||||||
|
BodyInfo_t bodies[MAX_BODIES];
|
||||||
|
} AnalysisResult_t;
|
||||||
|
|
||||||
|
// Public API functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Main analysis function for body detection and posture classification
|
||||||
|
*
|
||||||
|
* @param sensor_data Array of 260 pressure sensor readings (0-1023)
|
||||||
|
* @param result Pointer to store analysis results
|
||||||
|
* @return true if analysis successful, false otherwise
|
||||||
|
*
|
||||||
|
* @note Processing time: ~10ms on ARM Cortex-M4 @ 168MHz
|
||||||
|
* @note Memory usage: ~2KB RAM
|
||||||
|
*/
|
||||||
|
bool analyze_body_posture(const uint16_t* sensor_data, AnalysisResult_t* result);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get posture string for debugging/display
|
||||||
|
*
|
||||||
|
* @param posture Posture code (0=supine, 1=side)
|
||||||
|
* @return Constant string pointer ("supine" or "side")
|
||||||
|
*/
|
||||||
|
const char* get_posture_string(uint8_t posture);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Print analysis results (requires printf implementation)
|
||||||
|
*
|
||||||
|
* @param result Pointer to analysis results
|
||||||
|
* @note Only available when DEBUG_PRINT is defined
|
||||||
|
*/
|
||||||
|
#ifdef DEBUG_PRINT
|
||||||
|
void print_analysis_results(const AnalysisResult_t* result);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Configuration macros (can be adjusted for different hardware)
|
||||||
|
#ifndef MIN_BODY_PRESSURE
|
||||||
|
#define MIN_BODY_PRESSURE 50 // Minimum pressure threshold for body detection
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MIN_BODY_AREA
|
||||||
|
#define MIN_BODY_AREA 20 // Minimum number of connected sensors for a body
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Memory usage information
|
||||||
|
#define MCU_ANALYZER_RAM_USAGE (3 * TOTAL_SENSORS + sizeof(AnalysisResult_t)) // ~2KB
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* MCU_BODY_ANALYZER_H */
|
||||||
|
|
||||||
|
|
467
CAN/XM-01/Core/Src/mcu_body_analyzer.c
Normal file
467
CAN/XM-01/Core/Src/mcu_body_analyzer.c
Normal file
@ -0,0 +1,467 @@
|
|||||||
|
/*
|
||||||
|
* MCU Body Detection and Analysis System
|
||||||
|
*
|
||||||
|
* Lightweight implementation for microcontroller deployment
|
||||||
|
* Compatible with 26x10 sensing mat (260 sensors)
|
||||||
|
*
|
||||||
|
* Features:
|
||||||
|
* - Body detection using threshold and connected components
|
||||||
|
* - Body count (0, 1, or 2)
|
||||||
|
* - Waist center estimation
|
||||||
|
* - Basic posture classification
|
||||||
|
*
|
||||||
|
* Memory usage: ~2KB RAM
|
||||||
|
* Processing time: ~10ms on ARM Cortex-M4 @ 168MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "mcu_body_analyzer.h"
|
||||||
|
|
||||||
|
// Configuration constants
|
||||||
|
#define MAT_WIDTH 26
|
||||||
|
#define MAT_HEIGHT 10
|
||||||
|
#define TOTAL_SENSORS (MAT_WIDTH * MAT_HEIGHT)
|
||||||
|
#define MIN_BODY_PRESSURE 50
|
||||||
|
#define MIN_BODY_AREA 20
|
||||||
|
#define MAX_BODIES 2
|
||||||
|
|
||||||
|
// Physical dimensions (in mm for integer math)
|
||||||
|
#define POINT_SPACING_X_MM 44 // 4.4cm = 44mm
|
||||||
|
#define POINT_SPACING_Y_MM 64 // 6.4cm = 64mm
|
||||||
|
|
||||||
|
// Data structures
|
||||||
|
// typedef struct {
|
||||||
|
// uint16_t x_mm; // X coordinate in millimeters
|
||||||
|
// uint16_t y_mm; // Y coordinate in millimeters
|
||||||
|
// } Point_t;
|
||||||
|
|
||||||
|
// typedef struct {
|
||||||
|
// uint8_t body_id; // Body identifier (1 or 2)
|
||||||
|
// Point_t waist_center; // Waist center coordinates
|
||||||
|
// Point_t center_of_mass; // Center of mass coordinates
|
||||||
|
// uint16_t width_mm; // Body width in mm
|
||||||
|
// uint16_t height_mm; // Body height in mm
|
||||||
|
// uint32_t total_pressure; // Sum of all pressure values
|
||||||
|
// uint8_t posture; // 0=supine, 1=side
|
||||||
|
// uint8_t confidence; // Confidence score (0-100)
|
||||||
|
// } BodyInfo_t;
|
||||||
|
|
||||||
|
// typedef struct {
|
||||||
|
// uint8_t num_bodies; // Number of detected bodies (0-2)
|
||||||
|
// BodyInfo_t bodies[MAX_BODIES];
|
||||||
|
// } AnalysisResult_t;
|
||||||
|
|
||||||
|
// Working memory (can be static for single-threaded MCU)
|
||||||
|
static uint8_t binary_mask[TOTAL_SENSORS];
|
||||||
|
static uint8_t labeled_regions[TOTAL_SENSORS];
|
||||||
|
static uint8_t temp_buffer[TOTAL_SENSORS];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Apply simple smoothing filter to reduce noise
|
||||||
|
*/
|
||||||
|
static void smooth_sensor_data(const uint16_t *input, uint16_t *output)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < MAT_HEIGHT; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < MAT_WIDTH; x++)
|
||||||
|
{
|
||||||
|
int idx = y * MAT_WIDTH + x;
|
||||||
|
uint32_t sum = 0;
|
||||||
|
uint8_t count = 0;
|
||||||
|
|
||||||
|
// 3x3 kernel
|
||||||
|
for (int dy = -1; dy <= 1; dy++)
|
||||||
|
{
|
||||||
|
for (int dx = -1; dx <= 1; dx++)
|
||||||
|
{
|
||||||
|
int ny = y + dy;
|
||||||
|
int nx = x + dx;
|
||||||
|
|
||||||
|
if (ny >= 0 && ny < MAT_HEIGHT && nx >= 0 && nx < MAT_WIDTH)
|
||||||
|
{
|
||||||
|
sum += input[ny * MAT_WIDTH + nx];
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output[idx] = (uint16_t)(sum / count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create binary mask from pressure data
|
||||||
|
*/
|
||||||
|
static void create_binary_mask(const uint16_t *sensor_data)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < TOTAL_SENSORS; i++)
|
||||||
|
{
|
||||||
|
binary_mask[i] = (sensor_data[i] > MIN_BODY_PRESSURE) ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Simple connected component labeling using flood fill
|
||||||
|
*/
|
||||||
|
int stack[TOTAL_SENSORS] = {0};
|
||||||
|
static uint8_t flood_fill(uint8_t *mask, int start_idx, uint8_t label)
|
||||||
|
{
|
||||||
|
if (mask[start_idx] != 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Simple stack using array (limit recursion depth)
|
||||||
|
int stack_ptr = 0;
|
||||||
|
uint8_t area = 0;
|
||||||
|
|
||||||
|
stack[stack_ptr++] = start_idx;
|
||||||
|
|
||||||
|
while (stack_ptr > 0)
|
||||||
|
{
|
||||||
|
int idx = stack[--stack_ptr];
|
||||||
|
if (mask[idx] != 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mask[idx] = label;
|
||||||
|
labeled_regions[idx] = label;
|
||||||
|
area++;
|
||||||
|
|
||||||
|
// int y = idx / MAT_WIDTH;
|
||||||
|
// int x = idx % MAT_WIDTH;
|
||||||
|
|
||||||
|
// Add 4-connected neighbors
|
||||||
|
int neighbors[] = {
|
||||||
|
idx - MAT_WIDTH, // top
|
||||||
|
idx + MAT_WIDTH, // bottom
|
||||||
|
idx - 1, // left
|
||||||
|
idx + 1 // right
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
int n_idx = neighbors[i];
|
||||||
|
int n_y = n_idx / MAT_WIDTH;
|
||||||
|
int n_x = n_idx % MAT_WIDTH;
|
||||||
|
|
||||||
|
// Check bounds
|
||||||
|
if (n_idx >= 0 && n_idx < TOTAL_SENSORS &&
|
||||||
|
n_y >= 0 && n_y < MAT_HEIGHT &&
|
||||||
|
n_x >= 0 && n_x < MAT_WIDTH &&
|
||||||
|
mask[n_idx] == 1 && stack_ptr < TOTAL_SENSORS - 1)
|
||||||
|
{
|
||||||
|
stack[stack_ptr++] = n_idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Find connected components and filter by size
|
||||||
|
*/
|
||||||
|
static uint8_t detect_body_regions(const uint16_t *sensor_data)
|
||||||
|
{
|
||||||
|
// Copy binary mask to working buffer
|
||||||
|
rt_memcpy(temp_buffer, binary_mask, TOTAL_SENSORS);
|
||||||
|
rt_memset(labeled_regions, 0, TOTAL_SENSORS);
|
||||||
|
|
||||||
|
uint8_t label = 2; // Start from 2 (0=background, 1=unprocessed)
|
||||||
|
uint8_t body_count = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < TOTAL_SENSORS && body_count < MAX_BODIES; i++)
|
||||||
|
{
|
||||||
|
if (temp_buffer[i] == 1)
|
||||||
|
{
|
||||||
|
uint8_t area = flood_fill(temp_buffer, i, label);
|
||||||
|
|
||||||
|
if (area >= MIN_BODY_AREA)
|
||||||
|
{
|
||||||
|
body_count++;
|
||||||
|
label++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Remove small regions
|
||||||
|
for (int j = 0; j < TOTAL_SENSORS; j++)
|
||||||
|
{
|
||||||
|
if (labeled_regions[j] == (label - 1))
|
||||||
|
{
|
||||||
|
labeled_regions[j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
label--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return body_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate center of mass for a body region
|
||||||
|
*/
|
||||||
|
static Point_t calculate_center_of_mass(const uint16_t *sensor_data, uint8_t body_label)
|
||||||
|
{
|
||||||
|
uint32_t sum_x = 0, sum_y = 0, sum_weight = 0;
|
||||||
|
|
||||||
|
for (int y = 0; y < MAT_HEIGHT; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < MAT_WIDTH; x++)
|
||||||
|
{
|
||||||
|
int idx = y * MAT_WIDTH + x;
|
||||||
|
|
||||||
|
if (labeled_regions[idx] == body_label)
|
||||||
|
{
|
||||||
|
uint16_t weight = sensor_data[idx];
|
||||||
|
sum_x += x * weight;
|
||||||
|
sum_y += y * weight;
|
||||||
|
sum_weight += weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Point_t center = {0, 0};
|
||||||
|
if (sum_weight > 0)
|
||||||
|
{
|
||||||
|
center.x_mm = (sum_x * POINT_SPACING_X_MM) / sum_weight;
|
||||||
|
center.y_mm = (sum_y * POINT_SPACING_Y_MM) / sum_weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
return center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get bounding box of a body region
|
||||||
|
*/
|
||||||
|
static void get_bounding_box(uint8_t body_label, uint8_t *min_x, uint8_t *min_y,
|
||||||
|
uint8_t *max_x, uint8_t *max_y)
|
||||||
|
{
|
||||||
|
*min_x = MAT_WIDTH;
|
||||||
|
*min_y = MAT_HEIGHT;
|
||||||
|
*max_x = 0;
|
||||||
|
*max_y = 0;
|
||||||
|
|
||||||
|
for (int y = 0; y < MAT_HEIGHT; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < MAT_WIDTH; x++)
|
||||||
|
{
|
||||||
|
int idx = y * MAT_WIDTH + x;
|
||||||
|
|
||||||
|
if (labeled_regions[idx] == body_label)
|
||||||
|
{
|
||||||
|
if (x < *min_x)
|
||||||
|
*min_x = x;
|
||||||
|
if (x > *max_x)
|
||||||
|
*max_x = x;
|
||||||
|
if (y < *min_y)
|
||||||
|
*min_y = y;
|
||||||
|
if (y > *max_y)
|
||||||
|
*max_y = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Estimate waist center using pressure distribution
|
||||||
|
*/
|
||||||
|
static Point_t estimate_waist_center(const uint16_t *sensor_data, uint8_t body_label)
|
||||||
|
{
|
||||||
|
uint8_t min_x, min_y, max_x, max_y;
|
||||||
|
get_bounding_box(body_label, &min_x, &min_y, &max_x, &max_y);
|
||||||
|
|
||||||
|
// Focus on middle 40% of body height for waist detection
|
||||||
|
uint8_t body_height = max_y - min_y + 1;
|
||||||
|
uint8_t waist_start = min_y + (body_height * 3) / 10; // 30% from top
|
||||||
|
uint8_t waist_end = min_y + (body_height * 7) / 10; // 70% from top
|
||||||
|
|
||||||
|
// Find row with maximum pressure in waist region
|
||||||
|
uint32_t max_row_sum = 0;
|
||||||
|
uint8_t waist_row = (waist_start + waist_end) / 2;
|
||||||
|
|
||||||
|
for (uint8_t y = waist_start; y <= waist_end && y <= max_y; y++)
|
||||||
|
{
|
||||||
|
uint32_t row_sum = 0;
|
||||||
|
|
||||||
|
for (uint8_t x = min_x; x <= max_x; x++)
|
||||||
|
{
|
||||||
|
int idx = y * MAT_WIDTH + x;
|
||||||
|
if (labeled_regions[idx] == body_label)
|
||||||
|
{
|
||||||
|
row_sum += sensor_data[idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row_sum > max_row_sum)
|
||||||
|
{
|
||||||
|
max_row_sum = row_sum;
|
||||||
|
waist_row = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate weighted center in waist row
|
||||||
|
uint32_t sum_x = 0, sum_weight = 0;
|
||||||
|
|
||||||
|
for (uint8_t x = min_x; x <= max_x; x++)
|
||||||
|
{
|
||||||
|
int idx = waist_row * MAT_WIDTH + x;
|
||||||
|
if (labeled_regions[idx] == body_label)
|
||||||
|
{
|
||||||
|
uint16_t weight = sensor_data[idx];
|
||||||
|
sum_x += x * weight;
|
||||||
|
sum_weight += weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Point_t waist_center = {0, 0};
|
||||||
|
if (sum_weight > 0)
|
||||||
|
{
|
||||||
|
waist_center.x_mm = (sum_x * POINT_SPACING_X_MM) / sum_weight;
|
||||||
|
waist_center.y_mm = waist_row * POINT_SPACING_Y_MM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return waist_center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Classify posture using simple heuristics
|
||||||
|
*/
|
||||||
|
static uint8_t classify_posture(uint8_t body_label, uint8_t *confidence)
|
||||||
|
{
|
||||||
|
uint8_t min_x, min_y, max_x, max_y;
|
||||||
|
get_bounding_box(body_label, &min_x, &min_y, &max_x, &max_y);
|
||||||
|
|
||||||
|
uint16_t width = (max_x - min_x + 1) * POINT_SPACING_X_MM;
|
||||||
|
uint16_t height = (max_y - min_y + 1) * POINT_SPACING_Y_MM;
|
||||||
|
|
||||||
|
// Calculate aspect ratio (width/height) * 100 for integer math
|
||||||
|
uint16_t aspect_ratio_x100 = (width * 100) / height;
|
||||||
|
|
||||||
|
// Heuristic classification
|
||||||
|
if (aspect_ratio_x100 > 150)
|
||||||
|
{ // aspect_ratio > 1.5
|
||||||
|
*confidence = 70;
|
||||||
|
return 0; // supine
|
||||||
|
}
|
||||||
|
else if (aspect_ratio_x100 < 120)
|
||||||
|
{ // aspect_ratio < 1.2
|
||||||
|
*confidence = 70;
|
||||||
|
return 1; // side
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*confidence = 50;
|
||||||
|
return (aspect_ratio_x100 > 130) ? 0 : 1; // uncertain
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Main analysis function
|
||||||
|
*
|
||||||
|
* @param sensor_data: Array of 260 pressure sensor readings (0-1023)
|
||||||
|
* @param result: Pointer to store analysis results
|
||||||
|
* @return: true if analysis successful, false otherwise
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint16_t smoothed_data[TOTAL_SENSORS] = {0};
|
||||||
|
bool analyze_body_posture(const uint16_t *sensor_data, AnalysisResult_t *result)
|
||||||
|
{
|
||||||
|
if (!sensor_data || !result)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize result
|
||||||
|
rt_memset(result, 0, sizeof(AnalysisResult_t));
|
||||||
|
rt_memset(smoothed_data, 0, sizeof(smoothed_data));
|
||||||
|
|
||||||
|
// Apply smoothing filter
|
||||||
|
smooth_sensor_data(sensor_data, smoothed_data);
|
||||||
|
|
||||||
|
// Create binary mask
|
||||||
|
create_binary_mask(smoothed_data);
|
||||||
|
|
||||||
|
// Detect body regions
|
||||||
|
uint8_t num_bodies = detect_body_regions(smoothed_data);
|
||||||
|
|
||||||
|
result->num_bodies = (num_bodies > MAX_BODIES) ? MAX_BODIES : num_bodies;
|
||||||
|
|
||||||
|
// Analyze each detected body
|
||||||
|
uint8_t body_idx = 0;
|
||||||
|
for (uint8_t label = 2; label < (2 + num_bodies) && body_idx < MAX_BODIES; label++)
|
||||||
|
{
|
||||||
|
BodyInfo_t *body = &result->bodies[body_idx];
|
||||||
|
|
||||||
|
body->body_id = body_idx + 1;
|
||||||
|
|
||||||
|
// Calculate center of mass
|
||||||
|
body->center_of_mass = calculate_center_of_mass(smoothed_data, label);
|
||||||
|
|
||||||
|
// Estimate waist center
|
||||||
|
body->waist_center = estimate_waist_center(smoothed_data, label);
|
||||||
|
|
||||||
|
// Get dimensions
|
||||||
|
uint8_t min_x, min_y, max_x, max_y;
|
||||||
|
get_bounding_box(label, &min_x, &min_y, &max_x, &max_y);
|
||||||
|
body->width_mm = (max_x - min_x + 1) * POINT_SPACING_X_MM;
|
||||||
|
body->height_mm = (max_y - min_y + 1) * POINT_SPACING_Y_MM;
|
||||||
|
|
||||||
|
// Calculate total pressure
|
||||||
|
body->total_pressure = 0;
|
||||||
|
for (int i = 0; i < TOTAL_SENSORS; i++)
|
||||||
|
{
|
||||||
|
if (labeled_regions[i] == label)
|
||||||
|
{
|
||||||
|
body->total_pressure += smoothed_data[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Classify posture
|
||||||
|
body->posture = classify_posture(label, &body->confidence);
|
||||||
|
|
||||||
|
body_idx++;
|
||||||
|
}
|
||||||
|
/* */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get posture string for debugging
|
||||||
|
*/
|
||||||
|
const char *get_posture_string(uint8_t posture)
|
||||||
|
{
|
||||||
|
return (posture == 0) ? "supine" : "side";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print analysis results (for debugging)
|
||||||
|
* Note: Requires printf implementation on MCU
|
||||||
|
*/
|
||||||
|
#ifdef DEBUG_PRINT
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void print_analysis_results(const AnalysisResult_t *result)
|
||||||
|
{
|
||||||
|
rt_kprintf("=== Body Analysis Results ===\n");
|
||||||
|
rt_kprintf("Bodies detected: %d\n", result->num_bodies);
|
||||||
|
|
||||||
|
for (int i = 0; i < result->num_bodies; i++)
|
||||||
|
{
|
||||||
|
const BodyInfo_t *body = &result->bodies[i];
|
||||||
|
|
||||||
|
rt_kprintf("\nBody %d:\n", body->body_id);
|
||||||
|
rt_kprintf(" Posture: %s (confidence: %d%%)\n",
|
||||||
|
get_posture_string(body->posture), body->confidence);
|
||||||
|
rt_kprintf(" Waist center: (%d, %d) mm\n",
|
||||||
|
body->waist_center.x_mm, body->waist_center.y_mm);
|
||||||
|
rt_kprintf(" Center of mass: (%d, %d) mm\n",
|
||||||
|
body->center_of_mass.x_mm, body->center_of_mass.y_mm);
|
||||||
|
rt_kprintf(" Dimensions: %d x %d mm\n",
|
||||||
|
body->width_mm, body->height_mm);
|
||||||
|
rt_kprintf(" Total pressure: %lu\n", body->total_pressure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
@ -6,6 +6,7 @@
|
|||||||
#include "mySensor_deal.h"
|
#include "mySensor_deal.h"
|
||||||
#include "myEdge_ai_app.h"
|
#include "myEdge_ai_app.h"
|
||||||
#include "app_x-cube-ai.h"
|
#include "app_x-cube-ai.h"
|
||||||
|
#include "mcu_body_analyzer.h"
|
||||||
|
|
||||||
model_t model;
|
model_t model;
|
||||||
ai_handle network;
|
ai_handle network;
|
||||||
@ -101,6 +102,68 @@ void preprocess_data(const float *input, float *output, size_t length)
|
|||||||
output[i] = (tanh_val + 1.0f) / 2.0f;
|
output[i] = (tanh_val + 1.0f) / 2.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Process analysis results (implement your application logic here)
|
||||||
|
*/
|
||||||
|
void process_analysis_results(const AnalysisResult_t *result)
|
||||||
|
{
|
||||||
|
static uint8_t previous_body_count = 0;
|
||||||
|
|
||||||
|
// Check for body count changes
|
||||||
|
if (result->num_bodies != previous_body_count)
|
||||||
|
{
|
||||||
|
rt_kprintf("Body count changed: %d -> %d\n",
|
||||||
|
previous_body_count, result->num_bodies);
|
||||||
|
previous_body_count = result->num_bodies;
|
||||||
|
|
||||||
|
// You could trigger events here:
|
||||||
|
// - Send notification to central system
|
||||||
|
// - Update display
|
||||||
|
// - Change LED indicators
|
||||||
|
// - Log to memory/SD card
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process each detected body
|
||||||
|
for (int i = 0; i < result->num_bodies; i++)
|
||||||
|
{
|
||||||
|
const BodyInfo_t *body = &result->bodies[i];
|
||||||
|
|
||||||
|
// Example: Check for posture changes
|
||||||
|
static uint8_t previous_posture[MAX_BODIES] = {0xFF, 0xFF};
|
||||||
|
|
||||||
|
if (previous_posture[i] != body->posture)
|
||||||
|
{
|
||||||
|
rt_kprintf("Body %d posture changed to: %s\n",
|
||||||
|
body->body_id, get_posture_string(body->posture));
|
||||||
|
previous_posture[i] = body->posture;
|
||||||
|
|
||||||
|
// You could implement alerts here:
|
||||||
|
// - Posture change notification
|
||||||
|
// - Sleep quality tracking
|
||||||
|
// - Health monitoring alerts
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: Monitor waist position for movement detection
|
||||||
|
static Point_t previous_waist[MAX_BODIES];
|
||||||
|
|
||||||
|
uint16_t movement_x = abs((int16_t)body->waist_center.x_mm -
|
||||||
|
(int16_t)previous_waist[i].x_mm);
|
||||||
|
uint16_t movement_y = abs((int16_t)body->waist_center.y_mm -
|
||||||
|
(int16_t)previous_waist[i].y_mm);
|
||||||
|
if (movement_x > 50 || movement_y > 50)
|
||||||
|
{ // Movement > 5cm
|
||||||
|
rt_kprintf("Body %d significant movement detected\n", body->body_id);
|
||||||
|
// You could implement movement tracking here:
|
||||||
|
// - Sleep restlessness monitoring
|
||||||
|
// - Position adjustment alerts
|
||||||
|
// - Activity logging
|
||||||
|
}
|
||||||
|
|
||||||
|
previous_waist[i] = body->waist_center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
int aiInit(void)
|
int aiInit(void)
|
||||||
{
|
{
|
||||||
@ -149,17 +212,34 @@ int AiModel(uint8_t *input)
|
|||||||
rt_tick_t End_Tick = 0;
|
rt_tick_t End_Tick = 0;
|
||||||
int predicted_class = 0;
|
int predicted_class = 0;
|
||||||
float max_confidence = 0.0f;
|
float max_confidence = 0.0f;
|
||||||
|
AnalysisResult_t analysis_result;
|
||||||
|
|
||||||
rt_kprintf("\nStart Test Code\n");
|
rt_kprintf("\nStart Test Code\n");
|
||||||
|
// 转Float
|
||||||
PictureCharArrayToFloat(input, inputBuf, AI_MODEL_IN_1_SIZE);
|
PictureCharArrayToFloat(input, inputBuf, AI_MODEL_IN_1_SIZE);
|
||||||
|
// 数据前置处理
|
||||||
preprocess_data((const float *)inputBuf, aiInData, AI_MODEL_IN_1_SIZE);
|
preprocess_data((const float *)inputBuf, aiInData, AI_MODEL_IN_1_SIZE);
|
||||||
|
|
||||||
|
// 运算AI模型
|
||||||
Start_Tick = rt_tick_get();
|
Start_Tick = rt_tick_get();
|
||||||
aiRun(aiInData, aiOutData);
|
aiRun(aiInData, aiOutData);
|
||||||
End_Tick = rt_tick_get();
|
End_Tick = rt_tick_get();
|
||||||
|
|
||||||
rt_kprintf("AI model UseTime : %ld ms\n", End_Tick - Start_Tick);
|
rt_kprintf("AI model UseTime : %ld ms\n", End_Tick - Start_Tick);
|
||||||
|
|
||||||
|
// 计算腰部位置
|
||||||
|
if (analyze_body_posture((const uint16_t *)input, &analysis_result))
|
||||||
|
{
|
||||||
|
uint32_t analysis_duration = rt_tick_get();
|
||||||
|
rt_kprintf("Analysis completed in %lu ms\n", analysis_duration);
|
||||||
|
// Process the results
|
||||||
|
process_analysis_results(&analysis_result);
|
||||||
|
#ifdef DEBUG_PRINT
|
||||||
|
print_analysis_results(&analysis_result);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rt_kprintf("Analysis failed\n");
|
||||||
|
|
||||||
for (int i = 0; i < AI_MODEL_OUT_1_SIZE; i++)
|
for (int i = 0; i < AI_MODEL_OUT_1_SIZE; i++)
|
||||||
{
|
{
|
||||||
if (aiOutData[i] > max_confidence)
|
if (aiOutData[i] > max_confidence)
|
||||||
|
@ -185,4 +185,4 @@ int remote_thread_init(void)
|
|||||||
rt_thread_startup(&remote_thread); // 启动线程
|
rt_thread_startup(&remote_thread); // 启动线程
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
INIT_APP_EXPORT(remote_thread_init); // 启动自动初始化
|
// INIT_APP_EXPORT(remote_thread_init); // 启动自动初始化
|
||||||
|
@ -100,8 +100,8 @@
|
|||||||
<flags>2</flags>
|
<flags>2</flags>
|
||||||
<showCmd>3</showCmd>
|
<showCmd>3</showCmd>
|
||||||
<MinPosition>
|
<MinPosition>
|
||||||
<xPos>-1</xPos>
|
<xPos>-32000</xPos>
|
||||||
<yPos>-1</yPos>
|
<yPos>-32000</yPos>
|
||||||
</MinPosition>
|
</MinPosition>
|
||||||
<MaxPosition>
|
<MaxPosition>
|
||||||
<xPos>-1</xPos>
|
<xPos>-1</xPos>
|
||||||
@ -117,8 +117,8 @@
|
|||||||
<MDIClientArea>
|
<MDIClientArea>
|
||||||
<RegID>0</RegID>
|
<RegID>0</RegID>
|
||||||
<MDITabState>
|
<MDITabState>
|
||||||
<Len>2050</Len>
|
<Len>2256</Len>
|
||||||
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000011000000100000000100000035443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D79456467655F61695F6170702E63000000000F6D79456467655F61695F6170702E6300000000FFDC7800FFFFFFFF43443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D444B2D41524D5C737461727475705F73746D33326634303578782E730000000015737461727475705F73746D33326634303578782E7300000000BECEA100FFFFFFFF68443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C7372635C636F6D706F6E656E74732E63000000000C636F6D706F6E656E74732E6300000000F0A0A100FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000BCA8E100FFFFFFFF7B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6273705C5F74656D706C6174655C637562656D785F636F6E6669675C626F6172642E630000000007626F6172642E63000000009CC1B600FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000F7B88600FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7953656E736F725F6465616C2E63000000000F6D7953656E736F725F6465616C2E6300000000D9ADC200FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C63616E2E63000000000563616E2E6300000000A5C2D700FFFFFFFF5A443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F63616E2E63000000001373746D3332663478785F68616C5F63616E2E6300000000B3A6BE00FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C496E635C63616E2E68000000000563616E2E6800000000EAD6A300FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C434D5349535C4465766963655C53545C53544D3332463478785C496E636C7564655C73746D3332663478782E68000000000B73746D3332663478782E6800000000F6FA7D00FFFFFFFF76443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6C69626370755C61726D5C636F727465782D6D345C637075706F72742E630000000009637075706F72742E6300000000B5E99D00FFFFFFFF60443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5345474745525F5254545F5669657765725C5254545C5345474745525F5254542E63000000000C5345474745525F5254542E63000000005FC3CF00FFFFFFFF74443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C636F6D706F6E656E74735C66696E73685C7372635C7368656C6C2E6300000000077368656C6C2E6300000000C1838300FFFFFFFF40443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D794D617474726573735F6374726C2E6300000000116D794D617474726573735F6374726C2E6300000000CACAD500FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7943414E4275734465616C2E63000000000E6D7943414E4275734465616C2E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001301000066000000D505000086020000</Data>
|
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000013000000010000000100000035443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D79456467655F61695F6170702E63000000000F6D79456467655F61695F6170702E6300000000FFDC7800FFFFFFFF43443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D444B2D41524D5C737461727475705F73746D33326634303578782E730000000015737461727475705F73746D33326634303578782E7300000000BECEA100FFFFFFFF68443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C7372635C636F6D706F6E656E74732E63000000000C636F6D706F6E656E74732E6300000000F0A0A100FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000BCA8E100FFFFFFFF7B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6273705C5F74656D706C6174655C637562656D785F636F6E6669675C626F6172642E630000000007626F6172642E63000000009CC1B600FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000F7B88600FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7953656E736F725F6465616C2E63000000000F6D7953656E736F725F6465616C2E6300000000D9ADC200FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C63616E2E63000000000563616E2E6300000000A5C2D700FFFFFFFF5A443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F63616E2E63000000001373746D3332663478785F68616C5F63616E2E6300000000B3A6BE00FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C496E635C63616E2E68000000000563616E2E6800000000EAD6A300FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C434D5349535C4465766963655C53545C53544D3332463478785C496E636C7564655C73746D3332663478782E68000000000B73746D3332663478782E6800000000F6FA7D00FFFFFFFF76443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6C69626370755C61726D5C636F727465782D6D345C637075706F72742E630000000009637075706F72742E6300000000B5E99D00FFFFFFFF60443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5345474745525F5254545F5669657765725C5254545C5345474745525F5254542E63000000000C5345474745525F5254542E63000000005FC3CF00FFFFFFFF74443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C636F6D706F6E656E74735C66696E73685C7372635C7368656C6C2E6300000000077368656C6C2E6300000000C1838300FFFFFFFF40443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D794D617474726573735F6374726C2E6300000000116D794D617474726573735F6374726C2E6300000000CACAD500FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7943414E4275734465616C2E63000000000E6D7943414E4275734465616C2E6300000000C5D4F200FFFFFFFF42443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D63755F626F64795F616E616C797A65722E6300000000136D63755F626F64795F616E616C797A65722E6300000000FFDC7800FFFFFFFF42443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C496E635C6D63755F626F64795F616E616C797A65722E6800000000136D63755F626F64795F616E616C797A65722E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001301000066000000D505000086020000</Data>
|
||||||
</MDITabState>
|
</MDITabState>
|
||||||
</MDIClientArea>
|
</MDIClientArea>
|
||||||
<ViewEx>
|
<ViewEx>
|
||||||
@ -1845,7 +1845,7 @@
|
|||||||
<Name>Debug</Name>
|
<Name>Debug</Name>
|
||||||
<Buttons>
|
<Buttons>
|
||||||
<Len>2373</Len>
|
<Len>2373</Len>
|
||||||
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
|
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
|
||||||
</Buttons>
|
</Buttons>
|
||||||
<OriginalItems>
|
<OriginalItems>
|
||||||
<Len>898</Len>
|
<Len>898</Len>
|
||||||
@ -3610,7 +3610,7 @@
|
|||||||
<ActiveMDIGroup>0</ActiveMDIGroup>
|
<ActiveMDIGroup>0</ActiveMDIGroup>
|
||||||
<MDIGroup>
|
<MDIGroup>
|
||||||
<Size>100</Size>
|
<Size>100</Size>
|
||||||
<ActiveTab>16</ActiveTab>
|
<ActiveTab>1</ActiveTab>
|
||||||
<Doc>
|
<Doc>
|
||||||
<Name>../Core/Src/main.c</Name>
|
<Name>../Core/Src/main.c</Name>
|
||||||
<ColumnNumber>2</ColumnNumber>
|
<ColumnNumber>2</ColumnNumber>
|
||||||
@ -3622,9 +3622,9 @@
|
|||||||
</Doc>
|
</Doc>
|
||||||
<Doc>
|
<Doc>
|
||||||
<Name>..\Core\Src\myEdge_ai_app.c</Name>
|
<Name>..\Core\Src\myEdge_ai_app.c</Name>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
<ColumnNumber>1</ColumnNumber>
|
||||||
<TopLine>189</TopLine>
|
<TopLine>283</TopLine>
|
||||||
<CurrentLine>196</CurrentLine>
|
<CurrentLine>293</CurrentLine>
|
||||||
<Folding>1</Folding>
|
<Folding>1</Folding>
|
||||||
<ContractedFolders></ContractedFolders>
|
<ContractedFolders></ContractedFolders>
|
||||||
<PaneID>0</PaneID>
|
<PaneID>0</PaneID>
|
||||||
@ -3757,9 +3757,27 @@
|
|||||||
</Doc>
|
</Doc>
|
||||||
<Doc>
|
<Doc>
|
||||||
<Name>..\Core\Src\myCANBusDeal.c</Name>
|
<Name>..\Core\Src\myCANBusDeal.c</Name>
|
||||||
<ColumnNumber>0</ColumnNumber>
|
<ColumnNumber>5</ColumnNumber>
|
||||||
<TopLine>4</TopLine>
|
<TopLine>4</TopLine>
|
||||||
<CurrentLine>17</CurrentLine>
|
<CurrentLine>22</CurrentLine>
|
||||||
|
<Folding>1</Folding>
|
||||||
|
<ContractedFolders></ContractedFolders>
|
||||||
|
<PaneID>0</PaneID>
|
||||||
|
</Doc>
|
||||||
|
<Doc>
|
||||||
|
<Name>..\Core\Src\mcu_body_analyzer.c</Name>
|
||||||
|
<ColumnNumber>9</ColumnNumber>
|
||||||
|
<TopLine>32</TopLine>
|
||||||
|
<CurrentLine>38</CurrentLine>
|
||||||
|
<Folding>1</Folding>
|
||||||
|
<ContractedFolders></ContractedFolders>
|
||||||
|
<PaneID>0</PaneID>
|
||||||
|
</Doc>
|
||||||
|
<Doc>
|
||||||
|
<Name>../Core/Inc/mcu_body_analyzer.h</Name>
|
||||||
|
<ColumnNumber>7</ColumnNumber>
|
||||||
|
<TopLine>80</TopLine>
|
||||||
|
<CurrentLine>97</CurrentLine>
|
||||||
<Folding>1</Folding>
|
<Folding>1</Folding>
|
||||||
<ContractedFolders></ContractedFolders>
|
<ContractedFolders></ContractedFolders>
|
||||||
<PaneID>0</PaneID>
|
<PaneID>0</PaneID>
|
||||||
|
@ -377,6 +377,18 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>13</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Core\Src\mcu_body_analyzer.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>mcu_body_analyzer.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
@ -387,7 +399,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>13</FileNumber>
|
<FileNumber>14</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -399,7 +411,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>14</FileNumber>
|
<FileNumber>15</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -411,7 +423,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>15</FileNumber>
|
<FileNumber>16</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -423,7 +435,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>16</FileNumber>
|
<FileNumber>17</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -435,7 +447,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>17</FileNumber>
|
<FileNumber>18</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -447,7 +459,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>18</FileNumber>
|
<FileNumber>19</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -459,7 +471,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>19</FileNumber>
|
<FileNumber>20</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -471,7 +483,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>20</FileNumber>
|
<FileNumber>21</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -483,7 +495,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>21</FileNumber>
|
<FileNumber>22</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -495,7 +507,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>22</FileNumber>
|
<FileNumber>23</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -507,7 +519,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>23</FileNumber>
|
<FileNumber>24</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -519,7 +531,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>24</FileNumber>
|
<FileNumber>25</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -531,7 +543,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>25</FileNumber>
|
<FileNumber>26</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -543,7 +555,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>26</FileNumber>
|
<FileNumber>27</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -555,7 +567,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>27</FileNumber>
|
<FileNumber>28</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -575,7 +587,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>28</FileNumber>
|
<FileNumber>29</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -595,7 +607,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>29</FileNumber>
|
<FileNumber>30</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -607,7 +619,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>30</FileNumber>
|
<FileNumber>31</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -627,7 +639,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>31</FileNumber>
|
<FileNumber>32</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -639,7 +651,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>32</FileNumber>
|
<FileNumber>33</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -651,7 +663,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>33</FileNumber>
|
<FileNumber>34</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -663,7 +675,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>34</FileNumber>
|
<FileNumber>35</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -675,7 +687,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>35</FileNumber>
|
<FileNumber>36</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -687,7 +699,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>36</FileNumber>
|
<FileNumber>37</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -699,7 +711,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>37</FileNumber>
|
<FileNumber>38</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -711,7 +723,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>38</FileNumber>
|
<FileNumber>39</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -723,7 +735,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>39</FileNumber>
|
<FileNumber>40</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -735,7 +747,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>40</FileNumber>
|
<FileNumber>41</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -755,7 +767,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>41</FileNumber>
|
<FileNumber>42</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -775,7 +787,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>42</FileNumber>
|
<FileNumber>43</FileNumber>
|
||||||
<FileType>4</FileType>
|
<FileType>4</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -795,7 +807,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>43</FileNumber>
|
<FileNumber>44</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -807,7 +819,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>44</FileNumber>
|
<FileNumber>45</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -819,7 +831,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>45</FileNumber>
|
<FileNumber>46</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -831,7 +843,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>46</FileNumber>
|
<FileNumber>47</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -843,7 +855,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>47</FileNumber>
|
<FileNumber>48</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -863,7 +875,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>48</FileNumber>
|
<FileNumber>49</FileNumber>
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -875,7 +887,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>49</FileNumber>
|
<FileNumber>50</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -895,7 +907,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>50</FileNumber>
|
<FileNumber>51</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -907,7 +919,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>51</FileNumber>
|
<FileNumber>52</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -919,7 +931,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>52</FileNumber>
|
<FileNumber>53</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -931,7 +943,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>53</FileNumber>
|
<FileNumber>54</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -943,7 +955,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>54</FileNumber>
|
<FileNumber>55</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -955,7 +967,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>55</FileNumber>
|
<FileNumber>56</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -967,7 +979,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>56</FileNumber>
|
<FileNumber>57</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -979,7 +991,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>57</FileNumber>
|
<FileNumber>58</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -991,7 +1003,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>58</FileNumber>
|
<FileNumber>59</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1003,7 +1015,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>59</FileNumber>
|
<FileNumber>60</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1015,7 +1027,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>60</FileNumber>
|
<FileNumber>61</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1027,7 +1039,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>61</FileNumber>
|
<FileNumber>62</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1039,7 +1051,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>62</FileNumber>
|
<FileNumber>63</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1051,7 +1063,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>63</FileNumber>
|
<FileNumber>64</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1063,7 +1075,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>64</FileNumber>
|
<FileNumber>65</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1075,7 +1087,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>65</FileNumber>
|
<FileNumber>66</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1087,7 +1099,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>11</GroupNumber>
|
<GroupNumber>11</GroupNumber>
|
||||||
<FileNumber>66</FileNumber>
|
<FileNumber>67</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -600,6 +600,11 @@
|
|||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>../Core/Src/stm32f4xx_hal_msp.c</FilePath>
|
<FilePath>../Core/Src/stm32f4xx_hal_msp.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>mcu_body_analyzer.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Core\Src\mcu_body_analyzer.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user