42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
package logger
|
||
|
||
// GPIOData — разобранный байт GPIO-шины: количество обнаружений (биты 0–5),
|
||
// сила сигнала (биты 6–7) и признак превышения порога тревоги.
|
||
type GPIOData struct {
|
||
RawValue byte // сырое значение
|
||
Count byte // количество обнаружений (биты 0-5)
|
||
Strength byte // сила сигнала (биты 6-7)
|
||
IsHighCount bool // превышает ли количество 10
|
||
}
|
||
|
||
// ParseGPIO парсит сырой байт на составляющие
|
||
func ParseGPIO(raw byte) GPIOData {
|
||
// Биты 0-5: количество (0-63)
|
||
count := raw & 0x3F // маска 00111111
|
||
|
||
// Биты 6-7: сила (0-3)
|
||
strength := (raw >> 6) & 0x03 // сдвиг на 6 бит, маска 00000011
|
||
|
||
return GPIOData{
|
||
RawValue: raw,
|
||
Count: count,
|
||
Strength: strength,
|
||
IsHighCount: count > 10,
|
||
}
|
||
}
|
||
|
||
// GetStrengthName возвращает текстовое описание силы
|
||
func GetStrengthName(strength byte) string {
|
||
switch strength {
|
||
case 0:
|
||
return "Слабый"
|
||
case 1:
|
||
return "Средний"
|
||
case 2:
|
||
return "Сильный"
|
||
case 3:
|
||
return "Максимальный"
|
||
default:
|
||
return "Неизвестно"
|
||
}
|
||
} |