43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { writable } from 'svelte/store'
|
|
import type { IMUMsg } from '$lib/types/models'
|
|
import type { IMUReport } from '$lib/platform_shared/imu_report'
|
|
|
|
const maxIMUData = 100
|
|
|
|
export const imu = (() => {
|
|
const { subscribe, update } = writable({
|
|
x: [] as number[],
|
|
y: [] as number[],
|
|
z: [] as number[],
|
|
heading: [] as number[],
|
|
altitude: [] as number[],
|
|
pressure: [] as number[],
|
|
bmp_temp: [] as number[]
|
|
})
|
|
|
|
const addData = (content: IMUReport) => {
|
|
update(data => {
|
|
if (content.success) {
|
|
data.x = [...data.x, content.x].slice(-maxIMUData)
|
|
data.y = [...data.y, content.y].slice(-maxIMUData)
|
|
data.z = [...data.z, content.z].slice(-maxIMUData)
|
|
}
|
|
|
|
// TODO: Temporarily disabled
|
|
// if (content.mag && content.mag[4]) {
|
|
// data.heading = [...data.heading, content.mag[3]].slice(-maxIMUData)
|
|
// }
|
|
|
|
// if (content.bmp && content.bmp[3]) {
|
|
// data.pressure = [...data.pressure, content.bmp[0]].slice(-maxIMUData)
|
|
// data.altitude = [...data.altitude, content.bmp[1]].slice(-maxIMUData)
|
|
// data.bmp_temp = [...data.bmp_temp, content.bmp[2]].slice(-maxIMUData)
|
|
// }
|
|
|
|
return data
|
|
})
|
|
}
|
|
|
|
return { subscribe, addData }
|
|
})()
|