Compare commits

...

5 Commits

Author SHA1 Message Date
Martin Linkwitz - NUC
f8547c9ff3 audio tryout 2026-05-17 15:11:32 +02:00
Martin Linkwitz - NUC
75672d4ec4 Add ESP32-C3 Opus loopback example 2026-04-08 16:32:11 +02:00
Martin Linkwitz - NUC
3551b073d7 Add embedded MP3 playback test sketch 2026-04-08 16:30:34 +02:00
Martin Linkwitz - NUC
1047fa70a0 added arbeitsplatte 2026-04-04 19:04:04 +02:00
Martin Linkwitz - NUC
c7adbcd1c7 Initial commit 2026-04-04 12:43:12 +02:00
119 changed files with 314387 additions and 33932 deletions

154
Belegung Schütze.txt Normal file
View File

@@ -0,0 +1,154 @@
# Belegung Schütze
# Ids
* SW_FLUR = 0XD238
* SW_ANBAU = 0x87A9
* SW_WOHNZIMMER = 0x87CA
* UP_WOHNZIMMER_TUER = 0x051F
* UP_WOHNZIMMER_TERASSE = 0x05df
* UP_FLUR_EINGANG = 0x0769
* UP_BUERO = 0x1177
* UP_FLUR_BUERO = 0x05A1
* UP_FLUR_KUECHE = 0x01EF
* UP_KINDERZIMMER = 0x0196
* UP_FLUR_ELTERN = 0x0632
* UP_ELTERN = 0x08AE
* UP_KUECHE_FLUR = 0x07F5
* UP_KUECHE_BAD = 0x0585
## Offene Ideen
1. Stromzähler anzapfen und Messen
2. Gartenbeleuchtung -> 2tes Schütz im Garten
3. Klingel einbinden -> ebenfalls oben klingeln können
4. Tür von oben öffnen können.
4. Audio-Streaming
5. Garage -> Auto da, Garagentür
6. Küchenlicht an Arbeitsplatte
7. Küchenlicht von Küchentisch?
8. Automatischer Öffner Türe oben
9. Temperatursensoren einbinden in jeden Raum
## Wohnzimmer
1. Garten
2. Flur1 am Büro
3. Büro
4. Nachtlicht Vögel
5. Wohnzimmer1
6. Wohnzimmer2
7. Rollo Runter Wohnzimmer
8. Rollo Hoch Wohnzimmer
## Flur
1. ---
2. Licht Schlafzimmer
3. Licht Linus
4. Rollo hoch Linus
5. Rollo runter Linus
6. Flur2 am Eingang
## Anbau
1. Kabüffchen
2. Unterlicht Küche
3. Licht Küche
4. Badezimmer
# Unterputz IDs
## Linus Zimmer
Id: 0x0196
Belegung:
|---+---| |-------|
| 3 | 4 |--| 8 |
|---+---| |-------|
| 4 | 1 |
|---+---|
| 7 |
|-------|
# Wohnzimmer Türe
Id: 0x051F
|-------|
| - |
+---+---|
| 3 | 2 |
|---+---|
| 1 |
|---+---|
| O O |
+-------+
## Küche Badezimmer
Id: 0x0585
Belegung:
|---+---| |-------|
| 1 |--| 3 |
|---+---| |-------|
| 2 |
|---+---|
| O O |
|-------|+
## Küche Flur
Id: 0x07F5
Belegung:
|---+---|
| 1 |
|---+---|
| 2 |
|---+---|
| |
|-------|
## Flur eingang
Id: 0x0769
Belegung:
|---+---|
| 1 |
|---+---|
| 2 |
|---+---|
| |
|-------|
## Büro
Id: 0x1177
Belegung:
|---+---|
| 1 |
|---+---|
## Flur-Büro
Id: 0x05A1
Belegung:
|---+---|
| 1 |
|---+---|
## Flur-Küche
Id: 0x01EF
Belegung:
|---+---|
| 1 |
|---+---|

View File

@@ -0,0 +1,2 @@
(kicad_pcb (version 20211014) (generator pcbnew)
)

View File

@@ -0,0 +1,130 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"shapes": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
"vias",
"footprint_text",
"footprint_anchors",
"ratsnest",
"grid",
"footprints_front",
"footprints_back",
"footprint_values",
"footprint_references",
"tracks",
"drc_errors",
"drawing_sheet",
"bitmaps",
"pads",
"zones",
"drc_warnings",
"locked_item_shadows",
"conflict_shadows",
"shapes"
],
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "MeyCan2025l.kicad_prl",
"version": 5
},
"net_inspector_panel": {
"col_hidden": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"col_order": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
],
"col_widths": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"custom_group_rules": [],
"expanded_rows": [],
"filter_by_net_name": true,
"filter_by_netclass": true,
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
"sorting_column": 0
},
"open_jobsets": [],
"project": {
"files": []
},
"schematic": {
"selection_filter": {
"graphics": true,
"images": true,
"labels": true,
"lockedItems": false,
"otherItems": true,
"pins": true,
"symbols": true,
"text": true,
"wires": true
}
}
}

View File

