Changeset 3ca11912 in subsurface


Ignore:
Timestamp:
May 31, 2017, 9:53:00 PM (5 months ago)
Author:
Dirk Hohndel <dirk@…>
Branches:
master
Children:
40f5e2e
Parents:
4ed6ae0d
git-author:
John Van Ostrand <john@…> (05/31/17 17:46:22)
git-committer:
Dirk Hohndel <dirk@…> (05/31/17 21:53:00)
Message:

Cochran import: better support for older models

Older models allowed for configuration sample frequency; This patch adds
detection of sample frequency (profile_period) for cochran log file
imports.

Signed-off-by: John Van Ostrand <john@…>
Signed-off-by: Dirk Hohndel <dirk@…>

Location:
core
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/cochran.c

    r6bfd20a r3ca11912  
    153153}
    154154
    155 static void cochran_debug_sample(const char *s, unsigned int seconds)
     155static void cochran_debug_sample(const char *s, unsigned int sample_cnt)
    156156{
    157157        switch (config.type) {
    158158        case TYPE_GEMINI:
    159                 switch (seconds % 4) {
     159                switch (sample_cnt % 4) {
    160160                case 0:
    161161                        printf("Hex: %02x %02x          ", s[0], s[1]);
     
    173173                break;
    174174        case TYPE_COMMANDER:
    175                 switch (seconds % 2) {
     175                switch (sample_cnt % 2) {
    176176                case 0:
    177177                        printf("Hex: %02x %02x    ", s[0], s[1]);
     
    183183                break;
    184184        case TYPE_EMC:
    185                 switch (seconds % 2) {
     185                switch (sample_cnt % 2) {
    186186                case 0:
    187187                        printf("Hex: %02x %02x    %02x ", s[0], s[1], s[2]);
     
    194194        }
    195195
    196         printf ("%02dh %02dm %02ds: Depth: %-5.2f, ", seconds / 3660,
    197                 (seconds % 3660) / 60, seconds % 60, depth);
     196        printf ("%02dh %02dm %02ds: Depth: %-5.2f, ", sample_cnt / 3660,
     197                (sample_cnt % 3660) / 60, sample_cnt % 60, depth);
    198198}
    199199
     
    435435{
    436436        const unsigned char *s;
    437         unsigned int offset = 0, seconds = 0;
     437        unsigned int offset = 0, profile_period = 1, sample_cnt = 0;
    438438        double depth = 0, temp = 0, depth_sample = 0, psi = 0, sgc_rate = 0;
    439439        int ascent_rate = 0;
     
    456456                sgc_rate = (float)(log[CMD_START_SGC]
    457457                        + log[CMD_START_SGC + 1] * 256) / 2;
     458                profile_period = log[CMD_PROFILE_PERIOD];
    458459                break;
    459460        case TYPE_COMMANDER:
     
    461462                        + log[CMD_START_DEPTH + 1] * 256) / 4;
    462463                temp = log[CMD_START_TEMP];
     464                profile_period = log[CMD_PROFILE_PERIOD];
    463465                break;
    464466
     
    467469                        + log[EMC_START_DEPTH + 1];
    468470                temp = log[EMC_START_TEMP];
     471                profile_period = log[EMC_PROFILE_PERIOD];
    469472                break;
    470473        }
     
    490493                // Start with an empty sample
    491494                sample = prepare_sample(dc);
    492                 sample->time.seconds = seconds;
     495                sample->time.seconds = sample_cnt * profile_period;
    493496
    494497                // Check for event
    495498                if (s[0] & 0x80) {
    496                         cochran_dive_event(dc, s, seconds, &in_deco, &deco_ceiling, &deco_time);
     499                        cochran_dive_event(dc, s, sample_cnt * profile_period, &in_deco, &deco_ceiling, &deco_time);
    497500                        offset += cochran_dive_event_bytes(s[0]) + 1;
    498501                        continue;
     
    504507
    505508#ifdef COCHRAN_DEBUG
    506                 cochran_debug_sample(s, seconds);
     509                cochran_debug_sample(s, sample_cnt);
    507510#endif
    508511
    509512                switch (config.type) {
    510513                case TYPE_COMMANDER:
    511                         switch (seconds % 2) {
     514                        switch (sample_cnt % 2) {
    512515                        case 0: // Ascent rate
    513516                                ascent_rate = (s[1] & 0x7f) * (s[1] & 0x80 ? 1: -1);
     
    520523                case TYPE_GEMINI:
    521524                        // Gemini with tank pressure and SAC rate.
    522                         switch (seconds % 4) {
     525                        switch (sample_cnt % 4) {
    523526                        case 0: // Ascent rate
    524527                                ascent_rate = (s[1] & 0x7f) * (s[1] & 0x80 ? 1 : -1);
     
    536539                        break;
    537540                case TYPE_EMC:
    538                         switch (seconds % 2) {
     541                        switch (sample_cnt % 2) {
    539542                        case 0: // Ascent rate
    540543                                ascent_rate = (s[1] & 0x7f) * (s[1] & 0x80 ? 1: -1);
     
    545548                        }
    546549                        // Get NDL and deco information
    547                         switch (seconds % 24) {
     550                        switch (sample_cnt % 24) {
    548551                        case 20:
    549552                                if (offset + 5 < size) {
     
    574577                if (depth > *max_depth) *max_depth = depth;
    575578                if (temp < *min_temp) *min_temp = temp;
    576                 *avg_depth = (*avg_depth * seconds + depth) / (seconds + 1);
     579                *avg_depth = (*avg_depth * sample_cnt + depth) / (sample_cnt + 1);
    577580
    578581                sample->depth.mm = lrint(depth * FEET * 1000);
     
    588591
    589592                offset += config.sample_size;
    590                 seconds++;
     593                sample_cnt++;
    591594        }
    592595        (void)ascent_rate; // mark the variable as unused
    593596
    594         if (seconds > 0)
    595                 *duration = seconds - 1;
     597        if (sample_cnt > 0)
     598                *duration = sample_cnt * profile_period - 1;
    596599}
    597600
  • core/cochran.h

    rf604089 r3ca11912  
    2222#define CMD_AVG_DEPTH                   170             // 2 bytes, /4=ft
    2323#define CMD_O2_PERCENT                  210             // 8 bytes, 4 x 2 byte, /256=%
     24#define CMD_PROFILE_PERIOD              237             // 1 byte, seconds
    2425
    2526// EMC log fields
     
    4546#define EMC_MAX_DEPTH                   306             // 2 bytes, /4=ft
    4647#define EMC_AVG_DEPTH                   310             // 2 bytes, /4=ft
     48#define EMC_PROFILE_PERIOD              435             // 1 byte, seconds
Note: See TracChangeset for help on using the changeset viewer.