ROWFILE/1
Um .rowfile guarda uma sessão completa em um arquivo. O Row Smarter já exporta e importa esse formato. Ele leva o registro sem perdas junto das exportações CSV e TCX.
O arquivo pode ser compartilhado diretamente e leva a sessão inteira.
Enquadramento do contêiner
O contêiner é uma concatenação determinística, não um zip. Linhas ASCII cercam os bytes brutos de cada entrada:
ROWFILE/1\n
>> <name> <size in bytes, decimal>\n
<size raw bytes>\n
...repeated per entry...manifest.json vem primeiro. Leitores devem aceitar qualquer ordem, ignorar nomes desconhecidos e rejeitar duplicatas.
Nomes das entradas
manifest.json: versão e autor.session.json: cópia sem perdas.summary.csv: resumo.samples.csv: amostras.strokes.csv: remadas.rowingdata.csv: exportação rowingdata.beats.csv: intervalos entre batimentos.session.tcx: TCX.
CSV e TCX são idênticos byte a byte às exportações avulsas. Um arquivo montado pode não ter session.json; o importador recupera o possível das outras entradas.
manifest.json
Só formatVersion é obrigatório. Outros valores podem faltar.
formatVersion: inteiro obrigatório, atualmente1.sessionID: UUID opcional.appVersion: string opcional.writer: string opcional. Row Smarter gravaRowSmarter; recuperação gravastitch-rowfile.
session.json
O esquema é versão 1 e não arredonda valores. As chaves obrigatórias estão indicadas; as demais são opcionais.
Sessão
v: inteiro obrigatório, versão.id: UUID obrigatório.start: número obrigatório, segundos desde a referênciaDate.dur: duração obrigatória;mov: duração em movimento.dist: distância obrigatória em metros.name: nome;tz: fuso;utc: deslocamento UTC.mass: massa;age: idade.maxW: potência máxima;minSplit: segundos por 500 m;maxSR: ritmo de remadas máximo.plan:WorkoutPlan;race: corrida.avgPace: split médio;avgW: potência média;work: trabalho;kcal: quilocalorias.strokeCount: inteiro obrigatório;avgSR: ritmo de remadas médio.avgHR: frequência média;peakHR: pico.avgLen: comprimento médio;avgRatio: relação média.samples,strokesebeats: arrays obrigatórios.prov: procedência;hk: UUID HealthKit.
Duração
s: segundos inteiros obrigatórios.a: attosegundos inteiros obrigatórios.
Amostra
t: duração obrigatória.d: distância;p: split;w: watts.sr: ritmo de remadas;sc: contagem;hr: frequência cardíaca.df: drag factor;sl: comprimento.ap: split médio;aw: watts médios;wj: trabalho.hr0: frequência original.
Remada
i: identidade inteira obrigatória;t: início obrigatório.dr: passagem;rc: recuperação;ds: true se derivado.d: distância;w: watts médios.fc: curva;pf: força máxima;af: força média.dl: comprimento;sd: distância por remada.
Curva de força
f: array obrigatório.dt: intervalo obrigatório.cal: booleano obrigatório de calibração.
Batimento
e: tempo obrigatório.r: intervalo obrigatório em segundos.
Corrida
id: identidade obrigatória;name: nome;dist: distância.own: participante do atleta;src: origem do resultado.field: array obrigatório. Cada participante tempobrigatório en,l,r,d,e,fopcionais.
Procedência
kind: tipo;erg: ergômetro;hrm: monitor.app: versão;build: build;ver: gravação.si: intervalo;npc: newtons por count;hrfix: reparos.imf: formato;isrc: app de origem;iat: tempo desdeDate;ifn: nome do arquivo.fid: fidelidade;mtd: movimento derivado.