@@ -0,0 +1,424 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.1,
"copper_line_width": 0.2,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"other_line_width": 0.15,
"silk_line_width": 0.15,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"rules": {
"min_copper_edge_clearance": 0.0,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0
},
"track_widths": [],
"via_dimensions": []
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
"lib_symbol_mismatch": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"same_local_global_label": "warning",
"similar_label_and_power": "warning",
"similar_labels": "warning",
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "MeyCan2025l.kicad_pro",
"version": 3
},
"net_settings": {
"classes": [
{
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4
}
],
"meta": {
"version": 4
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": true,
"label": "Exclude from BOM",
"name": "${EXCLUDE_FROM_BOM}",
"show": true
},
{
"group_by": true,
"label": "Exclude from Board",
"name": "${EXCLUDE_FROM_BOARD}",
"show": true
},
{
"group_by": true,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"include_excluded_from_bom": true,
"name": "Default Editing",
"sort_asc": true,
"sort_field": "Referenz"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [],
"text_variables": {}
}

View File

@@ -0,0 +1,5 @@
(kicad_sch (version 20211123) (generator eeschema)
(paper "A4")
(lib_symbols)
(symbol_instances)
)

File diff suppressed because it is too large Load Diff

View File

@@ -1,209 +1,209 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L2,Bot*% %TF.FileFunction,Copper,L2,Bot*%
%TF.FilePolarity,Positive*% %TF.FilePolarity,Positive*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD10C,2.400000*% %ADD10C,2.400000*%
%TD*% %TD*%
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD11R,2.400000X2.400000*% %ADD11R,2.400000X2.400000*%
%TD*% %TD*%
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD12R,1.600000X1.600000*% %ADD12R,1.600000X1.600000*%
%TD*% %TD*%
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD13O,1.600000X1.600000*% %ADD13O,1.600000X1.600000*%
%TD*% %TD*%
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD14C,1.600000*% %ADD14C,1.600000*%
%TD*% %TD*%
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD15R,1.000000X1.000000*% %ADD15R,1.000000X1.000000*%
%TD*% %TD*%
%TA.AperFunction,ComponentPad*% %TA.AperFunction,ComponentPad*%
%ADD16O,1.000000X1.000000*% %ADD16O,1.000000X1.000000*%
%TD*% %TD*%
%TA.AperFunction,Conductor*% %TA.AperFunction,Conductor*%
%ADD17C,0.250000*% %ADD17C,0.250000*%
%TD*% %TD*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
%TO.P,J1,4,Pin_4*% %TO.P,J1,4,Pin_4*%
%TO.N,Net-(J1-Pad4)*% %TO.N,Net-(J1-Pad4)*%
X116220000Y-100900000D03* X116220000Y-100900000D03*
%TO.P,J1,3,Pin_3*% %TO.P,J1,3,Pin_3*%
%TO.N,Net-(J1-Pad3)*% %TO.N,Net-(J1-Pad3)*%
X112720000Y-100900000D03* X112720000Y-100900000D03*
%TO.P,J1,2,Pin_2*% %TO.P,J1,2,Pin_2*%
%TO.N,+5V*% %TO.N,+5V*%
X109220000Y-100900000D03* X109220000Y-100900000D03*
D11* D11*
%TO.P,J1,1,Pin_1*% %TO.P,J1,1,Pin_1*%
%TO.N,GNDREF*% %TO.N,GNDREF*%
X105720000Y-100900000D03* X105720000Y-100900000D03*
%TD*% %TD*%
D12* D12*
%TO.P,A1,1,D1/TX*% %TO.P,A1,1,D1/TX*%
%TO.N,unconnected-(A1-Pad1)*% %TO.N,unconnected-(A1-Pad1)*%
X87630000Y-83810000D03* X87630000Y-83810000D03*
D13* D13*
%TO.P,A1,2,D0/RX*% %TO.P,A1,2,D0/RX*%
%TO.N,unconnected-(A1-Pad2)*% %TO.N,unconnected-(A1-Pad2)*%
X90170000Y-83810000D03* X90170000Y-83810000D03*
%TO.P,A1,3,~{RESET}*% %TO.P,A1,3,~{RESET}*%
%TO.N,unconnected-(A1-Pad3)*% %TO.N,unconnected-(A1-Pad3)*%
X92710000Y-83810000D03* X92710000Y-83810000D03*
%TO.P,A1,4,GND*% %TO.P,A1,4,GND*%
%TO.N,GNDREF*% %TO.N,GNDREF*%
X95250000Y-83810000D03* X95250000Y-83810000D03*
%TO.P,A1,5,D2*% %TO.P,A1,5,D2*%
%TO.N,unconnected-(A1-Pad5)*% %TO.N,unconnected-(A1-Pad5)*%
X97790000Y-83810000D03* X97790000Y-83810000D03*
%TO.P,A1,6,D3*% %TO.P,A1,6,D3*%
%TO.N,unconnected-(A1-Pad6)*% %TO.N,unconnected-(A1-Pad6)*%
X100330000Y-83810000D03* X100330000Y-83810000D03*
%TO.P,A1,7,D4*% %TO.P,A1,7,D4*%
%TO.N,unconnected-(A1-Pad7)*% %TO.N,unconnected-(A1-Pad7)*%
X102870000Y-83810000D03* X102870000Y-83810000D03*
%TO.P,A1,8,D5*% %TO.P,A1,8,D5*%
%TO.N,unconnected-(A1-Pad8)*% %TO.N,unconnected-(A1-Pad8)*%
X105410000Y-83810000D03* X105410000Y-83810000D03*
%TO.P,A1,9,D6*% %TO.P,A1,9,D6*%
%TO.N,unconnected-(A1-Pad9)*% %TO.N,unconnected-(A1-Pad9)*%
X107950000Y-83810000D03* X107950000Y-83810000D03*
%TO.P,A1,10,D7*% %TO.P,A1,10,D7*%
%TO.N,unconnected-(A1-Pad10)*% %TO.N,unconnected-(A1-Pad10)*%
X110490000Y-83810000D03* X110490000Y-83810000D03*
%TO.P,A1,11,D8*% %TO.P,A1,11,D8*%
%TO.N,unconnected-(A1-Pad11)*% %TO.N,unconnected-(A1-Pad11)*%
X113030000Y-83810000D03* X113030000Y-83810000D03*
%TO.P,A1,12,D9*% %TO.P,A1,12,D9*%
%TO.N,unconnected-(A1-Pad12)*% %TO.N,unconnected-(A1-Pad12)*%
X115570000Y-83810000D03* X115570000Y-83810000D03*
%TO.P,A1,13,D10*% %TO.P,A1,13,D10*%
%TO.N,Net-(A1-Pad13)*% %TO.N,Net-(A1-Pad13)*%
X118110000Y-83810000D03* X118110000Y-83810000D03*
%TO.P,A1,14,D11*% %TO.P,A1,14,D11*%
%TO.N,Net-(A1-Pad14)*% %TO.N,Net-(A1-Pad14)*%
X120650000Y-83810000D03* X120650000Y-83810000D03*
%TO.P,A1,15,D12*% %TO.P,A1,15,D12*%
%TO.N,Net-(A1-Pad15)*% %TO.N,Net-(A1-Pad15)*%
X123190000Y-83810000D03* X123190000Y-83810000D03*
%TO.P,A1,16,D13*% %TO.P,A1,16,D13*%
%TO.N,Net-(A1-Pad16)*% %TO.N,Net-(A1-Pad16)*%
X123190000Y-68570000D03* X123190000Y-68570000D03*
%TO.P,A1,17,3V3*% %TO.P,A1,17,3V3*%
%TO.N,unconnected-(A1-Pad17)*% %TO.N,unconnected-(A1-Pad17)*%
X120650000Y-68570000D03* X120650000Y-68570000D03*
%TO.P,A1,18,AREF*% %TO.P,A1,18,AREF*%
%TO.N,unconnected-(A1-Pad18)*% %TO.N,unconnected-(A1-Pad18)*%
X118110000Y-68570000D03* X118110000Y-68570000D03*
%TO.P,A1,19,A0*% %TO.P,A1,19,A0*%
%TO.N,unconnected-(A1-Pad19)*% %TO.N,unconnected-(A1-Pad19)*%
X115570000Y-68570000D03* X115570000Y-68570000D03*
%TO.P,A1,20,A1*% %TO.P,A1,20,A1*%
%TO.N,unconnected-(A1-Pad20)*% %TO.N,unconnected-(A1-Pad20)*%
X113030000Y-68570000D03* X113030000Y-68570000D03*
%TO.P,A1,21,A2*% %TO.P,A1,21,A2*%
%TO.N,unconnected-(A1-Pad21)*% %TO.N,unconnected-(A1-Pad21)*%
X110490000Y-68570000D03* X110490000Y-68570000D03*
%TO.P,A1,22,A3*% %TO.P,A1,22,A3*%
%TO.N,unconnected-(A1-Pad22)*% %TO.N,unconnected-(A1-Pad22)*%
X107950000Y-68570000D03* X107950000Y-68570000D03*
%TO.P,A1,23,A4*% %TO.P,A1,23,A4*%
%TO.N,unconnected-(A1-Pad23)*% %TO.N,unconnected-(A1-Pad23)*%
X105410000Y-68570000D03* X105410000Y-68570000D03*
%TO.P,A1,24,A5*% %TO.P,A1,24,A5*%
%TO.N,unconnected-(A1-Pad24)*% %TO.N,unconnected-(A1-Pad24)*%
X102870000Y-68570000D03* X102870000Y-68570000D03*
%TO.P,A1,25,A6*% %TO.P,A1,25,A6*%
%TO.N,unconnected-(A1-Pad25)*% %TO.N,unconnected-(A1-Pad25)*%
X100330000Y-68570000D03* X100330000Y-68570000D03*
%TO.P,A1,26,A7*% %TO.P,A1,26,A7*%
%TO.N,unconnected-(A1-Pad26)*% %TO.N,unconnected-(A1-Pad26)*%
X97790000Y-68570000D03* X97790000Y-68570000D03*
%TO.P,A1,27,+5V*% %TO.P,A1,27,+5V*%
%TO.N,Net-(A1-Pad27)*% %TO.N,Net-(A1-Pad27)*%
X95250000Y-68570000D03* X95250000Y-68570000D03*
%TO.P,A1,28,~{RESET}*% %TO.P,A1,28,~{RESET}*%
%TO.N,unconnected-(A1-Pad28)*% %TO.N,unconnected-(A1-Pad28)*%
X92710000Y-68570000D03* X92710000Y-68570000D03*
%TO.P,A1,29,GND*% %TO.P,A1,29,GND*%
%TO.N,GNDREF*% %TO.N,GNDREF*%
X90170000Y-68570000D03* X90170000Y-68570000D03*
%TO.P,A1,30,VIN*% %TO.P,A1,30,VIN*%
%TO.N,unconnected-(A1-Pad30)*% %TO.N,unconnected-(A1-Pad30)*%
X87630000Y-68570000D03* X87630000Y-68570000D03*
%TD*% %TD*%
D12* D12*
%TO.P,C1,1*% %TO.P,C1,1*%
%TO.N,GNDREF*% %TO.N,GNDREF*%
X91440000Y-93980000D03* X91440000Y-93980000D03*
D14* D14*
%TO.P,C1,2*% %TO.P,C1,2*%
%TO.N,Net-(C1-Pad2)*% %TO.N,Net-(C1-Pad2)*%
X93940000Y-93980000D03* X93940000Y-93980000D03*
%TD*% %TD*%
D15* D15*
%TO.P,JP1,1,A*% %TO.P,JP1,1,A*%
%TO.N,Net-(J1-Pad4)*% %TO.N,Net-(J1-Pad4)*%
X96520000Y-99060000D03* X96520000Y-99060000D03*
D16* D16*
%TO.P,JP1,2,B*% %TO.P,JP1,2,B*%
%TO.N,Net-(JP1-Pad2)*% %TO.N,Net-(JP1-Pad2)*%
X96520000Y-97790000D03* X96520000Y-97790000D03*
%TD*% %TD*%
D12* D12*
%TO.P,C2,1*% %TO.P,C2,1*%
%TO.N,GNDREF*% %TO.N,GNDREF*%
X94020000Y-88900000D03* X94020000Y-88900000D03*
D14* D14*
%TO.P,C2,2*% %TO.P,C2,2*%
%TO.N,Net-(C2-Pad2)*% %TO.N,Net-(C2-Pad2)*%
X96520000Y-88900000D03* X96520000Y-88900000D03*
%TD*% %TD*%
D17* D17*
%TO.N,Net-(A1-Pad27)*% %TO.N,Net-(A1-Pad27)*%
X117555311Y-91440000D02* X117555311Y-91440000D02*
X120650000Y-94534689D01* X120650000Y-94534689D01*
X120650000Y-94534689D02* X120650000Y-94534689D02*
X120650000Y-99060000D01* X120650000Y-99060000D01*
X106680000Y-88900000D02* X106680000Y-88900000D02*
X109220000Y-91440000D01* X109220000Y-91440000D01*
X109220000Y-91440000D02* X109220000Y-91440000D02*
X117555311Y-91440000D01* X117555311Y-91440000D01*
X106690000Y-88890000D02* X106690000Y-88890000D02*
X106680000Y-88900000D01* X106680000Y-88900000D01*
X106690000Y-87645000D02* X106690000Y-87645000D02*
X106690000Y-88890000D01* X106690000Y-88890000D01*
X105425000Y-87645000D02* X105425000Y-87645000D02*
X106690000Y-87645000D01* X106690000Y-87645000D01*
X104140000Y-86360000D02* X104140000Y-86360000D02*
X105425000Y-87645000D01* X105425000Y-87645000D01*
X99060000Y-86360000D02* X99060000Y-86360000D02*
X104140000Y-86360000D01* X104140000Y-86360000D01*
X97780000Y-87640000D02* X97780000Y-87640000D02*
X99060000Y-86360000D01* X99060000Y-86360000D01*
X97780000Y-93985000D02* X97780000Y-93985000D02*
X97780000Y-87640000D01* X97780000Y-87640000D01*
X106690000Y-80010000D02* X106690000Y-80010000D02*
X106690000Y-87645000D01* X106690000Y-87645000D01*
X95250000Y-68570000D02* X95250000Y-68570000D02*
X106690000Y-80010000D01* X106690000Y-80010000D01*
X99060000Y-63500000D02* X99060000Y-63500000D02*
X101600000Y-63500000D01* X101600000Y-63500000D01*
X95250000Y-67310000D02* X95250000Y-67310000D02*
X99060000Y-63500000D01* X99060000Y-63500000D01*
X95250000Y-68570000D02* X95250000Y-68570000D02*
X95250000Y-67310000D01* X95250000Y-67310000D01*
%TD*% %TD*%
M02* M02*

View File

@@ -1,87 +1,87 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*% %TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*% %TF.FilePolarity,Negative*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
%ADD10C,2.100000*% %ADD10C,2.100000*%
%ADD11C,2.400000*% %ADD11C,2.400000*%
%ADD12R,2.400000X2.400000*% %ADD12R,2.400000X2.400000*%
%ADD13R,1.600000X1.600000*% %ADD13R,1.600000X1.600000*%
%ADD14O,1.600000X1.600000*% %ADD14O,1.600000X1.600000*%
%ADD15C,1.600000*% %ADD15C,1.600000*%
%ADD16R,1.000000X1.000000*% %ADD16R,1.000000X1.000000*%
%ADD17O,1.000000X1.000000*% %ADD17O,1.000000X1.000000*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
%TO.C,REF\u002A\u002A*% %TO.C,REF\u002A\u002A*%
X109220000Y-58420000D03* X109220000Y-58420000D03*
%TD*% %TD*%
D11* D11*
%TO.C,J1*% %TO.C,J1*%
X116220000Y-100900000D03* X116220000Y-100900000D03*
X112720000Y-100900000D03* X112720000Y-100900000D03*
X109220000Y-100900000D03* X109220000Y-100900000D03*
D12* D12*
X105720000Y-100900000D03* X105720000Y-100900000D03*
%TD*% %TD*%
D13* D13*
%TO.C,A1*% %TO.C,A1*%
X87630000Y-83810000D03* X87630000Y-83810000D03*
D14* D14*
X90170000Y-83810000D03* X90170000Y-83810000D03*
X92710000Y-83810000D03* X92710000Y-83810000D03*
X95250000Y-83810000D03* X95250000Y-83810000D03*
X97790000Y-83810000D03* X97790000Y-83810000D03*
X100330000Y-83810000D03* X100330000Y-83810000D03*
X102870000Y-83810000D03* X102870000Y-83810000D03*
X105410000Y-83810000D03* X105410000Y-83810000D03*
X107950000Y-83810000D03* X107950000Y-83810000D03*
X110490000Y-83810000D03* X110490000Y-83810000D03*
X113030000Y-83810000D03* X113030000Y-83810000D03*
X115570000Y-83810000D03* X115570000Y-83810000D03*
X118110000Y-83810000D03* X118110000Y-83810000D03*
X120650000Y-83810000D03* X120650000Y-83810000D03*
X123190000Y-83810000D03* X123190000Y-83810000D03*
X123190000Y-68570000D03* X123190000Y-68570000D03*
X120650000Y-68570000D03* X120650000Y-68570000D03*
X118110000Y-68570000D03* X118110000Y-68570000D03*
X115570000Y-68570000D03* X115570000Y-68570000D03*
X113030000Y-68570000D03* X113030000Y-68570000D03*
X110490000Y-68570000D03* X110490000Y-68570000D03*
X107950000Y-68570000D03* X107950000Y-68570000D03*
X105410000Y-68570000D03* X105410000Y-68570000D03*
X102870000Y-68570000D03* X102870000Y-68570000D03*
X100330000Y-68570000D03* X100330000Y-68570000D03*
X97790000Y-68570000D03* X97790000Y-68570000D03*
X95250000Y-68570000D03* X95250000Y-68570000D03*
X92710000Y-68570000D03* X92710000Y-68570000D03*
X90170000Y-68570000D03* X90170000Y-68570000D03*
X87630000Y-68570000D03* X87630000Y-68570000D03*
%TD*% %TD*%
D13* D13*
%TO.C,C1*% %TO.C,C1*%
X91440000Y-93980000D03* X91440000Y-93980000D03*
D15* D15*
X93940000Y-93980000D03* X93940000Y-93980000D03*
%TD*% %TD*%
D16* D16*
%TO.C,JP1*% %TO.C,JP1*%
X96520000Y-99060000D03* X96520000Y-99060000D03*
D17* D17*
X96520000Y-97790000D03* X96520000Y-97790000D03*
%TD*% %TD*%
D13* D13*
%TO.C,C2*% %TO.C,C2*%
X94020000Y-88900000D03* X94020000Y-88900000D03*
D15* D15*
X96520000Y-88900000D03* X96520000Y-88900000D03*
%TD*% %TD*%
M02* M02*

View File

@@ -1,15 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*% %TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*% %TF.FilePolarity,Positive*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
G04 APERTURE END LIST* G04 APERTURE END LIST*
M02* M02*

View File

@@ -1,71 +1,71 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*% %TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*% %TF.FilePolarity,Positive*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
%ADD10C,0.150000*% %ADD10C,0.150000*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
X124086666Y-63285714D02* X124086666Y-63285714D02*
X123705714Y-63285714D01* X123705714Y-63285714D01*
X123943809Y-62952380D02* X123943809Y-62952380D02*
X123943809Y-63809523D01* X123943809Y-63809523D01*
X123896190Y-63904761D01* X123896190Y-63904761D01*
X123800952Y-63952380D01* X123800952Y-63952380D01*
X123705714Y-63952380D01* X123705714Y-63952380D01*
X122991428Y-63904761D02* X122991428Y-63904761D02*
X123086666Y-63952380D01* X123086666Y-63952380D01*
X123277142Y-63952380D01* X123277142Y-63952380D01*
X123372380Y-63904761D01* X123372380Y-63904761D01*
X123420000Y-63809523D01* X123420000Y-63809523D01*
X123420000Y-63428571D01* X123420000Y-63428571D01*
X123372380Y-63333333D01* X123372380Y-63333333D01*
X123277142Y-63285714D01* X123277142Y-63285714D01*
X123086666Y-63285714D01* X123086666Y-63285714D01*
X122991428Y-63333333D01* X122991428Y-63333333D01*
X122943809Y-63428571D01* X122943809Y-63428571D01*
X122943809Y-63523809D01* X122943809Y-63523809D01*
X123420000Y-63619047D01* X123420000Y-63619047D01*
X122562857Y-63904761D02* X122562857Y-63904761D02*
X122467619Y-63952380D01* X122467619Y-63952380D01*
X122277142Y-63952380D01* X122277142Y-63952380D01*
X122181904Y-63904761D01* X122181904Y-63904761D01*
X122134285Y-63809523D01* X122134285Y-63809523D01*
X122134285Y-63761904D01* X122134285Y-63761904D01*
X122181904Y-63666666D01* X122181904Y-63666666D01*
X122277142Y-63619047D01* X122277142Y-63619047D01*
X122420000Y-63619047D01* X122420000Y-63619047D01*
X122515238Y-63571428D01* X122515238Y-63571428D01*
X122562857Y-63476190D01* X122562857Y-63476190D01*
X122562857Y-63428571D01* X122562857Y-63428571D01*
X122515238Y-63333333D01* X122515238Y-63333333D01*
X122420000Y-63285714D01* X122420000Y-63285714D01*
X122277142Y-63285714D01* X122277142Y-63285714D01*
X122181904Y-63333333D01* X122181904Y-63333333D01*
X121848571Y-63285714D02* X121848571Y-63285714D02*
X121467619Y-63285714D01* X121467619Y-63285714D01*
X121705714Y-62952380D02* X121705714Y-62952380D02*
X121705714Y-63809523D01* X121705714Y-63809523D01*
X121658095Y-63904761D01* X121658095Y-63904761D01*
X121562857Y-63952380D01* X121562857Y-63952380D01*
X121467619Y-63952380D01* X121467619Y-63952380D01*
X120420000Y-63047619D02* X120420000Y-63047619D02*
X120372380Y-63000000D01* X120372380Y-63000000D01*
X120277142Y-62952380D01* X120277142Y-62952380D01*
X120039047Y-62952380D01* X120039047Y-62952380D01*
X119943809Y-63000000D01* X119943809Y-63000000D01*
X119896190Y-63047619D01* X119896190Y-63047619D01*
X119848571Y-63142857D01* X119848571Y-63142857D01*
X119848571Y-63238095D01* X119848571Y-63238095D01*
X119896190Y-63380952D01* X119896190Y-63380952D01*
X120467619Y-63952380D01* X120467619Y-63952380D01*
X119848571Y-63952380D01* X119848571Y-63952380D01*
M02* M02*

View File

@@ -1,37 +1,37 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*% %TF.FileFunction,Profile,NP*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
%TA.AperFunction,Profile*% %TA.AperFunction,Profile*%
%ADD10C,0.100000*% %ADD10C,0.100000*%
%TD*% %TD*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
X119380000Y-60960000D02* X119380000Y-60960000D02*
X124460000Y-60960000D01* X124460000Y-60960000D01*
X119380000Y-58420000D02* X119380000Y-58420000D02*
X119380000Y-60960000D01* X119380000Y-60960000D01*
X134620001Y-81280000D02* X134620001Y-81280000D02*
G75* G75*
G03* G03*
X134620001Y-81280000I-1J0D01* X134620001Y-81280000I-1J0D01*
G01* G01*
X124460001Y-104140000D02* X124460001Y-104140000D02*
G75* G75*
G03* G03*
X124460001Y-104140000I-1J0D01* X124460001Y-104140000I-1J0D01*
G01* G01*
X132619430Y-81280000D02* X132619430Y-81280000D02*
G75* G75*
G03* G03*
X132619430Y-81280000I-25000000J0D01* X132619430Y-81280000I-25000000J0D01*
G01* G01*
M02* M02*

File diff suppressed because it is too large Load Diff

View File

@@ -1,154 +1,154 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*% %TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*% %TF.FilePolarity,Negative*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
G04 Aperture macros list* G04 Aperture macros list*
%AMRoundRect* %AMRoundRect*
0 Rectangle with rounded corners* 0 Rectangle with rounded corners*
0 $1 Rounding radius* 0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body* 0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners* 0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3* 1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5* 1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7* 1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9* 1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners* 0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*% 20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end* G04 Aperture macros list end*
%ADD10C,2.100000*% %ADD10C,2.100000*%
%ADD11R,2.275000X2.200000*% %ADD11R,2.275000X2.200000*%
%ADD12RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*% %ADD12RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
%ADD13R,0.950000X2.800000*% %ADD13R,0.950000X2.800000*%
%ADD14RoundRect,0.100000X-0.100000X-0.200000X0.100000X-0.200000X0.100000X0.200000X-0.100000X0.200000X0*% %ADD14RoundRect,0.100000X-0.100000X-0.200000X0.100000X-0.200000X0.100000X0.200000X-0.100000X0.200000X0*%
%ADD15RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*% %ADD15RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*%
%ADD16RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*% %ADD16RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
%ADD17C,2.400000*% %ADD17C,2.400000*%
%ADD18R,2.400000X2.400000*% %ADD18R,2.400000X2.400000*%
%ADD19R,1.600000X1.600000*% %ADD19R,1.600000X1.600000*%
%ADD20O,1.600000X1.600000*% %ADD20O,1.600000X1.600000*%
%ADD21C,1.600000*% %ADD21C,1.600000*%
%ADD22R,1.000000X1.000000*% %ADD22R,1.000000X1.000000*%
%ADD23O,1.000000X1.000000*% %ADD23O,1.000000X1.000000*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
%TO.C,REF\u002A\u002A*% %TO.C,REF\u002A\u002A*%
X109220000Y-58420000D03* X109220000Y-58420000D03*
%TD*% %TD*%
D11* D11*
%TO.C,Y1*% %TO.C,Y1*%
X114300000Y-88900000D03* X114300000Y-88900000D03*
X109125000Y-88900000D03* X109125000Y-88900000D03*
%TD*% %TD*%
D12* D12*
%TO.C,U3*% %TO.C,U3*%
X122857500Y-100010000D03* X122857500Y-100010000D03*
X122857500Y-98110000D03* X122857500Y-98110000D03*
X120982500Y-99060000D03* X120982500Y-99060000D03*
%TD*% %TD*%
D13* D13*
%TO.C,U2*% %TO.C,U2*%
X124220000Y-88040000D03* X124220000Y-88040000D03*
X122680000Y-88040000D03* X122680000Y-88040000D03*
X121160000Y-88040000D03* X121160000Y-88040000D03*
X119620000Y-88040000D03* X119620000Y-88040000D03*
X119620000Y-94840000D03* X119620000Y-94840000D03*
X121160000Y-94840000D03* X121160000Y-94840000D03*
X122680000Y-94840000D03* X122680000Y-94840000D03*
X124220000Y-94840000D03* X124220000Y-94840000D03*
%TD*% %TD*%
D14* D14*
%TO.C,U1*% %TO.C,U1*%
X110785000Y-95380000D03* X110785000Y-95380000D03*
X111435000Y-95380000D03* X111435000Y-95380000D03*
X112085000Y-95380000D03* X112085000Y-95380000D03*
X112735000Y-95380000D03* X112735000Y-95380000D03*
X112735000Y-92580000D03* X112735000Y-92580000D03*
X112085000Y-92580000D03* X112085000Y-92580000D03*
X111435000Y-92580000D03* X111435000Y-92580000D03*
X110785000Y-92580000D03* X110785000Y-92580000D03*
%TD*% %TD*%
D15* D15*
%TO.C,R2*% %TO.C,R2*%
X99060000Y-102110000D03* X99060000Y-102110000D03*
X99060000Y-101090000D03* X99060000Y-101090000D03*
%TD*% %TD*%
D16* D16*
%TO.C,R1*% %TO.C,R1*%
X101090000Y-63500000D03* X101090000Y-63500000D03*
X102110000Y-63500000D03* X102110000Y-63500000D03*
%TD*% %TD*%
D17* D17*
%TO.C,J1*% %TO.C,J1*%
X116220000Y-100900000D03* X116220000Y-100900000D03*
X112720000Y-100900000D03* X112720000Y-100900000D03*
X109220000Y-100900000D03* X109220000Y-100900000D03*
D18* D18*
X105720000Y-100900000D03* X105720000Y-100900000D03*
%TD*% %TD*%
D19* D19*
%TO.C,A1*% %TO.C,A1*%
X87630000Y-83810000D03* X87630000Y-83810000D03*
D20* D20*
X90170000Y-83810000D03* X90170000Y-83810000D03*
X92710000Y-83810000D03* X92710000Y-83810000D03*
X95250000Y-83810000D03* X95250000Y-83810000D03*
X97790000Y-83810000D03* X97790000Y-83810000D03*
X100330000Y-83810000D03* X100330000Y-83810000D03*
X102870000Y-83810000D03* X102870000Y-83810000D03*
X105410000Y-83810000D03* X105410000Y-83810000D03*
X107950000Y-83810000D03* X107950000Y-83810000D03*
X110490000Y-83810000D03* X110490000Y-83810000D03*
X113030000Y-83810000D03* X113030000Y-83810000D03*
X115570000Y-83810000D03* X115570000Y-83810000D03*
X118110000Y-83810000D03* X118110000Y-83810000D03*
X120650000Y-83810000D03* X120650000Y-83810000D03*
X123190000Y-83810000D03* X123190000Y-83810000D03*
X123190000Y-68570000D03* X123190000Y-68570000D03*
X120650000Y-68570000D03* X120650000Y-68570000D03*
X118110000Y-68570000D03* X118110000Y-68570000D03*
X115570000Y-68570000D03* X115570000Y-68570000D03*
X113030000Y-68570000D03* X113030000Y-68570000D03*
X110490000Y-68570000D03* X110490000Y-68570000D03*
X107950000Y-68570000D03* X107950000Y-68570000D03*
X105410000Y-68570000D03* X105410000Y-68570000D03*
X102870000Y-68570000D03* X102870000Y-68570000D03*
X100330000Y-68570000D03* X100330000Y-68570000D03*
X97790000Y-68570000D03* X97790000Y-68570000D03*
X95250000Y-68570000D03* X95250000Y-68570000D03*
X92710000Y-68570000D03* X92710000Y-68570000D03*
X90170000Y-68570000D03* X90170000Y-68570000D03*
X87630000Y-68570000D03* X87630000Y-68570000D03*
%TD*% %TD*%
D19* D19*
%TO.C,C1*% %TO.C,C1*%
X91440000Y-93980000D03* X91440000Y-93980000D03*
D21* D21*
X93940000Y-93980000D03* X93940000Y-93980000D03*
%TD*% %TD*%
D22* D22*
%TO.C,JP1*% %TO.C,JP1*%
X96520000Y-99060000D03* X96520000Y-99060000D03*
D23* D23*
X96520000Y-97790000D03* X96520000Y-97790000D03*
%TD*% %TD*%
D19* D19*
%TO.C,C2*% %TO.C,C2*%
X94020000Y-88900000D03* X94020000Y-88900000D03*
D21* D21*
X96520000Y-88900000D03* X96520000Y-88900000D03*
%TD*% %TD*%
M02* M02*

View File

@@ -1,82 +1,82 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*% %TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*% %TF.FilePolarity,Positive*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
G04 Aperture macros list* G04 Aperture macros list*
%AMRoundRect* %AMRoundRect*
0 Rectangle with rounded corners* 0 Rectangle with rounded corners*
0 $1 Rounding radius* 0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners* 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body* 0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0* 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners* 0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3* 1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5* 1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7* 1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9* 1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners* 0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0* 20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0* 20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0* 20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*% 20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end* G04 Aperture macros list end*
%ADD10R,2.275000X2.200000*% %ADD10R,2.275000X2.200000*%
%ADD11RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*% %ADD11RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
%ADD12R,0.950000X2.800000*% %ADD12R,0.950000X2.800000*%
%ADD13RoundRect,0.100000X-0.100000X-0.200000X0.100000X-0.200000X0.100000X0.200000X-0.100000X0.200000X0*% %ADD13RoundRect,0.100000X-0.100000X-0.200000X0.100000X-0.200000X0.100000X0.200000X-0.100000X0.200000X0*%
%ADD14RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*% %ADD14RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*%
%ADD15RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*% %ADD15RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
%TO.C,Y1*% %TO.C,Y1*%
X114300000Y-88900000D03* X114300000Y-88900000D03*
X109125000Y-88900000D03* X109125000Y-88900000D03*
%TD*% %TD*%
D11* D11*
%TO.C,U3*% %TO.C,U3*%
X122857500Y-100010000D03* X122857500Y-100010000D03*
X122857500Y-98110000D03* X122857500Y-98110000D03*
X120982500Y-99060000D03* X120982500Y-99060000D03*
%TD*% %TD*%
D12* D12*
%TO.C,U2*% %TO.C,U2*%
X124220000Y-88040000D03* X124220000Y-88040000D03*
X122680000Y-88040000D03* X122680000Y-88040000D03*
X121160000Y-88040000D03* X121160000Y-88040000D03*
X119620000Y-88040000D03* X119620000Y-88040000D03*
X119620000Y-94840000D03* X119620000Y-94840000D03*
X121160000Y-94840000D03* X121160000Y-94840000D03*
X122680000Y-94840000D03* X122680000Y-94840000D03*
X124220000Y-94840000D03* X124220000Y-94840000D03*
%TD*% %TD*%
D13* D13*
%TO.C,U1*% %TO.C,U1*%
X110785000Y-95380000D03* X110785000Y-95380000D03*
X111435000Y-95380000D03* X111435000Y-95380000D03*
X112085000Y-95380000D03* X112085000Y-95380000D03*
X112735000Y-95380000D03* X112735000Y-95380000D03*
X112735000Y-92580000D03* X112735000Y-92580000D03*
X112085000Y-92580000D03* X112085000Y-92580000D03*
X111435000Y-92580000D03* X111435000Y-92580000D03*
X110785000Y-92580000D03* X110785000Y-92580000D03*
%TD*% %TD*%
D14* D14*
%TO.C,R2*% %TO.C,R2*%
X99060000Y-102110000D03* X99060000Y-102110000D03*
X99060000Y-101090000D03* X99060000Y-101090000D03*
%TD*% %TD*%
D15* D15*
%TO.C,R1*% %TO.C,R1*%
X101090000Y-63500000D03* X101090000Y-63500000D03*
X102110000Y-63500000D03* X102110000Y-63500000D03*
%TD*% %TD*%
M02* M02*

View File

@@ -1,493 +1,493 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*% %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-05-25T07:35:57+02:00*% %TF.CreationDate,2022-05-25T07:35:57+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*% %TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*% %TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Top*% %TF.FileFunction,Legend,Top*%
%TF.FilePolarity,Positive*% %TF.FilePolarity,Positive*%
%FSLAX46Y46*% %FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57* G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-05-25 07:35:57*
%MOMM*% %MOMM*%
%LPD*% %LPD*%
G01* G01*
G04 APERTURE LIST* G04 APERTURE LIST*
%ADD10C,0.150000*% %ADD10C,0.150000*%
%ADD11C,0.120000*% %ADD11C,0.120000*%
%ADD12C,0.100000*% %ADD12C,0.100000*%
G04 APERTURE END LIST* G04 APERTURE END LIST*
D10* D10*
%TO.C,REF\u002A\u002A*% %TO.C,REF\u002A\u002A*%
X107886666Y-55672380D02* X107886666Y-55672380D02*
X107553333Y-55196190D01* X107553333Y-55196190D01*
X107315238Y-55672380D02* X107315238Y-55672380D02*
X107315238Y-54672380D01* X107315238Y-54672380D01*
X107696190Y-54672380D01* X107696190Y-54672380D01*
X107791428Y-54720000D01* X107791428Y-54720000D01*
X107839047Y-54767619D01* X107839047Y-54767619D01*
X107886666Y-54862857D01* X107886666Y-54862857D01*
X107886666Y-55005714D01* X107886666Y-55005714D01*
X107839047Y-55100952D01* X107839047Y-55100952D01*
X107791428Y-55148571D01* X107791428Y-55148571D01*
X107696190Y-55196190D01* X107696190Y-55196190D01*
X107315238Y-55196190D01* X107315238Y-55196190D01*
X108315238Y-55148571D02* X108315238Y-55148571D02*
X108648571Y-55148571D01* X108648571Y-55148571D01*
X108791428Y-55672380D02* X108791428Y-55672380D02*
X108315238Y-55672380D01* X108315238Y-55672380D01*
X108315238Y-54672380D01* X108315238Y-54672380D01*
X108791428Y-54672380D01* X108791428Y-54672380D01*
X109553333Y-55148571D02* X109553333Y-55148571D02*
X109220000Y-55148571D01* X109220000Y-55148571D01*
X109220000Y-55672380D02* X109220000Y-55672380D02*
X109220000Y-54672380D01* X109220000Y-54672380D01*
X109696190Y-54672380D01* X109696190Y-54672380D01*
X110220000Y-54672380D02* X110220000Y-54672380D02*
X110220000Y-54910476D01* X110220000Y-54910476D01*
X109981904Y-54815238D02* X109981904Y-54815238D02*
X110220000Y-54910476D01* X110220000Y-54910476D01*
X110458095Y-54815238D01* X110458095Y-54815238D01*
X110077142Y-55100952D02* X110077142Y-55100952D02*
X110220000Y-54910476D01* X110220000Y-54910476D01*
X110362857Y-55100952D01* X110362857Y-55100952D01*
X110981904Y-54672380D02* X110981904Y-54672380D02*
X110981904Y-54910476D01* X110981904Y-54910476D01*
X110743809Y-54815238D02* X110743809Y-54815238D02*
X110981904Y-54910476D01* X110981904Y-54910476D01*
X111220000Y-54815238D01* X111220000Y-54815238D01*
X110839047Y-55100952D02* X110839047Y-55100952D02*
X110981904Y-54910476D01* X110981904Y-54910476D01*
X111124761Y-55100952D01* X111124761Y-55100952D01*
%TO.C,Y1*% %TO.C,Y1*%
X111236309Y-91026190D02* X111236309Y-91026190D02*
X111236309Y-91502380D01* X111236309Y-91502380D01*
X110902976Y-90502380D02* X110902976Y-90502380D02*
X111236309Y-91026190D01* X111236309Y-91026190D01*
X111569642Y-90502380D01* X111569642Y-90502380D01*
X112426785Y-91502380D02* X112426785Y-91502380D02*
X111855357Y-91502380D01* X111855357Y-91502380D01*
X112141071Y-91502380D02* X112141071Y-91502380D02*
X112141071Y-90502380D01* X112141071Y-90502380D01*
X112045833Y-90645238D01* X112045833Y-90645238D01*
X111950595Y-90740476D01* X111950595Y-90740476D01*
X111855357Y-90788095D01* X111855357Y-90788095D01*
%TO.C,U3*% %TO.C,U3*%
X121158095Y-100912380D02* X121158095Y-100912380D02*
X121158095Y-101721904D01* X121158095Y-101721904D01*
X121205714Y-101817142D01* X121205714Y-101817142D01*
X121253333Y-101864761D01* X121253333Y-101864761D01*
X121348571Y-101912380D01* X121348571Y-101912380D01*
X121539047Y-101912380D01* X121539047Y-101912380D01*
X121634285Y-101864761D01* X121634285Y-101864761D01*
X121681904Y-101817142D01* X121681904Y-101817142D01*
X121729523Y-101721904D01* X121729523Y-101721904D01*
X121729523Y-100912380D01* X121729523Y-100912380D01*
X122110476Y-100912380D02* X122110476Y-100912380D02*
X122729523Y-100912380D01* X122729523Y-100912380D01*
X122396190Y-101293333D01* X122396190Y-101293333D01*
X122539047Y-101293333D01* X122539047Y-101293333D01*
X122634285Y-101340952D01* X122634285Y-101340952D01*
X122681904Y-101388571D01* X122681904Y-101388571D01*
X122729523Y-101483809D01* X122729523Y-101483809D01*
X122729523Y-101721904D01* X122729523Y-101721904D01*
X122681904Y-101817142D01* X122681904Y-101817142D01*
X122634285Y-101864761D01* X122634285Y-101864761D01*
X122539047Y-101912380D01* X122539047Y-101912380D01*
X122253333Y-101912380D01* X122253333Y-101912380D01*
X122158095Y-101864761D01* X122158095Y-101864761D01*
X122110476Y-101817142D01* X122110476Y-101817142D01*
%TO.C,U2*% %TO.C,U2*%
X125872380Y-92201904D02* X125872380Y-92201904D02*
X126681904Y-92201904D01* X126681904Y-92201904D01*
X126777142Y-92154285D01* X126777142Y-92154285D01*
X126824761Y-92106666D01* X126824761Y-92106666D01*
X126872380Y-92011428D01* X126872380Y-92011428D01*
X126872380Y-91820952D01* X126872380Y-91820952D01*
X126824761Y-91725714D01* X126824761Y-91725714D01*
X126777142Y-91678095D01* X126777142Y-91678095D01*
X126681904Y-91630476D01* X126681904Y-91630476D01*
X125872380Y-91630476D01* X125872380Y-91630476D01*
X125967619Y-91201904D02* X125967619Y-91201904D02*
X125920000Y-91154285D01* X125920000Y-91154285D01*
X125872380Y-91059047D01* X125872380Y-91059047D01*
X125872380Y-90820952D01* X125872380Y-90820952D01*
X125920000Y-90725714D01* X125920000Y-90725714D01*
X125967619Y-90678095D01* X125967619Y-90678095D01*
X126062857Y-90630476D01* X126062857Y-90630476D01*
X126158095Y-90630476D01* X126158095Y-90630476D01*
X126300952Y-90678095D01* X126300952Y-90678095D01*
X126872380Y-91249523D01* X126872380Y-91249523D01*
X126872380Y-90630476D01* X126872380Y-90630476D01*
%TO.C,U1*% %TO.C,U1*%
X108712380Y-94741904D02* X108712380Y-94741904D02*
X109521904Y-94741904D01* X109521904Y-94741904D01*
X109617142Y-94694285D01* X109617142Y-94694285D01*
X109664761Y-94646666D01* X109664761Y-94646666D01*
X109712380Y-94551428D01* X109712380Y-94551428D01*
X109712380Y-94360952D01* X109712380Y-94360952D01*
X109664761Y-94265714D01* X109664761Y-94265714D01*
X109617142Y-94218095D01* X109617142Y-94218095D01*
X109521904Y-94170476D01* X109521904Y-94170476D01*
X108712380Y-94170476D01* X108712380Y-94170476D01*
X109712380Y-93170476D02* X109712380Y-93170476D02*
X109712380Y-93741904D01* X109712380Y-93741904D01*
X109712380Y-93456190D02* X109712380Y-93456190D02*
X108712380Y-93456190D01* X108712380Y-93456190D01*
X108855238Y-93551428D01* X108855238Y-93551428D01*
X108950476Y-93646666D01* X108950476Y-93646666D01*
X108998095Y-93741904D01* X108998095Y-93741904D01*
%TO.C,R2*% %TO.C,R2*%
X98342380Y-101766666D02* X98342380Y-101766666D02*
X97866190Y-102100000D01* X97866190Y-102100000D01*
X98342380Y-102338095D02* X98342380Y-102338095D02*
X97342380Y-102338095D01* X97342380Y-102338095D01*
X97342380Y-101957142D01* X97342380Y-101957142D01*
X97390000Y-101861904D01* X97390000Y-101861904D01*
X97437619Y-101814285D01* X97437619Y-101814285D01*
X97532857Y-101766666D01* X97532857Y-101766666D01*
X97675714Y-101766666D01* X97675714Y-101766666D01*
X97770952Y-101814285D01* X97770952Y-101814285D01*
X97818571Y-101861904D01* X97818571Y-101861904D01*
X97866190Y-101957142D01* X97866190Y-101957142D01*
X97866190Y-102338095D01* X97866190Y-102338095D01*
X97437619Y-101385714D02* X97437619Y-101385714D02*
X97390000Y-101338095D01* X97390000Y-101338095D01*
X97342380Y-101242857D01* X97342380Y-101242857D01*
X97342380Y-101004761D01* X97342380Y-101004761D01*
X97390000Y-100909523D01* X97390000Y-100909523D01*
X97437619Y-100861904D01* X97437619Y-100861904D01*
X97532857Y-100814285D01* X97532857Y-100814285D01*
X97628095Y-100814285D01* X97628095Y-100814285D01*
X97770952Y-100861904D01* X97770952Y-100861904D01*
X98342380Y-101433333D01* X98342380Y-101433333D01*
X98342380Y-100814285D01* X98342380Y-100814285D01*
%TO.C,R1*% %TO.C,R1*%
X101433333Y-62782380D02* X101433333Y-62782380D02*
X101100000Y-62306190D01* X101100000Y-62306190D01*
X100861904Y-62782380D02* X100861904Y-62782380D02*
X100861904Y-61782380D01* X100861904Y-61782380D01*
X101242857Y-61782380D01* X101242857Y-61782380D01*
X101338095Y-61830000D01* X101338095Y-61830000D01*
X101385714Y-61877619D01* X101385714Y-61877619D01*
X101433333Y-61972857D01* X101433333Y-61972857D01*
X101433333Y-62115714D01* X101433333Y-62115714D01*
X101385714Y-62210952D01* X101385714Y-62210952D01*
X101338095Y-62258571D01* X101338095Y-62258571D01*
X101242857Y-62306190D01* X101242857Y-62306190D01*
X100861904Y-62306190D01* X100861904Y-62306190D01*
X102385714Y-62782380D02* X102385714Y-62782380D02*
X101814285Y-62782380D01* X101814285Y-62782380D01*
X102100000Y-62782380D02* X102100000Y-62782380D02*
X102100000Y-61782380D01* X102100000Y-61782380D01*
X102004761Y-61925238D01* X102004761Y-61925238D01*
X101909523Y-62020476D01* X101909523Y-62020476D01*
X101814285Y-62068095D01* X101814285Y-62068095D01*
%TO.C,J1*% %TO.C,J1*%
X110636666Y-96192380D02* X110636666Y-96192380D02*
X110636666Y-96906666D01* X110636666Y-96906666D01*
X110589047Y-97049523D01* X110589047Y-97049523D01*
X110493809Y-97144761D01* X110493809Y-97144761D01*
X110350952Y-97192380D01* X110350952Y-97192380D01*
X110255714Y-97192380D01* X110255714Y-97192380D01*
X111636666Y-97192380D02* X111636666Y-97192380D02*
X111065238Y-97192380D01* X111065238Y-97192380D01*
X111350952Y-97192380D02* X111350952Y-97192380D02*
X111350952Y-96192380D01* X111350952Y-96192380D01*
X111255714Y-96335238D01* X111255714Y-96335238D01*
X111160476Y-96430476D01* X111160476Y-96430476D01*
X111065238Y-96478095D01* X111065238Y-96478095D01*
%TO.C,A1*% %TO.C,A1*%
X82716666Y-76904285D02* X82716666Y-76904285D02*
X82716666Y-76428095D01* X82716666Y-76428095D01*
X83002380Y-76999523D02* X83002380Y-76999523D02*
X82002380Y-76666190D01* X82002380Y-76666190D01*
X83002380Y-76332857D01* X83002380Y-76332857D01*
X83002380Y-75475714D02* X83002380Y-75475714D02*
X83002380Y-76047142D01* X83002380Y-76047142D01*
X83002380Y-75761428D02* X83002380Y-75761428D02*
X82002380Y-75761428D01* X82002380Y-75761428D01*
X82145238Y-75856666D01* X82145238Y-75856666D01*
X82240476Y-75951904D01* X82240476Y-75951904D01*
X82288095Y-76047142D01* X82288095Y-76047142D01*
%TO.C,C1*% %TO.C,C1*%
X92523333Y-90837142D02* X92523333Y-90837142D02*
X92475714Y-90884761D01* X92475714Y-90884761D01*
X92332857Y-90932380D01* X92332857Y-90932380D01*
X92237619Y-90932380D01* X92237619Y-90932380D01*
X92094761Y-90884761D01* X92094761Y-90884761D01*
X91999523Y-90789523D01* X91999523Y-90789523D01*
X91951904Y-90694285D01* X91951904Y-90694285D01*
X91904285Y-90503809D01* X91904285Y-90503809D01*
X91904285Y-90360952D01* X91904285Y-90360952D01*
X91951904Y-90170476D01* X91951904Y-90170476D01*
X91999523Y-90075238D01* X91999523Y-90075238D01*
X92094761Y-89980000D01* X92094761Y-89980000D01*
X92237619Y-89932380D01* X92237619Y-89932380D01*
X92332857Y-89932380D01* X92332857Y-89932380D01*
X92475714Y-89980000D01* X92475714Y-89980000D01*
X92523333Y-90027619D01* X92523333Y-90027619D01*
X93475714Y-90932380D02* X93475714Y-90932380D02*
X92904285Y-90932380D01* X92904285Y-90932380D01*
X93190000Y-90932380D02* X93190000Y-90932380D02*
X93190000Y-89932380D01* X93190000Y-89932380D01*
X93094761Y-90075238D01* X93094761Y-90075238D01*
X92999523Y-90170476D01* X92999523Y-90170476D01*
X92904285Y-90218095D01* X92904285Y-90218095D01*
%TO.C,JP1*% %TO.C,JP1*%
X95686666Y-100207380D02* X95686666Y-100207380D02*
X95686666Y-100921666D01* X95686666Y-100921666D01*
X95639047Y-101064523D01* X95639047Y-101064523D01*
X95543809Y-101159761D01* X95543809Y-101159761D01*
X95400952Y-101207380D01* X95400952Y-101207380D01*
X95305714Y-101207380D01* X95305714Y-101207380D01*
X96162857Y-101207380D02* X96162857Y-101207380D02*
X96162857Y-100207380D01* X96162857Y-100207380D01*
X96543809Y-100207380D01* X96543809Y-100207380D01*
X96639047Y-100255000D01* X96639047Y-100255000D01*
X96686666Y-100302619D01* X96686666Y-100302619D01*
X96734285Y-100397857D01* X96734285Y-100397857D01*
X96734285Y-100540714D01* X96734285Y-100540714D01*
X96686666Y-100635952D01* X96686666Y-100635952D01*
X96639047Y-100683571D01* X96639047Y-100683571D01*
X96543809Y-100731190D01* X96543809Y-100731190D01*
X96162857Y-100731190D01* X96162857Y-100731190D01*
X97686666Y-101207380D02* X97686666Y-101207380D02*
X97115238Y-101207380D01* X97115238Y-101207380D01*
X97400952Y-101207380D02* X97400952Y-101207380D02*
X97400952Y-100207380D01* X97400952Y-100207380D01*
X97305714Y-100350238D01* X97305714Y-100350238D01*
X97210476Y-100445476D01* X97210476Y-100445476D01*
X97115238Y-100493095D01* X97115238Y-100493095D01*
%TO.C,C2*% %TO.C,C2*%
X95103333Y-85757142D02* X95103333Y-85757142D02*
X95055714Y-85804761D01* X95055714Y-85804761D01*
X94912857Y-85852380D01* X94912857Y-85852380D01*
X94817619Y-85852380D01* X94817619Y-85852380D01*
X94674761Y-85804761D01* X94674761Y-85804761D01*
X94579523Y-85709523D01* X94579523Y-85709523D01*
X94531904Y-85614285D01* X94531904Y-85614285D01*
X94484285Y-85423809D01* X94484285Y-85423809D01*
X94484285Y-85280952D01* X94484285Y-85280952D01*
X94531904Y-85090476D01* X94531904Y-85090476D01*
X94579523Y-84995238D01* X94579523Y-84995238D01*
X94674761Y-84900000D01* X94674761Y-84900000D01*
X94817619Y-84852380D01* X94817619Y-84852380D01*
X94912857Y-84852380D01* X94912857Y-84852380D01*
X95055714Y-84900000D01* X95055714Y-84900000D01*
X95103333Y-84947619D01* X95103333Y-84947619D01*
X95484285Y-84947619D02* X95484285Y-84947619D02*
X95531904Y-84900000D01* X95531904Y-84900000D01*
X95627142Y-84852380D01* X95627142Y-84852380D01*
X95865238Y-84852380D01* X95865238Y-84852380D01*
X95960476Y-84900000D01* X95960476Y-84900000D01*
X96008095Y-84947619D01* X96008095Y-84947619D01*
X96055714Y-85042857D01* X96055714Y-85042857D01*
X96055714Y-85138095D01* X96055714Y-85138095D01*
X96008095Y-85280952D01* X96008095Y-85280952D01*
X95436666Y-85852380D01* X95436666Y-85852380D01*
X96055714Y-85852380D01* X96055714Y-85852380D01*
D11* D11*
%TO.C,Y1*% %TO.C,Y1*%
X112962500Y-90050000D02* X112962500Y-90050000D02*
X110462500Y-90050000D01* X110462500Y-90050000D01*
X112962500Y-87750000D02* X112962500Y-87750000D02*
X110462500Y-87750000D01* X110462500Y-87750000D01*
X115637500Y-90000000D02* X115637500Y-90000000D02*
X115637500Y-87800000D01* X115637500Y-87800000D01*
%TO.C,U3*% %TO.C,U3*%
X121920000Y-100620000D02* X121920000Y-100620000D02*
X121270000Y-100620000D01* X121270000Y-100620000D01*
X121920000Y-97500000D02* X121920000Y-97500000D02*
X121270000Y-97500000D01* X121270000Y-97500000D01*
X121920000Y-100620000D02* X121920000Y-100620000D02*
X123595000Y-100620000D01* X123595000Y-100620000D01*
X121920000Y-97500000D02* X121920000Y-97500000D02*
X122570000Y-97500000D01* X122570000Y-97500000D01*
%TO.C,U2*% %TO.C,U2*%
X124920000Y-86640000D02* X124920000Y-86640000D02*
X124920000Y-89440000D01* X124920000Y-89440000D01*
X118920000Y-93440000D02* X118920000Y-93440000D02*
X118420000Y-93440000D01* X118420000Y-93440000D01*
X124920000Y-89440000D02* X124920000Y-89440000D02*
X125320000Y-89440000D01* X125320000Y-89440000D01*
X118420000Y-93440000D02* X118420000Y-93440000D02*
X118420000Y-89440000D01* X118420000Y-89440000D01*
X125320000Y-93440000D02* X125320000Y-93440000D02*
X124920000Y-93440000D01* X124920000Y-93440000D01*
X125320000Y-89440000D02* X125320000Y-89440000D02*
X125320000Y-93440000D01* X125320000Y-93440000D01*
X118420000Y-89440000D02* X118420000Y-89440000D02*
X118920000Y-89440000D01* X118920000Y-89440000D01*
D12* D12*
%TO.C,U1*% %TO.C,U1*%
X113310000Y-92730000D02* X113310000Y-92730000D02*
X113160000Y-92730000D01* X113160000Y-92730000D01*
X110310000Y-95230000D02* X110310000Y-95230000D02*
X110210000Y-95230000D01* X110210000Y-95230000D01*
X113310000Y-95230000D02* X113310000Y-95230000D02*
X113310000Y-92730000D01* X113310000Y-92730000D01*
X113160000Y-95230000D02* X113160000Y-95230000D02*
X113310000Y-95230000D01* X113310000Y-95230000D01*
X110210000Y-95230000D02* X110210000Y-95230000D02*
X110210000Y-92730000D01* X110210000Y-92730000D01*
X110210000Y-92730000D02* X110210000Y-92730000D02*
X110310000Y-92730000D01* X110310000Y-92730000D01*
X110310000Y-95630000D02* X110310000Y-95630000D02*
X110310000Y-95230000D01* X110310000Y-95230000D01*
D11* D11*
%TO.C,R2*% %TO.C,R2*%
X98680000Y-101753641D02* X98680000Y-101753641D02*
X98680000Y-101446359D01* X98680000Y-101446359D01*
X99440000Y-101753641D02* X99440000Y-101753641D02*
X99440000Y-101446359D01* X99440000Y-101446359D01*
%TO.C,R1*% %TO.C,R1*%
X101446359Y-63120000D02* X101446359Y-63120000D02*
X101753641Y-63120000D01* X101753641Y-63120000D01*
X101446359Y-63880000D02* X101446359Y-63880000D02*
X101753641Y-63880000D01* X101753641Y-63880000D01*
%TO.C,J1*% %TO.C,J1*%
X114400000Y-100900000D02* X114400000Y-100900000D02*
G75* G75*
G03* G03*
X114400000Y-100900000I-1680000J0D01* X114400000Y-100900000I-1680000J0D01*
G01* G01*
X117900000Y-100900000D02* X117900000Y-100900000D02*
G75* G75*
G03* G03*
X117900000Y-100900000I-1680000J0D01* X117900000Y-100900000I-1680000J0D01*
G01* G01*
X110900000Y-100900000D02* X110900000Y-100900000D02*
G75* G75*
G03* G03*
X110900000Y-100900000I-1680000J0D01* X110900000Y-100900000I-1680000J0D01*
G01* G01*
X106586000Y-99459999D02* X106586000Y-99459999D02*
G75* G75*
G03* G03*
X104830106Y-99474642I-866000J-1439999D01* X104830106Y-99474642I-866000J-1439999D01*
G01* G01*
X104279999Y-100034000D02* X104279999Y-100034000D02*
G75* G75*
G03* G03*
X104294642Y-101789894I1439999J-866000D01* X104294642Y-101789894I1439999J-866000D01*
G01* G01*
X107145000Y-101791000D02* X107145000Y-101791000D02*
G75* G75*
G03* G03*
X107145504Y-100009807I-1425003J891000D01* X107145504Y-100009807I-1425003J891000D01*
G01* G01*
X105720000Y-102580000D02* X105720000Y-102580000D02*
G75* G75*
G03* G03*
X106610264Y-102324721I3J1679990D01* X106610264Y-102324721I3J1679990D01*
G01* G01*
X104854000Y-102340000D02* X104854000Y-102340000D02*
G75* G75*
G03* G03*
X105748674Y-102580099I866003J1440014D01* X105748674Y-102580099I866003J1440014D01*
G01* G01*
X108245000Y-102081000D02* X108245000Y-102081000D02*
X108151000Y-102174000D01* X108151000Y-102174000D01*
X108075000Y-101841000D02* X108075000Y-101841000D02*
X107946000Y-101969000D01* X107946000Y-101969000D01*
X115075000Y-101841000D02* X115075000Y-101841000D02*
X114946000Y-101969000D01* X114946000Y-101969000D01*
X103670000Y-105060000D02* X103670000Y-105060000D02*
X103670000Y-105700000D01* X103670000Y-105700000D01*
X110290000Y-99625000D02* X110290000Y-99625000D02*
X110196000Y-99719000D01* X110196000Y-99719000D01*
X103670000Y-105700000D02* X103670000Y-105700000D02*
X104070000Y-105700000D01* X104070000Y-105700000D01*
X118030000Y-97740000D02* X118030000Y-97740000D02*
X118030000Y-105460000D01* X118030000Y-105460000D01*
X103910000Y-103900000D02* X103910000Y-103900000D02*
X118030000Y-103900000D01* X118030000Y-103900000D01*
X115245000Y-102081000D02* X115245000Y-102081000D02*
X115151000Y-102174000D01* X115151000Y-102174000D01*
X111575000Y-101841000D02* X111575000Y-101841000D02*
X111446000Y-101969000D01* X111446000Y-101969000D01*
X103910000Y-97740000D02* X103910000Y-97740000D02*
X118030000Y-97740000D01* X118030000Y-97740000D01*
X113790000Y-99625000D02* X113790000Y-99625000D02*
X113696000Y-99719000D01* X113696000Y-99719000D01*
X103910000Y-105460000D02* X103910000Y-105460000D02*
X118030000Y-105460000D01* X118030000Y-105460000D01*
X111745000Y-102081000D02* X111745000Y-102081000D02*
X111651000Y-102174000D01* X111651000Y-102174000D01*
X117495000Y-99831000D02* X117495000Y-99831000D02*
X117366000Y-99959000D01* X117366000Y-99959000D01*
X110495000Y-99831000D02* X110495000Y-99831000D02*
X110366000Y-99959000D01* X110366000Y-99959000D01*
X113995000Y-99831000D02* X113995000Y-99831000D02*
X113866000Y-99959000D01* X113866000Y-99959000D01*
X117290000Y-99625000D02* X117290000Y-99625000D02*
X117196000Y-99719000D01* X117196000Y-99719000D01*
X103910000Y-105000000D02* X103910000Y-105000000D02*
X118030000Y-105000000D01* X118030000Y-105000000D01*
X103910000Y-97740000D02* X103910000Y-97740000D02*
X103910000Y-105460000D01* X103910000Y-105460000D01*
%TO.C,A1*% %TO.C,A1*%
X83690000Y-85210000D02* X83690000Y-85210000D02*
X86360000Y-85210000D01* X86360000Y-85210000D01*
X127130000Y-67170000D02* X127130000Y-67170000D02*
X83690000Y-67170000D01* X83690000Y-67170000D01*
X124460000Y-69840000D02* X124460000Y-69840000D02*
X124460000Y-67170000D01* X124460000Y-67170000D01*
X88900000Y-82540000D02* X88900000Y-82540000D02*
X86360000Y-82540000D01* X86360000Y-82540000D01*
X86360000Y-82540000D02* X86360000Y-82540000D02*
X86360000Y-85210000D01* X86360000Y-85210000D01*
X124460000Y-82540000D02* X124460000Y-82540000D02*
X124460000Y-85210000D01* X124460000Y-85210000D01*
X127130000Y-85210000D02* X127130000Y-85210000D02*
X127130000Y-67170000D01* X127130000Y-67170000D01*
X88900000Y-82540000D02* X88900000Y-82540000D02*
X124460000Y-82540000D01* X124460000Y-82540000D01*
X83690000Y-67170000D02* X83690000Y-67170000D02*
X83690000Y-85210000D01* X83690000Y-85210000D01*
X88900000Y-82540000D02* X88900000Y-82540000D02*
X88900000Y-85210000D01* X88900000Y-85210000D01*
X88900000Y-85210000D02* X88900000Y-85210000D02*
X127130000Y-85210000D01* X127130000Y-85210000D01*
X86360000Y-69840000D02* X86360000Y-69840000D02*
X86360000Y-67170000D01* X86360000Y-67170000D01*
X86360000Y-69840000D02* X86360000Y-69840000D02*
X124460000Y-69840000D01* X124460000Y-69840000D01*
%TO.C,C1*% %TO.C,C1*%
X90377712Y-92420000D02* X90377712Y-92420000D02*
X90377712Y-92870000D01* X90377712Y-92870000D01*
X90152712Y-92645000D02* X90152712Y-92645000D02*
X90602712Y-92645000D01* X90602712Y-92645000D01*
X90570259Y-95040000D02* X90570259Y-95040000D02*
G75* G75*
G03* G03*
X90570259Y-92920000I2119741J1060000D01* X90570259Y-92920000I2119741J1060000D01*
G01* G01*
%TO.C,JP1*% %TO.C,JP1*%
X97630000Y-98300000D02* X97630000Y-98300000D02*
X97630000Y-97095000D01* X97630000Y-97095000D01*
X95410000Y-98300000D02* X95410000Y-98300000D02*
X95410000Y-97095000D01* X95410000Y-97095000D01*
X97630000Y-97095000D02* X97630000Y-97095000D02*
X96827530Y-97095000D01* X96827530Y-97095000D01*
X97630000Y-98300000D02* X97630000Y-98300000D02*
X97083471Y-98300000D01* X97083471Y-98300000D01*
X97630000Y-99060000D02* X97630000Y-99060000D02*
X97630000Y-99820000D01* X97630000Y-99820000D01*
X95956529Y-98300000D02* X95956529Y-98300000D02*
X95410000Y-98300000D01* X95410000Y-98300000D01*
X96212470Y-97095000D02* X96212470Y-97095000D02*
X95410000Y-97095000D01* X95410000Y-97095000D01*
X97630000Y-99820000D02* X97630000Y-99820000D02*
X96520000Y-99820000D01* X96520000Y-99820000D01*
%TO.C,C2*% %TO.C,C2*%
X92957712Y-87340000D02* X92957712Y-87340000D02*
X92957712Y-87790000D01* X92957712Y-87790000D01*
X92732712Y-87565000D02* X92732712Y-87565000D02*
X93182712Y-87565000D01* X93182712Y-87565000D01*
X93150259Y-89960000D02* X93150259Y-89960000D02*
G75* G75*
G03* G03*
X93150259Y-87840000I2119741J1060000D01* X93150259Y-87840000I2119741J1060000D01*
G01* G01*
%TD*% %TD*%
M02* M02*

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,120 +1,120 @@
{ {
"Header": { "Header": {
"GenerationSoftware": { "GenerationSoftware": {
"Vendor": "KiCad", "Vendor": "KiCad",
"Application": "Pcbnew", "Application": "Pcbnew",
"Version": "(6.0.4)" "Version": "(6.0.4)"
}, },
"CreationDate": "2022-05-25T07:35:57+02:00" "CreationDate": "2022-05-25T07:35:57+02:00"
}, },
"GeneralSpecs": { "GeneralSpecs": {
"ProjectId": { "ProjectId": {
"Name": "Meycad", "Name": "Meycad",
"GUID": "4d657963-6164-42e6-9b69-6361645f7063", "GUID": "4d657963-6164-42e6-9b69-6361645f7063",
"Revision": "rev?" "Revision": "rev?"
}, },
"Size": { "Size": {
"X": 52.1006, "X": 52.1006,
"Y": 50.1 "Y": 50.1
}, },
"LayerNumber": 2, "LayerNumber": 2,
"BoardThickness": 1.6, "BoardThickness": 1.6,
"Finish": "None" "Finish": "None"
}, },
"DesignRules": [ "DesignRules": [
{ {
"Layers": "Outer", "Layers": "Outer",
"PadToPad": 0.2, "PadToPad": 0.2,
"PadToTrack": 0.2, "PadToTrack": 0.2,
"TrackToTrack": 0.2, "TrackToTrack": 0.2,
"MinLineWidth": 0.25 "MinLineWidth": 0.25
} }
], ],
"FilesAttributes": [ "FilesAttributes": [
{ {
"Path": "Meycad-F_Cu.gbr", "Path": "Meycad-F_Cu.gbr",
"FileFunction": "Copper,L1,Top", "FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive" "FilePolarity": "Positive"
}, },
{ {
"Path": "Meycad-B_Cu.gbr", "Path": "Meycad-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot", "FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive" "FilePolarity": "Positive"
}, },
{ {
"Path": "Meycad-F_Paste.gbr", "Path": "Meycad-F_Paste.gbr",
"FileFunction": "SolderPaste,Top", "FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive" "FilePolarity": "Positive"
}, },
{ {
"Path": "Meycad-B_Paste.gbr", "Path": "Meycad-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot", "FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive" "FilePolarity": "Positive"
}, },
{ {
"Path": "Meycad-F_Silkscreen.gbr", "Path": "Meycad-F_Silkscreen.gbr",
"FileFunction": "Legend,Top", "FileFunction": "Legend,Top",
"FilePolarity": "Positive" "FilePolarity": "Positive"
}, },
{ {
"Path": "Meycad-B_Silkscreen.gbr", "Path": "Meycad-B_Silkscreen.gbr",
"FileFunction": "Legend,Bot", "FileFunction": "Legend,Bot",
"FilePolarity": "Positive" "FilePolarity": "Positive"
}, },
{ {
"Path": "Meycad-F_Mask.gbr", "Path": "Meycad-F_Mask.gbr",
"FileFunction": "SolderMask,Top", "FileFunction": "SolderMask,Top",
"FilePolarity": "Negative" "FilePolarity": "Negative"
}, },
{ {
"Path": "Meycad-B_Mask.gbr", "Path": "Meycad-B_Mask.gbr",
"FileFunction": "SolderMask,Bot", "FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative" "FilePolarity": "Negative"
}, },
{ {
"Path": "Meycad-Edge_Cuts.gbr", "Path": "Meycad-Edge_Cuts.gbr",
"FileFunction": "Profile", "FileFunction": "Profile",
"FilePolarity": "Positive" "FilePolarity": "Positive"
} }
], ],
"MaterialStackup": [ "MaterialStackup": [
{ {
"Type": "Legend", "Type": "Legend",
"Name": "Top Silk Screen" "Name": "Top Silk Screen"
}, },
{ {
"Type": "SolderPaste", "Type": "SolderPaste",
"Name": "Top Solder Paste" "Name": "Top Solder Paste"
}, },
{ {
"Type": "SolderMask", "Type": "SolderMask",
"Name": "Top Solder Mask" "Name": "Top Solder Mask"
}, },
{ {
"Type": "Copper", "Type": "Copper",
"Name": "F.Cu" "Name": "F.Cu"
}, },
{ {
"Type": "Dielectric", "Type": "Dielectric",
"Material": "FR4", "Material": "FR4",
"Name": "F.Cu/B.Cu", "Name": "F.Cu/B.Cu",
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)" "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
}, },
{ {
"Type": "Copper", "Type": "Copper",
"Name": "B.Cu" "Name": "B.Cu"
}, },
{ {
"Type": "SolderMask", "Type": "SolderMask",
"Name": "Bottom Solder Mask" "Name": "Bottom Solder Mask"
}, },
{ {
"Type": "SolderPaste", "Type": "SolderPaste",
"Name": "Bottom Solder Paste" "Name": "Bottom Solder Paste"
}, },
{ {
"Type": "Legend", "Type": "Legend",
"Name": "Bottom Silk Screen" "Name": "Bottom Silk Screen"
} }
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,75 +1,75 @@
{ {
"board": { "board": {
"active_layer": 36, "active_layer": 36,
"active_layer_preset": "", "active_layer_preset": "",
"auto_track_width": false, "auto_track_width": false,
"hidden_nets": [], "hidden_nets": [],
"high_contrast_mode": 0, "high_contrast_mode": 0,
"net_color_mode": 1, "net_color_mode": 1,
"opacity": { "opacity": {
"pads": 1.0, "pads": 1.0,
"tracks": 1.0, "tracks": 1.0,
"vias": 1.0, "vias": 1.0,
"zones": 1.0 "zones": 1.0
}, },
"ratsnest_display_mode": 0, "ratsnest_display_mode": 0,
"selection_filter": { "selection_filter": {
"dimensions": true, "dimensions": true,
"footprints": true, "footprints": true,
"graphics": true, "graphics": true,
"keepouts": true, "keepouts": true,
"lockedItems": false, "lockedItems": false,
"otherItems": true, "otherItems": true,
"pads": true, "pads": true,
"text": true, "text": true,
"tracks": true, "tracks": true,
"vias": true, "vias": true,
"zones": true "zones": true
}, },
"visible_items": [ "visible_items": [
0, 0,
1, 1,
2, 2,
3, 3,
4, 4,
5, 5,
8, 8,
9, 9,
10, 10,
11, 11,
12, 12,
13, 13,
14, 14,
15, 15,
16, 16,
17, 17,
18, 18,
19, 19,
20, 20,
21, 21,
22, 22,
23, 23,
24, 24,
25, 25,
26, 26,
27, 27,
28, 28,
29, 29,
30, 30,
32, 32,
33, 33,
34, 34,
35, 35,
36 36
], ],
"visible_layers": "0001030_ffffffff", "visible_layers": "0001030_ffffffff",
"zone_display_mode": 0 "zone_display_mode": 0
}, },
"meta": { "meta": {
"filename": "Meycad.kicad_prl", "filename": "Meycad.kicad_prl",
"version": 3 "version": 3
}, },
"project": { "project": {
"files": [] "files": []
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,13 @@
{ {
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"type": "java", "type": "java",
"name": "Debug (Attach) - openHAB", "name": "Debug (Attach) - openHAB",
"request": "attach", "request": "attach",
"hostName": "localhost", "hostName": "localhost",
"port": 5005, "port": 5005,
"preLaunchTask": "Build" "preLaunchTask": "Build"
} }
] ]
} }

View File

@@ -1,149 +1,149 @@
{ {
"version": "2.0.0", "version": "2.0.0",
"options": { "options": {
"env": { "env": {
"openhab_home": "C://source//openhab_runtime", "openhab_home": "C://source//openhab_runtime",
"openhab_runtime": "C://source//openhab_runtime//runtime", "openhab_runtime": "C://source//openhab_runtime//runtime",
"openhab_addons": "C://source//openhab_runtime//addons", "openhab_addons": "C://source//openhab_runtime//addons",
"openhab_logs": "C://source//openhab_runtime//userdata/logs", "openhab_logs": "C://source//openhab_runtime//userdata/logs",
"dist" : "org.openhab.binding.meycan-4.0.0-SNAPSHOT.jar" "dist" : "org.openhab.binding.meycan-4.0.0-SNAPSHOT.jar"
} }
}, },
"tasks": [ "tasks": [
{ {
"label": "Start openHAB (Debug)", "label": "Start openHAB (Debug)",
"type": "shell", "type": "shell",
"isBackground": true, "isBackground": true,
"command": "$openhab_home/start.sh debug", "command": "$openhab_home/start.sh debug",
"windows": { "windows": {
"command": "& $env:openhab_home/start.bat debug" "command": "& $env:openhab_home/start.bat debug"
}, },
"presentation": { "presentation": {
"reveal": "always", "reveal": "always",
"panel": "new" "panel": "new"
}, },
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "Stop openHAB", "label": "Stop openHAB",
"type": "shell", "type": "shell",
"command": "$openhab_runtime/bin/stop", "command": "$openhab_runtime/bin/stop",
"windows": { "windows": {
"command": "& $env:openhab_runtime/bin/stop.bat" "command": "& $env:openhab_runtime/bin/stop.bat"
}, },
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "mvn Compile (Release)", "label": "mvn Compile (Release)",
"type": "shell", "type": "shell",
"command": "mvn", "command": "mvn",
"args": [ "args": [
"clean", "clean",
"install" "install"
], ],
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "mvn Compile (Online)", "label": "mvn Compile (Online)",
"type": "shell", "type": "shell",
"command": "mvn", "command": "mvn",
"args": [ "args": [
"clean", "clean",
"install", "install",
"-DskipChecks" "-DskipChecks"
], ],
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "mvn Compile (Offline)", "label": "mvn Compile (Offline)",
"type": "shell", "type": "shell",
"command": "mvn", "command": "mvn",
"args": [ "args": [
"-o", "-o",
"clean", "clean",
"install", "install",
"-DskipChecks" "-DskipChecks"
], ],
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "Copy Distribution to Addons", "label": "Copy Distribution to Addons",
"type": "shell", "type": "shell",
"command": "cp", "command": "cp",
"args": [ "args": [
"${workspaceFolder}/target/$dist", "${workspaceFolder}/target/$dist",
"$openhab_addons" "$openhab_addons"
], ],
"windows": { "windows": {
"command": "copy", "command": "copy",
"args": [ "args": [
"${workspaceFolder}/target/$env:dist", "${workspaceFolder}/target/$env:dist",
"$env:openhab_addons" "$env:openhab_addons"
] ]
}, },
"dependsOn": [ "dependsOn": [
"mvn Compile (Offline)" "mvn Compile (Offline)"
], ],
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "Build", "label": "Build",
"dependsOn": [ "dependsOn": [
"Copy Distribution to Addons" "Copy Distribution to Addons"
], ],
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "Tail events.log", "label": "Tail events.log",
"type": "shell", "type": "shell",
"command": "tail", "command": "tail",
"args": [ "args": [
"-n", "-n",
"50", "50",
"-F", "-F",
"$openhab_logs/events.log" "$openhab_logs/events.log"
], ],
"windows": { "windows": {
"command": "Get-Content", "command": "Get-Content",
"args": [ "args": [
"-Last", "-Last",
"50", "50",
"-Path", "-Path",
"$env:openhab_logs/events.log", "$env:openhab_logs/events.log",
"-Wait" "-Wait"
] ]
}, },
"presentation": { "presentation": {
"reveal": "always", "reveal": "always",
"panel": "new" "panel": "new"
}, },
"problemMatcher": [] "problemMatcher": []
}, },
{ {
"label": "Tail openhab.log", "label": "Tail openhab.log",
"type": "shell", "type": "shell",
"command": "tail", "command": "tail",
"args": [ "args": [
"-n", "-n",
"50", "50",
"-F", "-F",
"$openhab_logs/openhab.log" "$openhab_logs/openhab.log"
], ],
"windows": { "windows": {
"command": "Get-Content", "command": "Get-Content",
"args": [ "args": [
"-Last", "-Last",
"50", "50",
"-Path", "-Path",
"$env:openhab_logs/openhab.log", "$env:openhab_logs/openhab.log",
"-Wait" "-Wait"
] ]
}, },
"presentation": { "presentation": {
"reveal": "always", "reveal": "always",
"panel": "new" "panel": "new"
}, },
"problemMatcher": [] "problemMatcher": []
} }
] ]
} }

View File

@@ -1,13 +1,13 @@
This content is produced and maintained by the openHAB project. This content is produced and maintained by the openHAB project.
* Project home: https://www.openhab.org * Project home: https://www.openhab.org
== Declared Project Licenses == Declared Project Licenses
This program and the accompanying materials are made available under the terms This program and the accompanying materials are made available under the terms
of the Eclipse Public License 2.0 which is available at of the Eclipse Public License 2.0 which is available at
https://www.eclipse.org/legal/epl-2.0/. https://www.eclipse.org/legal/epl-2.0/.
== Source Code == Source Code
https://github.com/openhab/openhab-addons https://github.com/openhab/openhab-addons

View File

@@ -1,94 +1,94 @@
# MeyCan Binding # MeyCan Binding
_Give some details about what this binding is meant for - a protocol, system, specific device._ _Give some details about what this binding is meant for - a protocol, system, specific device._
_If possible, provide some resources like pictures (only PNG is supported currently), a video, etc. to give an impression of what can be done with this binding._ _If possible, provide some resources like pictures (only PNG is supported currently), a video, etc. to give an impression of what can be done with this binding._
_You can place such resources into a `doc` folder next to this README.md._ _You can place such resources into a `doc` folder next to this README.md._
_Put each sentence in a separate line to improve readability of diffs._ _Put each sentence in a separate line to improve readability of diffs._
## Supported Things ## Supported Things
_Please describe the different supported things / devices including their ThingTypeUID within this section._ _Please describe the different supported things / devices including their ThingTypeUID within this section._
_Which different types are supported, which models were tested etc.?_ _Which different types are supported, which models were tested etc.?_
_Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._ _Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._
- `bridge`: Short description of the Bridge, if any - `bridge`: Short description of the Bridge, if any
- `sample`: Short description of the Thing with the ThingTypeUID `sample` - `sample`: Short description of the Thing with the ThingTypeUID `sample`
## Discovery ## Discovery
_Describe the available auto-discovery features here._ _Describe the available auto-discovery features here._
_Mention for what it works and what needs to be kept in mind when using it._ _Mention for what it works and what needs to be kept in mind when using it._
## Binding Configuration ## Binding Configuration
_If your binding requires or supports general configuration settings, please create a folder ```cfg``` and place the configuration file ```<bindingId>.cfg``` inside it._ _If your binding requires or supports general configuration settings, please create a folder ```cfg``` and place the configuration file ```<bindingId>.cfg``` inside it._
_In this section, you should link to this file and provide some information about the options._ _In this section, you should link to this file and provide some information about the options._
_The file could e.g. look like:_ _The file could e.g. look like:_
``` ```
# Configuration for the MeyCan Binding # Configuration for the MeyCan Binding
# #
# Default secret key for the pairing of the MeyCan Thing. # Default secret key for the pairing of the MeyCan Thing.
# It has to be between 10-40 (alphanumeric) characters. # It has to be between 10-40 (alphanumeric) characters.
# This may be changed by the user for security reasons. # This may be changed by the user for security reasons.
secret=openHABSecret secret=openHABSecret
``` ```
_Note that it is planned to generate some part of this based on the information that is available within ```src/main/resources/OH-INF/binding``` of your binding._ _Note that it is planned to generate some part of this based on the information that is available within ```src/main/resources/OH-INF/binding``` of your binding._
_If your binding does not offer any generic configurations, you can remove this section completely._ _If your binding does not offer any generic configurations, you can remove this section completely._
## Thing Configuration ## Thing Configuration
_Describe what is needed to manually configure a thing, either through the UI or via a thing-file._ _Describe what is needed to manually configure a thing, either through the UI or via a thing-file._
_This should be mainly about its mandatory and optional configuration parameters._ _This should be mainly about its mandatory and optional configuration parameters._
_Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._ _Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._
### `sample` Thing Configuration ### `sample` Thing Configuration
| Name | Type | Description | Default | Required | Advanced | | Name | Type | Description | Default | Required | Advanced |
|-----------------|---------|---------------------------------------|---------|----------|----------| |-----------------|---------|---------------------------------------|---------|----------|----------|
| hostname | text | Hostname or IP address of the device | N/A | yes | no | | hostname | text | Hostname or IP address of the device | N/A | yes | no |
| password | text | Password to access the device | N/A | yes | no | | password | text | Password to access the device | N/A | yes | no |
| refreshInterval | integer | Interval the device is polled in sec. | 600 | no | yes | | refreshInterval | integer | Interval the device is polled in sec. | 600 | no | yes |
## Channels ## Channels
_Here you should provide information about available channel types, what their meaning is and how they can be used._ _Here you should provide information about available channel types, what their meaning is and how they can be used._
_Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._ _Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._
| Channel | Type | Read/Write | Description | | Channel | Type | Read/Write | Description |
|---------|--------|------------|-----------------------------| |---------|--------|------------|-----------------------------|
| control | Switch | RW | This is the control channel | | control | Switch | RW | This is the control channel |
## Full Example ## Full Example
_Provide a full usage example based on textual configuration files._ _Provide a full usage example based on textual configuration files._
_*.things, *.items examples are mandatory as textual configuration is well used by many users._ _*.things, *.items examples are mandatory as textual configuration is well used by many users._
_*.sitemap examples are optional._ _*.sitemap examples are optional._
### Thing Configuration ### Thing Configuration
```java ```java
Example thing configuration goes here. Example thing configuration goes here.
``` ```
### Item Configuration ### Item Configuration
```java ```java
Example item configuration goes here. Example item configuration goes here.
``` ```
### Sitemap Configuration ### Sitemap Configuration
```perl ```perl
Optional Sitemap configuration goes here. Optional Sitemap configuration goes here.
Remove this section, if not needed. Remove this section, if not needed.
``` ```
## Any custom content here! ## Any custom content here!
_Feel free to add additional sections for whatever you think should also be mentioned about your binding!_ _Feel free to add additional sections for whatever you think should also be mentioned about your binding!_

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.openhab.addons.bundles</groupId> <groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId> <artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>4.0.0-SNAPSHOT</version> <version>4.0.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>org.openhab.binding.meycan</artifactId> <artifactId>org.openhab.binding.meycan</artifactId>
<name>openHAB Add-ons :: Bundles :: MeyCan Binding</name> <name>openHAB Add-ons :: Bundles :: MeyCan Binding</name>
</project> </project>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<features name="org.openhab.binding.meycan-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0"> <features name="org.openhab.binding.meycan-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository> <repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository>
<feature name="openhab-binding-meycan" description="MeyCan Binding" version="${project.version}"> <feature name="openhab-binding-meycan" description="MeyCan Binding" version="${project.version}">
<feature>openhab-runtime-base</feature> <feature>openhab-runtime-base</feature>
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.meycan/${project.version}</bundle> <bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.meycan/${project.version}</bundle>
</feature> </feature>
</features> </features>

View File

@@ -1,34 +1,34 @@
/** /**
* Copyright (c) 2010-2023 Contributors to the openHAB project * Copyright (c) 2010-2023 Contributors to the openHAB project
* *
* See the NOTICE file(s) distributed with this work for additional * See the NOTICE file(s) distributed with this work for additional
* information. * information.
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at * terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0 * http://www.eclipse.org/legal/epl-2.0
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
*/ */
package org.openhab.binding.meycan.internal; package org.openhab.binding.meycan.internal;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.ThingTypeUID;
/** /**
* The {@link MeyCanBindingConstants} class defines common constants, which are * The {@link MeyCanBindingConstants} class defines common constants, which are
* used across the whole binding. * used across the whole binding.
* *
* @author Martin Linkwitz - Initial contribution * @author Martin Linkwitz - Initial contribution
*/ */
@NonNullByDefault @NonNullByDefault
public class MeyCanBindingConstants { public class MeyCanBindingConstants {
private static final String BINDING_ID = "meycan"; private static final String BINDING_ID = "meycan";
// List of all Thing Type UIDs // List of all Thing Type UIDs
public static final ThingTypeUID THING_TYPE_SAMPLE = new ThingTypeUID(BINDING_ID, "sample"); public static final ThingTypeUID THING_TYPE_SAMPLE = new ThingTypeUID(BINDING_ID, "sample");
// List of all Channel ids // List of all Channel ids
public static final String CHANNEL_1 = "channel1"; public static final String CHANNEL_1 = "channel1";
} }

View File

@@ -1,31 +1,31 @@
/** /**
* Copyright (c) 2010-2023 Contributors to the openHAB project * Copyright (c) 2010-2023 Contributors to the openHAB project
* *
* See the NOTICE file(s) distributed with this work for additional * See the NOTICE file(s) distributed with this work for additional
* information. * information.
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at * terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0 * http://www.eclipse.org/legal/epl-2.0
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
*/ */
package org.openhab.binding.meycan.internal; package org.openhab.binding.meycan.internal;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
/** /**
* The {@link MeyCanConfiguration} class contains fields mapping thing configuration parameters. * The {@link MeyCanConfiguration} class contains fields mapping thing configuration parameters.
* *
* @author Martin Linkwitz - Initial contribution * @author Martin Linkwitz - Initial contribution
*/ */
@NonNullByDefault @NonNullByDefault
public class MeyCanConfiguration { public class MeyCanConfiguration {
/** /**
* Sample configuration parameters. Replace with your own. * Sample configuration parameters. Replace with your own.
*/ */
public String hostname = ""; public String hostname = "";
public String password = ""; public String password = "";
public int refreshInterval = 600; public int refreshInterval = 600;
} }

View File

@@ -1,104 +1,104 @@
/** /**
* Copyright (c) 2010-2023 Contributors to the openHAB project * Copyright (c) 2010-2023 Contributors to the openHAB project
* *
* See the NOTICE file(s) distributed with this work for additional * See the NOTICE file(s) distributed with this work for additional
* information. * information.
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at * terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0 * http://www.eclipse.org/legal/epl-2.0
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
*/ */
package org.openhab.binding.meycan.internal; package org.openhab.binding.meycan.internal;
import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*; import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingStatus; import org.openhab.core.thing.ThingStatus;
import org.openhab.core.thing.binding.BaseThingHandler; import org.openhab.core.thing.binding.BaseThingHandler;
import org.openhab.core.types.Command; import org.openhab.core.types.Command;
import org.openhab.core.types.RefreshType; import org.openhab.core.types.RefreshType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
/** /**
* The {@link MeyCanHandler} is responsible for handling commands, which are * The {@link MeyCanHandler} is responsible for handling commands, which are
* sent to one of the channels. * sent to one of the channels.
* *
* @author Martin Linkwitz - Initial contribution * @author Martin Linkwitz - Initial contribution
*/ */
@NonNullByDefault @NonNullByDefault
public class MeyCanHandler extends BaseThingHandler { public class MeyCanHandler extends BaseThingHandler {
private final Logger logger = LoggerFactory.getLogger(MeyCanHandler.class); private final Logger logger = LoggerFactory.getLogger(MeyCanHandler.class);
private @Nullable MeyCanConfiguration config; private @Nullable MeyCanConfiguration config;
public MeyCanHandler(Thing thing) { public MeyCanHandler(Thing thing) {
super(thing); super(thing);
} }
@Override @Override
public void handleCommand(ChannelUID channelUID, Command command) { public void handleCommand(ChannelUID channelUID, Command command) {
if (CHANNEL_1.equals(channelUID.getId())) { if (CHANNEL_1.equals(channelUID.getId())) {
if (command instanceof RefreshType) { if (command instanceof RefreshType) {
// TODO: handle data refresh // TODO: handle data refresh
} }
// TODO: handle command // TODO: handle command
// Note: if communication with thing fails for some reason, // Note: if communication with thing fails for some reason,
// indicate that by setting the status with detail information: // indicate that by setting the status with detail information:
// updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
// "Could not control device at IP address x.x.x.x"); // "Could not control device at IP address x.x.x.x");
} }
} }
@Override @Override
public void initialize() { public void initialize() {
config = getConfigAs(MeyCanConfiguration.class); config = getConfigAs(MeyCanConfiguration.class);
// TODO: Initialize the handler. // TODO: Initialize the handler.
// The framework requires you to return from this method quickly, i.e. any network access must be done in // The framework requires you to return from this method quickly, i.e. any network access must be done in
// the background initialization below. // the background initialization below.
// Also, before leaving this method a thing status from one of ONLINE, OFFLINE or UNKNOWN must be set. This // Also, before leaving this method a thing status from one of ONLINE, OFFLINE or UNKNOWN must be set. This
// might already be the real thing status in case you can decide it directly. // might already be the real thing status in case you can decide it directly.
// In case you can not decide the thing status directly (e.g. for long running connection handshake using WAN // In case you can not decide the thing status directly (e.g. for long running connection handshake using WAN
// access or similar) you should set status UNKNOWN here and then decide the real status asynchronously in the // access or similar) you should set status UNKNOWN here and then decide the real status asynchronously in the
// background. // background.
// set the thing status to UNKNOWN temporarily and let the background task decide for the real status. // set the thing status to UNKNOWN temporarily and let the background task decide for the real status.
// the framework is then able to reuse the resources from the thing handler initialization. // the framework is then able to reuse the resources from the thing handler initialization.
// we set this upfront to reliably check status updates in unit tests. // we set this upfront to reliably check status updates in unit tests.
updateStatus(ThingStatus.UNKNOWN); updateStatus(ThingStatus.UNKNOWN);
// Example for background initialization: // Example for background initialization:
scheduler.execute(() -> { scheduler.execute(() -> {
boolean thingReachable = true; // <background task with long running initialization here> boolean thingReachable = true; // <background task with long running initialization here>
// when done do: // when done do:
if (thingReachable) { if (thingReachable) {
updateStatus(ThingStatus.ONLINE); updateStatus(ThingStatus.ONLINE);
} else { } else {
updateStatus(ThingStatus.OFFLINE); updateStatus(ThingStatus.OFFLINE);
} }
}); });
// These logging types should be primarily used by bindings // These logging types should be primarily used by bindings
// logger.trace("Example trace message"); // logger.trace("Example trace message");
// logger.debug("Example debug message"); // logger.debug("Example debug message");
// logger.warn("Example warn message"); // logger.warn("Example warn message");
// //
// Logging to INFO should be avoided normally. // Logging to INFO should be avoided normally.
// See https://www.openhab.org/docs/developer/guidelines.html#f-logging // See https://www.openhab.org/docs/developer/guidelines.html#f-logging
// Note: When initialization can NOT be done set the status with more details for further // Note: When initialization can NOT be done set the status with more details for further
// analysis. See also class ThingStatusDetail for all available status details. // analysis. See also class ThingStatusDetail for all available status details.
// Add a description to give user information to understand why thing does not work as expected. E.g. // Add a description to give user information to understand why thing does not work as expected. E.g.
// updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
// "Can not access device as username and/or password are invalid"); // "Can not access device as username and/or password are invalid");
} }
} }

View File

@@ -1,55 +1,55 @@
/** /**
* Copyright (c) 2010-2023 Contributors to the openHAB project * Copyright (c) 2010-2023 Contributors to the openHAB project
* *
* See the NOTICE file(s) distributed with this work for additional * See the NOTICE file(s) distributed with this work for additional
* information. * information.
* *
* This program and the accompanying materials are made available under the * This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at * terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0 * http://www.eclipse.org/legal/epl-2.0
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
*/ */
package org.openhab.binding.meycan.internal; package org.openhab.binding.meycan.internal;
import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*; import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*;
import java.util.Set; import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.BaseThingHandlerFactory;
import org.openhab.core.thing.binding.ThingHandler; import org.openhab.core.thing.binding.ThingHandler;
import org.openhab.core.thing.binding.ThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandlerFactory;
import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Component;
/** /**
* The {@link MeyCanHandlerFactory} is responsible for creating things and thing * The {@link MeyCanHandlerFactory} is responsible for creating things and thing
* handlers. * handlers.
* *
* @author Martin Linkwitz - Initial contribution * @author Martin Linkwitz - Initial contribution
*/ */
@NonNullByDefault @NonNullByDefault
@Component(configurationPid = "binding.meycan", service = ThingHandlerFactory.class) @Component(configurationPid = "binding.meycan", service = ThingHandlerFactory.class)
public class MeyCanHandlerFactory extends BaseThingHandlerFactory { public class MeyCanHandlerFactory extends BaseThingHandlerFactory {
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_SAMPLE); private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_SAMPLE);
@Override @Override
public boolean supportsThingType(ThingTypeUID thingTypeUID) { public boolean supportsThingType(ThingTypeUID thingTypeUID) {
return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID); return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID);
} }
@Override @Override
protected @Nullable ThingHandler createHandler(Thing thing) { protected @Nullable ThingHandler createHandler(Thing thing) {
ThingTypeUID thingTypeUID = thing.getThingTypeUID(); ThingTypeUID thingTypeUID = thing.getThingTypeUID();
if (THING_TYPE_SAMPLE.equals(thingTypeUID)) { if (THING_TYPE_SAMPLE.equals(thingTypeUID)) {
return new MeyCanHandler(thing); return new MeyCanHandler(thing);
} }
return null; return null;
} }
} }

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="meycan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <addon:addon id="meycan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0" xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd"> xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">
<type>binding</type> <type>binding</type>
<name>MeyCan Binding</name> <name>MeyCan Binding</name>
<description>This is the binding for MeyCan.</description> <description>This is the binding for MeyCan.</description>
</addon:addon> </addon:addon>

