Devesh36/pocket-audio-player

A portable, rechargeable microSD audio player built around an RP2040, SPI flash, USB‑C charging/power management, LCD/button controls, PCM5102A I²S DAC, and TPA6132A headphone amplifier in a 3D‑printed enclosure.

Version
1.0.12
License
unset
Stars
0

validation.json

{
  "formatVersion": 2,
  "packageVersion": "1.0.12",
  "checkedAt": "2026-10-11T16:49:12.461Z",
  "authoredWith": "tscircuit",
  "pcb": {
    "sizeMm": [
      60,
      90,
      1.6
    ],
    "layers": 4,
    "components": 97,
    "traces": 274,
    "vias": 229,
    "nets": 75,
    "errorRecords": 0
  },
  "checks": {
    "typeScript": "passed",
    "nativeAssembledBuild": "passed; exit 0",
    "nativeExplodedBuild": "passed; exit 0",
    "gerberShorts": {
      "status": "passed; no shorts detected",
      "layers": "all four",
      "pixelsPerMm": 40,
      "log": "logs/low-profile/gerber-shorts.log"
    },
    "displayAndPower": {
      "checks": "passed",
      "displayBus": "SPI1 GP26/27; microSD SPI0 GP4-7",
      "battery": "JST-PH pin 1 GND, pin 2 VBAT; charged through MCP73831 from USB-C",
      "chargeCurrentMaNominal": 100,
      "results": [
        {
          "ref": "J_LCD",
          "pin": 1,
          "net": "LCD_BL"
        },
        {
          "ref": "J_LCD",
          "pin": 2,
          "net": "LCD_RST"
        },
        {
          "ref": "J_LCD",
          "pin": 3,
          "net": "LCD_DC"
        },
        {
          "ref": "J_LCD",
          "pin": 4,
          "net": "LCD_CS"
        },
        {
          "ref": "J_LCD",
          "pin": 5,
          "net": "LCD_CLK"
        },
        {
          "ref": "J_LCD",
          "pin": 6,
          "net": "LCD_DIN"
        },
        {
          "ref": "J_LCD",
          "pin": 7,
          "net": "GND"
        },
        {
          "ref": "J_LCD",
          "pin": 8,
          "net": "V3V3"
        },
        {
          "ref": "J_LCD",
          "pin": 9,
          "net": "GND"
        },
        {
          "ref": "J_LCD",
          "pin": 10,
          "net": "GND"
        },
        {
          "ref": "U1",
          "pin": 30,
          "net": "LCD_BL"
        },
        {
          "ref": "U1",
          "pin": 31,
          "net": "LCD_DC"
        },
        {
          "ref": "U1",
          "pin": 32,
          "net": "LCD_RST"
        },
        {
          "ref": "U1",
          "pin": 37,
          "net": "LCD_CS"
        },
        {
          "ref": "U1",
          "pin": 38,
          "net": "LCD_CLK"
        },
        {
          "ref": "U1",
          "pin": 39,
          "net": "LCD_DIN"
        },
        {
          "ref": "U1",
          "pin": 40,
          "net": "BAT_SENSE"
        },
        {
          "ref": "U1",
          "pin": 6,
          "net": "SD_MISO"
        },
        {
          "ref": "U1",
          "pin": 7,
          "net": "SD_CS"
        },
        {
          "ref": "U1",
          "pin": 8,
          "net": "SD_CLK"
        },
        {
          "ref": "U1",
          "pin": 9,
          "net": "SD_MOSI"
        },
        {
          "ref": "J_BAT",
          "pin": 1,
          "net": "GND"
        },
        {
          "ref": "J_BAT",
          "pin": 2,
          "net": "VBAT"
        },
        {
          "ref": "U_CHG",
          "pin": 2,
          "net": "GND"
        },
        {
          "ref": "U_CHG",
          "pin": 3,
          "net": "VBAT"
        },
        {
          "ref": "U_CHG",
          "pin": 4,
          "net": "VBUS"
        },
        {
          "ref": "U_CHG",
          "pin": 5,
          "net": "CHG_PROG"
        },
        {
          "ref": "J_USB",
          "pin": 15,
          "net": "VBUS"
        },
        {
          "ref": "J_USB",
          "pin": 16,
          "net": "VBUS"
        },
        {
          "ref": "R_PROG",
          "pin": 1,
          "net": "CHG_PROG"
        },
        {
          "ref": "R_PROG",
          "pin": 2,
          "net": "GND"
        }
      ]
    },
    "enclosureGeometry": {
      "checks": "passed",
      "intersectionVolumesMm3": {
        "baseLidOverlap": 0,
        "oledLidOverlap": 0,
        "oledBaseOverlap": 0,
        "oledPcbOverlap": 0,
        "pcbBaseOverlap": 0,
        "pcbLidOverlap": 0,
        "SELECTPressedLidOverlap": 0,
        "SELECTPressedBaseOverlap": 0,
        "SELECTLidOverlap": 0,
        "SELECTBaseOverlap": 0,
        "PREVPressedLidOverlap": 0,
        "PREVPressedBaseOverlap": 0,
        "PREVLidOverlap": 0,
        "PREVBaseOverlap": 0,
        "NEXTPressedLidOverlap": 0,
        "NEXTPressedBaseOverlap": 0,
        "NEXTLidOverlap": 0,
        "NEXTBaseOverlap": 0,
        "MENUPressedLidOverlap": 0,
        "MENUPressedBaseOverlap": 0,
        "MENULidOverlap": 0,
        "MENUBaseOverlap": 0,
        "PLAY_PAUSEPressedLidOverlap": 0,
        "PLAY_PAUSEPressedBaseOverlap": 0,
        "PLAY_PAUSELidOverlap": 0,
        "PLAY_PAUSEBaseOverlap": 0,
        "SELECTPREVOverlap": 0,
        "SELECTNEXTOverlap": 0,
        "SELECTMENUOverlap": 0,
        "SELECTPLAY_PAUSEOverlap": 0,
        "PREVNEXTOverlap": 0,
        "PREVMENUOverlap": 0,
        "PREVPLAY_PAUSEOverlap": 0,
        "NEXTMENUOverlap": 0,
        "NEXTPLAY_PAUSEOverlap": 0,
        "MENUPLAY_PAUSEOverlap": 0,
        "batteryBaseOverlap": 0,
        "batteryPcbOverlap": 0,
        "plusWirePcbOverlap": 0,
        "plusWireBaseOverlap": 0,
        "plusWireLidOverlap": 0,
        "plusWirePressedSELECTOverlap": 0,
        "plusWirePressedPREVOverlap": 0,
        "plusWirePressedNEXTOverlap": 0,
        "plusWirePressedMENUOverlap": 0,
        "plusWirePressedPLAY_PAUSEOverlap": 0,
        "minusWirePcbOverlap": 0,
        "minusWireBaseOverlap": 0,
        "minusWireLidOverlap": 0,
        "minusWirePressedSELECTOverlap": 0,
        "minusWirePressedPREVOverlap": 0,
        "minusWirePressedNEXTOverlap": 0,
        "minusWirePressedMENUOverlap": 0,
        "minusWirePressedPLAY_PAUSEOverlap": 0,
        "batteryPlugLidOverlap": 0,
        "batteryPlugPressedSELECTOverlap": 0,
        "batteryPlugPressedPREVOverlap": 0,
        "batteryPlugPressedNEXTOverlap": 0,
        "batteryPlugPressedMENUOverlap": 0,
        "batteryPlugPressedPLAY_PAUSEOverlap": 0,
        "lcdPlugLidOverlap": 0,
        "lcdPlugScreenOverlap": 0,
        "lcdPlugPressedSELECTOverlap": 0,
        "lcdPlugPressedPREVOverlap": 0,
        "lcdPlugPressedNEXTOverlap": 0,
        "lcdPlugPressedMENUOverlap": 0,
        "lcdPlugPressedPLAY_PAUSEOverlap": 0
      },
      "mountingHoles": [
        [
          -26,
          -41
        ],
        [
          -26,
          41
        ],
        [
          26,
          -41
        ],
        [
          26,
          41
        ]
      ],
      "oledMounts": [
        [
          -22.8,
          6.3500000000000005
        ],
        [
          -22.8,
          28.05
        ],
        [
          22.8,
          6.3500000000000005
        ],
        [
          22.8,
          28.05
        ]
      ],
      "oledDimensions": {
        "width": 51.2,
        "height": 27.3,
        "boardBottomZ": 6.5,
        "boardTopZ": 8.1,
        "faceZ": 10,
        "activeWidth": 42.72,
        "activeHeight": 22.7,
        "modelBottomZ": 3,
        "manufacturer": "Waveshare 1.9inch LCD Module"
      },
      "bodySizeMm": [
        64,
        110,
        18.1
      ],
      "caseDimensions": {
        "width": 64,
        "height": 110,
        "centerY": -7,
        "floorZ": -7.5,
        "floorThickness": 1,
        "pcbBottomZ": -0.8,
        "seamZ": 7.4,
        "lidBottomZ": 9.4,
        "lidTopZ": 10.6,
        "wallThickness": 1.5,
        "lipClearance": 0.3,
        "displayWindow": {
          "x": 0,
          "y": 17.2,
          "width": 43.72,
          "height": 23.7
        }
      },
      "pcbClearancePerSideMm": 0.5,
      "lipClearancePerSideMm": 0.3,
      "buttonGuideRadialClearanceMm": 0.3,
      "buttonRestGapMm": 0.25,
      "checkedButtonTravelMm": 0.45,
      "batteryDimensions": {
        "width": 29,
        "height": 36,
        "thickness": 4.75,
        "center": [
          0,
          -29,
          -3.5
        ],
        "capacityMah": 500,
        "nominalVoltage": 3.7,
        "supplier": "Adafruit 1578",
        "chargeCurrentMa": 100
      },
      "notes": "Digital geometry checks use the Waveshare 1.9-inch manufacturer CAD and a conservative module/socket envelope. Purchased hardware, the crimp harness, screws and printing tolerances still require physical fit testing."
    },
    "printedMesh": [
      {
        "file": "case-base.stl",
        "triangles": 7008,
        "nonManifoldEdges": 0,
        "inconsistentWindingEdges": 0,
        "surfaceComponents": 1
      },
      {
        "file": "case-lid.stl",
        "triangles": 4196,
        "nonManifoldEdges": 0,
        "inconsistentWindingEdges": 0,
        "surfaceComponents": 1
      },
      {
        "file": "button-plunger.stl",
        "triangles": 840,
        "nonManifoldEdges": 0,
        "inconsistentWindingEdges": 0,
        "surfaceComponents": 1
      },
      {
        "file": "ring-button.stl",
        "triangles": 1022,
        "nonManifoldEdges": 0,
        "inconsistentWindingEdges": 0,
        "surfaceComponents": 1
      }
    ],
    "realDisplayMesh": {
      "status": "passed",
      "manufacturerMeshesChecked": 49,
      "results": "dist/enclosure/lcd-hardware-fit.json"
    },
    "unchangedPcbComparedWith": "v1.0.11: physical PCB records and electrical connectivity match; existing four-layer short checks retained",
    "lcdPopulatedBodyFit": {
      "status": "passed",
      "modeledPcbBodiesChecked": 21,
      "results": "dist/enclosure/lcd-pcb-fit.json",
      "scope": "Actual supplied body geometry; unmodeled bodies and fasteners require prototype checks"
    },
    "warningCleanup": {
      "pcbGeometryUnchanged": true,
      "matchedGeometryRecordTypes": [
        "pcb_component",
        "pcb_board",
        "pcb_smtpad",
        "pcb_solder_paste",
        "pcb_silkscreen_path",
        "pcb_silkscreen_circle",
        "pcb_silkscreen_text",
        "pcb_courtyard_outline",
        "pcb_fabrication_note_path",
        "pcb_courtyard_rect",
        "pcb_hole",
        "pcb_plated_hole",
        "pcb_port",
        "pcb_fabrication_note_text",
        "pcb_trace",
        "pcb_copper_pour",
        "pcb_via"
      ],
      "electricalConnectivityUnchanged": true,
      "baseline": "v1.0.11",
      "warnings": 0,
      "errors": 0,
      "schematicPages": 8,
      "geometryComparisonOmissions": [
        "Generated IDs",
        "supplier_pin1_location_map (JLCPCB to LCSC)",
        "cable_insertion_center (new connector metadata)"
      ],
      "bom": "J_LCD and J_PWR annotated as LCSC/manual solder; omitted from JLC pick-and-place"
    },
    "cadModelsUnchanged": {
      "comparedWith": "v1.0.11",
      "modeledComponents": 114,
      "status": "passed; models and placements match"
    }
  },
  "display": {
    "supplier": "Waveshare 1.9inch LCD Module",
    "controller": "ST7789V2",
    "pixels": [
      170,
      320
    ],
    "landscapePixels": [
      320,
      170
    ],
    "moduleMm": [
      51.2,
      27.3
    ],
    "activeMm": [
      42.72,
      22.7
    ],
    "connector": "JST BM08B-GHS-TBT(LF)(SN), GH 1.25mm, 8 contacts",
    "cable": "GHR-08V-S to GHR-08V-S; match numbered contacts",
    "matedHeightAbovePcbMm": 7.3,
    "bus": "SPI1, 3.3V logic/power",
    "pinOrder": [
      "BL",
      "RST",
      "DC",
      "CS",
      "SCK",
      "MOSI",
      "GND",
      "3V3"
    ],
    "manufacturerModel": "assets/waveshare-1.9inch-lcd.stp",
    "modelVerifiedAgainstCase": true,
    "staticMenuPreview": true,
    "sources": [
      "https://www.waveshare.com/wiki/1.9inch_LCD_Module",
      "https://files.waveshare.com/upload/7/7f/1.9inch_LCD_Module.pdf",
      "https://www.jst.com/wp-content/uploads/2021/08/eGH-new.pdf"
    ]
  },
  "battery": {
    "supplier": "Adafruit 1578",
    "protected": true,
    "nominalVoltage": 3.7,
    "capacityMah": 500,
    "sizeMm": [
      29,
      36,
      4.75
    ],
    "positionMm": [
      0,
      -29,
      -3.5
    ],
    "connector": "JST B2B-PH-K-S(LF)(SN), pin 1 GND; pin 2 VBAT",
    "charger": "USB-C VBUS to MCP73831-2 to VBAT; no direct USB-to-cell connection",
    "chargeCurrentMaNominal": 100,
    "rProgOhms": 10000
  },
  "enclosure": {
    "bodyMm": [
      64,
      110,
      18.1
    ],
    "wallMm": 1.5,
    "lcdWindowMm": [
      43.72,
      23.7
    ],
    "connectorsCheckedAtMatedHeight": true,
    "floorMm": 1,
    "frontMm": 1.2,
    "screenCenterMm": [
      0,
      17.2
    ]
  },
  "usbPair": {
    "dmLengthMm": 6.915622425179642,
    "dpLengthMm": 7.164150562375762,
    "skewMm": 0.24852813719612055,
    "maximumSkewMm": 0.5,
    "controlledImpedanceVerified": false
  },
  "crystalInput": {
    "lengthMm": 9.869860056670976,
    "maximumLengthMm": 10,
    "vias": 0
  },
  "limitations": {
    "firmwareIncluded": false,
    "hardwareTested": false,
    "physicalFitTested": false,
    "unverifiedPlacementRotations": [
      "L1",
      "J_AUX"
    ],
    "inductorManualSourcing": true,
    "supplierAvailability": "J_LCD C133062 and J_PWR C492401 are separately purchased LCSC/manual-solder parts because the JLC search index returns no record. Purchase-time stock is not certified."
  },
  "routing": {
    "signature": "7d470a40",
    "localCopperRefinements": "routing/refinement-notes.json",
    "nativeErrorsAfterRefinement": 0
  },
  "publication": {
    "version": "1.0.12",
    "status": "published; local and cloud builds passed",
    "packageReleaseId": "a3d7fc37-f1b7-4951-b34b-b5867fe6c763",
    "url": "https://tscircuit.com/Devesh36/pocket-audio-player#3d",
    "uploadedFileCount": 90,
    "cloudJobCompletedAt": "2026-10-11T17:09:07.804Z",
    "cloudScriptExitCode": 0,
    "releaseCircuitAndSourceVerification": {
      "version": "1.0.12",
      "packageReleaseId": "a3d7fc37-f1b7-4951-b34b-b5867fe6c763",
      "cloudPcbErrorRecords": 0,
      "slimMechanicalModelsMatch": true,
      "matchedModels": [
        "CASE_BASE",
        "CASE_LID",
        "BUTTON_SELECT",
        "BUTTON_MENU",
        "BUTTON_PREV",
        "BUTTON_NEXT",
        "BUTTON_PLAY_PAUSE",
        "CONTROL_LEGENDS",
        "BATTERY_FOIL",
        "BATTERY_PROTECTION_CAP",
        "J_BAT",
        "LCD_GH_CABLE_PLUG"
      ],
      "bodyMm": [
        64,
        110,
        18.1
      ],
      "realLcdAssetMatches": true,
      "cloudArtifactUrl": "https://devesh36--pocket-audio-player-v1-0-12.tscircuit.app/index/circuit.json",
      "cloudWarnings": 0,
      "displayAndPowerConnections": 31,
      "sourceFilesMatch": [
        "audio-player-board.tsx",
        "enclosure.tsx",
        "oled-model.ts",
        "routing/candidate.json",
        "README.md"
      ]
    },
    "localCircuitAdvisoryWarnings": 0,
    "cloudCircuitAdvisoryWarnings": 0
  },
  "sha256": {
    "index.circuit.tsx": "ee4687af2b5e34c7639f45ca525fbd374d6b4df84ace1f890ed6c4cf2ae4b988",
    "audio-player-board.tsx": "3efae53b043930cad59291694cb26ff0eb67b51d20c0868fda916ae973b189b8",
    "board-router.ts": "73c52a233e994664bdf82e0980442b11e03394b7ccd9f5b4e49583b15dc196b4",
    "fresh-router.ts": "9f59b1c6ce6d83b0b3cbe4109d8b2dafd4d3de8fb1f7d5db2186a8c4e49b4598",
    "routing/candidate.json": "852bbd1581ebbbdbf4448aafce3a058b0bb6f3f8ebc26852e6bc23152fd0ef2b",
    "dist/index/circuit.json": "c78d7579cd497576439027cc0e9418df9e240da37bdbedb20da4fbc26da1d094",
    "dist/index/audio-player-fabrication.zip": "53f4bebb928a5209c3e9815c3880a29cb4c275d6660d07fa8d254c13d003654e",
    "enclosure.tsx": "f364c82cef0e817029bae40450679d2cc0713905532ec1518341736d8688c412",
    "oled-model.ts": "6a208c0bfda0f90ed92b0dcd27cf9033041040753415b261b4bfe6edc20232d7",
    "lcd-model-plan.json": "8d9498bc7073562bd8199817b7f2370aadd73f5a7281c42a68f681010465f4ac",
    "assets/waveshare-1.9inch-lcd.stp": "b0f1c0cf83221b95561fa0bdede212159476f65140dc4795f81c9ce45b7e6ca5"
  }
}