{
  "revision": "ON4CRD-RK-R2",
  "status": "passed",
  "runner_sha256": "7774e434c9bbb301c1d846123d069cf83ef844ed056a0dd290feb0742cb2b0d5",
  "simulator": "avr8js 0.21.0",
  "clock_hz": 16000000,
  "hardware_tested": false,
  "calibration_values_are_synthetic": true,
  "external_swr_reference_v": 3,
  "modelled_watchdog": true,
  "limitations": [
    "No physical RF detector, reference accuracy, PhotoMOS delay, transceiver or bootloader execution is modeled.",
    "The reference diagnostic is a wide nominal-bandgap plausibility check, not a precision AREF measurement.",
    "ADC stuck at a plausible constant cannot be distinguished from a real stable carrier by software alone."
  ],
  "firmware": [
    {
      "id": "cw",
      "source_sha256": "18ac1336ebe7dbf07509def8cff59d727e249dbe1d25390204e827db60fa564f",
      "hex_sha256": "e1839abaa3fb3f3f200d018793be9e6467062dfb3dfa8cea4de1477a85a8d463"
    },
    {
      "id": "swr",
      "source_sha256": "9182a1951e6bfcbaaca0755ed58bd44ae7122272cac8ac28bddd7e2b1af12be8",
      "hex_sha256": "84ac68fd63d585b7cee4127966282093b82306e90d7ff478473fc73233266815"
    }
  ],
  "tests": [
    {
      "name": "single dot",
      "edges": [
        {
          "on": true,
          "ms": 53.5320625
        },
        {
          "on": false,
          "ms": 113.4871875
        }
      ],
      "marks": [
        59.955125
      ]
    },
    {
      "name": "held dot repeats without release tail",
      "edges": [
        {
          "on": true,
          "ms": 53.5320625
        },
        {
          "on": false,
          "ms": 113.517
        },
        {
          "on": true,
          "ms": 173.5515
        },
        {
          "on": false,
          "ms": 233.5338125
        },
        {
          "on": true,
          "ms": 293.568
        },
        {
          "on": false,
          "ms": 353.54975
        }
      ],
      "marks": [
        59.984937499999994,
        59.982312500000006,
        59.981750000000034
      ]
    },
    {
      "name": "new tap of same paddle during mark is remembered",
      "edges": [
        {
          "on": true,
          "ms": 53.5320625
        },
        {
          "on": false,
          "ms": 113.4990625
        },
        {
          "on": true,
          "ms": 173.535125
        },
        {
          "on": false,
          "ms": 233.5209375
        }
      ],
      "marks": [
        59.96699999999999,
        59.98581250000001
      ]
    },
    {
      "name": "contact bounce below four milliseconds is ignored",
      "edges": [],
      "marks": []
    },
    {
      "name": "small speed ADC noise preserves element timing",
      "edges": [
        {
          "on": true,
          "ms": 53.5320625
        },
        {
          "on": false,
          "ms": 113.4959375
        },
        {
          "on": true,
          "ms": 204.060125
        },
        {
          "on": false,
          "ms": 264.0161875
        },
        {
          "on": true,
          "ms": 353.5628125
        },
        {
          "on": false,
          "ms": 413.526125
        }
      ],
      "marks": [
        59.963874999999994,
        59.9560625,
        59.96331249999997
      ]
    },
    {
      "name": "iambic A squeeze release",
      "edges": [
        {
          "on": true,
          "ms": 53.5339375
        },
        {
          "on": false,
          "ms": 113.4919375
        }
      ],
      "marks": [
        59.958000000000006
      ]
    },
    {
      "name": "iambic B single opposite tail",
      "edges": [
        {
          "on": true,
          "ms": 53.5339375
        },
        {
          "on": false,
          "ms": 113.49175
        },
        {
          "on": true,
          "ms": 173.5614375
        },
        {
          "on": false,
          "ms": 353.52575
        }
      ],
      "marks": [
        59.957812499999996,
        179.9643125
      ]
    },
    {
      "name": "boot held paddle remains unarmed",
      "edges": [],
      "marks": []
    },
    {
      "name": "5 WPM timing",
      "edges": [
        {
          "on": true,
          "ms": 53.531
        },
        {
          "on": false,
          "ms": 293.5070625
        }
      ],
      "marks": [
        239.9760625
      ]
    },
    {
      "name": "40 WPM timing",
      "edges": [
        {
          "on": true,
          "ms": 53.5316875
        },
        {
          "on": false,
          "ms": 83.49075
        }
      ],
      "marks": [
        29.95906250000001
      ]
    },
    {
      "name": "CW changing mode during squeeze cannot change its tail",
      "edges": [
        {
          "on": true,
          "ms": 53.5339375
        },
        {
          "on": false,
          "ms": 113.4919375
        }
      ]
    },
    {
      "name": "CW STOP opens key and requires 250 ms released paddles",
      "serial": "RK-CW R2; 5..40 WPM; STOP/STATUS; 30 s continuous limit\r\nREADY\r\nSTOP; release paddles 250 ms\r\nRK-CW R2 WPM=5 MODE=A STATE=RELEASE TO REARM\r\nREADY\r\nRK-CW R2 WPM=5 MODE=A STATE=READY\r\n"
    },
    {
      "name": "CW diagnostic UART flood leaves key timing bounded",
      "release": {
        "on": false,
        "ms": 113.524125
      }
    },
    {
      "name": "CW 30 s continuously held paddle times out and releases safely",
      "limit_ms": 30000,
      "final_state": 0,
      "serial": "RK-CW R2; 5..40 WPM; STOP/STATUS; 30 s continuous limit\r\nREADY\r\nTIMEOUT 30 s; release paddles 250 ms\r\nREADY\r\nRK-CW R2 WPM=5 MODE=A STATE=READY\r\n"
    },
    {
      "name": "CW watchdog feed failure resets compiled sketch with held-paddle inhibit",
      "watchdog_ms": 2048,
      "virtual_fault": "WDR feed suppressed",
      "serial": "RK-CW R2; 5..40 WPM; STOP/STATUS; 30 s continuous limit\r\nREADY\r\nRK-CW R2; 5..40 WPM; STOP/STATUS; 30 s continuous limit\r\n"
    },
    {
      "name": "SWR R2 empty EEPROM requires measured calibration",
      "lcd": [
        "1.8 F0 R0       ",
        "CAL REQUIRED    "
      ]
    },
    {
      "name": "SWR rejects malformed and oversized six-knot commands without mutation",
      "commands": [
        "SET -1 F 0 100",
        "SET 9 F 0 100",
        "SET 65536 F 0 100",
        "SET 0 F -1 100",
        "SET 0 F 6 100",
        "SET 0 F 0 2",
        "SET 0 F 0 1019",
        "SET 0 F 0 65539",
        "SET 0 F 0 4294967295",
        "SET 0 F 0 100x",
        "SET 0 F 0 100 trailing",
        "SET 0 FF 0 100",
        "SET 0 R 0 100SET 0 R 0 100SET 0 R 0 100SET 0 R 0 100"
      ]
    },
    {
      "name": "SWR partial draft cannot become active or be saved; DISCARD restores",
      "lcd": [
        "1.8 F0 R0       ",
        "CAL REQUIRED    "
      ]
    },
    {
      "name": "SWR APPLY validates paired six-knot curves and marks unsaved RAM",
      "lcd": [
        "F  1.00 W 1.8M  ",
        "SWR <1.58 *RAM  "
      ]
    },
    {
      "name": "SWR APPLY alone never persists a calibration across power cycle"
    },
    {
      "name": "SWR R2 paired calibration survives journal save and reboot",
      "eeprom_slot_bytes": 256,
      "record_bytes": 246,
      "serial": " 0 0 0 0 0\r\nRK-SWR R2 SCHEMA=2 KNOTS=6 GENERATION=1 DIRTY=0 STORAGE=EEPROM\r\nREFERENCE=COARSE CHECK OK; verify 3.000 V\r\nRAW 0 0 0\r\n"
    },
    {
      "name": "SWR duplicate SAVE does not rewrite EEPROM",
      "observed_write_operations": 0
    },
    {
      "name": "SWR nonmonotonic draft cannot replace previously active calibration"
    },
    {
      "name": "SWR journal selects newest valid generation and falls back after latest CRC damage"
    },
    {
      "name": "SWR power loss during actual journal writes preserves prior calibration",
      "cut_after_write_operations": 40
    },
    {
      "name": "SWR CRC-corrupt or legacy R1 EEPROM cannot produce calibrated output"
    },
    {
      "name": "SWR near-total reflection is bounded on LCD",
      "lcd": [
        "F 10.00 W 1.8M  ",
        "SWR >99.9       "
      ]
    },
    {
      "name": "SWR reverse below 50 mW reports nominal floor bound, never a fictitious 1:1",
      "lcd": [
        "F  1.00 W 1.8M  ",
        "SWR <1.58       "
      ]
    },
    {
      "name": "SWR exact 1/5/10 W anchors stay exact and nominal upper bounds round conservatively",
      "anchors_w": [
        1,
        5,
        10
      ],
      "upper_bounds": [
        "1.58",
        "1.23",
        "1.16"
      ]
    },
    {
      "name": "SWR reverse above calibrated domain is rejected",
      "lcd": [
        "1.8 F750 R751   ",
        "REVERSE / RANGE "
      ]
    },
    {
      "name": "SWR forward above calibrated domain is not extrapolated",
      "lcd": [
        "1.8 F751 R0     ",
        "OVER RANGE      "
      ]
    },
    {
      "name": "SWR below 1 W forward suppresses numerical SWR",
      "lcd": [
        "1.8 F249 R0     ",
        "FWD <1W / CHECK "
      ]
    },
    {
      "name": "SWR rail saturation suppresses values and RAW fits 16 columns",
      "lcd": [
        "1.8 F1023 R1023 ",
        "ADC SATURATION  "
      ]
    },
    {
      "name": "SWR unstable sample window suppresses a misleading averaged reading",
      "lcd": [
        "1.8 F260 R0     ",
        "UNSTABLE / CHECK"
      ]
    },
    {
      "name": "SWR external-reference band selection keeps boundary hysteresis",
      "transitions": [
        0,
        0,
        0,
        0,
        1,
        1,
        1,
        0
      ]
    },
    {
      "name": "SWR missing reference keeps ADC switch disabled and requires explicit recheck",
      "lcd": [
        "1.8 F0 R0       ",
        "FWD <1W / CHECK "
      ]
    },
    {
      "name": "SWR gross reference change latches fault before calibrated output",
      "lcd": [
        "REFERENCE FAULT ",
        "CHECK 3V / USB  "
      ]
    },
    {
      "name": "SWR timed-out partial command cannot splice into a later valid edit"
    }
  ]
}