View File

@@ -1,3 +1,3 @@
# FIXME: please add all English translations to this file so the texts can be translated using Crowdin # FIXME: please add all English translations to this file so the texts can be translated using Crowdin
# FIXME: to generate the content of this file run: mvn i18n:generate-default-translations # FIXME: to generate the content of this file run: mvn i18n:generate-default-translations
# FIXME: see also: https://www.openhab.org/docs/developer/utils/i18n.html # FIXME: see also: https://www.openhab.org/docs/developer/utils/i18n.html

View File

@@ -1,48 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="meycan" <thing:thing-descriptions bindingId="meycan"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0" xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<!-- Sample Thing Type --> <!-- Sample Thing Type -->
<thing-type id="sample"> <thing-type id="sample">
<!-- Comment this in for Things which need a Bridge to function. <!-- Comment this in for Things which need a Bridge to function.
<supported-bridge-type-refs> <supported-bridge-type-refs>
<bridge-type-ref id="MeyCanBridge" /> <bridge-type-ref id="MeyCanBridge" />
</supported-bridge-type-refs> </supported-bridge-type-refs>
--> -->
<label>MeyCan Binding Thing</label> <label>MeyCan Binding Thing</label>
<description>Sample thing for MeyCan Binding</description> <description>Sample thing for MeyCan Binding</description>
<channels> <channels>
<channel id="channel1" typeId="sample-channel"/> <channel id="channel1" typeId="sample-channel"/>
</channels> </channels>
<config-description> <config-description>
<parameter name="hostname" type="text" required="true"> <parameter name="hostname" type="text" required="true">
<context>network-address</context> <context>network-address</context>
<label>Hostname</label> <label>Hostname</label>
<description>Hostname or IP address of the device</description> <description>Hostname or IP address of the device</description>
</parameter> </parameter>
<parameter name="password" type="text" required="true"> <parameter name="password" type="text" required="true">
<context>password</context> <context>password</context>
<label>Password</label> <label>Password</label>
<description>Password to access the device</description> <description>Password to access the device</description>
</parameter> </parameter>
<parameter name="refreshInterval" type="integer" unit="s" min="1"> <parameter name="refreshInterval" type="integer" unit="s" min="1">
<label>Refresh Interval</label> <label>Refresh Interval</label>
<description>Interval the device is polled in sec.</description> <description>Interval the device is polled in sec.</description>
<default>600</default> <default>600</default>
<advanced>true</advanced> <advanced>true</advanced>
</parameter> </parameter>
</config-description> </config-description>
</thing-type> </thing-type>
<!-- Sample Channel Type --> <!-- Sample Channel Type -->
<channel-type id="sample-channel"> <channel-type id="sample-channel">
<item-type>Number:Temperature</item-type> <item-type>Number:Temperature</item-type>
<label>Example Temperature</label><!-- Use uppercase words, except prepositions. 2-3 words, max 25 chars --> <label>Example Temperature</label><!-- Use uppercase words, except prepositions. 2-3 words, max 25 chars -->
<description>Sample channel for MeyCan Binding</description> <description>Sample channel for MeyCan Binding</description>
</channel-type> </channel-type>
</thing:thing-descriptions> </thing:thing-descriptions>

View File

@@ -1,49 +1,67 @@
MeyCan: PROTOCOL MeyCan: PROTOCOL
ArbitartionID: ArbitartionID:
|<-- 13 bits -->| |<-- 16 bits -->| |<-- 13 bits -->| |<-- 16 bits -->|
COMMAND DEVICE_ID COMMAND DEVICE_ID
ABC 0x14 6A ABC 0x14 6A
COMMAND: The Command or data type transfered. -> 2^11 = 2048 Package-Types COMMAND: The Command or data type transfered. -> 2^11 = 2048 Package-Types
DEVICE_ID: A unique id for the device within the CAN Network (Home) -> 2^18 bit = 65.536 devices allowed DEVICE_ID: A unique id for the device within the CAN Network (Home) -> 2^18 bit = 65.536 devices allowed
Packages Packages
--------------------------------- ---------------------------------
0xF00: HELLO->ADOPT 0xF00: HELLO->ADOPT
Payload: Payload:
2 bytes | Byte -> Software-Version (1.0) 2 bytes | Byte -> Software-Version (1.0)
2 bytes | Byte -> Hw Version (4.0) 2 bytes | Byte -> Hw Version (4.0)
2 bytes | DeviceId -> DeviceId Explicit 1 bytes | DeviceTypeId
| 1: Switch
0x050: Input Switch Triggered | 2: Switch + Rule
-> Broadcast | 3: UP
---------------------------------
Payload: 0x050: Input Switch Triggered
1 byte| PinId -> Id of the pin of the local board. -> Broadcast
1 byte| State -> 1 for Switched, 0 for Unswitched ---------------------------------
Payload:
0x055: Command Set Switch 1 byte| PinId -> Id of the pin of the local board.
-> Broadcast 1 byte| State -> 1 for Switched, 0 for Unswitched
---------------------------------
2 bytes | TargetDeviceId -> The id of the device to set the pin of 0x055: Command Set Switch
1 byte | PinId -> Idof the pin of the board -> Broadcast
1 byte | state -> 1 to swtich on, 0 to switch off ---------------------------------
2 bytes | TargetDeviceId -> The id of the device to set the pin of
1 byte | PinId -> Idof the pin of the board
1 byte | state -> 1 to swtich on, 0 to switch off
0x010: Request Remote Pin State
-> Broadcast
---------------------------------
2 bytes | TargetDeviceId -> The id of the board to request the remote pin states from. This needs to be a control device (not UP) 0x010: Request Remote Pin State
1 byte | 0: Request -> Broadcast
| 1: Response ---------------------------------
DAT | 2 bytes | TargetDeviceId -> The id of the board to request the remote pin states from. This needs to be a control device (not UP)
-- n Items of format ------------ 1 byte | 0: Request
* 2 byte: DeviceId | 1: Response
* 1 byte: The State DAT |
-- n Items of format ------------
* 2 byte: DeviceId
* 1 byte: The State
0x009: Debug
-> Debug Package
----------------------------------
some debug information
0xAA AudioStream #1
0xAB AudioStream #2
0xBA AudioStream #3
0xBB AudioStream #4
0xAAXX -> XX = Sequence Counter
0xY -> Reserve - Flag
|<-- 4 bits -->| |<-- 24 bits -->|
-> 3 Byte / Paket

Binary file not shown.

View File

@@ -1,7 +1,7 @@
{ {
"configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader", "configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader",
"board": "MegaCoreX:megaavr:809", "board": "MegaCoreX:megaavr:809",
"sketch": "Switch.ino", "sketch": "Switch.ino",
"port": "COM6", "port": "COM6",
"programmer": "jtag2updi" "programmer": "jtag2updi"
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,255 +1,232 @@
#include "MeyCan.h"; #include "MeyCan.h";
#include <SPI.h>; #include <SPI.h>;
#include <mcp2515.h>; #include <mcp2515.h>;
PinState *MeyPin = NULL; PinState *MeyPin = NULL;
CanInterface *CanBusses = NULL; CanInterface *CanBusses = NULL;
uint16_t myDeviceId; uint16_t myDeviceId;
byte _deviceTypeId = 0; byte _deviceTypeId = 0;
byte _majorHardwareVersion = 0; byte _majorHardwareVersion = 0;
byte _minorHardwareVersion = 0; byte _minorHardwareVersion = 0;
void (*LocalPinChangedHandler)(can_frame *frame);
void SetupMeyPin(PinState *state)
{ void SetupMeyPin(PinState *state) {
pinMode(state->pin_id, OUTPUT); pinMode(state->pin_id, OUTPUT);
digitalWrite(state->pin_id, LOW); digitalWrite(state->pin_id, LOW);
state->pin_state = false; state->pin_state = false;
} }
void InitCanInterface(MCP2515 *interface, can_frame *frame) // can_frame is NULL. Reuse ForEach Method for smaller footprint void InitCanInterface(MCP2515 *interface, can_frame *frame) // can_frame is NULL. Reuse ForEach Method for smaller footprint
{ {
interface->reset(); interface->reset();
interface->setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz interface->setBitrate(CAN_1000KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
interface->setNormalMode(); interface->setNormalMode();
SendVersionPackage(interface); SendVersionPackage(interface);
} }
void ForEachCanInterface(void (*handle)(MCP2515 *canInterace)) void ForEachCanInterface(void (*handle)(MCP2515 *canInterace)) {
{ CanBusses->ForEachInterface(handle);
CanBusses->ForEachInterface(handle); }
}
void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId) {
void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId) _majorHardwareVersion = majorHardwareVersion;
{ _minorHardwareVersion = minorHardwareVersion;
_majorHardwareVersion = majorHardwareVersion; _deviceTypeId = deviceTypeId;
_minorHardwareVersion = minorHardwareVersion;
_deviceTypeId = deviceTypeId; if (MeyPin != NULL)
CalculateMyDeviceId(); ;
MeyPin->ForEach(SetupMeyPin);
if (MeyPin != NULL);
MeyPin->ForEach(SetupMeyPin); if (CanBusses != NULL) {
CanBusses->ForEach(InitCanInterface, NULL);
if (CanBusses != NULL) }
{ }
CanBusses->ForEach(InitCanInterface, NULL);
} void AddCanInterface(byte pinId) {
} MCP2515 *newCanInterface = new MCP2515(pinId);
CanInterface *canInterface = new CanInterface();
void AddCanInterface(byte pinId) canInterface->interface = newCanInterface;
{
MCP2515* newCanInterface = new MCP2515(pinId); if (CanBusses == NULL)
CanInterface* canInterface = new CanInterface(); CanBusses = canInterface;
canInterface->interface = newCanInterface; else
CanBusses->AddCanInterface(canInterface);
if (CanBusses == NULL) }
CanBusses = canInterface;
else void AddLocalPinChangedHandler(void (*localPinChangedHandler)(can_frame *frame)) {
CanBusses->AddCanInterface(canInterface); LocalPinChangedHandler = localPinChangedHandler;
} }
void SetMeyPin(byte index, byte meyPinId, byte pinId) void SetDevicedId(byte high, byte low) {
{ myDeviceId = (high << 8) | low;
PinState* newState = new PinState(); }
newState->Init(pinId, (byte) meyPinId);
void SetMeyPin(byte meyPinId, byte pinId) {
if (MeyPin == NULL) PinState *newState = new PinState();
MeyPin = newState; newState->Init(pinId, (byte)meyPinId);
else
MeyPin->AddPinState(newState); if (MeyPin == NULL)
} MeyPin = newState;
else
MeyPin->AddPinState(newState);
bool CheckPinStatus(PinState * state) }
{
if (!state->is_input)
return false; bool CheckPinStatus(PinState *state) {
if (!state->is_input)
bool newValue = ReadPin(state); return false;
bool newValue = ReadPin(state);
if (newValue != state->pin_state)
{
delay(10); if (newValue != state->pin_state) {
newValue = ReadPin(state); delay(10);
if (newValue != state->pin_state) newValue = ReadPin(state);
{ if (newValue != state->pin_state) {
state->pin_state = newValue; state->pin_state = newValue;
SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state); SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state);
} }
} }
return false; return false;
} }
void CheckMeyPinsTriggered() void CheckMeyPinsTriggered() {
{ MeyPin->ForEach(CheckPinStatus);
MeyPin->ForEach(CheckPinStatus); }
}
bool ReadPin(PinState *state) {
bool ReadPin(PinState * state) return digitalRead(state->pin_id);
{ }
if (state->pin_id == PIN_PD2)
return digitalReadFast(PIN_PD2);
else if (state->pin_id == PIN_PC7) void HandleFrame(can_frame *frame, MCP2515 *source) {
return digitalReadFast(PIN_PC7); CanBusses->ForEach(DoSendCanPkg, frame, source);
else if (state->pin_id == PIN_PD1) HandleTriggerMeypinCanPackage(frame);
return digitalReadFast(PIN_PD1); }
else if (state->pin_id == PIN_PD0)
return digitalReadFast(PIN_PD0); void HandleTriggerMeypinCanPackage(can_frame *frame) {
else if (state->pin_id == PIN_PD6)
return digitalReadFast(PIN_PD6);
else if (state->pin_id == PIN_PD5) if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID) {
return digitalReadFast(PIN_PD5);
else if (state->pin_id == PIN_PD4)
return digitalReadFast(PIN_PD4); uint16_t adressedDeviceId = ((uint16_t)frame->data[0] << 8) | frame->data[1];
else if (state->pin_id == PIN_PD3) if (adressedDeviceId != myDeviceId) return;
return digitalReadFast(PIN_PD3);
else
return digitalRead(state->pin_id); byte meyPinId = frame->data[2];
} bool state = frame->data[3] > 0;
PinState *adressedPin = MeyPin->Find(meyPinId);
void HandleFrame(can_frame *frame, MCP2515 *source)
{ if (adressedPin != NULL) {
CanBusses->ForEach(DoSendCanPkg, frame, source); if (adressedPin->is_input == true) {
HandleTriggerMeypinCanPackage(frame); pinMode(adressedPin->pin_id, OUTPUT);
} adressedPin->is_input = false;
}
void HandleTriggerMeypinCanPackage(can_frame *frame)
{ bool pinChanged = adressedPin->pin_state != state;
if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID) adressedPin->pin_state = state;
{
uint16_t adressedDeviceId = ((uint16_t )frame->data[0] << 8) | frame->data[1] ; if (pinChanged) {
if (adressedDeviceId != myDeviceId) return; digitalWrite(adressedPin->pin_id, state);
SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state);
}
byte meyPinId = frame->data[2]; }
bool state = frame->data[3] > 0; }
}
PinState *adressedPin = MeyPin->Find(meyPinId);
byte CircularShift(byte b) {
if (adressedPin != NULL) return (b << 1) | (b >> 7 & 1);
{ }
if (adressedPin->is_input == true)
{ uint16_t GetDeviceId(uint32_t canFrameId) {
pinMode(adressedPin->pin_id, OUTPUT); return canFrameId & 0xFFFF;
adressedPin->is_input = false; }
}
uint16_t GetPackageType(uint32_t canFrameId) {
bool pinChanged = adressedPin->pin_state != state; return (canFrameId / 0x10000) & 0xFFF;
adressedPin->pin_state = state; }
if (pinChanged) {
digitalWrite(adressedPin->pin_id, state); uint32_t CreateCanId(uint16_t commandId) {
SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state); return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG;
} }
} void SendVersionPackage(MCP2515 *interface) {
} can_frame toSend;
} toSend.can_id = CreateCanId(HELP_PACKAGE_CAN_ID);
toSend.can_dlc = 5;
byte CircularShift(byte b)
{ toSend.data[0] = SOFTWARE_VERSION_HIGH;
return (b << 1) | (b >> 7 & 1); toSend.data[1] = SOFTWARE_VERSION_LOW;
} toSend.data[2] = _majorHardwareVersion;
toSend.data[3] = _minorHardwareVersion;
uint16_t GetDeviceId(uint32_t canFrameId) toSend.data[4] = _deviceTypeId;
{
return canFrameId & 0xFFFF; DoSendCanPkg(interface, &toSend);
} }
uint16_t GetPackageType(uint32_t canFrameId) void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state) {
{ can_frame toSend;
return (canFrameId / 0x10000) & 0xFFF;
} toSend.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID);
toSend.can_dlc = 4;
byte GetDeviceIdLow() { toSend.data[0] = (targetCanId & 0xFF00) >> 8;
return (SIGROW.SERNUM0 ^ toSend.data[1] = targetCanId & 0xFF;
CircularShift(SIGROW.SERNUM2) << 1 ^ toSend.data[2] = pinId;
CircularShift( CircularShift(SIGROW.SERNUM4)) ^ toSend.data[3] = state;
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); HandleFrame(&toSend, NULL);
} }
byte GetDeviceIdHigh() { void BroadcastDebugPackage(uint8_t length, byte *data) {
return (SIGROW.SERNUM1 ^ can_frame toSend;
CircularShift(SIGROW.SERNUM3) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM5)) ^ toSend.can_id = CreateCanId(DEBUG_PKG_CAN_ID);
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ toSend.can_dlc = length;
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); for (int i = 0; i < length; i++) {
} toSend.data[i] = data[i];
}
uint32_t CreateCanId(uint16_t commandId)
{ HandleFrame(&toSend, NULL);
return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; }
} void BroadcastDebugPackage(byte b0, byte b1) {
byte data[2];
void SendVersionPackage(MCP2515 *interface) data[0] = b0;
{ data[1] = b1;
can_frame toSend; BroadcastDebugPackage(2, data);
toSend.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); }
toSend.can_dlc = 5; void BroadcastDebugPackage(byte b0, byte b1, byte b2) {
byte data[3];
toSend.data[0] = SOFTWARE_VERSION_HIGH; data[0] = b0;
toSend.data[1] = SOFTWARE_VERSION_LOW; data[1] = b1;
toSend.data[2] = _majorHardwareVersion; data[2] = b2;
toSend.data[3] = _minorHardwareVersion; BroadcastDebugPackage(3, data);
toSend.data[4] = _deviceTypeId; }
DoSendCanPkg(interface, &toSend); void SendSwitchedTriggeredCanPackage(byte pinId, int state) {
} can_frame toSend;
toSend.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID);
void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state) toSend.can_dlc = 2;
{ toSend.data[0] = pinId;
can_frame toSend; toSend.data[1] = state;
toSend.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID); DoSendCanPkg(&toSend);
toSend.can_dlc = 4; if (LocalPinChangedHandler) {
toSend.data[0] = (targetCanId & 0xFF00) >> 8; LocalPinChangedHandler(&toSend);
toSend.data[1] = targetCanId & 0xFF; }
toSend.data[2] = pinId; }
toSend.data[3] = state;
void DoSendCanPkg(can_frame *frame) {
HandleFrame(&toSend, NULL); if (CanBusses != NULL)
} CanBusses->ForEach(DoSendCanPkg, frame);
}
void SendSwitchedTriggeredCanPackage(byte pinId, int state)
{ void DoSendCanPkg(MCP2515 *interface, can_frame *frame) {
can_frame toSend; byte cnt = 0;
toSend.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID); while (interface->sendMessage(frame)) {
toSend.can_dlc = 2; if (++cnt > 10) return;
toSend.data[0] = pinId; }
toSend.data[1] = state; }
DoSendCanPkg(&toSend);
}
void DoSendCanPkg(can_frame *frame)
{
if (CanBusses != NULL)
CanBusses->ForEach(DoSendCanPkg, frame);
}
void DoSendCanPkg(MCP2515 *interface, can_frame *frame)
{
byte cnt = 0;
while (interface->sendMessage(frame))
{
if (++cnt > 10) return;
}
}
void CalculateMyDeviceId()
{
myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow();
}

View File

@@ -1,128 +1,139 @@
#ifndef MEYCAN_H #ifndef MEYCAN_H
#define MEYCAN_H #define MEYCAN_H
#include <SPI.h> #include <SPI.h>
#include <mcp2515.h> #include <mcp2515.h>
typedef struct CanInterface typedef struct CanInterface
{ {
MCP2515 *interface; MCP2515 *interface;
CanInterface *next = NULL; CanInterface *next = NULL;
void ForEachInterface(void (*handle)( MCP2515 *interface)) void ForEachInterface(void (*handle)( MCP2515 *interface))
{ {
if (this->interface != NULL) if (this->interface != NULL)
handle(this->interface); handle(this->interface);
if (this->next != NULL) if (this->next != NULL)
this->next->ForEachInterface(handle); this->next->ForEachInterface(handle);
} }
void ForEach(void (*handle)( MCP2515 *interface, can_frame *frame), can_frame *frame, MCP2515* exclude = NULL) void ForEach(void (*handle)( MCP2515 *interface, can_frame *frame), can_frame *frame, MCP2515* exclude = NULL)
{ {
if (this->interface != NULL && this->interface != exclude) if (this->interface != NULL && this->interface != exclude)
handle(this->interface, frame); handle(this->interface, frame);
if (this->next != NULL) if (this->next != NULL)
this->next->ForEach(handle, frame, exclude); this->next->ForEach(handle, frame, exclude);
} }
void AddCanInterface(CanInterface *newCanInterface) void AddCanInterface(CanInterface *newCanInterface)
{ {
if (next == NULL) if (next == NULL)
{ {
this->next = newCanInterface; this->next = newCanInterface;
newCanInterface->next = NULL; newCanInterface->next = NULL;
} else { } else {
next->AddCanInterface(newCanInterface); next->AddCanInterface(newCanInterface);
} }
} }
}; };
typedef struct PinState typedef struct PinState
{ {
int pin_id; int pin_id;
bool pin_state; bool pin_state;
bool is_input; bool is_input;
byte meyPinId; byte meyPinId;
PinState *next = NULL; PinState *next = NULL;
PinState() {} PinState() {}
void Init(int pin_id, byte meyPinId) void Init(int pin_id, byte meyPinId)
{ {
this->pin_id = pin_id; this->pin_id = pin_id;
this->pin_state = true; this->pin_state = true;
this->is_input = true; this->is_input = true;
this->meyPinId = meyPinId; this->meyPinId = meyPinId;
} }
void AddPinState(PinState *nextPinState) void AddPinState(PinState *nextPinState)
{ {
if (next == NULL) if (next == NULL)
{ {
this->next = nextPinState; this->next = nextPinState;
nextPinState->next = NULL; nextPinState->next = NULL;
} else { } else {
next->AddPinState(nextPinState); next->AddPinState(nextPinState);
} }
} }
PinState* Find(byte meyPinId) PinState* Find(byte meyPinId)
{ {
if (this->meyPinId == meyPinId) if (this->meyPinId == meyPinId)
return this; return this;
if (this->next != NULL) if (this->next != NULL)
return this->next->Find(meyPinId); return this->next->Find(meyPinId);
return NULL; return NULL;
} }
void ForEach(void (*handle)(PinState *theState)) void ForEach(void (*handle)(PinState *theState))
{ {
handle(this); handle(this);
if (this->next != NULL) if (this->next != NULL)
this->next->ForEach(handle); this->next->ForEach(handle);
} }
}; };
const byte SOFTWARE_VERSION_HIGH = 5; const byte SOFTWARE_VERSION_HIGH = 5;
const byte SOFTWARE_VERSION_LOW = 0; const byte SOFTWARE_VERSION_LOW = 0;
const byte HARDWARE_VERSION_HIGH = 7; const byte HARDWARE_VERSION_HIGH = 7;
const byte HARDWARE_VERSION_LOW = 0; const byte HARDWARE_VERSION_LOW = 0;
const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL; const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL;
const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050; const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050;
const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055; const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055;
const uint16_t DEBUG_PKG_CAN_ID = 0x0009;
void AddCanInterface(byte pinId);
void SetMeyPin(byte index, byte meyPinId, byte pinId); void SetDevicedId(byte high, byte low);
void SetMeyPin(byte meyPinId, byte pinId);
void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId);
// we need to put the local change to the rules engine. otherwise local changes on a pin will not come to the rules state.
void ForEachCanInterface(void (*handle)(MCP2515 *canInterace)); void AddLocalPinChangedHandler(void (*localPinChangedHandler)(can_frame *frame));
bool ReadPin(PinState *state);
bool CheckPinStatus(PinState * state);
void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */ void AddCanInterface(byte pinId);
void HandleFrame(can_frame *frame, MCP2515 *source);
void HandleTriggerMeypinCanPackage(can_frame *frame); void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId);
byte CircularShift(byte b);
uint16_t GetDeviceId(uint32_t canFrameId); void ForEachCanInterface(void (*handle)(MCP2515 *canInterace));
uint16_t GetPackageType(uint32_t canFrameId); bool ReadPin(PinState *state);
byte GetDeviceIdLow(); bool CheckPinStatus(PinState * state);
void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */
byte GetDeviceIdHigh(); void HandleFrame(can_frame *frame, MCP2515 *source);
void HandleTriggerMeypinCanPackage(can_frame *frame);
uint32_t CreateCanId(uint16_t commandId); byte CircularShift(byte b);
void SendVersionPackage(MCP2515 *interface); uint16_t GetDeviceId(uint32_t canFrameId);
uint16_t GetPackageType(uint32_t canFrameId);
void SendSwitchedTriggeredCanPackage(byte pinId, int state); byte GetDeviceIdLow();
void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state);
byte GetDeviceIdHigh();
void DoSendCanPkg(can_frame *frame);
void DoSendCanPkg(MCP2515 *interface, can_frame *frame); uint32_t CreateCanId(uint16_t commandId);
void SendVersionPackage(MCP2515 *interface);
void CalculateMyDeviceId();
void SendSwitchedTriggeredCanPackage(byte pinId, int state);
#endif
void BroadcastDebugPackage(byte b0, byte b1);
void BroadcastDebugPackage(byte b0, byte b1, byte b2);
void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state);
void DoSendCanPkg(can_frame *frame);
void DoSendCanPkg(MCP2515 *interface, can_frame *frame);
void CalculateMyDeviceId();
#endif

View File

@@ -1,114 +1,117 @@
#include "MeyRule.h" #include "MeyRule.h"
#include "MeyCan.h" #include "MeyCan.h"
#include <Arduino.h> #include <Arduino.h>
#include <mcp2515.h>; #include <mcp2515.h>;
RemotePinInfo remotePinInfo = RemotePinInfo(); RemotePinInfo remotePinInfo = RemotePinInfo();
Rule *rules = NULL; Rule *rules = NULL;
void PutRule(Rule *rule) void PutRule(Rule *rule) {
{ if (rules == NULL)
if (rules == NULL) rules = rule;
rules = rule; else
else rules->AddRule(rule);
rules->AddRule(rule); }
}
void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) {
void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) Rule *rule = new Rule();
{
Rule *rule = new Rule(); rule->sourceDevId = sourceDevId;
rule->sourceMeyPinId = sourceMeyPinId;
rule->sourceDevId = sourceDevId; rule->target.devId = targetDevId;
rule->sourceMeyPinId = sourceMeyPinId; rule->target.meyPinId = targetMeyPinId;
rule->targetDevId = targetDevId; rule->target.lastPinState = false;
rule->targetMeyPinId = targetMeyPinId; rule->toggle = false;
rule->toggle = false; rule->inverse = false;
rule->inverse = false;
rule->lastPinState = false; PutRule(rule);
}
PutRule(rule);
} void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) {
Rule *rule = new Rule();
void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{ rule->sourceDevId = sourceDevId;
Rule *rule = new Rule(); rule->sourceMeyPinId = sourceMeyPinId;
rule->target.devId = targetDevId;
rule->sourceDevId = sourceDevId; rule->target.meyPinId = targetMeyPinId;
rule->sourceMeyPinId = sourceMeyPinId; rule->target.lastPinState = false;
rule->targetDevId = targetDevId; rule->toggle = true;
rule->targetMeyPinId = targetMeyPinId; rule->inverse = false;
rule->toggle = true;
rule->inverse = false; PutRule(rule);
rule->lastPinState = false; }
PutRule(rule); void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) {
} Rule *rule = new Rule();
void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) rule->sourceDevId = sourceDevId;
{ rule->sourceMeyPinId = sourceMeyPinId;
Rule *rule = new Rule(); rule->target.devId = targetDevId;
rule->target.meyPinId = targetMeyPinId;
rule->sourceDevId = sourceDevId; rule->target.lastPinState = false;
rule->sourceMeyPinId = sourceMeyPinId; rule->toggle = true;
rule->targetDevId = targetDevId; rule->inverse = true;
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = true; PutRule(rule);
rule->inverse = true; }
rule->lastPinState = false;
PutRule(rule);
} void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule) {
RemotePinInfo *currentRemotePinInfo = remotePinInfo.FindOrAdd(rule->target.devId);
void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule)
{ if (currentRemotePinInfo == NULL) return;
RemotePinInfo *currentRemotePinInfo = remotePinInfo.FindOrAdd(rule->targetDevId);
if (currentRemotePinInfo == NULL) return; // check the new state with the last one. Needs to be done, as the UP switch might
// send it multiple times like "01 01" "01 01" for a single tip.(antibeat)
// check the new state with the last one. Needs to be done, as the UP switch might bool lastPinState = rule->target.lastPinState;
// send it multiple times like "01 01" "01 01" for a single tip.(antibeat) bool pinState = dt > 0;
bool lastPinState = rule->lastPinState;
bool pinState = dt > 0; if (rule->triggeredOnce && lastPinState == pinState) return;
if (rule->triggeredOnce && lastPinState == pinState) return; rule->target.lastPinState = pinState;
rule->lastPinState = pinState; rule->triggeredOnce = true;
rule->triggeredOnce = true;
if (rule->inverse)
if (rule->inverse) pinState = !pinState;
pinState = !pinState;
if (rule->toggle)
if (rule->toggle) pinState = (currentRemotePinInfo->getPinState(rule->target.meyPinId) ^ true);
pinState = (currentRemotePinInfo->getPinState(rule->targetMeyPinId) ^ true);
currentRemotePinInfo->setPinState(rule->target.meyPinId, pinState);
BroadcastTriggerMeyPinCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState); BroadcastTriggerMeyPinCanPackage(rule->target.devId, rule->target.meyPinId, pinState);
currentRemotePinInfo->setPinState(rule->targetMeyPinId, pinState); }
}
void HandleTriggered(can_frame *frame) {
void HandleTriggered(can_frame *frame) if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) {
{ RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(GetDeviceId(frame->can_id));
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
{ if (currentPinState == NULL) {
RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(GetDeviceId(frame->can_id) );
return;
if (currentPinState == NULL) }
return;
currentPinState->setPinState(frame->data[0], frame->data[1]);
currentPinState->setPinState(frame->data[0], frame->data[1]); }
} }
}
void SetLocalPinState(can_frame *frame)
void HandleRules(can_frame *frame) {
{ HandleTriggered(frame);
HandleTriggered(frame); }
if (rules == NULL) return; void HandleRules(can_frame *frame) {
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
{ if (rules != NULL) {
uint16_t deviceId = GetDeviceId(frame->can_id); if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) {
uint8_t dt = frame->data[1]; uint16_t deviceId = GetDeviceId(frame->can_id);
uint8_t state = frame->data[0]; uint8_t dt = frame->data[1];
uint8_t state = frame->data[0];
rules->Traverse(deviceId, dt, state, CheckRule);
} rules->Traverse(deviceId, dt, state, CheckRule);
} }
}
HandleTriggered(frame);
}

View File

@@ -1,113 +1,107 @@
#ifndef MEYRULE_H #ifndef MEYRULE_H
#define MEYRULE_H #define MEYRULE_H
#include <Arduino.h> #include <Arduino.h>
#include <mcp2515.h>; #include <mcp2515.h>;
struct Rule struct TargetPin{
{ uint16_t devId;
uint16_t sourceDevId; byte meyPinId;
byte sourceMeyPinId; bool lastPinState = false;
uint16_t targetDevId;
byte targetMeyPinId; };
bool toggle;
bool inverse; struct Rule {
Rule *nextRule = NULL; uint16_t sourceDevId;
bool lastPinState = false; byte sourceMeyPinId;
bool triggeredOnce = false; TargetPin target = TargetPin();
bool toggle;
void AddRule(Rule *rule) bool inverse;
{ Rule *nextRule = NULL;
if (this->nextRule == NULL) bool triggeredOnce = false;
{
this->nextRule = rule; void AddRule(Rule *rule) {
rule->nextRule = NULL; if (this->nextRule == NULL) {
} else { this->nextRule = rule;
this->nextRule->AddRule(rule); rule->nextRule = NULL;
} } else {
} this->nextRule->AddRule(rule);
}
void Traverse( uint16_t deviceId, uint8_t dt, uint8_t state, void (*handle)(uint16_t, uint8_t, uint8_t, Rule*)) }
{
void Traverse(uint16_t deviceId, uint8_t dt, uint8_t state, void (*handle)(uint16_t, uint8_t, uint8_t, Rule *)) {
if ( this->sourceDevId == deviceId && this->sourceMeyPinId == state)
handle(deviceId, dt, state, this); if (this->sourceDevId == deviceId && this->sourceMeyPinId == state)
handle(deviceId, dt, state, this);
if (this->nextRule != NULL)
this->nextRule->Traverse(deviceId, dt, state, handle); if (this->nextRule != NULL)
this->nextRule->Traverse(deviceId, dt, state, handle);
} }
}; };
typedef struct RemotePinInfo typedef struct RemotePinInfo {
{ const byte MAX_REMOTE_PIN_COUNT = 64;
const byte MAX_REMOTE_PIN_COUNT = 64; uint16_t DeviceId = 0; // the id of the device
uint16_t DeviceId = 0; // the id of the device uint8_t pinState = 0; // bitmap of 8 MeyPin states of the device. 0000 0100, MeyPin #3 is HIGH in this example
uint8_t pinState = 0; // bitmap of 8 MeyPin states of the device. 0000 0100, MeyPin #3 is HIGH in this example RemotePinInfo *next = NULL;
RemotePinInfo *next = NULL;
bool getPinState(byte meyPin) {
bool getPinState(byte meyPin) return (this->pinState >> (meyPin - 1)) & 1;
{ }
return (this->pinState >> (meyPin - 1)) & 1;
} void setPinState(byte meyPin, bool state) {
if (state)
void setPinState(byte meyPin, bool state) this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000
{ else
if (state) this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not
this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000 }
else
this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not
} int16_t Count() {
if (this->next == NULL) return 1;
return this->next->Count() + 1;
int16_t Count() }
{
if (this->next == NULL) return 1; RemotePinInfo *FindOrAdd(uint16_t deviceId, byte count = 0) {
return this->next->Count() + 1; if (count > MAX_REMOTE_PIN_COUNT)
} return NULL;
RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0)
{ if (this->DeviceId == 0 && this->pinState == 0) {
if (count > MAX_REMOTE_PIN_COUNT) this->DeviceId = deviceId;
return NULL; this->pinState = 0;
}
if (this->DeviceId == 0 && this->pinState == 0) if (this->DeviceId == deviceId) {
{ //ToggleDebug();
this->DeviceId = deviceId; return this;
this->pinState = 0; }
}
if (next != NULL) {
if (this->DeviceId == deviceId) return next->FindOrAdd(deviceId, count + 1);
{ }
//ToggleDebug();
return this; RemotePinInfo *theNext = new RemotePinInfo;
} theNext->DeviceId = deviceId;
theNext->pinState = 0;
if (next != NULL) theNext->next = NULL;
{
return next->FindOrAdd(deviceId, count + 1); this->next = theNext;
} return this->next;
}
RemotePinInfo *theNext = new RemotePinInfo; };
theNext->DeviceId = deviceId;
theNext->pinState = 0; extern RemotePinInfo remotePinInfo;
theNext->next = NULL; extern Rule *rules;
this->next = theNext; void SetLocalPinState(can_frame *frame);
return this->next;
} void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
}; void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void HandleRules(can_frame *frame);
extern RemotePinInfo remotePinInfo; void PutRule(Rule *rule);
extern Rule *rules; void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule);
void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); #endif
void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void HandleRules(can_frame *frame);
void PutRule(Rule *rule);
void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule);
#endif

View File

@@ -1,96 +1,117 @@
#include <SPI.h>; #include <SPI.h>;
#include <mcp2515.h>; #include <mcp2515.h>;
#include "MeyCan.h"; #include "MeyCan.h";
#include "MeyRule.h"; #include "MeyRule.h";
const int16_t SW_FLUR = 0XD238; #define PIN8 8
const int16_t SW_ANBAU = 0x87A9; #define PIN9 9
const int16_t SW_WOHNZIMMER = 0x87CA;
const int16_t SW_FLUR = 0XD238;
const int16_t UP_WOHNZIMMER_TUER = 0x051F; const int16_t SW_ANBAU = 0x87A9;
const int16_t UP_WOHNZIMMER_TERASSE = 0x05df; const int16_t SW_WOHNZIMMER = 0x87CA;
const int16_t UP_FLUR_EINGANG = 0x0769; const int16_t SW_TERRASSE = 0x618A;
const int16_t UP_BUERO = 0x1177;
const int16_t UP_FLUR_BUERO = 0x05A1;
const int16_t UP_FLUR_KUECHE = 0x01EF; const int16_t UP_WOHNZIMMER_TUER = 0x051F; // [X X]
const int16_t UP_KINDERZIMMER = 0x0196; const int16_t UP_WOHNZIMMER_TERASSE = 0x05df;
const int16_t UP_FLUR_ELTERN = 0x0632; const int16_t UP_FLUR_EINGANG = 0x0769; // [X]
const int16_t UP_KUECHE_FLUR = 0x07F5; const int16_t UP_BUERO = 0x1177;
const int16_t UP_KUECHE_BAD = 0x0585; const int16_t UP_FLUR_BUERO = 0x05A1; // [X]
const int16_t UP_FLUR_KUECHE = 0x01EF;
struct can_frame incomingCanFrame; const int16_t UP_KINDERZIMMER = 0x0196; // [X X]
const int16_t UP_FLUR_ELTERN = 0x0632;
void setup() { const int16_t UP_ELTERN = 0x08AE;
SPI.begin(); const int16_t UP_KUECHE_FLUR = 0x07F5; // [X]
const int16_t UP_KUECHE_BAD = 0x0585; // [X X]
const int16_t UP_KUECHE_ARBEITSPLATTE = 0x07A9; // [X X]
// AddToggleInverse(UP_WOHNZIMMER_TUER, 5, SW_WOHNZIMMER, 4); // Lichtschalter Wohnzimmer Licht 1
// AddToggleInverse(UP_WOHNZIMMER_TUER, 5, SW_WOHNZIMMER, 3); // Lichtschalter Wohnzimmer Licht 2 struct can_frame incomingCanFrame;
// AddToggle(UP_WOHNZIMMER_TERASSE, 1, SW_WOHNZIMMER, 4); // Licht 1 von Terassenschalter
// AddToggle(UP_WOHNZIMMER_TERASSE, 1, SW_WOHNZIMMER, 3); // Licht 2 von Terassenschalter /*
// Software matching Hardware of meycan v8.1
// AddToggle(0x0769, 1, SW_WOHNZIMMER, 7); // Eingangstür Flur Licht 2 */
// AddToggle(0x0769, 1, SW_FLUR, 1); //Eingangstür Flur Licht 1 void setup() {
// SPI.begin();
// AddToggle(UP_WOHNZIMMER_TUER, 3, SW_WOHNZIMMER, 1); // Licht 1 Wochzimmer Eingangstür
// AddToggle(UP_WOHNZIMMER_TUER, 4, SW_WOHNZIMMER, 2); // Licht 2 Wochzimmer Eingangstür
// AddToggle(UP_WOHNZIMMER_TUER, 1, SW_WOHNZIMMER, 5);
// AddToggle(0x1177, 1, SW_WOHNZIMMER, 6); // Licht Papa Büro AddToggle(UP_WOHNZIMMER_TUER, 1, SW_WOHNZIMMER, 6);
// AddToggle(0x05A1, 1, SW_WOHNZIMMER, 7); // Flurlicht von Papas Büro AddSimple(UP_WOHNZIMMER_TUER, 2, SW_WOHNZIMMER, 7);
// AddToggle(0x05A1, 1, SW_FLUR, 1); // Flurlicht von Papas Büro AddSimple(UP_WOHNZIMMER_TUER, 3, SW_WOHNZIMMER, 8);
// AddToggle(0x01EF, 1, SW_WOHNZIMMER, 7); // Flurlicht von Papas Büro
// AddToggle(0x01EF, 1, SW_FLUR, 1); // Flurlicht von Papas Büro
// AddToggle(0x0196, 3, SW_WOHNZIMMER, 7); // Flurlicht von Papas Büro AddToggle(UP_KINDERZIMMER, 3, SW_FLUR, 6);
// AddToggle(0x0196, 3, SW_FLUR, 1); // Flurlicht von Papas Büro AddToggle(UP_KINDERZIMMER, 3, SW_WOHNZIMMER, 2);
// AddToggle(0x0632, 1, SW_FLUR, 5); // Flurlicht von Papas Büro AddToggle(UP_KINDERZIMMER, 2, SW_FLUR, 3);
// AddSimple(UP_KINDERZIMMER, 4, SW_FLUR, 4);
// AddToggle(UP_WOHNZIMMER_TUER, 2, SW_FLUR, 2); // Linus Zimmer hoch aus Wohnzimmer AddSimple(UP_KINDERZIMMER, 1, SW_FLUR, 5);
// AddToggle(UP_WOHNZIMMER_TUER, 1, SW_FLUR, 3); // Linus Zimmer runter hoch aus Wohnzimmer
//
// AddToggle(0x0769, 2, SW_FLUR, 4); // Linus Zimmer runter hoch aus Wohnzimmer AddToggle(UP_FLUR_EINGANG, 1, SW_FLUR, 1);
// AddToggle(UP_FLUR_EINGANG, 2, SW_FLUR, 6);
// AddToggle(UP_FLUR_EINGANG, 2, SW_WOHNZIMMER, 2);
// AddToggle(UP_KUECHE_FLUR, 1, SW_ANBAU, 2);
// AddToggle(UP_KUECHE_FLUR, 2, SW_ANBAU, 3); AddToggle(UP_ELTERN, 1, SW_FLUR, 2);
// AddToggle(UP_KUECHE_BAD, 1, SW_ANBAU, 2);
// AddToggle(UP_KUECHE_BAD, 3, SW_ANBAU, 1); AddToggle(UP_BUERO, 1, SW_WOHNZIMMER, 3);
// AddToggle(UP_KUECHE_BAD, 2, SW_ANBAU, 4);
AddToggle(UP_FLUR_BUERO, 1, SW_FLUR, 6);
AddToggle(UP_FLUR_BUERO, 1, SW_WOHNZIMMER, 2);
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7);
AddToggle (UP_WOHNZIMMER_TERASSE, 1, SW_WOHNZIMMER, 7); // Licht 1 von Terassenschalter
delay(10); // a bit delay for mcp2515 to get the clock AddToggle (UP_WOHNZIMMER_TERASSE, 2, SW_WOHNZIMMER, 8); // Licht
AddToggle (UP_WOHNZIMMER_TERASSE, 3, SW_TERRASSE, 2); // Pergola
SetMeyPin(0, 1, PIN_PC7); /// RULE FOR SWITCH WOHNZIMMER (BOTH) OF TERASSE
SetMeyPin(1, 2, PIN_PC6); // AddSimple (UP_WOHNZIMMER_TERASSE, 3, SW_WOHNZIMMER, 5); // Eingangstür Flur Licht 2
SetMeyPin(2, 3, PIN_PC5); // AddSimple (UP_WOHNZIMMER_TERASSE, 3, SW_WOHNZIMMER, 6); // Eingangstür Flur Licht 2
SetMeyPin(3, 4, PIN_PC4);
SetMeyPin(4, 5, PIN_PC3);
SetMeyPin(5, 6, PIN_PC2); AddToggle(UP_KUECHE_ARBEITSPLATTE, 1, SW_ANBAU, 2);
SetMeyPin(6, 7, PIN_PC1);
SetMeyPin(7, 8, PIN_PC0); AddToggle(UP_KUECHE_FLUR, 1, SW_ANBAU, 3);
AddToggle(UP_KUECHE_FLUR, 2, SW_ANBAU, 2);
AddCanInterface(PIN_PA2); AddToggle(UP_KUECHE_BAD, 1, SW_ANBAU, 3);
AddCanInterface(PIN_PA3); AddToggle(UP_KUECHE_BAD, 2, SW_ANBAU, 1);
AddCanInterface(PIN_PB0); AddToggle(UP_KUECHE_BAD, 3, SW_ANBAU, 4);
AddCanInterface(PIN_PB1);
AddToggle(UP_FLUR_KUECHE, 1, SW_FLUR, 6);
AddToggle(UP_FLUR_KUECHE, 1, SW_WOHNZIMMER, 2);
SetupMeyCan(7, 0, 1);
}
SetMeyPin(1, PIN3);
SetMeyPin(2, PIN5);
void loop() SetMeyPin(3, PIN7);
{ SetMeyPin(4, PIN9);
ForEachCanInterface(CheckCanInterface); SetMeyPin(5, PIN8);
} SetMeyPin(6, PIN6);
SetMeyPin(7, PIN4);
void CheckCanInterface(MCP2515 *interface) SetMeyPin(8, PIN2);
{
if (interface->readMessage(&incomingCanFrame) == MCP2515::ERROR_OK) SetDevicedId(0x87, 0xCA);
{ AddLocalPinChangedHandler(SetLocalPinStateAdapter);
HandleFrame(&incomingCanFrame, interface);
HandleRules(&incomingCanFrame); AddCanInterface(PIN_A0);
} AddCanInterface(PIN_A1);
} AddCanInterface(PIN_A2);
AddCanInterface(PIN_A3);
SetupMeyCan(8, 0, 2);
}
void loop() {
ForEachCanInterface(CheckCanInterface);
}
void SetLocalPinStateAdapter(can_frame *frame)
{
SetLocalPinState(frame);
}
void CheckCanInterface(MCP2515 *interface) {
if (interface->readMessage(&incomingCanFrame) == MCP2515::ERROR_OK) {
HandleFrame(&incomingCanFrame, interface);
HandleRules(&incomingCanFrame);
}
}

View File

@@ -1,68 +1,68 @@
Testfälle Meycan Switch Testfälle Meycan Switch
PreCons for each: PreCons for each:
GIVEN XX XX is the deviceId of the target device GIVEN XX XX is the deviceId of the target device
GIVEN YY YY is another device id, which is NOT XX XX GIVEN YY YY is another device id, which is NOT XX XX
GIVEN 2nd CAN Debug Device on another CanBus of switch GIVEN 2nd CAN Debug Device on another CanBus of switch
1) A MeyPin can be triggered directly (repeat Test for all MeyPins and each CAN Bus Interface specified) 1) A MeyPin can be triggered directly (repeat Test for all MeyPins and each CAN Bus Interface specified)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01 -> (MeyPin1 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01 -> (MeyPin1 Should switch to on)
THEN The MeyPin 1 should trigger THEN The MeyPin 1 should trigger
THEN you receive a message 00 50 XX XX | 01 01 THEN you receive a message 00 50 XX XX | 01 01
THEN 2nd device should receive 2 messages THEN 2nd device should receive 2 messages
* 00 50 XX XX | 01 01 * 00 50 XX XX | 01 01
* 00 55 11 11 | XX XX 01 01 * 00 55 11 11 | XX XX 01 01
1a) A MeyPin trigger is effecltess, if only set 1a) A MeyPin trigger is effecltess, if only set
GIVEN the above testcast GIVEN the above testcast
WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01 WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01
THEN Nothing changed THEN Nothing changed
THEN you dont receive a message THEN you dont receive a message
THEN 2nd device should receive 00 55 11 11 | XX XX 01 01 THEN 2nd device should receive 00 55 11 11 | XX XX 01 01
WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 00 -> (MeyPin1 Should switch to off) WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 00 -> (MeyPin1 Should switch to off)
THEN The MeyPin 1 should switch to OFF THEN The MeyPin 1 should switch to OFF
THEN you receive a message 00 50 XX XX | 01 00 THEN you receive a message 00 50 XX XX | 01 00
THEN 2nd device should receive 2 messages THEN 2nd device should receive 2 messages
* 00 50 XX XX | 01 00 * 00 50 XX XX | 01 00
* 00 55 11 11 | XX XX 01 00 * 00 55 11 11 | XX XX 01 00
2) A MeyPin is not triggered, if the device id dont match 2) A MeyPin is not triggered, if the device id dont match
WHEN Send CAN Pkg 00 55 11 11 | YY YY 01 01 WHEN Send CAN Pkg 00 55 11 11 | YY YY 01 01
THEN None of the pins of the device triggered THEN None of the pins of the device triggered
THEN you receive no message THEN you receive no message
THEN 2nd device should receive 1 messages THEN 2nd device should receive 1 messages
* 00 55 11 11 | XX XX 01 01 * 00 55 11 11 | XX XX 01 01
3) A MeyPin is not triggered, if the Package Type dont match 3) A MeyPin is not triggered, if the Package Type dont match
WHEN Send CAN Pkg 50 00 11 11 | YY YY 01 01 WHEN Send CAN Pkg 50 00 11 11 | YY YY 01 01
THEN None of the pins of the device triggered THEN None of the pins of the device triggered
THEN you receive no message THEN you receive no message
THEN 2nd device should receive 1 messages THEN 2nd device should receive 1 messages
* 50 00 11 11 | XX XX 01 01 * 50 00 11 11 | XX XX 01 01
3) A MeyPin is not triggered, if the MeyPin is above 8 (max pins) 3) A MeyPin is not triggered, if the MeyPin is above 8 (max pins)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 09 01 WHEN Send CAN Pkg 00 55 11 11 | XX XX 09 01
THEN None of the pins of the device triggered THEN None of the pins of the device triggered
THEN you receive no message THEN you receive no message
THEN 2nd device should receive 1 messages THEN 2nd device should receive 1 messages
* 00 55 11 11 | XX XX 09 01 * 00 55 11 11 | XX XX 09 01
THEN you can execute any other testcase, as the switch didnt crash THEN you can execute any other testcase, as the switch didnt crash
4) All MeyPins can be activated more than 15 minutes in parallel(Activate each port for at least 15 mins) 4) All MeyPins can be activated more than 15 minutes in parallel(Activate each port for at least 15 mins)
GIVE You have a relais connected to each of the ports GIVE You have a relais connected to each of the ports
WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01 -> (MeyPin1 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01 -> (MeyPin1 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 02 01 -> (MeyPin2 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 02 01 -> (MeyPin2 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 03 01 -> (MeyPin3 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 03 01 -> (MeyPin3 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 04 01 -> (MeyPin4 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 04 01 -> (MeyPin4 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 05 01 -> (MeyPin5 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 05 01 -> (MeyPin5 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 06 01 -> (MeyPin6 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 06 01 -> (MeyPin6 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 07 01 -> (MeyPin7 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 07 01 -> (MeyPin7 Should switch to on)
WHEN Send CAN Pkg 00 55 11 11 | XX XX 08 01 -> (MeyPin8 Should switch to on) WHEN Send CAN Pkg 00 55 11 11 | XX XX 08 01 -> (MeyPin8 Should switch to on)
THEN you should only receive the packages from above. THEN you should only receive the packages from above.
THEN you should NOT receive a VersionPackage THEN you should NOT receive a VersionPackage
WHEN you wait 15 Minutes WHEN you wait 15 Minutes
THEN nothing should be send THEN nothing should be send
THEN the Pins should not trigger THEN the Pins should not trigger

View File

@@ -0,0 +1,7 @@
{
"configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader",
"board": "MegaCoreX:megaavr:809",
"sketch": "Switch.ino",
"port": "COM6",
"programmer": "jtag2updi"
}

View File

@@ -0,0 +1,540 @@
{
"version": 4,
"configurations": [
{
"name": "Arduino",
"compilerPath": "C:\\Users\\Martin\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7\\bin\\avr-g++",
"compilerArgs": [
"-w",
"-std=gnu++17",
"-fpermissive",
"-fno-exceptions",
"-ffunction-sections",
"-fdata-sections",
"-fno-threadsafe-statics",
"-Wno-error=narrowing"
],
"intelliSenseMode": "gcc-x64",
"includePath": [
"C:\\Users\\Martin\\AppData\\Local\\Arduino15\\packages\\MegaCoreX\\hardware\\megaavr\\1.1.0\\cores\\coreX-corefiles\\api\\deprecated",
"C:\\Users\\Martin\\AppData\\Local\\Arduino15\\packages\\MegaCoreX\\hardware\\megaavr\\1.1.0\\cores\\coreX-corefiles",
"C:\\Users\\Martin\\AppData\\Local\\Arduino15\\packages\\MegaCoreX\\hardware\\megaavr\\1.1.0\\variants\\48pin-standard",
"C:\\Users\\Martin\\AppData\\Local\\Arduino15\\packages\\MegaCoreX\\hardware\\megaavr\\1.1.0\\libraries\\SPI\\src",
"C:\\Users\\Martin\\Documents\\Arduino\\libraries\\autowp-mcp2515",
"c:\\users\\martin\\appdata\\local\\arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7\\lib\\gcc\\avr\\7.3.0\\include",
"c:\\users\\martin\\appdata\\local\\arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7\\lib\\gcc\\avr\\7.3.0\\include-fixed",
"c:\\users\\martin\\appdata\\local\\arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7\\avr\\include"
],
"forcedInclude": [
"C:\\Users\\Martin\\AppData\\Local\\Arduino15\\packages\\MegaCoreX\\hardware\\megaavr\\1.1.0\\cores\\coreX-corefiles\\Arduino.h"
],
"cStandard": "c11",
"cppStandard": "c++17",
"defines": [
"F_CPU=8000000L",
"ARDUINO=10607",
"ARDUINO_AVR_ATmega809",
"ARDUINO_ARCH_MEGAAVR",
"__DBL_MIN_EXP__=(-125)",
"__HQ_FBIT__=15",
"__cpp_attributes=200809",
"__UINT_LEAST16_MAX__=0xffffU",
"__ATOMIC_ACQUIRE=2",
"__SFRACT_IBIT__=0",
"__FLT_MIN__=1.17549435e-38F",
"__GCC_IEC_559_COMPLEX=0",
"__BUILTIN_AVR_SLEEP=1",
"__BUILTIN_AVR_COUNTLSULLK=1",
"__cpp_aggregate_nsdmi=201304",
"__BUILTIN_AVR_COUNTLSULLR=1",
"__UFRACT_MAX__=0XFFFFP-16UR",
"__UINT_LEAST8_TYPE__=unsigned char",
"__DQ_FBIT__=63",
"__INTMAX_C(c)=c ## LL",
"__ULFRACT_FBIT__=32",
"__SACCUM_EPSILON__=0x1P-7HK",
"__CHAR_BIT__=8",
"__USQ_IBIT__=0",
"__UINT8_MAX__=0xff",
"__ACCUM_FBIT__=15",
"__WINT_MAX__=0x7fff",
"__FLT32_MIN_EXP__=(-125)",
"__cpp_static_assert=200410",
"__USFRACT_FBIT__=8",
"__ORDER_LITTLE_ENDIAN__=1234",
"__SIZE_MAX__=0xffffU",
"__WCHAR_MAX__=0x7fff",
"__LACCUM_IBIT__=32",
"__DBL_DENORM_MIN__=double(1.40129846e-45L)",
"__GCC_ATOMIC_CHAR_LOCK_FREE=1",
"__GCC_IEC_559=0",
"__FLT_EVAL_METHOD__=0",
"__BUILTIN_AVR_LLKBITS=1",
"__cpp_binary_literals=201304",
"__LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-47LLK",
"__GCC_ATOMIC_CHAR32_T_LOCK_FREE=1",
"__BUILTIN_AVR_HKBITS=1",
"__BUILTIN_AVR_BITSLLK=1",
"__FRACT_FBIT__=15",
"__BUILTIN_AVR_BITSLLR=1",
"__cpp_variadic_templates=200704",
"__UINT_FAST64_MAX__=0xffffffffffffffffULL",
"__SIG_ATOMIC_TYPE__=char",
"__BUILTIN_AVR_UHKBITS=1",
"__UACCUM_FBIT__=16",
"__DBL_MIN_10_EXP__=(-37)",
"__FINITE_MATH_ONLY__=0",
"__cpp_variable_templates=201304",
"__LFRACT_IBIT__=0",
"__GNUC_PATCHLEVEL__=0",
"__FLT32_HAS_DENORM__=1",
"__LFRACT_MAX__=0X7FFFFFFFP-31LR",
"__UINT_FAST8_MAX__=0xff",
"__has_include(STR)=__has_include__(STR)",
"__DEC64_MAX_EXP__=385",
"__INT8_C(c)=c",
"__INT_LEAST8_WIDTH__=8",
"__UINT_LEAST64_MAX__=0xffffffffffffffffULL",
"__SA_FBIT__=15",
"__SHRT_MAX__=0x7fff",
"__LDBL_MAX__=3.40282347e+38L",
"__FRACT_MAX__=0X7FFFP-15R",
"__UFRACT_FBIT__=16",
"__UFRACT_MIN__=0.0UR",
"__UINT_LEAST8_MAX__=0xff",
"__GCC_ATOMIC_BOOL_LOCK_FREE=1",
"__UINTMAX_TYPE__=long long unsigned int",
"__LLFRACT_EPSILON__=0x1P-63LLR",
"__BUILTIN_AVR_DELAY_CYCLES=1",
"__DEC32_EPSILON__=1E-6DF",
"__FLT_EVAL_METHOD_TS_18661_3__=0",
"__UINT32_MAX__=0xffffffffUL",
"__GXX_EXPERIMENTAL_CXX0X__=1",
"__ULFRACT_MAX__=0XFFFFFFFFP-32ULR",
"__TA_IBIT__=16",
"__LDBL_MAX_EXP__=128",
"__WINT_MIN__=(-__WINT_MAX__ - 1)",
"__INT_LEAST16_WIDTH__=16",
"__ULLFRACT_MIN__=0.0ULLR",
"__SCHAR_MAX__=0x7f",
"__WCHAR_MIN__=(-__WCHAR_MAX__ - 1)",
"__INT64_C(c)=c ## LL",
"__DBL_DIG__=6",
"__GCC_ATOMIC_POINTER_LOCK_FREE=1",
"__AVR_HAVE_SPH__=1",
"__LLACCUM_MIN__=(-0X1P15LLK-0X1P15LLK)",
"__BUILTIN_AVR_KBITS=1",
"__BUILTIN_AVR_ABSK=1",
"__BUILTIN_AVR_ABSR=1",
"__SIZEOF_INT__=2",
"__SIZEOF_POINTER__=2",
"__GCC_ATOMIC_CHAR16_T_LOCK_FREE=1",
"__USACCUM_IBIT__=8",
"__USER_LABEL_PREFIX__",
"__STDC_HOSTED__=1",
"__LDBL_HAS_INFINITY__=1",
"__LFRACT_MIN__=(-0.5LR-0.5LR)",
"__HA_IBIT__=8",
"__FLT32_DIG__=6",
"__TQ_IBIT__=0",
"__FLT_EPSILON__=1.19209290e-7F",
"__GXX_WEAK__=1",
"__SHRT_WIDTH__=16",
"__USFRACT_IBIT__=0",
"__LDBL_MIN__=1.17549435e-38L",
"__FRACT_MIN__=(-0.5R-0.5R)",
"__AVR_SFR_OFFSET__=0x20",
"__DEC32_MAX__=9.999999E96DF",
"__cpp_threadsafe_static_init=200806",
"__DA_IBIT__=32",
"__INT32_MAX__=0x7fffffffL",
"__UQQ_FBIT__=8",
"__INT_WIDTH__=16",
"__SIZEOF_LONG__=4",
"__UACCUM_MAX__=0XFFFFFFFFP-16UK",
"__UINT16_C(c)=c ## U",
"__PTRDIFF_WIDTH__=16",
"__DECIMAL_DIG__=9",
"__LFRACT_EPSILON__=0x1P-31LR",
"__AVR_2_BYTE_PC__=1",
"__ULFRACT_MIN__=0.0ULR",
"__INTMAX_WIDTH__=64",
"__has_include_next(STR)=__has_include_next__(STR)",
"__BUILTIN_AVR_ULLRBITS=1",
"__LDBL_HAS_QUIET_NAN__=1",
"__ULACCUM_IBIT__=32",
"__UACCUM_EPSILON__=0x1P-16UK",
"__BUILTIN_AVR_SEI=1",
"__GNUC__=7",
"__ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-48ULLK",
"__cpp_delegating_constructors=200604",
"__HQ_IBIT__=0",
"__BUILTIN_AVR_SWAP=1",
"__FLT_HAS_DENORM__=1",
"__SIZEOF_LONG_DOUBLE__=4",
"__BIGGEST_ALIGNMENT__=1",
"__STDC_UTF_16__=1",
"__UINT24_MAX__=16777215UL",
"__BUILTIN_AVR_NOP=1",
"__GNUC_STDC_INLINE__=1",
"__DQ_IBIT__=0",
"__FLT32_HAS_INFINITY__=1",
"__DBL_MAX__=double(3.40282347e+38L)",
"__ULFRACT_IBIT__=0",
"__cpp_raw_strings=200710",
"__INT_FAST32_MAX__=0x7fffffffL",
"__DBL_HAS_INFINITY__=1",
"__INT64_MAX__=0x7fffffffffffffffLL",
"__ACCUM_IBIT__=16",
"__DEC32_MIN_EXP__=(-94)",
"__BUILTIN_AVR_UKBITS=1",
"__INTPTR_WIDTH__=16",
"__BUILTIN_AVR_FMULSU=1",
"__LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK",
"__INT_FAST16_TYPE__=int",
"__LDBL_HAS_DENORM__=1",
"__BUILTIN_AVR_BITSK=1",
"__BUILTIN_AVR_BITSR=1",
"__cplusplus=201402L",
"__cpp_ref_qualifiers=200710",
"__DEC128_MAX__=9.999999999999999999999999999999999E6144DL",
"__INT_LEAST32_MAX__=0x7fffffffL",
"__USING_SJLJ_EXCEPTIONS__=1",
"__DEC32_MIN__=1E-95DF",
"__ACCUM_MAX__=0X7FFFFFFFP-15K",
"__DEPRECATED=1",
"__cpp_rvalue_references=200610",
"__DBL_MAX_EXP__=128",
"__USACCUM_EPSILON__=0x1P-8UHK",
"__WCHAR_WIDTH__=16",
"__FLT32_MAX__=3.40282347e+38F32",
"__DEC128_EPSILON__=1E-33DL",
"__SFRACT_MAX__=0X7FP-7HR",
"__FRACT_IBIT__=0",
"__PTRDIFF_MAX__=0x7fff",
"__UACCUM_MIN__=0.0UK",
"__UACCUM_IBIT__=16",
"__BUILTIN_AVR_NOPS=1",
"__BUILTIN_AVR_WDR=1",
"__FLT32_HAS_QUIET_NAN__=1",
"__GNUG__=7",
"__LONG_LONG_MAX__=0x7fffffffffffffffLL",
"__SIZEOF_SIZE_T__=2",
"__ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK",
"__cpp_rvalue_reference=200610",
"__cpp_nsdmi=200809",
"__SIZEOF_WINT_T__=2",
"__LONG_LONG_WIDTH__=64",
"__cpp_initializer_lists=200806",
"__FLT32_MAX_EXP__=128",
"__SA_IBIT__=16",
"__ULLACCUM_MIN__=0.0ULLK",
"__BUILTIN_AVR_ROUNDUHK=1",
"__BUILTIN_AVR_ROUNDUHR=1",
"__cpp_hex_float=201603",
"__GXX_ABI_VERSION=1011",
"__INT24_MAX__=8388607L",
"__UTA_FBIT__=48",
"__FLT_MIN_EXP__=(-125)",
"__USFRACT_MAX__=0XFFP-8UHR",
"__UFRACT_IBIT__=0",
"__BUILTIN_AVR_ROUNDFX=1",
"__BUILTIN_AVR_ROUNDULK=1",
"__BUILTIN_AVR_ROUNDULR=1",
"__cpp_lambdas=200907",
"__BUILTIN_AVR_COUNTLSLLK=1",
"__BUILTIN_AVR_COUNTLSLLR=1",
"__BUILTIN_AVR_ROUNDHK=1",
"__INT_FAST64_TYPE__=long long int",
"__BUILTIN_AVR_ROUNDHR=1",
"__DBL_MIN__=double(1.17549435e-38L)",
"__BUILTIN_AVR_COUNTLSK=1",
"__BUILTIN_AVR_ROUNDLK=1",
"__BUILTIN_AVR_COUNTLSR=1",
"__BUILTIN_AVR_ROUNDLR=1",
"__LACCUM_MIN__=(-0X1P31LK-0X1P31LK)",
"__ULLACCUM_FBIT__=48",
"__BUILTIN_AVR_LKBITS=1",
"__ULLFRACT_EPSILON__=0x1P-64ULLR",
"__DEC128_MIN__=1E-6143DL",
"__REGISTER_PREFIX__",
"__UINT16_MAX__=0xffffU",
"__DBL_HAS_DENORM__=1",
"__BUILTIN_AVR_ULKBITS=1",
"__ACCUM_MIN__=(-0X1P15K-0X1P15K)",
"__AVR_ARCH__=2",
"__SQ_IBIT__=0",
"__FLT32_MIN__=1.17549435e-38F32",
"__UINT8_TYPE__=unsigned char",
"__BUILTIN_AVR_ROUNDUK=1",
"__BUILTIN_AVR_ROUNDUR=1",
"__UHA_FBIT__=8",
"__NO_INLINE__=1",
"__SFRACT_MIN__=(-0.5HR-0.5HR)",
"__UTQ_FBIT__=128",
"__FLT_MANT_DIG__=24",
"__LDBL_DECIMAL_DIG__=9",
"__VERSION__=\"7.3.0\"",
"__UINT64_C(c)=c ## ULL",
"__ULLFRACT_FBIT__=64",
"__cpp_unicode_characters=200704",
"__FRACT_EPSILON__=0x1P-15R",
"__ULACCUM_MIN__=0.0ULK",
"__UDA_FBIT__=32",
"__cpp_decltype_auto=201304",
"__LLACCUM_EPSILON__=0x1P-47LLK",
"__GCC_ATOMIC_INT_LOCK_FREE=1",
"__FLT32_MANT_DIG__=24",
"__BUILTIN_AVR_BITSUHK=1",
"__BUILTIN_AVR_BITSUHR=1",
"__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__USFRACT_MIN__=0.0UHR",
"__BUILTIN_AVR_BITSULK=1",
"__ULLACCUM_IBIT__=16",
"__BUILTIN_AVR_BITSULR=1",
"__UQQ_IBIT__=0",
"__BUILTIN_AVR_LLRBITS=1",
"__SCHAR_WIDTH__=8",
"__BUILTIN_AVR_BITSULLK=1",
"__BUILTIN_AVR_BITSULLR=1",
"__INT32_C(c)=c ## L",
"__DEC64_EPSILON__=1E-15DD",
"__ORDER_PDP_ENDIAN__=3412",
"__DEC128_MIN_EXP__=(-6142)",
"__UHQ_FBIT__=16",
"__LLACCUM_FBIT__=47",
"__FLT32_MAX_10_EXP__=38",
"__BUILTIN_AVR_ROUNDULLK=1",
"__BUILTIN_AVR_ROUNDULLR=1",
"__INT_FAST32_TYPE__=long int",
"__BUILTIN_AVR_HRBITS=1",
"__UINT_LEAST16_TYPE__=unsigned int",
"__BUILTIN_AVR_UHRBITS=1",
"__INT16_MAX__=0x7fff",
"__SIZE_TYPE__=unsigned int",
"__UINT64_MAX__=0xffffffffffffffffULL",
"__UDQ_FBIT__=64",
"__INT8_TYPE__=signed char",
"__cpp_digit_separators=201309",
"__ELF__=1",
"__ULFRACT_EPSILON__=0x1P-32ULR",
"__LLFRACT_FBIT__=63",
"__FLT_RADIX__=2",
"__INT_LEAST16_TYPE__=int",
"__BUILTIN_AVR_ABSFX=1",
"__LDBL_EPSILON__=1.19209290e-7L",
"__UINTMAX_C(c)=c ## ULL",
"__INT24_MIN__=(-__INT24_MAX__-1)",
"__SACCUM_MAX__=0X7FFFP-7HK",
"__BUILTIN_AVR_ABSHR=1",
"__SIG_ATOMIC_MAX__=0x7f",
"__GCC_ATOMIC_WCHAR_T_LOCK_FREE=1",
"__cpp_sized_deallocation=201309",
"__SIZEOF_PTRDIFF_T__=2",
"__AVR=1",
"__BUILTIN_AVR_ABSLK=1",
"__BUILTIN_AVR_ABSLR=1",
"__LACCUM_EPSILON__=0x1P-31LK",
"__DEC32_SUBNORMAL_MIN__=0.000001E-95DF",
"__INT_FAST16_MAX__=0x7fff",
"__UINT_FAST32_MAX__=0xffffffffUL",
"__UINT_LEAST64_TYPE__=long long unsigned int",
"__USACCUM_MAX__=0XFFFFP-8UHK",
"__SFRACT_EPSILON__=0x1P-7HR",
"__FLT_HAS_QUIET_NAN__=1",
"__FLT_MAX_10_EXP__=38",
"__LONG_MAX__=0x7fffffffL",
"__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL",
"__FLT_HAS_INFINITY__=1",
"__cpp_unicode_literals=200710",
"__USA_FBIT__=16",
"__UINT_FAST16_TYPE__=unsigned int",
"__DEC64_MAX__=9.999999999999999E384DD",
"__INT_FAST32_WIDTH__=32",
"__BUILTIN_AVR_RBITS=1",
"__CHAR16_TYPE__=unsigned int",
"__PRAGMA_REDEFINE_EXTNAME=1",
"__SIZE_WIDTH__=16",
"__INT_LEAST16_MAX__=0x7fff",
"__DEC64_MANT_DIG__=16",
"__UINT_LEAST32_MAX__=0xffffffffUL",
"__SACCUM_FBIT__=7",
"__FLT32_DENORM_MIN__=1.40129846e-45F32",
"__GCC_ATOMIC_LONG_LOCK_FREE=1",
"__SIG_ATOMIC_WIDTH__=8",
"__INT_LEAST64_TYPE__=long long int",
"__INT16_TYPE__=int",
"__INT_LEAST8_TYPE__=signed char",
"__SQ_FBIT__=31",
"__DEC32_MAX_EXP__=97",
"__INT_FAST8_MAX__=0x7f",
"__INTPTR_MAX__=0x7fff",
"__QQ_FBIT__=7",
"__cpp_range_based_for=200907",
"__UTA_IBIT__=16",
"__AVR_ERRATA_SKIP__=1",
"__FLT32_MIN_10_EXP__=(-37)",
"__LDBL_MANT_DIG__=24",
"__SFRACT_FBIT__=7",
"__SACCUM_MIN__=(-0X1P7HK-0X1P7HK)",
"__DBL_HAS_QUIET_NAN__=1",
"__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)",
"AVR=1",
"__BUILTIN_AVR_FMULS=1",
"__cpp_return_type_deduction=201304",
"__INTPTR_TYPE__=int",
"__UINT16_TYPE__=unsigned int",
"__WCHAR_TYPE__=int",
"__SIZEOF_FLOAT__=4",
"__AVR__=1",
"__BUILTIN_AVR_INSERT_BITS=1",
"__USQ_FBIT__=32",
"__UINTPTR_MAX__=0xffffU",
"__INT_FAST64_WIDTH__=64",
"__DEC64_MIN_EXP__=(-382)",
"__cpp_decltype=200707",
"__FLT32_DECIMAL_DIG__=9",
"__INT_FAST64_MAX__=0x7fffffffffffffffLL",
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1",
"__FLT_DIG__=6",
"__UINT_FAST64_TYPE__=long long unsigned int",
"__BUILTIN_AVR_BITSHK=1",
"__BUILTIN_AVR_BITSHR=1",
"__INT_MAX__=0x7fff",
"__LACCUM_FBIT__=31",
"__USACCUM_MIN__=0.0UHK",
"__UHA_IBIT__=8",
"__INT64_TYPE__=long long int",
"__BUILTIN_AVR_BITSLK=1",
"__BUILTIN_AVR_BITSLR=1",
"__FLT_MAX_EXP__=128",
"__UTQ_IBIT__=0",
"__DBL_MANT_DIG__=24",
"__cpp_inheriting_constructors=201511",
"__BUILTIN_AVR_ULLKBITS=1",
"__INT_LEAST64_MAX__=0x7fffffffffffffffLL",
"__DEC64_MIN__=1E-383DD",
"__WINT_TYPE__=int",
"__UINT_LEAST32_TYPE__=long unsigned int",
"__SIZEOF_SHORT__=2",
"__ULLFRACT_IBIT__=0",
"__LDBL_MIN_EXP__=(-125)",
"__UDA_IBIT__=32",
"__WINT_WIDTH__=16",
"__INT_LEAST8_MAX__=0x7f",
"__LFRACT_FBIT__=31",
"__LDBL_MAX_10_EXP__=38",
"__ATOMIC_RELAXED=0",
"__DBL_EPSILON__=double(1.19209290e-7L)",
"__BUILTIN_AVR_BITSUK=1",
"__BUILTIN_AVR_BITSUR=1",
"__UINT8_C(c)=c",
"__INT_LEAST32_TYPE__=long int",
"__BUILTIN_AVR_URBITS=1",
"__SIZEOF_WCHAR_T__=2",
"__LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR",
"__TQ_FBIT__=127",
"__INT_FAST8_TYPE__=signed char",
"__ULLACCUM_EPSILON__=0x1P-48ULLK",
"__BUILTIN_AVR_ROUNDK=1",
"__BUILTIN_AVR_ROUNDR=1",
"__UHQ_IBIT__=0",
"__LLACCUM_IBIT__=16",
"__FLT32_EPSILON__=1.19209290e-7F32",
"__DBL_DECIMAL_DIG__=9",
"__STDC_UTF_32__=1",
"__INT_FAST8_WIDTH__=8",
"__DEC_EVAL_METHOD__=2",
"__TA_FBIT__=47",
"__UDQ_IBIT__=0",
"__ORDER_BIG_ENDIAN__=4321",
"__cpp_runtime_arrays=198712",
"__WITH_AVRLIBC__=1",
"__UINT64_TYPE__=long long unsigned int",
"__ACCUM_EPSILON__=0x1P-15K",
"__UINT32_C(c)=c ## UL",
"__BUILTIN_AVR_COUNTLSUHK=1",
"__INTMAX_MAX__=0x7fffffffffffffffLL",
"__cpp_alias_templates=200704",
"__BUILTIN_AVR_COUNTLSUHR=1",
"__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__FLT_DENORM_MIN__=1.40129846e-45F",
"__LLFRACT_IBIT__=0",
"__INT8_MAX__=0x7f",
"__LONG_WIDTH__=32",
"__UINT_FAST32_TYPE__=long unsigned int",
"__CHAR32_TYPE__=long unsigned int",
"__BUILTIN_AVR_COUNTLSULK=1",
"__BUILTIN_AVR_COUNTLSULR=1",
"__FLT_MAX__=3.40282347e+38F",
"__cpp_constexpr=201304",
"__USACCUM_FBIT__=8",
"__BUILTIN_AVR_COUNTLSFX=1",
"__INT32_TYPE__=long int",
"__SIZEOF_DOUBLE__=4",
"__FLT_MIN_10_EXP__=(-37)",
"__UFRACT_EPSILON__=0x1P-16UR",
"__INT_LEAST32_WIDTH__=32",
"__BUILTIN_AVR_COUNTLSHK=1",
"__BUILTIN_AVR_COUNTLSHR=1",
"__INTMAX_TYPE__=long long int",
"__BUILTIN_AVR_ABSLLK=1",
"__BUILTIN_AVR_ABSLLR=1",
"__DEC128_MAX_EXP__=6145",
"__AVR_HAVE_16BIT_SP__=1",
"__ATOMIC_CONSUME=1",
"__GNUC_MINOR__=3",
"__INT_FAST16_WIDTH__=16",
"__UINTMAX_MAX__=0xffffffffffffffffULL",
"__DEC32_MANT_DIG__=7",
"__HA_FBIT__=7",
"__BUILTIN_AVR_COUNTLSLK=1",
"__BUILTIN_AVR_COUNTLSLR=1",
"__BUILTIN_AVR_CLI=1",
"__DBL_MAX_10_EXP__=38",
"__LDBL_DENORM_MIN__=1.40129846e-45L",
"__INT16_C(c)=c",
"__cpp_generic_lambdas=201304",
"__STDC__=1",
"__PTRDIFF_TYPE__=int",
"__LLFRACT_MIN__=(-0.5LLR-0.5LLR)",
"__BUILTIN_AVR_LRBITS=1",
"__ATOMIC_SEQ_CST=5",
"__DA_FBIT__=31",
"__UINT32_TYPE__=long unsigned int",
"__BUILTIN_AVR_ROUNDLLK=1",
"__UINTPTR_TYPE__=unsigned int",
"__BUILTIN_AVR_ROUNDLLR=1",
"__USA_IBIT__=16",
"__BUILTIN_AVR_ULRBITS=1",
"__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD",
"__DEC128_MANT_DIG__=34",
"__LDBL_MIN_10_EXP__=(-37)",
"__BUILTIN_AVR_COUNTLSUK=1",
"__BUILTIN_AVR_COUNTLSUR=1",
"__SIZEOF_LONG_LONG__=8",
"__ULACCUM_EPSILON__=0x1P-32ULK",
"__cpp_user_defined_literals=200809",
"__SACCUM_IBIT__=8",
"__GCC_ATOMIC_LLONG_LOCK_FREE=1",
"__LDBL_DIG__=6",
"__FLT_DECIMAL_DIG__=9",
"__UINT_FAST16_MAX__=0xffffU",
"__GCC_ATOMIC_SHORT_LOCK_FREE=1",
"__BUILTIN_AVR_ABSHK=1",
"__BUILTIN_AVR_FLASH_SEGMENT=1",
"__INT_LEAST64_WIDTH__=64",
"__ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR",
"__UINT_FAST8_TYPE__=unsigned char",
"__USFRACT_EPSILON__=0x1P-8UHR",
"__ULACCUM_FBIT__=32",
"__QQ_IBIT__=0",
"__cpp_init_captures=201304",
"__ATOMIC_ACQ_REL=4",
"__ATOMIC_RELEASE=3",
"__BUILTIN_AVR_FMUL=1",
"USBCON"
]
}
]
}

View File

@@ -0,0 +1,52 @@
#include <SPI.h>;
#include <mcp2515.h>;
struct can_frame frame;
MCP2515 mcp2515(10);
/*
Software matching Hardware of meycan v8.1
*/
void setup() {
SPI.begin();
Serial.begin(9600);
pinMode(PD3, OUTPUT);
digitalWrite(PD3, HIGH);
delay(1000);
digitalWrite(PD3, LOW);
delay(2000);
mcp2515.reset();
mcp2515.setBitrate(CAN_1000KBPS, MCP_8MHZ);
mcp2515.setNormalMode();
}
void loop() {
if (mcp2515.readMessage(&frame) == MCP2515::ERROR_OK) {
// frame contains received message
Serial.print(" Id: ");
Serial.print(frame.can_id, HEX);
Serial.print(" [");
for (int i = 0; i < 8; i++) {
Serial.print(frame.data[i], HEX);
Serial.print(" ");
}
Serial.println("]");
digitalWrite(PD3, HIGH);
delay(50);
digitalWrite(PD3, LOW);
delay(50);
mcp2515.sendMessage(&frame);
mcp2515.sendMessage(&frame);
mcp2515.sendMessage(&frame);
mcp2515.sendMessage(&frame);
}
}

View File

View File

@@ -1,61 +1,46 @@
#include "HardwareSerial.h"
#include <iterator>
#include "esp32-hal-gpio.h"
#include "MeyCan.h"; #include "MeyCan.h";
#include <SPI.h>; #include "driver/twai.h"
#include <mcp2515.h>;
PinState *MeyPin = NULL; PinState *MeyPin = NULL;
CanInterface *CanBusses = NULL; uint16_t myDeviceId = 0;
uint16_t myDeviceId; byte _deviceTypeId = 0;
byte _majorHardwareVersion = 0;
byte _minorHardwareVersion = 0;
void SetupMeyPin(PinState *state)
{
pinMode(state->pin_id, OUTPUT);
digitalWrite(state->pin_id, LOW);
state->pin_state = false;
}
void InitCanInterface(MCP2515 *interface, can_frame *frame) // can_frame is NULL. Reuse ForEach Method for smaller footprint void SetupMeyPin(PinState *state) {
{ if (state->is_input) {
interface->reset(); pinMode(state->pin_id, INPUT_PULLUP);
interface->setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz state->pin_state = digitalRead(state->pin_id);
interface->setNormalMode(); } else {
pinMode(state->pin_id, OUTPUT);
SendVersionPackage(interface); digitalWrite(state->pin_id, LOW);
} state->pin_state = true;
void ForEachCanInterface(void (*handle)(MCP2515 *canInterace))
{
CanBusses->ForEach(handle);
}
void SetupMeyCan()
{
CalculateMyDeviceId();
if (MeyPin != NULL);
MeyPin->ForEach(SetupMeyPin);
if (CanBusses != NULL)
{
CanBusses->ForEach(InitCanInterface, NULL);
} }
} }
void SetCanInterface(byte index, byte pinId)
{
MCP2515* newCanInterface = new MCP2515(pinId);
CanInterface* canInterface = new CanInterface();
if (CanBusses == NULL)
CanBusses = canInterface; void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId) {
else _majorHardwareVersion = majorHardwareVersion;
CanBusses->AddCanInterface(canInterface); _minorHardwareVersion = minorHardwareVersion;
_deviceTypeId = deviceTypeId;
if (MeyPin != NULL)
MeyPin->ForEach(SetupMeyPin);
} }
void SetMeyPin(byte index, byte meyPinId, byte pinId)
{ void SetDevicedId(byte high, byte low) {
PinState* newState = new PinState(); myDeviceId = (high << 8) | low;
newState->Init(pinId, (byte) meyPinId); }
void SetMeyPin(byte meyPinId, byte pinId) {
PinState *newState = new PinState();
newState->Init(pinId, (byte)meyPinId);
if (MeyPin == NULL) if (MeyPin == NULL)
MeyPin = newState; MeyPin = newState;
@@ -64,66 +49,69 @@ void SetMeyPin(byte index, byte meyPinId, byte pinId)
} }
bool CheckPinStatus(PinState * state) bool ReadPin(PinState *state) {
{ return digitalRead(state->pin_id);
}
void SendSwitchedTriggeredCanPackage(byte pinId, int state) {
twai_message_t message;
message.extd = 1;
message.rtr = 0;
message.ss = 0;
message.self = 0;
message.dlc_non_comp = 0;
message.identifier = CreateCanId(SWITCH_TRIGGERED_CAN_ID);
message.data_length_code = 2;
message.data[0] = pinId;
message.data[1] = state;
DoSendCanPkg(&message);
}
void CheckPinStatus(PinState *state) {
if (!state->is_input) if (!state->is_input)
return false; return;
bool newValue = ReadPin(state); bool newValue = ReadPin(state);
if (newValue != state->pin_state) if (newValue != state->pin_state) {
{
delay(10); delay(10);
newValue = ReadPin(state); newValue = ReadPin(state);
if (newValue != state->pin_state) if (newValue != state->pin_state) {
{
state->pin_state = newValue; state->pin_state = newValue;
SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state); SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state);
} }
} }
return false; return;
} }
void CheckMeyPinsTriggered() void CheckMeyPinsTriggered() {
{
MeyPin->ForEach(CheckPinStatus); MeyPin->ForEach(CheckPinStatus);
} }
bool ReadPin(PinState * state)
{ uint16_t GetDeviceId(uint32_t canFrameId) {
if (state->pin_id == PIN_PD2) return canFrameId & 0xFFFF;
return digitalReadFast(PIN_PD2);
else if (state->pin_id == PIN_PC7)
return digitalReadFast(PIN_PC7);
else if (state->pin_id == PIN_PD1)
return digitalReadFast(PIN_PD1);
else if (state->pin_id == PIN_PD0)
return digitalReadFast(PIN_PD0);
else if (state->pin_id == PIN_PD6)
return digitalReadFast(PIN_PD6);
else if (state->pin_id == PIN_PD5)
return digitalReadFast(PIN_PD5);
else if (state->pin_id == PIN_PD4)
return digitalReadFast(PIN_PD4);
else if (state->pin_id == PIN_PD3)
return digitalReadFast(PIN_PD3);
else
return digitalRead(state->pin_id);
} }
uint16_t GetPackageType(uint32_t canFrameId) {
void HandleFrame(can_frame *frame, MCP2515 *source) return (canFrameId / 0x10000) & 0xFFF;
{
CanBusses->ForEach(DoSendCanPkg, frame, source);
HandleTriggerMeypinCanPackage(frame);
} }
void HandleTriggerMeypinCanPackage(can_frame *frame) uint32_t CreateCanId(uint16_t commandId) {
{ return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId;
if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID) }
{
uint16_t adressedDeviceId = ((uint16_t )frame->data[0] << 8) | frame->data[1] ; void HandleTriggerMeypinCanPackage(twai_message_t *frame) {
if (GetPackageType(frame->identifier) == TRIGGER_SWITCH_CAN_ID) {
uint16_t adressedDeviceId = ((uint16_t)frame->data[0] << 8) | frame->data[1];
if (adressedDeviceId != myDeviceId) return; if (adressedDeviceId != myDeviceId) return;
@@ -132,10 +120,8 @@ void HandleTriggerMeypinCanPackage(can_frame *frame)
PinState *adressedPin = MeyPin->Find(meyPinId); PinState *adressedPin = MeyPin->Find(meyPinId);
if (adressedPin != NULL) if (adressedPin != NULL) {
{ if (adressedPin->is_input == true) {
if (adressedPin->is_input == true)
{
pinMode(adressedPin->pin_id, OUTPUT); pinMode(adressedPin->pin_id, OUTPUT);
adressedPin->is_input = false; adressedPin->is_input = false;
} }
@@ -147,104 +133,17 @@ void HandleTriggerMeypinCanPackage(can_frame *frame)
digitalWrite(adressedPin->pin_id, state); digitalWrite(adressedPin->pin_id, state);
SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state); SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state);
} }
} }
} }
} }
byte CircularShift(byte b)
{ void HandleFrame(twai_message_t *frame) {
return (b << 1) | (b >> 7 & 1); HandleTriggerMeypinCanPackage(frame);
} }
uint16_t GetDeviceId(uint32_t canFrameId)
{
return canFrameId & 0xFFFF; void DoSendCanPkg(twai_message_t *frame) {
} esp_err_t ret = twai_transmit(frame, pdMS_TO_TICKS(1000));
uint16_t GetPackageType(uint32_t canFrameId)
{
return (canFrameId / 0x10000) & 0xFFF;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
}
uint32_t CreateCanId(uint16_t commandId)
{
return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG;
}
void SendVersionPackage(MCP2515 *interface)
{
can_frame toSend;
toSend.can_id = CreateCanId(HELP_PACKAGE_CAN_ID);
toSend.can_dlc = 6;
toSend.data[0] = SOFTWARE_VERSION_HIGH;
toSend.data[1] = SOFTWARE_VERSION_LOW;
toSend.data[2] = HARDWARE_VERSION_HIGH;
toSend.data[3] = HARDWARE_VERSION_LOW;
toSend.data[4] = (myDeviceId >> 8) & 0xFF;
toSend.data[5] = myDeviceId & 0xFF;
DoSendCanPkg(interface, &toSend);
}
void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state)
{
can_frame toSend;
toSend.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID);
toSend.can_dlc = 4;
toSend.data[0] = (targetCanId & 0xFF00) >> 8;
toSend.data[1] = targetCanId & 0xFF;
toSend.data[2] = pinId;
toSend.data[3] = state;
HandleFrame(&toSend, NULL);
}
void SendSwitchedTriggeredCanPackage(byte pinId, int state)
{
can_frame toSend;
toSend.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID);
toSend.can_dlc = 2;
toSend.data[0] = pinId;
toSend.data[1] = state;
DoSendCanPkg(&toSend);
}
void DoSendCanPkg(can_frame *frame)
{
if (CanBusses != NULL)
CanBusses->ForEach(DoSendCanPkg, frame);
}
void DoSendCanPkg(MCP2515 *interface, can_frame *frame)
{
byte cnt = 0;
while (interface->sendMessage(frame))
{
if (++cnt > 10) return;
}
}
void CalculateMyDeviceId()
{
myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow();
} }

View File

@@ -1,128 +1,80 @@
#ifndef MEYCAN_H #ifndef MEYCAN_H
#define MEYCAN_H #define MEYCAN_H
#include <SPI.h> #include <Arduino.h>
#include <mcp2515.h> #include <SPI.h>
#include "driver/twai.h"
typedef struct CanInterface
{ typedef struct PinState
MCP2515 *interface; {
CanInterface *next = NULL; int pin_id;
bool pin_state;
void ForEach(void (*handle)( MCP2515 *interface)) bool is_input;
{ byte meyPinId;
if (this->interface != NULL) PinState *next = NULL;
handle(this->interface);
PinState() {}
if (this->next != NULL) void Init(int pin_id, byte meyPinId)
this->next->ForEach(handle); {
} this->pin_id = pin_id;
this->pin_state = true;
void ForEach(void (*handle)( MCP2515 *interface, can_frame *frame), can_frame *frame, MCP2515* exclude = NULL) this->is_input = true;
{ this->meyPinId = meyPinId;
if (this->interface != NULL && this->interface != exclude) }
handle(this->interface, frame);
void AddPinState(PinState *nextPinState)
if (this->next != NULL) {
this->next->ForEach(handle, frame); if (next == NULL)
} {
this->next = nextPinState;
void AddCanInterface(CanInterface *newCanInterface) nextPinState->next = NULL;
{ } else {
if (next == NULL) next->AddPinState(nextPinState);
{ }
this->next = newCanInterface; }
newCanInterface->next = NULL;
} else { PinState* Find(byte meyPinId)
next->AddCanInterface(newCanInterface); {
} if (this->meyPinId == meyPinId)
} return this;
};
if (this->next != NULL)
typedef struct PinState return this->next->Find(meyPinId);
{
int pin_id; return NULL;
bool pin_state; }
bool is_input;
byte meyPinId; void ForEach(void (*handle)(PinState *theState))
PinState *next = NULL; {
handle(this);
PinState() {} if (this->next != NULL)
void Init(int pin_id, byte meyPinId) this->next->ForEach(handle);
{ }
this->pin_id = pin_id; };
this->pin_state = true;
this->is_input = true;
this->meyPinId = meyPinId; const byte SOFTWARE_VERSION_HIGH = 6;
} const byte SOFTWARE_VERSION_LOW = 0;
const byte HARDWARE_VERSION_HIGH = 8;
void AddPinState(PinState *nextPinState) const byte HARDWARE_VERSION_LOW = 1;
{
if (next == NULL) const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL;
{ const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050;
this->next = nextPinState; const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055;
nextPinState->next = NULL;
} else {
next->AddPinState(nextPinState);
} void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId);
} uint32_t CreateCanId(uint16_t commandId);
void SetDevicedId(byte high, byte low);
PinState* Find(byte meyPinId) void SetMeyPin(byte meyPinId, byte pinId);
{ uint16_t GetDeviceId(uint32_t canFrameId);
if (this->meyPinId == meyPinId) uint16_t GetPackageType(uint32_t canFrameId);
return this; void SendSwitchedTriggeredCanPackage(byte pinId, int state);
if (this->next != NULL) void HandleFrame(twai_message_t *frame);
return this->next->Find(meyPinId); void CheckPinStatus(PinState *state);
void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */
return NULL;
} void DoSendCanPkg(twai_message_t *frame) ;
#endif
void ForEach(void (*handle)(PinState *theState))
{
handle(this);
if (this->next != NULL)
this->next->ForEach(handle);
}
};
const byte SOFTWARE_VERSION_HIGH = 5;
const byte SOFTWARE_VERSION_LOW = 0;
const byte HARDWARE_VERSION_HIGH = 7;
const byte HARDWARE_VERSION_LOW = 0;
const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL;
const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050;
const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055;
void SetCanInterface(byte index, byte pinId);
void SetMeyPin(byte index, byte meyPinId, byte pinId);
void SetupMeyCan();
void ForEachCanInterface(void (*handle)(MCP2515 *canInterace));
bool ReadPin(PinState *state);
bool CheckPinStatus(PinState * state);
void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */
void HandleFrame(can_frame *frame, MCP2515 *source);
void HandleTriggerMeypinCanPackage(can_frame *frame);
byte CircularShift(byte b);
uint16_t GetDeviceId(uint32_t canFrameId);
uint16_t GetPackageType(uint32_t canFrameId);
byte GetDeviceIdLow();
byte GetDeviceIdHigh();
uint32_t CreateCanId(uint16_t commandId);
void SendVersionPackage(MCP2515 *interface);
void SendSwitchedTriggeredCanPackage(byte pinId, int state);
void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state);
void DoSendCanPkg(can_frame *frame);
void DoSendCanPkg(MCP2515 *interface, can_frame *frame);
void CalculateMyDeviceId();
#endif

View File

@@ -1,104 +0,0 @@
#include "MeyRule.h"
#include "MeyCan.h"
#include <Arduino.h>
#include <mcp2515.h>;
RemotePinInfo remotePinInfo = RemotePinInfo();
Rule *rules = NULL;
void PutRule(Rule *rule)
{
if (rules == NULL)
rules = rule;
else
rules->AddRule(rule);
}
void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{
Rule *rule = new Rule();
rule->sourceDevId = sourceDevId;
rule->sourceMeyPinId = sourceMeyPinId;
rule->targetDevId = targetDevId;
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = false;
rule->inverse = false;
PutRule(rule);
}
void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{
Rule *rule = new Rule();
rule->sourceDevId = sourceDevId;
rule->sourceMeyPinId = sourceMeyPinId;
rule->targetDevId = targetDevId;
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = true;
rule->inverse = false;
PutRule(rule);
}
void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{
Rule *rule = new Rule();
rule->sourceDevId = sourceDevId;
rule->sourceMeyPinId = sourceMeyPinId;
rule->targetDevId = targetDevId;
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = true;
rule->inverse = true;
PutRule(rule);
}
void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule)
{
RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(rule->targetDevId);
if (currentPinState == NULL) return;
bool pinState = state > 0;
if (rule->inverse)
pinState = !pinState;
if (rule->toggle)
pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true);
BroadcastTriggerMeyPinCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState);
currentPinState->setPinState(rule->targetMeyPinId, pinState);
}
void HandleTriggered(can_frame *frame)
{
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
{
RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(GetDeviceId(frame->can_id) );
if (currentPinState == NULL)
return;
currentPinState->setPinState(frame->data[0], frame->data[1]);
}
}
void HandleRules(can_frame *frame)
{
HandleTriggered(frame);
if (rules == NULL) return;
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
{
uint16_t deviceId = GetDeviceId(frame->can_id);
uint8_t dt = frame->data[1];
uint8_t state = frame->data[0];
rules->Traverse(deviceId, dt, state, CheckRule);
}
}

View File

@@ -1,111 +0,0 @@
#ifndef MEYRULE_H
#define MEYRULE_H
#include <Arduino.h>
#include <mcp2515.h>;
struct Rule
{
uint16_t sourceDevId;
byte sourceMeyPinId;
uint16_t targetDevId;
byte targetMeyPinId;
bool toggle;
bool inverse;
Rule *nextRule = NULL;
void AddRule(Rule *rule)
{
if (this->nextRule == NULL)
{
this->nextRule = rule;
rule->nextRule = NULL;
} else {
this->nextRule->AddRule(rule);
}
}
void Traverse( uint16_t deviceId, uint8_t dt, uint8_t state, void (*handle)(uint16_t, uint8_t, uint8_t, Rule*))
{
if ( this->sourceDevId == deviceId && this->sourceMeyPinId == state)
handle(deviceId, dt, state, this);
if (this->nextRule != NULL)
this->nextRule->Traverse(deviceId, dt, state, handle);
}
};
typedef struct RemotePinInfo
{
const byte MAX_REMOTE_PIN_COUNT = 64;
uint16_t DeviceId = 0; // the id of the device
uint8_t pinState = 0; // bitmap of 8 MeyPin states of the device. 0000 0100, MeyPin #3 is HIGH in this example
RemotePinInfo *next = NULL;
bool getPinState(byte meyPin)
{
return (this->pinState >> (meyPin - 1)) & 1;
}
void setPinState(byte meyPin, bool state)
{
if (state)
this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000
else
this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not
}
int16_t Count()
{
if (this->next == NULL) return 1;
return this->next->Count() + 1;
}
RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0)
{
if (count > MAX_REMOTE_PIN_COUNT)
return NULL;
if (this->DeviceId == 0 && this->pinState == 0)
{
this->DeviceId = deviceId;
this->pinState = 0;
}
if (this->DeviceId == deviceId)
{
//ToggleDebug();
return this;
}
if (next != NULL)
{
return next->FindOrAdd(deviceId, count + 1);
}
RemotePinInfo *theNext = new RemotePinInfo;
theNext->DeviceId = deviceId;
theNext->pinState = 0;
theNext->next = NULL;
this->next = theNext;
return this->next;
}
};
extern RemotePinInfo remotePinInfo;
extern Rule *rules;
void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId);
void HandleRules(can_frame *frame);
void PutRule(Rule *rule);
void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule);
#endif

View File

@@ -1,32 +1,220 @@
#include <SPI.h>; #include <Arduino.h>
#include <mcp2515.h>; #include <driver/i2s.h>
#include "MeyCan.h"; #include "opus.h"
#include "opus_data.h"
#include "MeyCan.h"
constexpr int RX_PIN = 2; // CAN_TRANCEIVER_RX_PIN
constexpr int TX_PIN = 3; // CAN_TRANCEIVER_TX_PIN
bool driver_installed = false;
constexpr i2s_port_t I2S_PORT = I2S_NUM_0; // I2S-Peripherie-Instanz (0 = erster Controller)
constexpr int I2S_DIN = 9; // GPIO-Pin für serielle Datenleitug (Data-Out → DAC)
constexpr int I2S_BCLK = 10; // GPIO-Pin für Bit-Clock (BCLK)
constexpr int I2S_LRC = 20; // GPIO-Pin für Word-Select / Left-Right-Clock
constexpr int SAMPLE_RATE = 48000; // Abtastrate in Hz (Opus-Standard: 48 kHz)
constexpr int CHANNELS = 1; // Anzahl Audiokanäle (1 = Mono)
constexpr int MAX_FRAME = 5760; // Maximale Samples pro Opus-Frame (120 ms @ 48 kHz)
float OUTPUT_GAIN = 0.02f; // Lautstärkeskalierung vor I2S-Ausgabe (0.01.0)
static OpusDecoder *dec = nullptr;
static int16_t pcm[MAX_FRAME];
static int16_t stereo[MAX_FRAME * 2];
static void i2s_setup() {
i2s_config_t cfg = {};
cfg.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX);
cfg.sample_rate = SAMPLE_RATE;
cfg.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT;
cfg.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT;
cfg.communication_format = I2S_COMM_FORMAT_STAND_I2S;
cfg.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1;
cfg.dma_buf_count = 8;
cfg.dma_buf_len = 512;
cfg.tx_desc_auto_clear = true;
i2s_pin_config_t pins = {};
pins.bck_io_num = I2S_BCLK;
pins.ws_io_num = I2S_LRC;
pins.data_out_num = I2S_DIN;
pins.data_in_num = I2S_PIN_NO_CHANGE;
i2s_driver_install(I2S_PORT, &cfg, 0, nullptr);
i2s_set_pin(I2S_PORT, &pins);
i2s_zero_dma_buffer(I2S_PORT);
}
static void decode_packet(const uint8_t *pkt, size_t len) {
int samples = opus_decode(dec, pkt, (opus_int32)len, pcm, MAX_FRAME, 0);
if (samples <= 0) return;
// Mono → Stereo mit Gain
for (int i = 0; i < samples; i++) {
int16_t s = (int16_t)(pcm[i] * OUTPUT_GAIN);
stereo[i * 2] = s;
stereo[i * 2 + 1] = s;
}
size_t written;
i2s_write(I2S_PORT, stereo, samples * 2 * sizeof(int16_t), &written, portMAX_DELAY);
CheckMeyPinsTriggered();
}
void DebugBlink(int d) {
pinMode(20, OUTPUT);
while (true) {
digitalWrite(20, HIGH);
delay(d);
digitalWrite(20, LOW);
delay(d);
}
}
void ConfigureAndSetupMeyCan() {
// Initialize configuration structures using macro initializers
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_NORMAL);
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_1MBITS(); //Look in the api-reference for other speed sets.
twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();
if (twai_driver_install(&g_config, &t_config, &f_config) == ESP_OK) {
Serial.println("Driver installed");
} else {
DebugBlink(100);
return;
}
esp_err_t e = twai_start();
// Start TWAI driver
if (e == ESP_OK) {
driver_installed = true;
} else {
DebugBlink(500);
return;
}
SetDevicedId(0x09, 0x09);
SetMeyPin(1, 5);
SetMeyPin(2, 6);
SetMeyPin(3, 7);
SetMeyPin(4, 8);
SetupMeyCan(8, 1, 3);
}
// Ogg-Container-Format:
// Der Stream besteht aus aufeinanderfolgenden "Pages" (Seiten).
// Jede Page beginnt mit dem 4-Byte-Capture-Pattern "OggS".
// Der Page-Header ist immer mindestens 27 Bytes lang:
// Byte 0 3: "OggS" (Capture Pattern)
// Byte 4 : Stream-Struktur-Version (immer 0)
// Byte 5 : Header-Type-Flag (0=normal, 1=continued, 2=first, 4=last)
// Byte 613 : Granule Position (Zeitstempel, 8 Bytes)
// Byte 1417 : Stream Serial Number
// Byte 1821 : Page Sequence Number
// Byte 2225 : CRC Checksum
// Byte 26 : Anzahl der Segmente (num_segs)
// Danach folgt die Segment-Tabelle (num_segs Bytes),
// und anschließend die eigentlichen Nutzdaten.
//
// Ogg-Lacing-Regel für Paketgrenzen:
// Jeder Eintrag in der Segment-Tabelle gibt die Größe eines Segments an (0255).
// Ist ein Segment genau 255 Bytes → das Paket geht weiter (nächstes Segment gehört dazu).
// Ist ein Segment < 255 Bytes → das Paket endet hier.
// So können Pakete größer als 255 Bytes über mehrere Segmente verteilt sein.
//
// Bei Opus in Ogg sind die ersten zwei Pages immer Metadaten:
// Page 0: OpusHead (Samplerate, Kanalanzahl, Preskip …)
// Page 1: OpusTags (Künstler, Titel, Encoder …)
// Ab Page 2 folgen die eigentlichen Audio-Pakete (je ~20 ms Opus-Frame).
static void play_ogg_opus(const uint8_t *buf, size_t buf_len) {
size_t pos = 0; // aktuelle Leseposition im Buffer
int page_n = 0; // Page-Zähler (0 und 1 sind Header-Pages)
while (pos + 27 <= buf_len) {
// --- 1. Capture Pattern "OggS" suchen ---
// Falls pos nicht direkt auf eine Page zeigt, byte-weise vorwärts suchen.
if (!(buf[pos] == 'O' && buf[pos + 1] == 'g' && buf[pos + 2] == 'g' && buf[pos + 3] == 'S')) {
pos++;
continue;
}
// --- 2. Page-Header lesen ---
uint8_t num_segs = buf[pos + 26]; // Anzahl Segmente aus Byte 26
size_t hdr_end = pos + 27 + num_segs; // Ende des Headers (= Beginn der Nutzdaten)
if (hdr_end > buf_len) break;
// Gesamtgröße der Nutzdaten = Summe aller Segmentlängen
size_t data_size = 0;
for (int s = 0; s < num_segs; s++) data_size += buf[pos + 27 + s];
// --- 3. Audio-Pages verarbeiten (Page 0+1 sind Metadaten → überspringen) ---
if (page_n >= 2) {
size_t pkt_start = hdr_end; // Startposition des aktuellen Pakets
size_t pkt_size = 0; // akkumulierte Paketgröße über Segmente
for (int s = 0; s < num_segs; s++) {
uint8_t seg = buf[pos + 27 + s]; // Größe dieses Segments
pkt_size += seg;
if (seg < 255) {
// Paketende erreicht → vollständiges Opus-Paket dekodieren und ausgeben
decode_packet(buf + pkt_start, pkt_size);
pkt_start += pkt_size; // nächstes Paket beginnt direkt dahinter
pkt_size = 0;
}
// seg == 255 → Paket geht im nächsten Segment weiter (Lacing)
}
}
// --- 4. Zur nächsten Page springen ---
pos = hdr_end + data_size;
page_n++;
}
}
int changeVolume = 0;
static void canTaskFunc(void *) {
twai_message_t frame;
for (;;) {
// blockiert ohne CPU-Last; der interne TWAI-Interrupt weckt den Task sobald ein Frame ankommt
if (twai_receive(&frame, portMAX_DELAY) == ESP_OK) {
HandleFrame(&frame);
if (changeVolume > 20)
changeVolume = 0;
OUTPUT_GAIN = 0.1f + changeVolume*0.1f;
changeVolume++;
}
}
}
void setup() { void setup() {
return; Serial.begin(115200);
SPI.begin(); i2s_setup();
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); // Explicit GND for LED and Input
delay(10); // a bit delay for mcp2515 to get the clock pinMode(21, OUTPUT);
digitalWrite(21, LOW);
SetMeyPin(0, 1, PIN_PD0); int err;
SetMeyPin(1, 2, PIN_PC7); dec = opus_decoder_create(SAMPLE_RATE, CHANNELS, &err);
SetMeyPin(2, 3, PIN_PD2); if (err != OPUS_OK) {
SetMeyPin(3, 4, PIN_PD1); Serial.printf("opus_decoder_create failed: %d\n", err);
SetMeyPin(4, 5, PIN_PD5); return;
SetMeyPin(5, 6, PIN_PD3); }
SetMeyPin(6, 7, PIN_PD7); Serial.println("Opus playback started");
SetMeyPin(7, 8, PIN_PD6); ConfigureAndSetupMeyCan();
delay(20); xTaskCreate(canTaskFunc, "can", 4096, nullptr, 5, nullptr);
SetCanInterface(0, PIN_PD4);
SetupMeyCan();
} }
void loop() {
void loop() play_ogg_opus(music_opus, music_opus_len);
{ opus_decoder_ctl(dec, OPUS_RESET_STATE);
CheckMeyPinsTriggered();
} }

Binary file not shown.

View File

@@ -0,0 +1,56 @@
#include <Arduino.h>
#include <AudioTools.h>
#include <AudioTools/AudioCodecs/CodecOpus.h>
using namespace audio_tools;
constexpr int I2S_BCLK = 6;
constexpr int I2S_LRC = 7;
constexpr int I2S_DIN = 5;
// Keep the test intentionally light so it is realistic for an ESP32-C3.
AudioInfo audioInfo(16000, 1, 16);
SineWaveGenerator<int16_t> sineWave(10000);
GeneratedSoundStream<int16_t> source(sineWave);
I2SStream i2s;
OpusAudioEncoder opusEncoder;
OpusAudioDecoder opusDecoder;
EncodedAudioStream decodedAudio(&i2s, &opusDecoder);
EncodedAudioStream encodedAudio(&decodedAudio, &opusEncoder);
StreamCopy copier(encodedAudio, source);
void setup() {
Serial.begin(115200);
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Warning);
auto i2sConfig = i2s.defaultConfig(TX_MODE);
i2sConfig.copyFrom(audioInfo);
i2sConfig.pin_bck = I2S_BCLK;
i2sConfig.pin_ws = I2S_LRC;
i2sConfig.pin_data = I2S_DIN;
i2sConfig.buffer_count = 8;
i2sConfig.buffer_size = 256;
i2s.begin(i2sConfig);
auto sineConfig = sineWave.defaultConfig();
sineConfig.copyFrom(audioInfo);
sineWave.begin(sineConfig, N_B4);
auto &encoderConfig = opusEncoder.config();
encoderConfig.copyFrom(audioInfo);
encoderConfig.application = OPUS_APPLICATION_RESTRICTED_LOWDELAY;
encoderConfig.bitrate = 24000;
encoderConfig.complexity = 1;
encoderConfig.frame_sizes_ms_x2 = OPUS_FRAMESIZE_20_MS;
decodedAudio.begin(audioInfo);
encodedAudio.begin(audioInfo);
Serial.println("Opus loopback test started");
}
void loop() {
if (copier.copy() == 0) {
delay(1);
}
}

View File

@@ -0,0 +1,26 @@
This sketch is a minimal ESP32-C3 Opus codec smoke test.
What it does:
- Generates a sine wave locally
- Encodes it with Opus
- Decodes it immediately again
- Sends the decoded PCM to I2S
Why this example:
- It tests the raw Opus codec path without Ogg or CAN framing
- It is closer to the later Pi -> CAN -> ESP32 decoder path than MP3
- It keeps CPU load down by using 16 kHz mono and low encoder complexity
Expected hardware:
- ESP32-C3
- I2S DAC / amp on:
- BCLK = GPIO 6
- LRCK = GPIO 7
- DIN = GPIO 5
Required Arduino libraries:
- `arduino-audio-tools`
- `arduino-libopus`
If this sketch runs and outputs a stable sine tone, the basic Opus encode/decode
chain is working on the ESP32-C3.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +1,29 @@
Solid Edge in STL konvertieren Solid Edge in STL konvertieren
Datum: Montag,Januar 23,2023 06:20 Datum: Montag,Januar 23,2023 06:20
Quelldatei:C:\source\DeckelV6.par Quelldatei:C:\source\DeckelV6.par
Ausgangssystem: SOLID EDGE Ausgangssystem: SOLID EDGE
Hardware: Hardware:
Prozessor: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz Prozessor: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
Betriebssystem: Windows 10 Professional Betriebssystem: Windows 10 Professional
Installierter Speicher: 15,87 GB Installierter Speicher: 15,87 GB
Software-Informationen: Software-Informationen:
Parasolid-Version: 35.0.149 Parasolid-Version: 35.0.149
PSBodyshop-Version: 35.0.82 PSBodyshop-Version: 35.0.82
Solid Edge-Version: 223.00.00.101 x64 Solid Edge-Version: 223.00.00.101 x64
STL-Exportoptionen: STL-Exportoptionen:
Ausgabedateiformat:BINARY Ausgabedateiformat:BINARY
Angezeigte Teile exportieren: Aus Angezeigte Teile exportieren: Aus
Strukturoption: Monolithic Strukturoption: Monolithic
Einheiten exportieren:Millimeter Einheiten exportieren:Millimeter
Toleranzwert exportieren:0,001000 Toleranzwert exportieren:0,001000
Toleranztyp exportieren:Fine Toleranztyp exportieren:Fine
Flächenplanwinkelwert exportieren:0,523599 Flächenplanwinkelwert exportieren:0,523599
Konvertierungsfortschritt: Konvertierungsfortschritt:
Phase 1 von 2 - Abrufen der Parasolid-Informationen... Phase 1 von 2 - Abrufen der Parasolid-Informationen...
Anzahl erstellter STL-Dateien : 1 Anzahl erstellter STL-Dateien : 1
Konvertierungsvorgang ist abgeschlossen Konvertierungsvorgang ist abgeschlossen
Zum Konvertieren benötigte Zeit:00 : 00 : 00 Zum Konvertieren benötigte Zeit:00 : 00 : 00

View File

@@ -1,25 +1,25 @@
STL translation to Solid Edge STL translation to Solid Edge
Datum: Dienstag,April 25,2023 09:00 Datum: Dienstag,April 25,2023 09:00
Quelldatei:C:\Users\Martin\Documents\MeyCad\Meycad\SolidEdgeCase\GehaeuseV6.stl Quelldatei:C:\Users\Martin\Documents\MeyCad\Meycad\SolidEdgeCase\GehaeuseV6.stl
Autor: Unbekannt Autor: Unbekannt
Organisation: Unbekannt Organisation: Unbekannt
Ausgangssystem: DEX Ausgangssystem: DEX
Hardware: Hardware:
Prozessor: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz Prozessor: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
Betriebssystem: Windows 10 Professional Betriebssystem: Windows 10 Professional
Installierter Speicher: 15,87 GB Installierter Speicher: 15,87 GB
Software-Informationen: Software-Informationen:
Parasolid-Version: 35.0.149 Parasolid-Version: 35.0.149
PSBodyshop-Version: 35.0.82 PSBodyshop-Version: 35.0.82
Solid Edge-Version: 223.00.00.101 x64 Solid Edge-Version: 223.00.00.101 x64
STL Import Options STL Import Options
Vernetzungsfehler reparieren:Aus Vernetzungsfehler reparieren:Aus
Basisformelement erstellen:Ein Basisformelement erstellen:Ein
Protokollierung aktivieren:Ein Protokollierung aktivieren:Ein
Konvertierungsfortschritt: Konvertierungsfortschritt:
Konvertierungsvorgang ist abgeschlossen Konvertierungsvorgang ist abgeschlossen
Zum Konvertieren benötigte Zeit:00 : 00 : 02 Zum Konvertieren benötigte Zeit:00 : 00 : 02

View File

@@ -1,29 +1,29 @@
Solid Edge in STL konvertieren Solid Edge in STL konvertieren
Datum: Montag,Januar 23,2023 06:21 Datum: Montag,Januar 23,2023 06:21
Quelldatei:C:\source\GehaeuseV6.par Quelldatei:C:\source\GehaeuseV6.par
Ausgangssystem: SOLID EDGE Ausgangssystem: SOLID EDGE
Hardware: Hardware:
Prozessor: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz Prozessor: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
Betriebssystem: Windows 10 Professional Betriebssystem: Windows 10 Professional
Installierter Speicher: 15,87 GB Installierter Speicher: 15,87 GB
Software-Informationen: Software-Informationen:
Parasolid-Version: 35.0.149 Parasolid-Version: 35.0.149
PSBodyshop-Version: 35.0.82 PSBodyshop-Version: 35.0.82
Solid Edge-Version: 223.00.00.101 x64 Solid Edge-Version: 223.00.00.101 x64
STL-Exportoptionen: STL-Exportoptionen:
Ausgabedateiformat:BINARY Ausgabedateiformat:BINARY
Angezeigte Teile exportieren: Aus Angezeigte Teile exportieren: Aus
Strukturoption: Monolithic Strukturoption: Monolithic
Einheiten exportieren:Millimeter Einheiten exportieren:Millimeter
Toleranzwert exportieren:0,001000 Toleranzwert exportieren:0,001000
Toleranztyp exportieren:Fine Toleranztyp exportieren:Fine
Flächenplanwinkelwert exportieren:0,523599 Flächenplanwinkelwert exportieren:0,523599
Konvertierungsfortschritt: Konvertierungsfortschritt:
Phase 1 von 2 - Abrufen der Parasolid-Informationen... Phase 1 von 2 - Abrufen der Parasolid-Informationen...
Anzahl erstellter STL-Dateien : 1 Anzahl erstellter STL-Dateien : 1
Konvertierungsvorgang ist abgeschlossen Konvertierungsvorgang ist abgeschlossen
Zum Konvertieren benötigte Zeit:00 : 00 : 00 Zum Konvertieren benötigte Zeit:00 : 00 : 00

1
Switch V8/Meycad/+.txt Normal file
View File

@@ -0,0 +1 @@
Warnung: Breitenkorrektur eingeschränkt. Für die aktuellen Designregeln muss sich der Breitenkorrekturwert im Bereich [0,00004 mils; 7,87398 mils] befinden.

View File

@@ -0,0 +1,820 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:29+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L2,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:29*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,ComponentPad*%
%ADD10R,1.700000X1.700000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD11C,1.700000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD12C,0.508000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD13C,0.635000*%
%TD*%
G04 APERTURE END LIST*
D10*
%TO.P,J_Extension1,1,Pin_1*%
%TO.N,/E5*%
X104140000Y-71120000D03*
D11*
%TO.P,J_Extension1,2,Pin_2*%
%TO.N,/E6*%
X104140000Y-73660000D03*
%TO.P,J_Extension1,3,Pin_3*%
%TO.N,/E7*%
X101600000Y-71120000D03*
%TO.P,J_Extension1,4,Pin_4*%
%TO.N,/E8*%
X101600000Y-73660000D03*
%TO.P,J_Extension1,5,Pin_5*%
%TO.N,/E4*%
X99060000Y-71120000D03*
%TO.P,J_Extension1,6,Pin_6*%
%TO.N,/E3*%
X99060000Y-73660000D03*
%TO.P,J_Extension1,7,Pin_7*%
%TO.N,/E2*%
X96520000Y-71120000D03*
%TO.P,J_Extension1,8,Pin_8*%
%TO.N,/E1*%
X96520000Y-73660000D03*
%TD*%
%TO.P,CAN_4_1,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-73660000D03*
%TO.P,CAN_4_1,3,Pin_3*%
%TO.N,/CAN4_H*%
X180340000Y-76200000D03*
%TO.P,CAN_4_1,2,Pin_2*%
%TO.N,/CAN4_L*%
X180340000Y-78740000D03*
D10*
%TO.P,CAN_4_1,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-81280000D03*
%TD*%
%TO.P,J_Front_1_1,1,Pin_1*%
%TO.N,/CAN_24V*%
X175260000Y-99060000D03*
D11*
%TO.P,J_Front_1_1,2,Pin_2*%
%TO.N,/CAN_GND*%
X175260000Y-96520000D03*
%TO.P,J_Front_1_1,3,Pin_3*%
X175260000Y-93980000D03*
%TD*%
D10*
%TO.P,J6,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-93980000D03*
D11*
%TO.P,J6,2,Pin_2*%
%TO.N,/CAN3_L*%
X187960000Y-91440000D03*
%TO.P,J6,3,Pin_3*%
%TO.N,/CAN3_H*%
X187960000Y-88900000D03*
%TO.P,J6,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-86360000D03*
%TD*%
%TO.P,Arduino_R1,12,Pin_12*%
%TO.N,unconnected-(Arduino_R1-Pin_12-Pad12)*%
X107696000Y-111760000D03*
%TO.P,Arduino_R1,11,Pin_11*%
%TO.N,unconnected-(Arduino_R1-Pin_11-Pad11)*%
X107696000Y-109220000D03*
%TO.P,Arduino_R1,10,Pin_10*%
%TO.N,unconnected-(Arduino_R1-Pin_10-Pad10)*%
X107696000Y-106680000D03*
%TO.P,Arduino_R1,9,Pin_9*%
%TO.N,unconnected-(Arduino_R1-Pin_9-Pad9)*%
X107696000Y-104140000D03*
%TO.P,Arduino_R1,8,Pin_8*%
%TO.N,/E1*%
X107696000Y-101600000D03*
%TO.P,Arduino_R1,7,Pin_7*%
%TO.N,/E2*%
X107696000Y-99060000D03*
%TO.P,Arduino_R1,6,Pin_6*%
%TO.N,/E3*%
X107696000Y-96520000D03*
%TO.P,Arduino_R1,5,Pin_5*%
%TO.N,/E4*%
X107696000Y-93980000D03*
%TO.P,Arduino_R1,4,Pin_4*%
%TO.N,/E8*%
X107696000Y-91440000D03*
%TO.P,Arduino_R1,3,Pin_3*%
%TO.N,/E7*%
X107696000Y-88900000D03*
%TO.P,Arduino_R1,2,Pin_2*%
%TO.N,/E6*%
X107696000Y-86360000D03*
D10*
%TO.P,Arduino_R1,1,Pin_1*%
%TO.N,/E5*%
X107696000Y-83820000D03*
%TD*%
%TO.P,J2,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-119380000D03*
D11*
%TO.P,J2,2,Pin_2*%
%TO.N,/CAN1_L*%
X180340000Y-116840000D03*
%TO.P,J2,3,Pin_3*%
%TO.N,/CAN1_H*%
X180340000Y-114300000D03*
%TO.P,J2,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-111760000D03*
%TD*%
D10*
%TO.P,J10,1,Pin_1*%
%TO.N,/CAN3_L*%
X175260000Y-91440000D03*
D11*
%TO.P,J10,2,Pin_2*%
%TO.N,/CAN3_H*%
X175260000Y-88900000D03*
%TD*%
D10*
%TO.P,J_Front_1_3,1,Pin_1*%
%TO.N,/CAN_24V*%
X175260000Y-86360000D03*
D11*
%TO.P,J_Front_1_3,2,Pin_2*%
%TO.N,/CAN_GND*%
X175260000Y-83820000D03*
%TO.P,J_Front_1_3,3,Pin_3*%
X175260000Y-81280000D03*
%TD*%
D10*
%TO.P,J_Front_2,1,Pin_1*%
%TO.N,/GND*%
X167640000Y-93980000D03*
D11*
%TO.P,J_Front_2,2,Pin_2*%
%TO.N,unconnected-(J_Front_2-Pin_2-Pad2)*%
X167640000Y-96520000D03*
%TO.P,J_Front_2,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-99060000D03*
%TD*%
D10*
%TO.P,J4,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-93980000D03*
D11*
%TO.P,J4,2,Pin_2*%
%TO.N,/CAN3_L*%
X180340000Y-91440000D03*
%TO.P,J4,3,Pin_3*%
%TO.N,/CAN3_H*%
X180340000Y-88900000D03*
%TO.P,J4,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-86360000D03*
%TD*%
D10*
%TO.P,J_CAN_2,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-106680000D03*
D11*
%TO.P,J_CAN_2,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-106680000D03*
%TO.P,J_CAN_2,3,Pin_3*%
%TO.N,/CS2*%
X127000000Y-106680000D03*
%TO.P,J_CAN_2,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-106680000D03*
%TO.P,J_CAN_2,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-106680000D03*
%TO.P,J_CAN_2,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-106680000D03*
%TO.P,J_CAN_2,7,Pin_7*%
%TO.N,unconnected-(J_CAN_2-Pin_7-Pad7)*%
X137160000Y-106680000D03*
%TD*%
D10*
%TO.P,J_Front_3,1,Pin_1*%
%TO.N,/GND*%
X167640000Y-106680000D03*
D11*
%TO.P,J_Front_3,2,Pin_2*%
%TO.N,unconnected-(J_Front_3-Pin_2-Pad2)*%
X167640000Y-109220000D03*
%TO.P,J_Front_3,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-111760000D03*
%TD*%
%TO.P,Arduino_L1,12,Pin_12*%
%TO.N,/5V*%
X92456000Y-111760000D03*
%TO.P,Arduino_L1,11,Pin_11*%
%TO.N,/GND*%
X92456000Y-109220000D03*
%TO.P,Arduino_L1,10,Pin_10*%
%TO.N,unconnected-(Arduino_L1-Pin_10-Pad10)*%
X92456000Y-106680000D03*
%TO.P,Arduino_L1,9,Pin_9*%
%TO.N,unconnected-(Arduino_L1-Pin_9-Pad9)*%
X92456000Y-104140000D03*
%TO.P,Arduino_L1,8,Pin_8*%
%TO.N,/CS1*%
X92456000Y-101600000D03*
%TO.P,Arduino_L1,7,Pin_7*%
%TO.N,/CS2*%
X92456000Y-99060000D03*
%TO.P,Arduino_L1,6,Pin_6*%
%TO.N,/CS3*%
X92456000Y-96520000D03*
%TO.P,Arduino_L1,5,Pin_5*%
%TO.N,/CS4*%
X92456000Y-93980000D03*
%TO.P,Arduino_L1,4,Pin_4*%
%TO.N,/SO*%
X92456000Y-91440000D03*
%TO.P,Arduino_L1,3,Pin_3*%
%TO.N,/SI*%
X92456000Y-88900000D03*
%TO.P,Arduino_L1,2,Pin_2*%
%TO.N,/SCK*%
X92456000Y-86360000D03*
D10*
%TO.P,Arduino_L1,1,Pin_1*%
%TO.N,unconnected-(Arduino_L1-Pin_1-Pad1)*%
X92456000Y-83820000D03*
%TD*%
%TO.P,J_CAN_1,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-119380000D03*
D11*
%TO.P,J_CAN_1,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-119380000D03*
%TO.P,J_CAN_1,3,Pin_3*%
%TO.N,/CS1*%
X127000000Y-119380000D03*
%TO.P,J_CAN_1,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-119380000D03*
%TO.P,J_CAN_1,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-119380000D03*
%TO.P,J_CAN_1,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-119380000D03*
%TO.P,J_CAN_1,7,Pin_7*%
%TO.N,unconnected-(J_CAN_1-Pin_7-Pad7)*%
X137160000Y-119380000D03*
%TD*%
D10*
%TO.P,J_Front_1_2,1,Pin_1*%
%TO.N,/CAN_24V*%
X175260000Y-111760000D03*
D11*
%TO.P,J_Front_1_2,2,Pin_2*%
%TO.N,/CAN_GND*%
X175260000Y-109220000D03*
%TO.P,J_Front_1_2,3,Pin_3*%
X175260000Y-106680000D03*
%TD*%
%TO.P,J_Front_1,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-86360000D03*
%TO.P,J_Front_1,2,Pin_2*%
%TO.N,unconnected-(J_Front_1-Pin_2-Pad2)*%
X167640000Y-83820000D03*
D10*
%TO.P,J_Front_1,1,Pin_1*%
%TO.N,/GND*%
X167640000Y-81280000D03*
%TD*%
%TO.P,J7,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-81280000D03*
D11*
%TO.P,J7,2,Pin_2*%
%TO.N,/CAN4_L*%
X187960000Y-78740000D03*
%TO.P,J7,3,Pin_3*%
%TO.N,/CAN4_H*%
X187960000Y-76200000D03*
%TO.P,J7,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-73660000D03*
%TD*%
D10*
%TO.P,J9,1,Pin_1*%
%TO.N,/CAN2_L*%
X175260000Y-104140000D03*
D11*
%TO.P,J9,2,Pin_2*%
%TO.N,/CAN2_H*%
X175260000Y-101600000D03*
%TD*%
D10*
%TO.P,JJ_CAN_4,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-81280000D03*
D11*
%TO.P,JJ_CAN_4,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-81280000D03*
%TO.P,JJ_CAN_4,3,Pin_3*%
%TO.N,/CS4*%
X127000000Y-81280000D03*
%TO.P,JJ_CAN_4,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-81280000D03*
%TO.P,JJ_CAN_4,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-81280000D03*
%TO.P,JJ_CAN_4,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-81280000D03*
%TO.P,JJ_CAN_4,7,Pin_7*%
%TO.N,unconnected-(JJ_CAN_4-Pin_7-Pad7)*%
X137160000Y-81280000D03*
%TD*%
D10*
%TO.P,J8,1,Pin_1*%
%TO.N,/CAN1_L*%
X175260000Y-116840000D03*
D11*
%TO.P,J8,2,Pin_2*%
%TO.N,/CAN1_H*%
X175260000Y-114300000D03*
%TD*%
D10*
%TO.P,CAN_2_1,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-106680000D03*
D11*
%TO.P,CAN_2_1,2,Pin_2*%
%TO.N,/CAN2_L*%
X180340000Y-104140000D03*
%TO.P,CAN_2_1,3,Pin_3*%
%TO.N,/CAN2_H*%
X180340000Y-101600000D03*
%TO.P,CAN_2_1,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-99060000D03*
%TD*%
D10*
%TO.P,J_CAN_3,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-93980000D03*
D11*
%TO.P,J_CAN_3,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-93980000D03*
%TO.P,J_CAN_3,3,Pin_3*%
%TO.N,/CS3*%
X127000000Y-93980000D03*
%TO.P,J_CAN_3,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-93980000D03*
%TO.P,J_CAN_3,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-93980000D03*
%TO.P,J_CAN_3,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-93980000D03*
%TO.P,J_CAN_3,7,Pin_7*%
%TO.N,unconnected-(J_CAN_3-Pin_7-Pad7)*%
X137160000Y-93980000D03*
%TD*%
%TO.P,J1,2,Pin_2*%
%TO.N,/24V*%
X167640000Y-116750000D03*
D10*
%TO.P,J1,1,Pin_1*%
%TO.N,/GND*%
X165100000Y-116750000D03*
%TD*%
%TO.P,J11,1,Pin_1*%
%TO.N,/CAN4_L*%
X175260000Y-78740000D03*
D11*
%TO.P,J11,2,Pin_2*%
%TO.N,/CAN4_H*%
X175260000Y-76200000D03*
%TD*%
D10*
%TO.P,J_Extension_2,1,Pin_1*%
%TO.N,/5V*%
X167640000Y-66040000D03*
D11*
%TO.P,J_Extension_2,2,Pin_2*%
%TO.N,/GND*%
X167640000Y-68580000D03*
%TO.P,J_Extension_2,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-71120000D03*
%TD*%
D10*
%TO.P,J5,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-106680000D03*
D11*
%TO.P,J5,2,Pin_2*%
%TO.N,/CAN2_L*%
X187960000Y-104140000D03*
%TO.P,J5,3,Pin_3*%
%TO.N,/CAN2_H*%
X187960000Y-101600000D03*
%TO.P,J5,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-99060000D03*
%TD*%
D10*
%TO.P,J3,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-119380000D03*
D11*
%TO.P,J3,2,Pin_2*%
%TO.N,/CAN1_L*%
X187960000Y-116840000D03*
%TO.P,J3,3,Pin_3*%
%TO.N,/CAN1_H*%
X187960000Y-114300000D03*
%TO.P,J3,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-111760000D03*
%TD*%
D10*
%TO.P,J_Stepdown1,1,Pin_1*%
%TO.N,/5V*%
X153341400Y-83594200D03*
D11*
%TO.P,J_Stepdown1,2,Pin_2*%
%TO.N,/GND*%
X153341400Y-86134200D03*
%TO.P,J_Stepdown1,3,Pin_3*%
%TO.N,/24V*%
X153341400Y-88674200D03*
%TD*%
D12*
%TO.N,/CS3*%
X100063401Y-83492200D02*
X100063400Y-88484165D01*
X113251223Y-80846700D02*
X102708902Y-80846700D01*
X102708902Y-80846700D02*
X100063401Y-83492200D01*
X117187720Y-84783198D02*
X113251223Y-80846700D01*
X117190396Y-84783198D02*
X117187720Y-84783198D01*
X96518400Y-94997600D02*
X94996000Y-96520000D01*
X117190401Y-84783200D02*
X117190396Y-84783198D01*
X117481401Y-85074200D02*
X117190401Y-84783200D01*
X117484078Y-85074200D02*
X117481401Y-85074200D01*
X118484078Y-86074200D02*
X117484078Y-85074200D01*
X125317200Y-86074200D02*
X118484078Y-86074200D01*
X100063400Y-88484165D02*
X96518400Y-92029167D01*
X127000000Y-87757000D02*
X125317200Y-86074200D01*
X127000000Y-93980000D02*
X127000000Y-87757000D01*
X96518400Y-92029167D02*
X96518400Y-94997600D01*
X94996000Y-96520000D02*
X92456000Y-96520000D01*
%TO.N,/CS4*%
X117484074Y-84074195D02*
X117775079Y-84365200D01*
X117481395Y-84074195D02*
X117484074Y-84074195D01*
X118777756Y-85365200D02*
X125200800Y-85365200D01*
X113544901Y-80137700D02*
X117481395Y-84074195D01*
X117775079Y-84365200D02*
X117777756Y-84365200D01*
X102415225Y-80137700D02*
X113544901Y-80137700D01*
X99354401Y-83198522D02*
X102415225Y-80137700D01*
X99354400Y-88190487D02*
X99354401Y-83198522D01*
X95809400Y-92658600D02*
X95809400Y-91735489D01*
X117777756Y-84365200D02*
X118777756Y-85365200D01*
X95809400Y-91735489D02*
X99354400Y-88190487D01*
X94488000Y-93980000D02*
X95809400Y-92658600D01*
X125200800Y-85365200D02*
X127000000Y-83566000D01*
X92456000Y-93980000D02*
X94488000Y-93980000D01*
X127000000Y-83566000D02*
X127000000Y-81280000D01*
%TO.N,/CS1*%
X118772400Y-88367878D02*
X118772400Y-110365200D01*
X116896722Y-86492200D02*
X118772400Y-88367878D01*
X103296258Y-82264700D02*
X112663869Y-82264700D01*
X116600369Y-86201200D02*
X116603046Y-86201200D01*
X101481400Y-84079557D02*
X103296258Y-82264700D01*
X116603046Y-86201200D02*
X116894050Y-86492200D01*
X101481400Y-89071518D02*
X101481400Y-84079557D01*
X116894050Y-86492200D02*
X116896722Y-86492200D01*
X97936400Y-92616522D02*
X101481400Y-89071518D01*
X97936400Y-100691600D02*
X97936400Y-92616522D01*
X112663869Y-82264700D02*
X116600369Y-86201200D01*
X97028000Y-101600000D02*
X97936400Y-100691600D01*
X125790200Y-112074200D02*
X127000000Y-113284000D01*
X92456000Y-101600000D02*
X97028000Y-101600000D01*
X118772400Y-110365200D02*
X120481401Y-112074200D01*
X120481401Y-112074200D02*
X125790200Y-112074200D01*
X127000000Y-113284000D02*
X127000000Y-119380000D01*
%TO.N,/CS2*%
X112957547Y-81555700D02*
X116894045Y-85492198D01*
X100772400Y-83785879D02*
X103002581Y-81555700D01*
X103002581Y-81555700D02*
X112957547Y-81555700D01*
X100772400Y-88777841D02*
X100772400Y-83785879D01*
X97227400Y-92322845D02*
X100772400Y-88777841D01*
X97227400Y-97336600D02*
X97227400Y-92322845D01*
X116894045Y-85492198D02*
X116896719Y-85492198D01*
X95504000Y-99060000D02*
X97227400Y-97336600D01*
X119481400Y-88074201D02*
X119481400Y-110071522D01*
X127000000Y-110236000D02*
X127000000Y-106680000D01*
X117190400Y-85783200D02*
X119481400Y-88074201D01*
X125870800Y-111365200D02*
X127000000Y-110236000D01*
X117187723Y-85783200D02*
X117190400Y-85783200D01*
X120775078Y-111365200D02*
X125870800Y-111365200D01*
X116896719Y-85492198D02*
X117187723Y-85783200D01*
X92456000Y-99060000D02*
X95504000Y-99060000D01*
X119481400Y-110071522D02*
X120775078Y-111365200D01*
%TO.N,/SCK*%
X101623992Y-78010700D02*
X101937240Y-78010700D01*
X101092564Y-78272720D02*
X101133284Y-78232000D01*
X102211339Y-78010693D02*
X102211346Y-78010700D01*
X101424088Y-78031000D02*
X101603692Y-78031000D01*
X101133284Y-78232000D02*
X101223088Y-78232000D01*
X101937240Y-78010700D02*
X102211339Y-78010693D01*
X101092564Y-78362522D02*
X101092564Y-78272720D01*
X101603692Y-78031000D02*
X101623992Y-78010700D01*
X97227400Y-82227687D02*
X101092564Y-78362522D01*
X97227400Y-85652600D02*
X97227400Y-82227687D01*
X134620000Y-78740000D02*
X134620000Y-81280000D01*
X96520000Y-86360000D02*
X97227400Y-85652600D01*
X101223088Y-78232000D02*
X101424088Y-78031000D01*
X92456000Y-86360000D02*
X96520000Y-86360000D01*
X102211346Y-78010700D02*
X133890700Y-78010700D01*
X133890700Y-78010700D02*
X134620000Y-78740000D01*
%TO.N,/SI*%
X92456000Y-88900000D02*
X96520000Y-88900000D01*
X96520000Y-88900000D02*
X97936400Y-87483600D01*
X101717765Y-78740000D02*
X101897370Y-78740000D01*
X101897388Y-78739992D02*
X101917679Y-78719700D01*
X97936400Y-87483600D02*
X97936400Y-82521365D01*
X97936400Y-82521365D02*
X101717765Y-78740000D01*
X101917679Y-78719700D02*
X130789700Y-78719700D01*
X101897370Y-78740000D02*
X101897378Y-78739992D01*
X101897378Y-78739992D02*
X101897388Y-78739992D01*
X130789700Y-78719700D02*
X132080000Y-80010000D01*
X132080000Y-80010000D02*
X132080000Y-81280000D01*
%TO.N,/SO*%
X129540000Y-81280000D02*
X127688700Y-79428700D01*
X127688700Y-79428700D02*
X102211347Y-79428700D01*
%TO.N,/GND*%
X92456000Y-109220000D02*
X94488000Y-109220000D01*
X94488000Y-109220000D02*
X95504000Y-110236000D01*
X95504000Y-110236000D02*
X95504000Y-113284000D01*
X96520000Y-114300000D02*
X121920000Y-114300000D01*
X95504000Y-113284000D02*
X96520000Y-114300000D01*
X121920000Y-114300000D02*
X124460000Y-116840000D01*
X124460000Y-116840000D02*
X124460000Y-119380000D01*
%TO.N,/SO*%
X98645400Y-87896810D02*
X95102210Y-91440000D01*
X95102210Y-91440000D02*
X92456000Y-91440000D01*
%TO.N,/SCK*%
X134620000Y-119380000D02*
X134620000Y-81280000D01*
%TO.N,/SI*%
X132080000Y-81280000D02*
X132080000Y-119380000D01*
%TO.N,/SO*%
X129540000Y-119380000D02*
X129540000Y-81280000D01*
X98645400Y-87896810D02*
X98645400Y-82904845D01*
X98645400Y-82904845D02*
X102058045Y-79492200D01*
D13*
%TO.N,/GND*%
X163941400Y-105621400D02*
X165100000Y-106780000D01*
X165100000Y-106780000D02*
X165100000Y-116750000D01*
X163941400Y-84274200D02*
X163941400Y-82058600D01*
X163941400Y-82058600D02*
X164720000Y-81280000D01*
X164720000Y-81280000D02*
X167640000Y-81280000D01*
X162081400Y-86134200D02*
X163941400Y-84274200D01*
X163941400Y-84274200D02*
X163941400Y-84600000D01*
%TO.N,/CAN_GND*%
X182500000Y-105750000D02*
X182500000Y-118750000D01*
X182500000Y-118750000D02*
X181870000Y-119380000D01*
X181870000Y-119380000D02*
X180340000Y-119380000D01*
X182500000Y-92750000D02*
X182500000Y-105750000D01*
X182500000Y-105750000D02*
X181570000Y-106680000D01*
X181570000Y-106680000D02*
X180340000Y-106680000D01*
X180340000Y-81280000D02*
X181530000Y-81280000D01*
X181530000Y-81280000D02*
X182500000Y-82250000D01*
X182500000Y-82250000D02*
X182500000Y-92750000D01*
X182500000Y-92750000D02*
X181270000Y-93980000D01*
X181270000Y-93980000D02*
X180340000Y-93980000D01*
%TO.N,/CAN_24V*%
X177750000Y-98000000D02*
X177750000Y-111000000D01*
X177750000Y-111000000D02*
X178510000Y-111760000D01*
X178510000Y-111760000D02*
X180340000Y-111760000D01*
X177750000Y-85750000D02*
X177750000Y-98000000D01*
X177750000Y-98000000D02*
X178810000Y-99060000D01*
X178810000Y-99060000D02*
X180340000Y-99060000D01*
X180340000Y-73660000D02*
X178590000Y-73660000D01*
X178590000Y-73660000D02*
X177750000Y-74500000D01*
X177750000Y-74500000D02*
X177750000Y-85750000D01*
X177750000Y-85750000D02*
X178360000Y-86360000D01*
X178360000Y-86360000D02*
X180340000Y-86360000D01*
%TO.N,/GND*%
X163941400Y-92941400D02*
X164980000Y-93980000D01*
X163941400Y-91800000D02*
X163941400Y-92941400D01*
X162201400Y-86134200D02*
X163941400Y-87874200D01*
X153341400Y-86134200D02*
X162081400Y-86134200D01*
X163941400Y-91800000D02*
X163941400Y-105621400D01*
X163941400Y-87874200D02*
X163941400Y-84600000D01*
X163941400Y-105621400D02*
X165000000Y-106680000D01*
X162081400Y-86134200D02*
X162201400Y-86134200D01*
X164980000Y-93980000D02*
X167640000Y-93980000D01*
X165000000Y-106680000D02*
X167640000Y-106680000D01*
X163941400Y-91800000D02*
X163941400Y-87874200D01*
D12*
%TO.N,/E5*%
X107421400Y-84134200D02*
X107981400Y-84134200D01*
%TD*%
%TA.AperFunction,Conductor*%
%TO.N,/GND*%
G36*
X163889279Y-84807265D02*
G01*
X163939802Y-84855526D01*
X163956118Y-84909694D01*
X164123282Y-87584312D01*
X164107817Y-87652449D01*
X164057970Y-87701409D01*
X163989567Y-87715647D01*
X163924324Y-87690643D01*
X163919509Y-87686777D01*
X163127182Y-87017531D01*
X162197722Y-86232452D01*
X162159210Y-86174157D01*
X162158329Y-86104293D01*
X162195359Y-86045043D01*
X162201160Y-86040194D01*
X163755797Y-84819888D01*
X163820684Y-84793980D01*
X163889279Y-84807265D01*
G37*
%TD.AperFunction*%
%TD*%
M02*

View File

@@ -0,0 +1,245 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:30+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:30*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,1.700000X1.700000*%
%ADD11C,1.700000*%
G04 APERTURE END LIST*
D10*
%TO.C,J_Extension1*%
X104140000Y-71120000D03*
D11*
X104140000Y-73660000D03*
X101600000Y-71120000D03*
X101600000Y-73660000D03*
X99060000Y-71120000D03*
X99060000Y-73660000D03*
X96520000Y-71120000D03*
X96520000Y-73660000D03*
%TD*%
%TO.C,CAN_4_1*%
X180340000Y-73660000D03*
X180340000Y-76200000D03*
X180340000Y-78740000D03*
D10*
X180340000Y-81280000D03*
%TD*%
%TO.C,J_Front_1_1*%
X175260000Y-99060000D03*
D11*
X175260000Y-96520000D03*
X175260000Y-93980000D03*
%TD*%
D10*
%TO.C,J6*%
X187960000Y-93980000D03*
D11*
X187960000Y-91440000D03*
X187960000Y-88900000D03*
X187960000Y-86360000D03*
%TD*%
%TO.C,Arduino_R1*%
X107696000Y-111760000D03*
X107696000Y-109220000D03*
X107696000Y-106680000D03*
X107696000Y-104140000D03*
X107696000Y-101600000D03*
X107696000Y-99060000D03*
X107696000Y-96520000D03*
X107696000Y-93980000D03*
X107696000Y-91440000D03*
X107696000Y-88900000D03*
X107696000Y-86360000D03*
D10*
X107696000Y-83820000D03*
%TD*%
%TO.C,J2*%
X180340000Y-119380000D03*
D11*
X180340000Y-116840000D03*
X180340000Y-114300000D03*
X180340000Y-111760000D03*
%TD*%
D10*
%TO.C,J10*%
X175260000Y-91440000D03*
D11*
X175260000Y-88900000D03*
%TD*%
D10*
%TO.C,J_Front_1_3*%
X175260000Y-86360000D03*
D11*
X175260000Y-83820000D03*
X175260000Y-81280000D03*
%TD*%
D10*
%TO.C,J_Front_2*%
X167640000Y-93980000D03*
D11*
X167640000Y-96520000D03*
X167640000Y-99060000D03*
%TD*%
D10*
%TO.C,J4*%
X180340000Y-93980000D03*
D11*
X180340000Y-91440000D03*
X180340000Y-88900000D03*
X180340000Y-86360000D03*
%TD*%
D10*
%TO.C,J_CAN_2*%
X121920000Y-106680000D03*
D11*
X124460000Y-106680000D03*
X127000000Y-106680000D03*
X129540000Y-106680000D03*
X132080000Y-106680000D03*
X134620000Y-106680000D03*
X137160000Y-106680000D03*
%TD*%
D10*
%TO.C,J_Front_3*%
X167640000Y-106680000D03*
D11*
X167640000Y-109220000D03*
X167640000Y-111760000D03*
%TD*%
%TO.C,Arduino_L1*%
X92456000Y-111760000D03*
X92456000Y-109220000D03*
X92456000Y-106680000D03*
X92456000Y-104140000D03*
X92456000Y-101600000D03*
X92456000Y-99060000D03*
X92456000Y-96520000D03*
X92456000Y-93980000D03*
X92456000Y-91440000D03*
X92456000Y-88900000D03*
X92456000Y-86360000D03*
D10*
X92456000Y-83820000D03*
%TD*%
%TO.C,J_CAN_1*%
X121920000Y-119380000D03*
D11*
X124460000Y-119380000D03*
X127000000Y-119380000D03*
X129540000Y-119380000D03*
X132080000Y-119380000D03*
X134620000Y-119380000D03*
X137160000Y-119380000D03*
%TD*%
D10*
%TO.C,J_Front_1_2*%
X175260000Y-111760000D03*
D11*
X175260000Y-109220000D03*
X175260000Y-106680000D03*
%TD*%
%TO.C,J_Front_1*%
X167640000Y-86360000D03*
X167640000Y-83820000D03*
D10*
X167640000Y-81280000D03*
%TD*%
%TO.C,J7*%
X187960000Y-81280000D03*
D11*
X187960000Y-78740000D03*
X187960000Y-76200000D03*
X187960000Y-73660000D03*
%TD*%
D10*
%TO.C,J9*%
X175260000Y-104140000D03*
D11*
X175260000Y-101600000D03*
%TD*%
D10*
%TO.C,JJ_CAN_4*%
X121920000Y-81280000D03*
D11*
X124460000Y-81280000D03*
X127000000Y-81280000D03*
X129540000Y-81280000D03*
X132080000Y-81280000D03*
X134620000Y-81280000D03*
X137160000Y-81280000D03*
%TD*%
D10*
%TO.C,J8*%
X175260000Y-116840000D03*
D11*
X175260000Y-114300000D03*
%TD*%
D10*
%TO.C,CAN_2_1*%
X180340000Y-106680000D03*
D11*
X180340000Y-104140000D03*
X180340000Y-101600000D03*
X180340000Y-99060000D03*
%TD*%
D10*
%TO.C,J_CAN_3*%
X121920000Y-93980000D03*
D11*
X124460000Y-93980000D03*
X127000000Y-93980000D03*
X129540000Y-93980000D03*
X132080000Y-93980000D03*
X134620000Y-93980000D03*
X137160000Y-93980000D03*
%TD*%
%TO.C,J1*%
X167640000Y-116750000D03*
D10*
X165100000Y-116750000D03*
%TD*%
%TO.C,J11*%
X175260000Y-78740000D03*
D11*
X175260000Y-76200000D03*
%TD*%
D10*
%TO.C,J_Extension_2*%
X167640000Y-66040000D03*
D11*
X167640000Y-68580000D03*
X167640000Y-71120000D03*
%TD*%
D10*
%TO.C,J5*%
X187960000Y-106680000D03*
D11*
X187960000Y-104140000D03*
X187960000Y-101600000D03*
X187960000Y-99060000D03*
%TD*%
D10*
%TO.C,J3*%
X187960000Y-119380000D03*
D11*
X187960000Y-116840000D03*
X187960000Y-114300000D03*
X187960000Y-111760000D03*
%TD*%
D10*
%TO.C,J_Stepdown1*%
X153341400Y-83594200D03*
D11*
X153341400Y-86134200D03*
X153341400Y-88674200D03*
%TD*%
M02*

View File

@@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:29+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:29*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*

View File

@@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:29+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:29*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*

View File

@@ -0,0 +1,43 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:30+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:30*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
G04 APERTURE END LIST*
D10*
X171037200Y-57750000D02*
X171500000Y-57750000D01*
X171500000Y-121250000D01*
X171037200Y-121250000D01*
X171037200Y-57750000D01*
X90116400Y-57574200D02*
X190436400Y-57574200D01*
X190436400Y-121574200D01*
X90116400Y-121574200D01*
X90116400Y-57574200D01*
X106605200Y-76441200D02*
X161000000Y-76441200D01*
X161000000Y-77000000D01*
X106605200Y-77000000D01*
X106605200Y-76441200D01*
X165287200Y-76441200D02*
X170750000Y-76441200D01*
X170750000Y-77000000D01*
X165287200Y-77000000D01*
X165287200Y-76441200D01*
X90250000Y-76352400D02*
X93560000Y-76352400D01*
X93560000Y-76911200D01*
X90250000Y-76911200D01*
X90250000Y-76352400D01*
M02*

View File

@@ -0,0 +1,808 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:29+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L1,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:29*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,ComponentPad*%
%ADD10R,1.700000X1.700000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD11C,1.700000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD12C,0.635000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD13C,0.381000*%
%TD*%
G04 APERTURE END LIST*
D10*
%TO.P,J_Extension1,1,Pin_1*%
%TO.N,/E5*%
X104140000Y-71120000D03*
D11*
%TO.P,J_Extension1,2,Pin_2*%
%TO.N,/E6*%
X104140000Y-73660000D03*
%TO.P,J_Extension1,3,Pin_3*%
%TO.N,/E7*%
X101600000Y-71120000D03*
%TO.P,J_Extension1,4,Pin_4*%
%TO.N,/E8*%
X101600000Y-73660000D03*
%TO.P,J_Extension1,5,Pin_5*%
%TO.N,/E4*%
X99060000Y-71120000D03*
%TO.P,J_Extension1,6,Pin_6*%
%TO.N,/E3*%
X99060000Y-73660000D03*
%TO.P,J_Extension1,7,Pin_7*%
%TO.N,/E2*%
X96520000Y-71120000D03*
%TO.P,J_Extension1,8,Pin_8*%
%TO.N,/E1*%
X96520000Y-73660000D03*
%TD*%
%TO.P,CAN_4_1,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-73660000D03*
%TO.P,CAN_4_1,3,Pin_3*%
%TO.N,/CAN4_H*%
X180340000Y-76200000D03*
%TO.P,CAN_4_1,2,Pin_2*%
%TO.N,/CAN4_L*%
X180340000Y-78740000D03*
D10*
%TO.P,CAN_4_1,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-81280000D03*
%TD*%
%TO.P,J_Front_1_1,1,Pin_1*%
%TO.N,/CAN_24V*%
X175260000Y-99060000D03*
D11*
%TO.P,J_Front_1_1,2,Pin_2*%
%TO.N,/CAN_GND*%
X175260000Y-96520000D03*
%TO.P,J_Front_1_1,3,Pin_3*%
X175260000Y-93980000D03*
%TD*%
D10*
%TO.P,J6,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-93980000D03*
D11*
%TO.P,J6,2,Pin_2*%
%TO.N,/CAN3_L*%
X187960000Y-91440000D03*
%TO.P,J6,3,Pin_3*%
%TO.N,/CAN3_H*%
X187960000Y-88900000D03*
%TO.P,J6,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-86360000D03*
%TD*%
%TO.P,Arduino_R1,12,Pin_12*%
%TO.N,unconnected-(Arduino_R1-Pin_12-Pad12)*%
X107696000Y-111760000D03*
%TO.P,Arduino_R1,11,Pin_11*%
%TO.N,unconnected-(Arduino_R1-Pin_11-Pad11)*%
X107696000Y-109220000D03*
%TO.P,Arduino_R1,10,Pin_10*%
%TO.N,unconnected-(Arduino_R1-Pin_10-Pad10)*%
X107696000Y-106680000D03*
%TO.P,Arduino_R1,9,Pin_9*%
%TO.N,unconnected-(Arduino_R1-Pin_9-Pad9)*%
X107696000Y-104140000D03*
%TO.P,Arduino_R1,8,Pin_8*%
%TO.N,/E1*%
X107696000Y-101600000D03*
%TO.P,Arduino_R1,7,Pin_7*%
%TO.N,/E2*%
X107696000Y-99060000D03*
%TO.P,Arduino_R1,6,Pin_6*%
%TO.N,/E3*%
X107696000Y-96520000D03*
%TO.P,Arduino_R1,5,Pin_5*%
%TO.N,/E4*%
X107696000Y-93980000D03*
%TO.P,Arduino_R1,4,Pin_4*%
%TO.N,/E8*%
X107696000Y-91440000D03*
%TO.P,Arduino_R1,3,Pin_3*%
%TO.N,/E7*%
X107696000Y-88900000D03*
%TO.P,Arduino_R1,2,Pin_2*%
%TO.N,/E6*%
X107696000Y-86360000D03*
D10*
%TO.P,Arduino_R1,1,Pin_1*%
%TO.N,/E5*%
X107696000Y-83820000D03*
%TD*%
%TO.P,J2,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-119380000D03*
D11*
%TO.P,J2,2,Pin_2*%
%TO.N,/CAN1_L*%
X180340000Y-116840000D03*
%TO.P,J2,3,Pin_3*%
%TO.N,/CAN1_H*%
X180340000Y-114300000D03*
%TO.P,J2,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-111760000D03*
%TD*%
D10*
%TO.P,J10,1,Pin_1*%
%TO.N,/CAN3_L*%
X175260000Y-91440000D03*
D11*
%TO.P,J10,2,Pin_2*%
%TO.N,/CAN3_H*%
X175260000Y-88900000D03*
%TD*%
D10*
%TO.P,J_Front_1_3,1,Pin_1*%
%TO.N,/CAN_24V*%
X175260000Y-86360000D03*
D11*
%TO.P,J_Front_1_3,2,Pin_2*%
%TO.N,/CAN_GND*%
X175260000Y-83820000D03*
%TO.P,J_Front_1_3,3,Pin_3*%
X175260000Y-81280000D03*
%TD*%
D10*
%TO.P,J_Front_2,1,Pin_1*%
%TO.N,/GND*%
X167640000Y-93980000D03*
D11*
%TO.P,J_Front_2,2,Pin_2*%
%TO.N,unconnected-(J_Front_2-Pin_2-Pad2)*%
X167640000Y-96520000D03*
%TO.P,J_Front_2,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-99060000D03*
%TD*%
D10*
%TO.P,J4,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-93980000D03*
D11*
%TO.P,J4,2,Pin_2*%
%TO.N,/CAN3_L*%
X180340000Y-91440000D03*
%TO.P,J4,3,Pin_3*%
%TO.N,/CAN3_H*%
X180340000Y-88900000D03*
%TO.P,J4,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-86360000D03*
%TD*%
D10*
%TO.P,J_CAN_2,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-106680000D03*
D11*
%TO.P,J_CAN_2,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-106680000D03*
%TO.P,J_CAN_2,3,Pin_3*%
%TO.N,/CS2*%
X127000000Y-106680000D03*
%TO.P,J_CAN_2,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-106680000D03*
%TO.P,J_CAN_2,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-106680000D03*
%TO.P,J_CAN_2,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-106680000D03*
%TO.P,J_CAN_2,7,Pin_7*%
%TO.N,unconnected-(J_CAN_2-Pin_7-Pad7)*%
X137160000Y-106680000D03*
%TD*%
D10*
%TO.P,J_Front_3,1,Pin_1*%
%TO.N,/GND*%
X167640000Y-106680000D03*
D11*
%TO.P,J_Front_3,2,Pin_2*%
%TO.N,unconnected-(J_Front_3-Pin_2-Pad2)*%
X167640000Y-109220000D03*
%TO.P,J_Front_3,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-111760000D03*
%TD*%
%TO.P,Arduino_L1,12,Pin_12*%
%TO.N,/5V*%
X92456000Y-111760000D03*
%TO.P,Arduino_L1,11,Pin_11*%
%TO.N,/GND*%
X92456000Y-109220000D03*
%TO.P,Arduino_L1,10,Pin_10*%
%TO.N,unconnected-(Arduino_L1-Pin_10-Pad10)*%
X92456000Y-106680000D03*
%TO.P,Arduino_L1,9,Pin_9*%
%TO.N,unconnected-(Arduino_L1-Pin_9-Pad9)*%
X92456000Y-104140000D03*
%TO.P,Arduino_L1,8,Pin_8*%
%TO.N,/CS1*%
X92456000Y-101600000D03*
%TO.P,Arduino_L1,7,Pin_7*%
%TO.N,/CS2*%
X92456000Y-99060000D03*
%TO.P,Arduino_L1,6,Pin_6*%
%TO.N,/CS3*%
X92456000Y-96520000D03*
%TO.P,Arduino_L1,5,Pin_5*%
%TO.N,/CS4*%
X92456000Y-93980000D03*
%TO.P,Arduino_L1,4,Pin_4*%
%TO.N,/SO*%
X92456000Y-91440000D03*
%TO.P,Arduino_L1,3,Pin_3*%
%TO.N,/SI*%
X92456000Y-88900000D03*
%TO.P,Arduino_L1,2,Pin_2*%
%TO.N,/SCK*%
X92456000Y-86360000D03*
D10*
%TO.P,Arduino_L1,1,Pin_1*%
%TO.N,unconnected-(Arduino_L1-Pin_1-Pad1)*%
X92456000Y-83820000D03*
%TD*%
%TO.P,J_CAN_1,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-119380000D03*
D11*
%TO.P,J_CAN_1,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-119380000D03*
%TO.P,J_CAN_1,3,Pin_3*%
%TO.N,/CS1*%
X127000000Y-119380000D03*
%TO.P,J_CAN_1,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-119380000D03*
%TO.P,J_CAN_1,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-119380000D03*
%TO.P,J_CAN_1,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-119380000D03*
%TO.P,J_CAN_1,7,Pin_7*%
%TO.N,unconnected-(J_CAN_1-Pin_7-Pad7)*%
X137160000Y-119380000D03*
%TD*%
D10*
%TO.P,J_Front_1_2,1,Pin_1*%
%TO.N,/CAN_24V*%
X175260000Y-111760000D03*
D11*
%TO.P,J_Front_1_2,2,Pin_2*%
%TO.N,/CAN_GND*%
X175260000Y-109220000D03*
%TO.P,J_Front_1_2,3,Pin_3*%
X175260000Y-106680000D03*
%TD*%
%TO.P,J_Front_1,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-86360000D03*
%TO.P,J_Front_1,2,Pin_2*%
%TO.N,unconnected-(J_Front_1-Pin_2-Pad2)*%
X167640000Y-83820000D03*
D10*
%TO.P,J_Front_1,1,Pin_1*%
%TO.N,/GND*%
X167640000Y-81280000D03*
%TD*%
%TO.P,J7,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-81280000D03*
D11*
%TO.P,J7,2,Pin_2*%
%TO.N,/CAN4_L*%
X187960000Y-78740000D03*
%TO.P,J7,3,Pin_3*%
%TO.N,/CAN4_H*%
X187960000Y-76200000D03*
%TO.P,J7,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-73660000D03*
%TD*%
D10*
%TO.P,J9,1,Pin_1*%
%TO.N,/CAN2_L*%
X175260000Y-104140000D03*
D11*
%TO.P,J9,2,Pin_2*%
%TO.N,/CAN2_H*%
X175260000Y-101600000D03*
%TD*%
D10*
%TO.P,JJ_CAN_4,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-81280000D03*
D11*
%TO.P,JJ_CAN_4,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-81280000D03*
%TO.P,JJ_CAN_4,3,Pin_3*%
%TO.N,/CS4*%
X127000000Y-81280000D03*
%TO.P,JJ_CAN_4,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-81280000D03*
%TO.P,JJ_CAN_4,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-81280000D03*
%TO.P,JJ_CAN_4,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-81280000D03*
%TO.P,JJ_CAN_4,7,Pin_7*%
%TO.N,unconnected-(JJ_CAN_4-Pin_7-Pad7)*%
X137160000Y-81280000D03*
%TD*%
D10*
%TO.P,J8,1,Pin_1*%
%TO.N,/CAN1_L*%
X175260000Y-116840000D03*
D11*
%TO.P,J8,2,Pin_2*%
%TO.N,/CAN1_H*%
X175260000Y-114300000D03*
%TD*%
D10*
%TO.P,CAN_2_1,1,Pin_1*%
%TO.N,/CAN_GND*%
X180340000Y-106680000D03*
D11*
%TO.P,CAN_2_1,2,Pin_2*%
%TO.N,/CAN2_L*%
X180340000Y-104140000D03*
%TO.P,CAN_2_1,3,Pin_3*%
%TO.N,/CAN2_H*%
X180340000Y-101600000D03*
%TO.P,CAN_2_1,4,Pin_4*%
%TO.N,/CAN_24V*%
X180340000Y-99060000D03*
%TD*%
D10*
%TO.P,J_CAN_3,1,Pin_1*%
%TO.N,/5V*%
X121920000Y-93980000D03*
D11*
%TO.P,J_CAN_3,2,Pin_2*%
%TO.N,/GND*%
X124460000Y-93980000D03*
%TO.P,J_CAN_3,3,Pin_3*%
%TO.N,/CS3*%
X127000000Y-93980000D03*
%TO.P,J_CAN_3,4,Pin_4*%
%TO.N,/SO*%
X129540000Y-93980000D03*
%TO.P,J_CAN_3,5,Pin_5*%
%TO.N,/SI*%
X132080000Y-93980000D03*
%TO.P,J_CAN_3,6,Pin_6*%
%TO.N,/SCK*%
X134620000Y-93980000D03*
%TO.P,J_CAN_3,7,Pin_7*%
%TO.N,unconnected-(J_CAN_3-Pin_7-Pad7)*%
X137160000Y-93980000D03*
%TD*%
%TO.P,J1,2,Pin_2*%
%TO.N,/24V*%
X167640000Y-116750000D03*
D10*
%TO.P,J1,1,Pin_1*%
%TO.N,/GND*%
X165100000Y-116750000D03*
%TD*%
%TO.P,J11,1,Pin_1*%
%TO.N,/CAN4_L*%
X175260000Y-78740000D03*
D11*
%TO.P,J11,2,Pin_2*%
%TO.N,/CAN4_H*%
X175260000Y-76200000D03*
%TD*%
D10*
%TO.P,J_Extension_2,1,Pin_1*%
%TO.N,/5V*%
X167640000Y-66040000D03*
D11*
%TO.P,J_Extension_2,2,Pin_2*%
%TO.N,/GND*%
X167640000Y-68580000D03*
%TO.P,J_Extension_2,3,Pin_3*%
%TO.N,/24V*%
X167640000Y-71120000D03*
%TD*%
D10*
%TO.P,J5,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-106680000D03*
D11*
%TO.P,J5,2,Pin_2*%
%TO.N,/CAN2_L*%
X187960000Y-104140000D03*
%TO.P,J5,3,Pin_3*%
%TO.N,/CAN2_H*%
X187960000Y-101600000D03*
%TO.P,J5,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-99060000D03*
%TD*%
D10*
%TO.P,J3,1,Pin_1*%
%TO.N,/CAN_GND*%
X187960000Y-119380000D03*
D11*
%TO.P,J3,2,Pin_2*%
%TO.N,/CAN1_L*%
X187960000Y-116840000D03*
%TO.P,J3,3,Pin_3*%
%TO.N,/CAN1_H*%
X187960000Y-114300000D03*
%TO.P,J3,4,Pin_4*%
%TO.N,/CAN_24V*%
X187960000Y-111760000D03*
%TD*%
D10*
%TO.P,J_Stepdown1,1,Pin_1*%
%TO.N,/5V*%
X153341400Y-83594200D03*
D11*
%TO.P,J_Stepdown1,2,Pin_2*%
%TO.N,/GND*%
X153341400Y-86134200D03*
%TO.P,J_Stepdown1,3,Pin_3*%
%TO.N,/24V*%
X153341400Y-88674200D03*
%TD*%
D12*
%TO.N,/GND*%
X153341400Y-86134200D02*
X156881400Y-86134200D01*
X156881400Y-86134200D02*
X162705400Y-80310200D01*
X162705400Y-80310200D02*
X162705400Y-69794600D01*
X162705400Y-69794600D02*
X163920000Y-68580000D01*
X163920000Y-68580000D02*
X167640000Y-68580000D01*
D13*
%TO.N,/E5*%
X105641400Y-83289400D02*
X105641400Y-72621400D01*
X105641400Y-72621400D02*
X104140000Y-71120000D01*
%TO.N,/E7*%
X102899900Y-78363484D02*
X102899900Y-72419900D01*
X102899900Y-72419900D02*
X101600000Y-71120000D01*
%TO.N,/E4*%
X107696000Y-93980000D02*
X105156000Y-93980000D01*
X105156000Y-93980000D02*
X103313400Y-92137400D01*
X100301500Y-72361500D02*
X99060000Y-71120000D01*
X103313400Y-92137400D02*
X103313400Y-80423128D01*
X103313400Y-80423128D02*
X100301500Y-77411228D01*
X100301500Y-77411228D02*
X100301500Y-72361500D01*
%TO.N,/E2*%
X97762900Y-76518772D02*
X97762900Y-72362900D01*
X97762900Y-72362900D02*
X96520000Y-71120000D01*
%TO.N,/E1*%
X107696000Y-101600000D02*
X102616000Y-101600000D01*
X102616000Y-101600000D02*
X101559400Y-100543400D01*
X101559400Y-100543400D02*
X101559400Y-81138344D01*
X101559400Y-81138344D02*
X96520000Y-76098944D01*
X96520000Y-76098944D02*
X96520000Y-73660000D01*
D12*
%TO.N,/GND*%
X124460000Y-88392000D02*
X124460000Y-119380000D01*
%TO.N,/5V*%
X92456000Y-111760000D02*
X93980000Y-111760000D01*
X93980000Y-111760000D02*
X96520000Y-114300000D01*
X96520000Y-114300000D02*
X117856000Y-114300000D01*
X117856000Y-114300000D02*
X121920000Y-110236000D01*
X121920000Y-110236000D02*
X121920000Y-106680000D01*
%TO.N,/GND*%
X124460000Y-81280000D02*
X124460000Y-84328000D01*
X126209800Y-86134200D02*
X126209800Y-86077800D01*
X126209800Y-86077800D02*
X124460000Y-84328000D01*
%TO.N,/5V*%
X121920000Y-81280000D02*
X121920000Y-119380000D01*
X121920000Y-81280000D02*
X121920000Y-80264000D01*
X121920000Y-80264000D02*
X122936000Y-79248000D01*
X122936000Y-79248000D02*
X151384000Y-79248000D01*
X151384000Y-79248000D02*
X153341400Y-81205400D01*
X153341400Y-81205400D02*
X153341400Y-83594200D01*
%TO.N,/GND*%
X124460000Y-87884000D02*
X124460000Y-88392000D01*
X153341400Y-86134200D02*
X126209800Y-86134200D01*
X126209800Y-86134200D02*
X124460000Y-87884000D01*
D13*
%TO.N,/E2*%
X102141400Y-98077400D02*
X103124000Y-99060000D01*
X102141400Y-80897272D02*
X102141400Y-98077400D01*
X103124000Y-99060000D02*
X107696000Y-99060000D01*
%TO.N,/E3*%
X102731400Y-95111400D02*
X104140000Y-96520000D01*
X102731400Y-80664200D02*
X102731400Y-95111400D01*
X104140000Y-96520000D02*
X107696000Y-96520000D01*
%TO.N,/E8*%
X101601400Y-74114200D02*
X101601400Y-77888056D01*
X101601400Y-77888056D02*
X103895400Y-80182056D01*
X103895400Y-80182056D02*
X103895400Y-90179400D01*
X103895400Y-90179400D02*
X105156000Y-91440000D01*
X105156000Y-91440000D02*
X107696000Y-91440000D01*
%TO.N,/E7*%
X102899900Y-78363484D02*
X104477400Y-79940984D01*
X105664000Y-88900000D02*
X107696000Y-88900000D01*
X104477400Y-79940984D02*
X104477400Y-87713400D01*
X104477400Y-87713400D02*
X105664000Y-88900000D01*
%TO.N,/E6*%
X104141400Y-74114200D02*
X104141400Y-78781912D01*
X104141400Y-78781912D02*
X105059400Y-79699912D01*
X105059400Y-79699912D02*
X105059400Y-85247400D01*
X105059400Y-85247400D02*
X106172000Y-86360000D01*
X106172000Y-86360000D02*
X107696000Y-86360000D01*
%TO.N,/E5*%
X105641400Y-83289400D02*
X106172000Y-83820000D01*
X106172000Y-83820000D02*
X107696000Y-83820000D01*
D12*
%TO.N,/5V*%
X162960000Y-66040000D02*
X167640000Y-66040000D01*
%TO.N,/GND*%
X92021400Y-109534200D02*
X92481400Y-109534200D01*
D13*
%TO.N,/E3*%
X99061400Y-74114200D02*
X99061400Y-76994200D01*
X99061400Y-76994200D02*
X102731400Y-80664200D01*
D12*
%TO.N,/24V*%
X155541400Y-88674200D02*
X161941400Y-88674200D01*
X163941400Y-86674200D02*
X163941400Y-86658600D01*
X163941400Y-97941400D02*
X165060000Y-99060000D01*
X153341400Y-88674200D02*
X155541400Y-88674200D01*
X163941400Y-90500000D02*
X163941400Y-97600000D01*
X163941400Y-98374200D02*
X163941400Y-97600000D01*
X163941400Y-98374200D02*
X163941400Y-110941400D01*
X164760000Y-111760000D02*
X167640000Y-111760000D01*
X163941400Y-110941400D02*
X164760000Y-111760000D01*
X155541400Y-88674200D02*
X155506400Y-88639200D01*
X163941400Y-97600000D02*
X163941400Y-97941400D01*
X165060000Y-99060000D02*
X167640000Y-99060000D01*
X161941400Y-88674200D02*
X163941400Y-86674200D01*
D13*
%TO.N,/E2*%
X97762900Y-76518772D02*
X102141400Y-80897272D01*
D12*
%TO.N,/24V*%
X167640000Y-116750000D02*
X167640000Y-111760000D01*
X162115600Y-88674200D02*
X163941400Y-90500000D01*
X164240000Y-86360000D02*
X163941400Y-86658600D01*
%TO.N,/5V*%
X161869400Y-79946200D02*
X161869400Y-67130600D01*
%TO.N,/24V*%
X167640000Y-86360000D02*
X164240000Y-86360000D01*
X155541400Y-88674200D02*
X157741400Y-88674200D01*
%TO.N,/5V*%
X153341400Y-83594200D02*
X158221400Y-83594200D01*
X161869400Y-67130600D02*
X162960000Y-66040000D01*
%TO.N,/24V*%
X163941400Y-86750000D02*
X163941400Y-72308600D01*
X163941400Y-72308600D02*
X165130000Y-71120000D01*
X163941400Y-86674200D02*
X163941400Y-86750000D01*
X163941400Y-86750000D02*
X163941400Y-90500000D01*
X165130000Y-71120000D02*
X167640000Y-71120000D01*
%TO.N,/5V*%
X121920000Y-117856000D02*
X121920000Y-119380000D01*
%TO.N,/24V*%
X161941400Y-88674200D02*
X162115600Y-88674200D01*
%TO.N,/5V*%
X158221400Y-83594200D02*
X161869400Y-79946200D01*
%TO.N,/GND*%
X124460000Y-84328000D02*
X124460000Y-88392000D01*
%TO.N,/CAN_24V*%
X180340000Y-73660000D02*
X187960000Y-73660000D01*
%TO.N,/CAN4_H*%
X175260000Y-76200000D02*
X187960000Y-76200000D01*
%TO.N,/CAN4_L*%
X175260000Y-78740000D02*
X187960000Y-78740000D01*
%TO.N,/CAN_GND*%
X180340000Y-119380000D02*
X187960000Y-119380000D01*
%TO.N,/CAN1_L*%
X175260000Y-116840000D02*
X187960000Y-116840000D01*
%TO.N,/CAN_24V*%
X175260000Y-86360000D02*
X187960000Y-86360000D01*
X175260000Y-111760000D02*
X187960000Y-111760000D01*
X175260000Y-99060000D02*
X187960000Y-99060000D01*
%TO.N,/CAN2_L*%
X175260000Y-104140000D02*
X187960000Y-104140000D01*
%TO.N,/CAN2_H*%
X175260000Y-101600000D02*
X187960000Y-101600000D01*
%TO.N,/CAN_GND*%
X175260000Y-81280000D02*
X175260000Y-83820000D01*
X175260000Y-109220000D02*
X175260000Y-106680000D01*
X175260000Y-106680000D02*
X187960000Y-106680000D01*
X175260000Y-81280000D02*
X187960000Y-81280000D01*
X175260000Y-93980000D02*
X187960000Y-93980000D01*
X175260000Y-93980000D02*
X175260000Y-96520000D01*
%TO.N,/CAN1_H*%
X175260000Y-114300000D02*
X187960000Y-114300000D01*
%TO.N,/CAN3_L*%
X175260000Y-91440000D02*
X187960000Y-91440000D01*
%TO.N,/CAN3_H*%
X175260000Y-88900000D02*
X187960000Y-88900000D01*
%TD*%
%TA.AperFunction,Conductor*%
%TO.N,/24V*%
G36*
X163866780Y-87038880D02*
G01*
X163920436Y-87083634D01*
X163941378Y-87150291D01*
X163941400Y-87152624D01*
X163941400Y-90195775D01*
X163921715Y-90262814D01*
X163868911Y-90308569D01*
X163799753Y-90318513D01*
X163736197Y-90289488D01*
X163734494Y-90287985D01*
X162043805Y-88766364D01*
X162007147Y-88706890D01*
X162008461Y-88637033D01*
X162043806Y-88582033D01*
X163734449Y-87060455D01*
X163797447Y-87030240D01*
X163866780Y-87038880D01*
G37*
%TD.AperFunction*%
%TD*%
%TA.AperFunction,Conductor*%
%TO.N,/GND*%
G36*
X124665203Y-84533649D02*
G01*
X124671681Y-84539681D01*
X126390902Y-86258902D01*
X126424387Y-86320225D01*
X126419403Y-86389917D01*
X126377621Y-86445783D01*
X124658400Y-87735200D01*
X124592958Y-87759676D01*
X124524671Y-87744886D01*
X124475222Y-87695525D01*
X124460000Y-87636000D01*
X124460000Y-84627362D01*
X124479685Y-84560323D01*
X124532489Y-84514568D01*
X124601647Y-84504624D01*
X124665203Y-84533649D01*
G37*
%TD.AperFunction*%
%TD*%
M02*

View File

@@ -0,0 +1,245 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:30+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:30*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,1.700000X1.700000*%
%ADD11C,1.700000*%
G04 APERTURE END LIST*
D10*
%TO.C,J_Extension1*%
X104140000Y-71120000D03*
D11*
X104140000Y-73660000D03*
X101600000Y-71120000D03*
X101600000Y-73660000D03*
X99060000Y-71120000D03*
X99060000Y-73660000D03*
X96520000Y-71120000D03*
X96520000Y-73660000D03*
%TD*%
%TO.C,CAN_4_1*%
X180340000Y-73660000D03*
X180340000Y-76200000D03*
X180340000Y-78740000D03*
D10*
X180340000Y-81280000D03*
%TD*%
%TO.C,J_Front_1_1*%
X175260000Y-99060000D03*
D11*
X175260000Y-96520000D03*
X175260000Y-93980000D03*
%TD*%
D10*
%TO.C,J6*%
X187960000Y-93980000D03*
D11*
X187960000Y-91440000D03*
X187960000Y-88900000D03*
X187960000Y-86360000D03*
%TD*%
%TO.C,Arduino_R1*%
X107696000Y-111760000D03*
X107696000Y-109220000D03*
X107696000Y-106680000D03*
X107696000Y-104140000D03*
X107696000Y-101600000D03*
X107696000Y-99060000D03*
X107696000Y-96520000D03*
X107696000Y-93980000D03*
X107696000Y-91440000D03*
X107696000Y-88900000D03*
X107696000Y-86360000D03*
D10*
X107696000Y-83820000D03*
%TD*%
%TO.C,J2*%
X180340000Y-119380000D03*
D11*
X180340000Y-116840000D03*
X180340000Y-114300000D03*
X180340000Y-111760000D03*
%TD*%
D10*
%TO.C,J10*%
X175260000Y-91440000D03*
D11*
X175260000Y-88900000D03*
%TD*%
D10*
%TO.C,J_Front_1_3*%
X175260000Y-86360000D03*
D11*
X175260000Y-83820000D03*
X175260000Y-81280000D03*
%TD*%
D10*
%TO.C,J_Front_2*%
X167640000Y-93980000D03*
D11*
X167640000Y-96520000D03*
X167640000Y-99060000D03*
%TD*%
D10*
%TO.C,J4*%
X180340000Y-93980000D03*
D11*
X180340000Y-91440000D03*
X180340000Y-88900000D03*
X180340000Y-86360000D03*
%TD*%
D10*
%TO.C,J_CAN_2*%
X121920000Y-106680000D03*
D11*
X124460000Y-106680000D03*
X127000000Y-106680000D03*
X129540000Y-106680000D03*
X132080000Y-106680000D03*
X134620000Y-106680000D03*
X137160000Y-106680000D03*
%TD*%
D10*
%TO.C,J_Front_3*%
X167640000Y-106680000D03*
D11*
X167640000Y-109220000D03*
X167640000Y-111760000D03*
%TD*%
%TO.C,Arduino_L1*%
X92456000Y-111760000D03*
X92456000Y-109220000D03*
X92456000Y-106680000D03*
X92456000Y-104140000D03*
X92456000Y-101600000D03*
X92456000Y-99060000D03*
X92456000Y-96520000D03*
X92456000Y-93980000D03*
X92456000Y-91440000D03*
X92456000Y-88900000D03*
X92456000Y-86360000D03*
D10*
X92456000Y-83820000D03*
%TD*%
%TO.C,J_CAN_1*%
X121920000Y-119380000D03*
D11*
X124460000Y-119380000D03*
X127000000Y-119380000D03*
X129540000Y-119380000D03*
X132080000Y-119380000D03*
X134620000Y-119380000D03*
X137160000Y-119380000D03*
%TD*%
D10*
%TO.C,J_Front_1_2*%
X175260000Y-111760000D03*
D11*
X175260000Y-109220000D03*
X175260000Y-106680000D03*
%TD*%
%TO.C,J_Front_1*%
X167640000Y-86360000D03*
X167640000Y-83820000D03*
D10*
X167640000Y-81280000D03*
%TD*%
%TO.C,J7*%
X187960000Y-81280000D03*
D11*
X187960000Y-78740000D03*
X187960000Y-76200000D03*
X187960000Y-73660000D03*
%TD*%
D10*
%TO.C,J9*%
X175260000Y-104140000D03*
D11*
X175260000Y-101600000D03*
%TD*%
D10*
%TO.C,JJ_CAN_4*%
X121920000Y-81280000D03*
D11*
X124460000Y-81280000D03*
X127000000Y-81280000D03*
X129540000Y-81280000D03*
X132080000Y-81280000D03*
X134620000Y-81280000D03*
X137160000Y-81280000D03*
%TD*%
D10*
%TO.C,J8*%
X175260000Y-116840000D03*
D11*
X175260000Y-114300000D03*
%TD*%
D10*
%TO.C,CAN_2_1*%
X180340000Y-106680000D03*
D11*
X180340000Y-104140000D03*
X180340000Y-101600000D03*
X180340000Y-99060000D03*
%TD*%
D10*
%TO.C,J_CAN_3*%
X121920000Y-93980000D03*
D11*
X124460000Y-93980000D03*
X127000000Y-93980000D03*
X129540000Y-93980000D03*
X132080000Y-93980000D03*
X134620000Y-93980000D03*
X137160000Y-93980000D03*
%TD*%
%TO.C,J1*%
X167640000Y-116750000D03*
D10*
X165100000Y-116750000D03*
%TD*%
%TO.C,J11*%
X175260000Y-78740000D03*
D11*
X175260000Y-76200000D03*
%TD*%
D10*
%TO.C,J_Extension_2*%
X167640000Y-66040000D03*
D11*
X167640000Y-68580000D03*
X167640000Y-71120000D03*
%TD*%
D10*
%TO.C,J5*%
X187960000Y-106680000D03*
D11*
X187960000Y-104140000D03*
X187960000Y-101600000D03*
X187960000Y-99060000D03*
%TD*%
D10*
%TO.C,J3*%
X187960000Y-119380000D03*
D11*
X187960000Y-116840000D03*
X187960000Y-114300000D03*
X187960000Y-111760000D03*
%TD*%
D10*
%TO.C,J_Stepdown1*%
X153341400Y-83594200D03*
D11*
X153341400Y-86134200D03*
X153341400Y-88674200D03*
%TD*%
M02*

View File

@@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.2*%
%TF.CreationDate,2025-07-20T17:27:29+02:00*%
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 9.0.2) date 2025-07-20 17:27:29*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More