Move code around, read header into int/string
parent
b6b724f949
commit
37979af849
10
src/FIT.jl
10
src/FIT.jl
|
@ -1,9 +1,15 @@
|
|||
module FIT
|
||||
|
||||
export greet_package
|
||||
export read_header
|
||||
export read_header, FITHeader
|
||||
|
||||
include("functions.jl")
|
||||
include("header.jl")
|
||||
|
||||
using .header
|
||||
|
||||
end
|
||||
|
||||
using .FIT
|
||||
open("test.FIT", "r") do f
|
||||
h = FIT.read_header(f)
|
||||
end
|
|
@ -0,0 +1,26 @@
|
|||
|
||||
"""
|
||||
read_data_size(size::Vector{UInt8})::Real
|
||||
|
||||
FIT headers have a data size field, with 4 bytes.
|
||||
"""
|
||||
function byte_vec_to_int(byte_vec::Vector{UInt8})::Integer
|
||||
result::Integer = 0
|
||||
byte_vec = Int64.(byte_vec)
|
||||
|
||||
for i ∈ 0:length(byte_vec) - 1
|
||||
result += byte_vec[1 + i] << (8 * i)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
"""
|
||||
byte_vec_to_string(byte_vec::Vector{UInt8})::AbstractString
|
||||
|
||||
Given the byte vec, create a String
|
||||
"""
|
||||
function byte_vec_to_string(byte_vec::Vector{UInt8})::AbstractString
|
||||
String(Char.(byte_vec))
|
||||
end
|
||||
|
||||
# byte_vec_to_string(UInt8.(collect("ABC")))
|
|
@ -1,17 +1,25 @@
|
|||
struct FITHeader
|
||||
sz::UInt8
|
||||
protocol::UInt8
|
||||
version::AbstractVector{<:Real}
|
||||
size::Real
|
||||
type::AbstractVector{<:Real}
|
||||
crc::AbstractVector{<:Real}
|
||||
end
|
||||
|
||||
|
||||
"""
|
||||
length in bytes
|
||||
"""
|
||||
|
||||
module header
|
||||
|
||||
export FITHeader, read_header
|
||||
include("bytes.jl")
|
||||
|
||||
const DATA_SIZE_LENGTH = 4
|
||||
|
||||
struct FITHeader
|
||||
sz::UInt8
|
||||
protocol::UInt8
|
||||
version::Integer
|
||||
size::Integer
|
||||
type::String
|
||||
crc::AbstractVector{<:Real}
|
||||
end
|
||||
|
||||
"""
|
||||
read_header(fit_file::IOStream)
|
||||
|
||||
|
@ -20,31 +28,12 @@ Read the header of the given fit file, and return a FITHeader struct
|
|||
function read_header(fit_file::IOStream)::FITHeader
|
||||
sz = read(fit_file, 1; all=false)[1]
|
||||
protocol = read(fit_file, 1; all=false)[1]
|
||||
version = read(fit_file, 2; all=false)
|
||||
size = read_data_size!(read(fit_file, 4; all=false))
|
||||
type = read(fit_file, 4; all=false)
|
||||
version = byte_vec_to_int(read(fit_file, 2; all=false))
|
||||
size = byte_vec_to_int(read(fit_file, 4; all=false))
|
||||
type = byte_vec_to_string(read(fit_file, 4; all=false))
|
||||
crc = read(fit_file, 2; all=false)
|
||||
|
||||
FITHeader(sz, protocol, version, size, type, crc)
|
||||
end
|
||||
|
||||
"""
|
||||
read_data_size(size::Vector{UInt8})::Real
|
||||
|
||||
FIT headers have a data size field, with 4 bytes.
|
||||
"""
|
||||
function read_data_size!(size::Vector{UInt8})::Real
|
||||
data_size::Int64 = 0
|
||||
size = Int64.(size)
|
||||
|
||||
for i ∈ 0:length(size) - 1
|
||||
data_size += size[1 + i] << (8 * i)
|
||||
end
|
||||
data_size
|
||||
end
|
||||
|
||||
function test_read_header()
|
||||
open("test.FIT", "r") do f
|
||||
read_header(f)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue