Compare commits
15 Commits
8db08312d5
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8547c9ff3 | ||
|
|
75672d4ec4 | ||
|
|
3551b073d7 | ||
|
|
1047fa70a0 | ||
|
|
c7adbcd1c7 | ||
|
|
ea3b0f29ea | ||
| 5fc9592886 | |||
| f842815435 | |||
|
|
c8ffe71fca | ||
|
|
ad72be85b1 | ||
|
|
21fab157da | ||
|
|
d8a9bb7610 | ||
|
|
58325fdd88 | ||
|
|
8141386359 | ||
|
|
25865027f7 |
154
Belegung Schütze.txt
Normal file
154
Belegung Schütze.txt
Normal 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 |
|
||||
|---+---|
|
||||
|
||||
|
||||
Binary file not shown.
2
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_pcb
Normal file
2
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_pcb
Normal file
@@ -0,0 +1,2 @@
|
||||
(kicad_pcb (version 20211014) (generator pcbnew)
|
||||
)
|
||||
130
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_prl
Normal file
130
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_prl
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
424
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_pro
Normal file
424
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_pro
Normal 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": {}
|
||||
}
|
||||
5
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_sch
Normal file
5
MeyCan2025/MeyCan2025l/MeyCan2025l.kicad_sch
Normal file
@@ -0,0 +1,5 @@
|
||||
(kicad_sch (version 20211123) (generator eeschema)
|
||||
(paper "A4")
|
||||
(lib_symbols)
|
||||
(symbol_instances)
|
||||
)
|
||||
2536
MeyCan2025/Meycad2025.kicad_sch
Normal file
2536
MeyCan2025/Meycad2025.kicad_sch
Normal file
File diff suppressed because it is too large
Load Diff
418
Meycad-B_Cu.gbr
418
Meycad-B_Cu.gbr
@@ -1,209 +1,209 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD10C,2.400000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD11R,2.400000X2.400000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD12R,1.600000X1.600000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD13O,1.600000X1.600000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD14C,1.600000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD15R,1.000000X1.000000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD16O,1.000000X1.000000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,Conductor*%
|
||||
%ADD17C,0.250000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.P,J1,4,Pin_4*%
|
||||
%TO.N,Net-(J1-Pad4)*%
|
||||
X116220000Y-100900000D03*
|
||||
%TO.P,J1,3,Pin_3*%
|
||||
%TO.N,Net-(J1-Pad3)*%
|
||||
X112720000Y-100900000D03*
|
||||
%TO.P,J1,2,Pin_2*%
|
||||
%TO.N,+5V*%
|
||||
X109220000Y-100900000D03*
|
||||
D11*
|
||||
%TO.P,J1,1,Pin_1*%
|
||||
%TO.N,GNDREF*%
|
||||
X105720000Y-100900000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.P,A1,1,D1/TX*%
|
||||
%TO.N,unconnected-(A1-Pad1)*%
|
||||
X87630000Y-83810000D03*
|
||||
D13*
|
||||
%TO.P,A1,2,D0/RX*%
|
||||
%TO.N,unconnected-(A1-Pad2)*%
|
||||
X90170000Y-83810000D03*
|
||||
%TO.P,A1,3,~{RESET}*%
|
||||
%TO.N,unconnected-(A1-Pad3)*%
|
||||
X92710000Y-83810000D03*
|
||||
%TO.P,A1,4,GND*%
|
||||
%TO.N,GNDREF*%
|
||||
X95250000Y-83810000D03*
|
||||
%TO.P,A1,5,D2*%
|
||||
%TO.N,unconnected-(A1-Pad5)*%
|
||||
X97790000Y-83810000D03*
|
||||
%TO.P,A1,6,D3*%
|
||||
%TO.N,unconnected-(A1-Pad6)*%
|
||||
X100330000Y-83810000D03*
|
||||
%TO.P,A1,7,D4*%
|
||||
%TO.N,unconnected-(A1-Pad7)*%
|
||||
X102870000Y-83810000D03*
|
||||
%TO.P,A1,8,D5*%
|
||||
%TO.N,unconnected-(A1-Pad8)*%
|
||||
X105410000Y-83810000D03*
|
||||
%TO.P,A1,9,D6*%
|
||||
%TO.N,unconnected-(A1-Pad9)*%
|
||||
X107950000Y-83810000D03*
|
||||
%TO.P,A1,10,D7*%
|
||||
%TO.N,unconnected-(A1-Pad10)*%
|
||||
X110490000Y-83810000D03*
|
||||
%TO.P,A1,11,D8*%
|
||||
%TO.N,unconnected-(A1-Pad11)*%
|
||||
X113030000Y-83810000D03*
|
||||
%TO.P,A1,12,D9*%
|
||||
%TO.N,unconnected-(A1-Pad12)*%
|
||||
X115570000Y-83810000D03*
|
||||
%TO.P,A1,13,D10*%
|
||||
%TO.N,Net-(A1-Pad13)*%
|
||||
X118110000Y-83810000D03*
|
||||
%TO.P,A1,14,D11*%
|
||||
%TO.N,Net-(A1-Pad14)*%
|
||||
X120650000Y-83810000D03*
|
||||
%TO.P,A1,15,D12*%
|
||||
%TO.N,Net-(A1-Pad15)*%
|
||||
X123190000Y-83810000D03*
|
||||
%TO.P,A1,16,D13*%
|
||||
%TO.N,Net-(A1-Pad16)*%
|
||||
X123190000Y-68570000D03*
|
||||
%TO.P,A1,17,3V3*%
|
||||
%TO.N,unconnected-(A1-Pad17)*%
|
||||
X120650000Y-68570000D03*
|
||||
%TO.P,A1,18,AREF*%
|
||||
%TO.N,unconnected-(A1-Pad18)*%
|
||||
X118110000Y-68570000D03*
|
||||
%TO.P,A1,19,A0*%
|
||||
%TO.N,unconnected-(A1-Pad19)*%
|
||||
X115570000Y-68570000D03*
|
||||
%TO.P,A1,20,A1*%
|
||||
%TO.N,unconnected-(A1-Pad20)*%
|
||||
X113030000Y-68570000D03*
|
||||
%TO.P,A1,21,A2*%
|
||||
%TO.N,unconnected-(A1-Pad21)*%
|
||||
X110490000Y-68570000D03*
|
||||
%TO.P,A1,22,A3*%
|
||||
%TO.N,unconnected-(A1-Pad22)*%
|
||||
X107950000Y-68570000D03*
|
||||
%TO.P,A1,23,A4*%
|
||||
%TO.N,unconnected-(A1-Pad23)*%
|
||||
X105410000Y-68570000D03*
|
||||
%TO.P,A1,24,A5*%
|
||||
%TO.N,unconnected-(A1-Pad24)*%
|
||||
X102870000Y-68570000D03*
|
||||
%TO.P,A1,25,A6*%
|
||||
%TO.N,unconnected-(A1-Pad25)*%
|
||||
X100330000Y-68570000D03*
|
||||
%TO.P,A1,26,A7*%
|
||||
%TO.N,unconnected-(A1-Pad26)*%
|
||||
X97790000Y-68570000D03*
|
||||
%TO.P,A1,27,+5V*%
|
||||
%TO.N,Net-(A1-Pad27)*%
|
||||
X95250000Y-68570000D03*
|
||||
%TO.P,A1,28,~{RESET}*%
|
||||
%TO.N,unconnected-(A1-Pad28)*%
|
||||
X92710000Y-68570000D03*
|
||||
%TO.P,A1,29,GND*%
|
||||
%TO.N,GNDREF*%
|
||||
X90170000Y-68570000D03*
|
||||
%TO.P,A1,30,VIN*%
|
||||
%TO.N,unconnected-(A1-Pad30)*%
|
||||
X87630000Y-68570000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.P,C1,1*%
|
||||
%TO.N,GNDREF*%
|
||||
X91440000Y-93980000D03*
|
||||
D14*
|
||||
%TO.P,C1,2*%
|
||||
%TO.N,Net-(C1-Pad2)*%
|
||||
X93940000Y-93980000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.P,JP1,1,A*%
|
||||
%TO.N,Net-(J1-Pad4)*%
|
||||
X96520000Y-99060000D03*
|
||||
D16*
|
||||
%TO.P,JP1,2,B*%
|
||||
%TO.N,Net-(JP1-Pad2)*%
|
||||
X96520000Y-97790000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.P,C2,1*%
|
||||
%TO.N,GNDREF*%
|
||||
X94020000Y-88900000D03*
|
||||
D14*
|
||||
%TO.P,C2,2*%
|
||||
%TO.N,Net-(C2-Pad2)*%
|
||||
X96520000Y-88900000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.N,Net-(A1-Pad27)*%
|
||||
X117555311Y-91440000D02*
|
||||
X120650000Y-94534689D01*
|
||||
X120650000Y-94534689D02*
|
||||
X120650000Y-99060000D01*
|
||||
X106680000Y-88900000D02*
|
||||
X109220000Y-91440000D01*
|
||||
X109220000Y-91440000D02*
|
||||
X117555311Y-91440000D01*
|
||||
X106690000Y-88890000D02*
|
||||
X106680000Y-88900000D01*
|
||||
X106690000Y-87645000D02*
|
||||
X106690000Y-88890000D01*
|
||||
X105425000Y-87645000D02*
|
||||
X106690000Y-87645000D01*
|
||||
X104140000Y-86360000D02*
|
||||
X105425000Y-87645000D01*
|
||||
X99060000Y-86360000D02*
|
||||
X104140000Y-86360000D01*
|
||||
X97780000Y-87640000D02*
|
||||
X99060000Y-86360000D01*
|
||||
X97780000Y-93985000D02*
|
||||
X97780000Y-87640000D01*
|
||||
X106690000Y-80010000D02*
|
||||
X106690000Y-87645000D01*
|
||||
X95250000Y-68570000D02*
|
||||
X106690000Y-80010000D01*
|
||||
X99060000Y-63500000D02*
|
||||
X101600000Y-63500000D01*
|
||||
X95250000Y-67310000D02*
|
||||
X99060000Y-63500000D01*
|
||||
X95250000Y-68570000D02*
|
||||
X95250000Y-67310000D01*
|
||||
%TD*%
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD10C,2.400000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD11R,2.400000X2.400000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD12R,1.600000X1.600000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD13O,1.600000X1.600000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD14C,1.600000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD15R,1.000000X1.000000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,ComponentPad*%
|
||||
%ADD16O,1.000000X1.000000*%
|
||||
%TD*%
|
||||
%TA.AperFunction,Conductor*%
|
||||
%ADD17C,0.250000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.P,J1,4,Pin_4*%
|
||||
%TO.N,Net-(J1-Pad4)*%
|
||||
X116220000Y-100900000D03*
|
||||
%TO.P,J1,3,Pin_3*%
|
||||
%TO.N,Net-(J1-Pad3)*%
|
||||
X112720000Y-100900000D03*
|
||||
%TO.P,J1,2,Pin_2*%
|
||||
%TO.N,+5V*%
|
||||
X109220000Y-100900000D03*
|
||||
D11*
|
||||
%TO.P,J1,1,Pin_1*%
|
||||
%TO.N,GNDREF*%
|
||||
X105720000Y-100900000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.P,A1,1,D1/TX*%
|
||||
%TO.N,unconnected-(A1-Pad1)*%
|
||||
X87630000Y-83810000D03*
|
||||
D13*
|
||||
%TO.P,A1,2,D0/RX*%
|
||||
%TO.N,unconnected-(A1-Pad2)*%
|
||||
X90170000Y-83810000D03*
|
||||
%TO.P,A1,3,~{RESET}*%
|
||||
%TO.N,unconnected-(A1-Pad3)*%
|
||||
X92710000Y-83810000D03*
|
||||
%TO.P,A1,4,GND*%
|
||||
%TO.N,GNDREF*%
|
||||
X95250000Y-83810000D03*
|
||||
%TO.P,A1,5,D2*%
|
||||
%TO.N,unconnected-(A1-Pad5)*%
|
||||
X97790000Y-83810000D03*
|
||||
%TO.P,A1,6,D3*%
|
||||
%TO.N,unconnected-(A1-Pad6)*%
|
||||
X100330000Y-83810000D03*
|
||||
%TO.P,A1,7,D4*%
|
||||
%TO.N,unconnected-(A1-Pad7)*%
|
||||
X102870000Y-83810000D03*
|
||||
%TO.P,A1,8,D5*%
|
||||
%TO.N,unconnected-(A1-Pad8)*%
|
||||
X105410000Y-83810000D03*
|
||||
%TO.P,A1,9,D6*%
|
||||
%TO.N,unconnected-(A1-Pad9)*%
|
||||
X107950000Y-83810000D03*
|
||||
%TO.P,A1,10,D7*%
|
||||
%TO.N,unconnected-(A1-Pad10)*%
|
||||
X110490000Y-83810000D03*
|
||||
%TO.P,A1,11,D8*%
|
||||
%TO.N,unconnected-(A1-Pad11)*%
|
||||
X113030000Y-83810000D03*
|
||||
%TO.P,A1,12,D9*%
|
||||
%TO.N,unconnected-(A1-Pad12)*%
|
||||
X115570000Y-83810000D03*
|
||||
%TO.P,A1,13,D10*%
|
||||
%TO.N,Net-(A1-Pad13)*%
|
||||
X118110000Y-83810000D03*
|
||||
%TO.P,A1,14,D11*%
|
||||
%TO.N,Net-(A1-Pad14)*%
|
||||
X120650000Y-83810000D03*
|
||||
%TO.P,A1,15,D12*%
|
||||
%TO.N,Net-(A1-Pad15)*%
|
||||
X123190000Y-83810000D03*
|
||||
%TO.P,A1,16,D13*%
|
||||
%TO.N,Net-(A1-Pad16)*%
|
||||
X123190000Y-68570000D03*
|
||||
%TO.P,A1,17,3V3*%
|
||||
%TO.N,unconnected-(A1-Pad17)*%
|
||||
X120650000Y-68570000D03*
|
||||
%TO.P,A1,18,AREF*%
|
||||
%TO.N,unconnected-(A1-Pad18)*%
|
||||
X118110000Y-68570000D03*
|
||||
%TO.P,A1,19,A0*%
|
||||
%TO.N,unconnected-(A1-Pad19)*%
|
||||
X115570000Y-68570000D03*
|
||||
%TO.P,A1,20,A1*%
|
||||
%TO.N,unconnected-(A1-Pad20)*%
|
||||
X113030000Y-68570000D03*
|
||||
%TO.P,A1,21,A2*%
|
||||
%TO.N,unconnected-(A1-Pad21)*%
|
||||
X110490000Y-68570000D03*
|
||||
%TO.P,A1,22,A3*%
|
||||
%TO.N,unconnected-(A1-Pad22)*%
|
||||
X107950000Y-68570000D03*
|
||||
%TO.P,A1,23,A4*%
|
||||
%TO.N,unconnected-(A1-Pad23)*%
|
||||
X105410000Y-68570000D03*
|
||||
%TO.P,A1,24,A5*%
|
||||
%TO.N,unconnected-(A1-Pad24)*%
|
||||
X102870000Y-68570000D03*
|
||||
%TO.P,A1,25,A6*%
|
||||
%TO.N,unconnected-(A1-Pad25)*%
|
||||
X100330000Y-68570000D03*
|
||||
%TO.P,A1,26,A7*%
|
||||
%TO.N,unconnected-(A1-Pad26)*%
|
||||
X97790000Y-68570000D03*
|
||||
%TO.P,A1,27,+5V*%
|
||||
%TO.N,Net-(A1-Pad27)*%
|
||||
X95250000Y-68570000D03*
|
||||
%TO.P,A1,28,~{RESET}*%
|
||||
%TO.N,unconnected-(A1-Pad28)*%
|
||||
X92710000Y-68570000D03*
|
||||
%TO.P,A1,29,GND*%
|
||||
%TO.N,GNDREF*%
|
||||
X90170000Y-68570000D03*
|
||||
%TO.P,A1,30,VIN*%
|
||||
%TO.N,unconnected-(A1-Pad30)*%
|
||||
X87630000Y-68570000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.P,C1,1*%
|
||||
%TO.N,GNDREF*%
|
||||
X91440000Y-93980000D03*
|
||||
D14*
|
||||
%TO.P,C1,2*%
|
||||
%TO.N,Net-(C1-Pad2)*%
|
||||
X93940000Y-93980000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.P,JP1,1,A*%
|
||||
%TO.N,Net-(J1-Pad4)*%
|
||||
X96520000Y-99060000D03*
|
||||
D16*
|
||||
%TO.P,JP1,2,B*%
|
||||
%TO.N,Net-(JP1-Pad2)*%
|
||||
X96520000Y-97790000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.P,C2,1*%
|
||||
%TO.N,GNDREF*%
|
||||
X94020000Y-88900000D03*
|
||||
D14*
|
||||
%TO.P,C2,2*%
|
||||
%TO.N,Net-(C2-Pad2)*%
|
||||
X96520000Y-88900000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.N,Net-(A1-Pad27)*%
|
||||
X117555311Y-91440000D02*
|
||||
X120650000Y-94534689D01*
|
||||
X120650000Y-94534689D02*
|
||||
X120650000Y-99060000D01*
|
||||
X106680000Y-88900000D02*
|
||||
X109220000Y-91440000D01*
|
||||
X109220000Y-91440000D02*
|
||||
X117555311Y-91440000D01*
|
||||
X106690000Y-88890000D02*
|
||||
X106680000Y-88900000D01*
|
||||
X106690000Y-87645000D02*
|
||||
X106690000Y-88890000D01*
|
||||
X105425000Y-87645000D02*
|
||||
X106690000Y-87645000D01*
|
||||
X104140000Y-86360000D02*
|
||||
X105425000Y-87645000D01*
|
||||
X99060000Y-86360000D02*
|
||||
X104140000Y-86360000D01*
|
||||
X97780000Y-87640000D02*
|
||||
X99060000Y-86360000D01*
|
||||
X97780000Y-93985000D02*
|
||||
X97780000Y-87640000D01*
|
||||
X106690000Y-80010000D02*
|
||||
X106690000Y-87645000D01*
|
||||
X95250000Y-68570000D02*
|
||||
X106690000Y-80010000D01*
|
||||
X99060000Y-63500000D02*
|
||||
X101600000Y-63500000D01*
|
||||
X95250000Y-67310000D02*
|
||||
X99060000Y-63500000D01*
|
||||
X95250000Y-68570000D02*
|
||||
X95250000Y-67310000D01*
|
||||
%TD*%
|
||||
M02*
|
||||
|
||||
@@ -1,87 +1,87 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,2.100000*%
|
||||
%ADD11C,2.400000*%
|
||||
%ADD12R,2.400000X2.400000*%
|
||||
%ADD13R,1.600000X1.600000*%
|
||||
%ADD14O,1.600000X1.600000*%
|
||||
%ADD15C,1.600000*%
|
||||
%ADD16R,1.000000X1.000000*%
|
||||
%ADD17O,1.000000X1.000000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,REF\u002A\u002A*%
|
||||
X109220000Y-58420000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J1*%
|
||||
X116220000Y-100900000D03*
|
||||
X112720000Y-100900000D03*
|
||||
X109220000Y-100900000D03*
|
||||
D12*
|
||||
X105720000Y-100900000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,A1*%
|
||||
X87630000Y-83810000D03*
|
||||
D14*
|
||||
X90170000Y-83810000D03*
|
||||
X92710000Y-83810000D03*
|
||||
X95250000Y-83810000D03*
|
||||
X97790000Y-83810000D03*
|
||||
X100330000Y-83810000D03*
|
||||
X102870000Y-83810000D03*
|
||||
X105410000Y-83810000D03*
|
||||
X107950000Y-83810000D03*
|
||||
X110490000Y-83810000D03*
|
||||
X113030000Y-83810000D03*
|
||||
X115570000Y-83810000D03*
|
||||
X118110000Y-83810000D03*
|
||||
X120650000Y-83810000D03*
|
||||
X123190000Y-83810000D03*
|
||||
X123190000Y-68570000D03*
|
||||
X120650000Y-68570000D03*
|
||||
X118110000Y-68570000D03*
|
||||
X115570000Y-68570000D03*
|
||||
X113030000Y-68570000D03*
|
||||
X110490000Y-68570000D03*
|
||||
X107950000Y-68570000D03*
|
||||
X105410000Y-68570000D03*
|
||||
X102870000Y-68570000D03*
|
||||
X100330000Y-68570000D03*
|
||||
X97790000Y-68570000D03*
|
||||
X95250000Y-68570000D03*
|
||||
X92710000Y-68570000D03*
|
||||
X90170000Y-68570000D03*
|
||||
X87630000Y-68570000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C1*%
|
||||
X91440000Y-93980000D03*
|
||||
D15*
|
||||
X93940000Y-93980000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP1*%
|
||||
X96520000Y-99060000D03*
|
||||
D17*
|
||||
X96520000Y-97790000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C2*%
|
||||
X94020000Y-88900000D03*
|
||||
D15*
|
||||
X96520000Y-88900000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,2.100000*%
|
||||
%ADD11C,2.400000*%
|
||||
%ADD12R,2.400000X2.400000*%
|
||||
%ADD13R,1.600000X1.600000*%
|
||||
%ADD14O,1.600000X1.600000*%
|
||||
%ADD15C,1.600000*%
|
||||
%ADD16R,1.000000X1.000000*%
|
||||
%ADD17O,1.000000X1.000000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,REF\u002A\u002A*%
|
||||
X109220000Y-58420000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J1*%
|
||||
X116220000Y-100900000D03*
|
||||
X112720000Y-100900000D03*
|
||||
X109220000Y-100900000D03*
|
||||
D12*
|
||||
X105720000Y-100900000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,A1*%
|
||||
X87630000Y-83810000D03*
|
||||
D14*
|
||||
X90170000Y-83810000D03*
|
||||
X92710000Y-83810000D03*
|
||||
X95250000Y-83810000D03*
|
||||
X97790000Y-83810000D03*
|
||||
X100330000Y-83810000D03*
|
||||
X102870000Y-83810000D03*
|
||||
X105410000Y-83810000D03*
|
||||
X107950000Y-83810000D03*
|
||||
X110490000Y-83810000D03*
|
||||
X113030000Y-83810000D03*
|
||||
X115570000Y-83810000D03*
|
||||
X118110000Y-83810000D03*
|
||||
X120650000Y-83810000D03*
|
||||
X123190000Y-83810000D03*
|
||||
X123190000Y-68570000D03*
|
||||
X120650000Y-68570000D03*
|
||||
X118110000Y-68570000D03*
|
||||
X115570000Y-68570000D03*
|
||||
X113030000Y-68570000D03*
|
||||
X110490000Y-68570000D03*
|
||||
X107950000Y-68570000D03*
|
||||
X105410000Y-68570000D03*
|
||||
X102870000Y-68570000D03*
|
||||
X100330000Y-68570000D03*
|
||||
X97790000Y-68570000D03*
|
||||
X95250000Y-68570000D03*
|
||||
X92710000Y-68570000D03*
|
||||
X90170000Y-68570000D03*
|
||||
X87630000Y-68570000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C1*%
|
||||
X91440000Y-93980000D03*
|
||||
D15*
|
||||
X93940000Y-93980000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP1*%
|
||||
X96520000Y-99060000D03*
|
||||
D17*
|
||||
X96520000Y-97790000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C2*%
|
||||
X94020000Y-88900000D03*
|
||||
D15*
|
||||
X96520000Y-88900000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
||||
|
||||
@@ -1,71 +1,71 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X124086666Y-63285714D02*
|
||||
X123705714Y-63285714D01*
|
||||
X123943809Y-62952380D02*
|
||||
X123943809Y-63809523D01*
|
||||
X123896190Y-63904761D01*
|
||||
X123800952Y-63952380D01*
|
||||
X123705714Y-63952380D01*
|
||||
X122991428Y-63904761D02*
|
||||
X123086666Y-63952380D01*
|
||||
X123277142Y-63952380D01*
|
||||
X123372380Y-63904761D01*
|
||||
X123420000Y-63809523D01*
|
||||
X123420000Y-63428571D01*
|
||||
X123372380Y-63333333D01*
|
||||
X123277142Y-63285714D01*
|
||||
X123086666Y-63285714D01*
|
||||
X122991428Y-63333333D01*
|
||||
X122943809Y-63428571D01*
|
||||
X122943809Y-63523809D01*
|
||||
X123420000Y-63619047D01*
|
||||
X122562857Y-63904761D02*
|
||||
X122467619Y-63952380D01*
|
||||
X122277142Y-63952380D01*
|
||||
X122181904Y-63904761D01*
|
||||
X122134285Y-63809523D01*
|
||||
X122134285Y-63761904D01*
|
||||
X122181904Y-63666666D01*
|
||||
X122277142Y-63619047D01*
|
||||
X122420000Y-63619047D01*
|
||||
X122515238Y-63571428D01*
|
||||
X122562857Y-63476190D01*
|
||||
X122562857Y-63428571D01*
|
||||
X122515238Y-63333333D01*
|
||||
X122420000Y-63285714D01*
|
||||
X122277142Y-63285714D01*
|
||||
X122181904Y-63333333D01*
|
||||
X121848571Y-63285714D02*
|
||||
X121467619Y-63285714D01*
|
||||
X121705714Y-62952380D02*
|
||||
X121705714Y-63809523D01*
|
||||
X121658095Y-63904761D01*
|
||||
X121562857Y-63952380D01*
|
||||
X121467619Y-63952380D01*
|
||||
X120420000Y-63047619D02*
|
||||
X120372380Y-63000000D01*
|
||||
X120277142Y-62952380D01*
|
||||
X120039047Y-62952380D01*
|
||||
X119943809Y-63000000D01*
|
||||
X119896190Y-63047619D01*
|
||||
X119848571Y-63142857D01*
|
||||
X119848571Y-63238095D01*
|
||||
X119896190Y-63380952D01*
|
||||
X120467619Y-63952380D01*
|
||||
X119848571Y-63952380D01*
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X124086666Y-63285714D02*
|
||||
X123705714Y-63285714D01*
|
||||
X123943809Y-62952380D02*
|
||||
X123943809Y-63809523D01*
|
||||
X123896190Y-63904761D01*
|
||||
X123800952Y-63952380D01*
|
||||
X123705714Y-63952380D01*
|
||||
X122991428Y-63904761D02*
|
||||
X123086666Y-63952380D01*
|
||||
X123277142Y-63952380D01*
|
||||
X123372380Y-63904761D01*
|
||||
X123420000Y-63809523D01*
|
||||
X123420000Y-63428571D01*
|
||||
X123372380Y-63333333D01*
|
||||
X123277142Y-63285714D01*
|
||||
X123086666Y-63285714D01*
|
||||
X122991428Y-63333333D01*
|
||||
X122943809Y-63428571D01*
|
||||
X122943809Y-63523809D01*
|
||||
X123420000Y-63619047D01*
|
||||
X122562857Y-63904761D02*
|
||||
X122467619Y-63952380D01*
|
||||
X122277142Y-63952380D01*
|
||||
X122181904Y-63904761D01*
|
||||
X122134285Y-63809523D01*
|
||||
X122134285Y-63761904D01*
|
||||
X122181904Y-63666666D01*
|
||||
X122277142Y-63619047D01*
|
||||
X122420000Y-63619047D01*
|
||||
X122515238Y-63571428D01*
|
||||
X122562857Y-63476190D01*
|
||||
X122562857Y-63428571D01*
|
||||
X122515238Y-63333333D01*
|
||||
X122420000Y-63285714D01*
|
||||
X122277142Y-63285714D01*
|
||||
X122181904Y-63333333D01*
|
||||
X121848571Y-63285714D02*
|
||||
X121467619Y-63285714D01*
|
||||
X121705714Y-62952380D02*
|
||||
X121705714Y-63809523D01*
|
||||
X121658095Y-63904761D01*
|
||||
X121562857Y-63952380D01*
|
||||
X121467619Y-63952380D01*
|
||||
X120420000Y-63047619D02*
|
||||
X120372380Y-63000000D01*
|
||||
X120277142Y-62952380D01*
|
||||
X120039047Y-62952380D01*
|
||||
X119943809Y-63000000D01*
|
||||
X119896190Y-63047619D01*
|
||||
X119848571Y-63142857D01*
|
||||
X119848571Y-63238095D01*
|
||||
X119896190Y-63380952D01*
|
||||
X120467619Y-63952380D01*
|
||||
X119848571Y-63952380D01*
|
||||
M02*
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.100000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X119380000Y-60960000D02*
|
||||
X124460000Y-60960000D01*
|
||||
X119380000Y-58420000D02*
|
||||
X119380000Y-60960000D01*
|
||||
X134620001Y-81280000D02*
|
||||
G75*
|
||||
G03*
|
||||
X134620001Y-81280000I-1J0D01*
|
||||
G01*
|
||||
X124460001Y-104140000D02*
|
||||
G75*
|
||||
G03*
|
||||
X124460001Y-104140000I-1J0D01*
|
||||
G01*
|
||||
X132619430Y-81280000D02*
|
||||
G75*
|
||||
G03*
|
||||
X132619430Y-81280000I-25000000J0D01*
|
||||
G01*
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.100000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X119380000Y-60960000D02*
|
||||
X124460000Y-60960000D01*
|
||||
X119380000Y-58420000D02*
|
||||
X119380000Y-60960000D01*
|
||||
X134620001Y-81280000D02*
|
||||
G75*
|
||||
G03*
|
||||
X134620001Y-81280000I-1J0D01*
|
||||
G01*
|
||||
X124460001Y-104140000D02*
|
||||
G75*
|
||||
G03*
|
||||
X124460001Y-104140000I-1J0D01*
|
||||
G01*
|
||||
X132619430Y-81280000D02*
|
||||
G75*
|
||||
G03*
|
||||
X132619430Y-81280000I-25000000J0D01*
|
||||
G01*
|
||||
M02*
|
||||
|
||||
5142
Meycad-F_Cu.gbr
5142
Meycad-F_Cu.gbr
File diff suppressed because it is too large
Load Diff
@@ -1,154 +1,154 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
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*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,2.100000*%
|
||||
%ADD11R,2.275000X2.200000*%
|
||||
%ADD12RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
|
||||
%ADD13R,0.950000X2.800000*%
|
||||
%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*%
|
||||
%ADD16RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
|
||||
%ADD17C,2.400000*%
|
||||
%ADD18R,2.400000X2.400000*%
|
||||
%ADD19R,1.600000X1.600000*%
|
||||
%ADD20O,1.600000X1.600000*%
|
||||
%ADD21C,1.600000*%
|
||||
%ADD22R,1.000000X1.000000*%
|
||||
%ADD23O,1.000000X1.000000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,REF\u002A\u002A*%
|
||||
X109220000Y-58420000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,Y1*%
|
||||
X114300000Y-88900000D03*
|
||||
X109125000Y-88900000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,U3*%
|
||||
X122857500Y-100010000D03*
|
||||
X122857500Y-98110000D03*
|
||||
X120982500Y-99060000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,U2*%
|
||||
X124220000Y-88040000D03*
|
||||
X122680000Y-88040000D03*
|
||||
X121160000Y-88040000D03*
|
||||
X119620000Y-88040000D03*
|
||||
X119620000Y-94840000D03*
|
||||
X121160000Y-94840000D03*
|
||||
X122680000Y-94840000D03*
|
||||
X124220000Y-94840000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,U1*%
|
||||
X110785000Y-95380000D03*
|
||||
X111435000Y-95380000D03*
|
||||
X112085000Y-95380000D03*
|
||||
X112735000Y-95380000D03*
|
||||
X112735000Y-92580000D03*
|
||||
X112085000Y-92580000D03*
|
||||
X111435000Y-92580000D03*
|
||||
X110785000Y-92580000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,R2*%
|
||||
X99060000Y-102110000D03*
|
||||
X99060000Y-101090000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,R1*%
|
||||
X101090000Y-63500000D03*
|
||||
X102110000Y-63500000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,J1*%
|
||||
X116220000Y-100900000D03*
|
||||
X112720000Y-100900000D03*
|
||||
X109220000Y-100900000D03*
|
||||
D18*
|
||||
X105720000Y-100900000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,A1*%
|
||||
X87630000Y-83810000D03*
|
||||
D20*
|
||||
X90170000Y-83810000D03*
|
||||
X92710000Y-83810000D03*
|
||||
X95250000Y-83810000D03*
|
||||
X97790000Y-83810000D03*
|
||||
X100330000Y-83810000D03*
|
||||
X102870000Y-83810000D03*
|
||||
X105410000Y-83810000D03*
|
||||
X107950000Y-83810000D03*
|
||||
X110490000Y-83810000D03*
|
||||
X113030000Y-83810000D03*
|
||||
X115570000Y-83810000D03*
|
||||
X118110000Y-83810000D03*
|
||||
X120650000Y-83810000D03*
|
||||
X123190000Y-83810000D03*
|
||||
X123190000Y-68570000D03*
|
||||
X120650000Y-68570000D03*
|
||||
X118110000Y-68570000D03*
|
||||
X115570000Y-68570000D03*
|
||||
X113030000Y-68570000D03*
|
||||
X110490000Y-68570000D03*
|
||||
X107950000Y-68570000D03*
|
||||
X105410000Y-68570000D03*
|
||||
X102870000Y-68570000D03*
|
||||
X100330000Y-68570000D03*
|
||||
X97790000Y-68570000D03*
|
||||
X95250000Y-68570000D03*
|
||||
X92710000Y-68570000D03*
|
||||
X90170000Y-68570000D03*
|
||||
X87630000Y-68570000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,C1*%
|
||||
X91440000Y-93980000D03*
|
||||
D21*
|
||||
X93940000Y-93980000D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,JP1*%
|
||||
X96520000Y-99060000D03*
|
||||
D23*
|
||||
X96520000Y-97790000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,C2*%
|
||||
X94020000Y-88900000D03*
|
||||
D21*
|
||||
X96520000Y-88900000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
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*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,2.100000*%
|
||||
%ADD11R,2.275000X2.200000*%
|
||||
%ADD12RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
|
||||
%ADD13R,0.950000X2.800000*%
|
||||
%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*%
|
||||
%ADD16RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
|
||||
%ADD17C,2.400000*%
|
||||
%ADD18R,2.400000X2.400000*%
|
||||
%ADD19R,1.600000X1.600000*%
|
||||
%ADD20O,1.600000X1.600000*%
|
||||
%ADD21C,1.600000*%
|
||||
%ADD22R,1.000000X1.000000*%
|
||||
%ADD23O,1.000000X1.000000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,REF\u002A\u002A*%
|
||||
X109220000Y-58420000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,Y1*%
|
||||
X114300000Y-88900000D03*
|
||||
X109125000Y-88900000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,U3*%
|
||||
X122857500Y-100010000D03*
|
||||
X122857500Y-98110000D03*
|
||||
X120982500Y-99060000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,U2*%
|
||||
X124220000Y-88040000D03*
|
||||
X122680000Y-88040000D03*
|
||||
X121160000Y-88040000D03*
|
||||
X119620000Y-88040000D03*
|
||||
X119620000Y-94840000D03*
|
||||
X121160000Y-94840000D03*
|
||||
X122680000Y-94840000D03*
|
||||
X124220000Y-94840000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,U1*%
|
||||
X110785000Y-95380000D03*
|
||||
X111435000Y-95380000D03*
|
||||
X112085000Y-95380000D03*
|
||||
X112735000Y-95380000D03*
|
||||
X112735000Y-92580000D03*
|
||||
X112085000Y-92580000D03*
|
||||
X111435000Y-92580000D03*
|
||||
X110785000Y-92580000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,R2*%
|
||||
X99060000Y-102110000D03*
|
||||
X99060000Y-101090000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,R1*%
|
||||
X101090000Y-63500000D03*
|
||||
X102110000Y-63500000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,J1*%
|
||||
X116220000Y-100900000D03*
|
||||
X112720000Y-100900000D03*
|
||||
X109220000Y-100900000D03*
|
||||
D18*
|
||||
X105720000Y-100900000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,A1*%
|
||||
X87630000Y-83810000D03*
|
||||
D20*
|
||||
X90170000Y-83810000D03*
|
||||
X92710000Y-83810000D03*
|
||||
X95250000Y-83810000D03*
|
||||
X97790000Y-83810000D03*
|
||||
X100330000Y-83810000D03*
|
||||
X102870000Y-83810000D03*
|
||||
X105410000Y-83810000D03*
|
||||
X107950000Y-83810000D03*
|
||||
X110490000Y-83810000D03*
|
||||
X113030000Y-83810000D03*
|
||||
X115570000Y-83810000D03*
|
||||
X118110000Y-83810000D03*
|
||||
X120650000Y-83810000D03*
|
||||
X123190000Y-83810000D03*
|
||||
X123190000Y-68570000D03*
|
||||
X120650000Y-68570000D03*
|
||||
X118110000Y-68570000D03*
|
||||
X115570000Y-68570000D03*
|
||||
X113030000Y-68570000D03*
|
||||
X110490000Y-68570000D03*
|
||||
X107950000Y-68570000D03*
|
||||
X105410000Y-68570000D03*
|
||||
X102870000Y-68570000D03*
|
||||
X100330000Y-68570000D03*
|
||||
X97790000Y-68570000D03*
|
||||
X95250000Y-68570000D03*
|
||||
X92710000Y-68570000D03*
|
||||
X90170000Y-68570000D03*
|
||||
X87630000Y-68570000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,C1*%
|
||||
X91440000Y-93980000D03*
|
||||
D21*
|
||||
X93940000Y-93980000D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,JP1*%
|
||||
X96520000Y-99060000D03*
|
||||
D23*
|
||||
X96520000Y-97790000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,C2*%
|
||||
X94020000Y-88900000D03*
|
||||
D21*
|
||||
X96520000Y-88900000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
|
||||
@@ -1,82 +1,82 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
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*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10R,2.275000X2.200000*%
|
||||
%ADD11RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
|
||||
%ADD12R,0.950000X2.800000*%
|
||||
%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*%
|
||||
%ADD15RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,Y1*%
|
||||
X114300000Y-88900000D03*
|
||||
X109125000Y-88900000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,U3*%
|
||||
X122857500Y-100010000D03*
|
||||
X122857500Y-98110000D03*
|
||||
X120982500Y-99060000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,U2*%
|
||||
X124220000Y-88040000D03*
|
||||
X122680000Y-88040000D03*
|
||||
X121160000Y-88040000D03*
|
||||
X119620000Y-88040000D03*
|
||||
X119620000Y-94840000D03*
|
||||
X121160000Y-94840000D03*
|
||||
X122680000Y-94840000D03*
|
||||
X124220000Y-94840000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,U1*%
|
||||
X110785000Y-95380000D03*
|
||||
X111435000Y-95380000D03*
|
||||
X112085000Y-95380000D03*
|
||||
X112735000Y-95380000D03*
|
||||
X112735000Y-92580000D03*
|
||||
X112085000Y-92580000D03*
|
||||
X111435000Y-92580000D03*
|
||||
X110785000Y-92580000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,R2*%
|
||||
X99060000Y-102110000D03*
|
||||
X99060000Y-101090000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,R1*%
|
||||
X101090000Y-63500000D03*
|
||||
X102110000Y-63500000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+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 (6.0.4)) date 2022-05-25 07:35:57*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
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*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10R,2.275000X2.200000*%
|
||||
%ADD11RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
|
||||
%ADD12R,0.950000X2.800000*%
|
||||
%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*%
|
||||
%ADD15RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,Y1*%
|
||||
X114300000Y-88900000D03*
|
||||
X109125000Y-88900000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,U3*%
|
||||
X122857500Y-100010000D03*
|
||||
X122857500Y-98110000D03*
|
||||
X120982500Y-99060000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,U2*%
|
||||
X124220000Y-88040000D03*
|
||||
X122680000Y-88040000D03*
|
||||
X121160000Y-88040000D03*
|
||||
X119620000Y-88040000D03*
|
||||
X119620000Y-94840000D03*
|
||||
X121160000Y-94840000D03*
|
||||
X122680000Y-94840000D03*
|
||||
X124220000Y-94840000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,U1*%
|
||||
X110785000Y-95380000D03*
|
||||
X111435000Y-95380000D03*
|
||||
X112085000Y-95380000D03*
|
||||
X112735000Y-95380000D03*
|
||||
X112735000Y-92580000D03*
|
||||
X112085000Y-92580000D03*
|
||||
X111435000Y-92580000D03*
|
||||
X110785000Y-92580000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,R2*%
|
||||
X99060000Y-102110000D03*
|
||||
X99060000Y-101090000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,R1*%
|
||||
X101090000Y-63500000D03*
|
||||
X102110000Y-63500000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
|
||||
@@ -1,493 +1,493 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+02:00*%
|
||||
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
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*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.150000*%
|
||||
%ADD11C,0.120000*%
|
||||
%ADD12C,0.100000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,REF\u002A\u002A*%
|
||||
X107886666Y-55672380D02*
|
||||
X107553333Y-55196190D01*
|
||||
X107315238Y-55672380D02*
|
||||
X107315238Y-54672380D01*
|
||||
X107696190Y-54672380D01*
|
||||
X107791428Y-54720000D01*
|
||||
X107839047Y-54767619D01*
|
||||
X107886666Y-54862857D01*
|
||||
X107886666Y-55005714D01*
|
||||
X107839047Y-55100952D01*
|
||||
X107791428Y-55148571D01*
|
||||
X107696190Y-55196190D01*
|
||||
X107315238Y-55196190D01*
|
||||
X108315238Y-55148571D02*
|
||||
X108648571Y-55148571D01*
|
||||
X108791428Y-55672380D02*
|
||||
X108315238Y-55672380D01*
|
||||
X108315238Y-54672380D01*
|
||||
X108791428Y-54672380D01*
|
||||
X109553333Y-55148571D02*
|
||||
X109220000Y-55148571D01*
|
||||
X109220000Y-55672380D02*
|
||||
X109220000Y-54672380D01*
|
||||
X109696190Y-54672380D01*
|
||||
X110220000Y-54672380D02*
|
||||
X110220000Y-54910476D01*
|
||||
X109981904Y-54815238D02*
|
||||
X110220000Y-54910476D01*
|
||||
X110458095Y-54815238D01*
|
||||
X110077142Y-55100952D02*
|
||||
X110220000Y-54910476D01*
|
||||
X110362857Y-55100952D01*
|
||||
X110981904Y-54672380D02*
|
||||
X110981904Y-54910476D01*
|
||||
X110743809Y-54815238D02*
|
||||
X110981904Y-54910476D01*
|
||||
X111220000Y-54815238D01*
|
||||
X110839047Y-55100952D02*
|
||||
X110981904Y-54910476D01*
|
||||
X111124761Y-55100952D01*
|
||||
%TO.C,Y1*%
|
||||
X111236309Y-91026190D02*
|
||||
X111236309Y-91502380D01*
|
||||
X110902976Y-90502380D02*
|
||||
X111236309Y-91026190D01*
|
||||
X111569642Y-90502380D01*
|
||||
X112426785Y-91502380D02*
|
||||
X111855357Y-91502380D01*
|
||||
X112141071Y-91502380D02*
|
||||
X112141071Y-90502380D01*
|
||||
X112045833Y-90645238D01*
|
||||
X111950595Y-90740476D01*
|
||||
X111855357Y-90788095D01*
|
||||
%TO.C,U3*%
|
||||
X121158095Y-100912380D02*
|
||||
X121158095Y-101721904D01*
|
||||
X121205714Y-101817142D01*
|
||||
X121253333Y-101864761D01*
|
||||
X121348571Y-101912380D01*
|
||||
X121539047Y-101912380D01*
|
||||
X121634285Y-101864761D01*
|
||||
X121681904Y-101817142D01*
|
||||
X121729523Y-101721904D01*
|
||||
X121729523Y-100912380D01*
|
||||
X122110476Y-100912380D02*
|
||||
X122729523Y-100912380D01*
|
||||
X122396190Y-101293333D01*
|
||||
X122539047Y-101293333D01*
|
||||
X122634285Y-101340952D01*
|
||||
X122681904Y-101388571D01*
|
||||
X122729523Y-101483809D01*
|
||||
X122729523Y-101721904D01*
|
||||
X122681904Y-101817142D01*
|
||||
X122634285Y-101864761D01*
|
||||
X122539047Y-101912380D01*
|
||||
X122253333Y-101912380D01*
|
||||
X122158095Y-101864761D01*
|
||||
X122110476Y-101817142D01*
|
||||
%TO.C,U2*%
|
||||
X125872380Y-92201904D02*
|
||||
X126681904Y-92201904D01*
|
||||
X126777142Y-92154285D01*
|
||||
X126824761Y-92106666D01*
|
||||
X126872380Y-92011428D01*
|
||||
X126872380Y-91820952D01*
|
||||
X126824761Y-91725714D01*
|
||||
X126777142Y-91678095D01*
|
||||
X126681904Y-91630476D01*
|
||||
X125872380Y-91630476D01*
|
||||
X125967619Y-91201904D02*
|
||||
X125920000Y-91154285D01*
|
||||
X125872380Y-91059047D01*
|
||||
X125872380Y-90820952D01*
|
||||
X125920000Y-90725714D01*
|
||||
X125967619Y-90678095D01*
|
||||
X126062857Y-90630476D01*
|
||||
X126158095Y-90630476D01*
|
||||
X126300952Y-90678095D01*
|
||||
X126872380Y-91249523D01*
|
||||
X126872380Y-90630476D01*
|
||||
%TO.C,U1*%
|
||||
X108712380Y-94741904D02*
|
||||
X109521904Y-94741904D01*
|
||||
X109617142Y-94694285D01*
|
||||
X109664761Y-94646666D01*
|
||||
X109712380Y-94551428D01*
|
||||
X109712380Y-94360952D01*
|
||||
X109664761Y-94265714D01*
|
||||
X109617142Y-94218095D01*
|
||||
X109521904Y-94170476D01*
|
||||
X108712380Y-94170476D01*
|
||||
X109712380Y-93170476D02*
|
||||
X109712380Y-93741904D01*
|
||||
X109712380Y-93456190D02*
|
||||
X108712380Y-93456190D01*
|
||||
X108855238Y-93551428D01*
|
||||
X108950476Y-93646666D01*
|
||||
X108998095Y-93741904D01*
|
||||
%TO.C,R2*%
|
||||
X98342380Y-101766666D02*
|
||||
X97866190Y-102100000D01*
|
||||
X98342380Y-102338095D02*
|
||||
X97342380Y-102338095D01*
|
||||
X97342380Y-101957142D01*
|
||||
X97390000Y-101861904D01*
|
||||
X97437619Y-101814285D01*
|
||||
X97532857Y-101766666D01*
|
||||
X97675714Y-101766666D01*
|
||||
X97770952Y-101814285D01*
|
||||
X97818571Y-101861904D01*
|
||||
X97866190Y-101957142D01*
|
||||
X97866190Y-102338095D01*
|
||||
X97437619Y-101385714D02*
|
||||
X97390000Y-101338095D01*
|
||||
X97342380Y-101242857D01*
|
||||
X97342380Y-101004761D01*
|
||||
X97390000Y-100909523D01*
|
||||
X97437619Y-100861904D01*
|
||||
X97532857Y-100814285D01*
|
||||
X97628095Y-100814285D01*
|
||||
X97770952Y-100861904D01*
|
||||
X98342380Y-101433333D01*
|
||||
X98342380Y-100814285D01*
|
||||
%TO.C,R1*%
|
||||
X101433333Y-62782380D02*
|
||||
X101100000Y-62306190D01*
|
||||
X100861904Y-62782380D02*
|
||||
X100861904Y-61782380D01*
|
||||
X101242857Y-61782380D01*
|
||||
X101338095Y-61830000D01*
|
||||
X101385714Y-61877619D01*
|
||||
X101433333Y-61972857D01*
|
||||
X101433333Y-62115714D01*
|
||||
X101385714Y-62210952D01*
|
||||
X101338095Y-62258571D01*
|
||||
X101242857Y-62306190D01*
|
||||
X100861904Y-62306190D01*
|
||||
X102385714Y-62782380D02*
|
||||
X101814285Y-62782380D01*
|
||||
X102100000Y-62782380D02*
|
||||
X102100000Y-61782380D01*
|
||||
X102004761Y-61925238D01*
|
||||
X101909523Y-62020476D01*
|
||||
X101814285Y-62068095D01*
|
||||
%TO.C,J1*%
|
||||
X110636666Y-96192380D02*
|
||||
X110636666Y-96906666D01*
|
||||
X110589047Y-97049523D01*
|
||||
X110493809Y-97144761D01*
|
||||
X110350952Y-97192380D01*
|
||||
X110255714Y-97192380D01*
|
||||
X111636666Y-97192380D02*
|
||||
X111065238Y-97192380D01*
|
||||
X111350952Y-97192380D02*
|
||||
X111350952Y-96192380D01*
|
||||
X111255714Y-96335238D01*
|
||||
X111160476Y-96430476D01*
|
||||
X111065238Y-96478095D01*
|
||||
%TO.C,A1*%
|
||||
X82716666Y-76904285D02*
|
||||
X82716666Y-76428095D01*
|
||||
X83002380Y-76999523D02*
|
||||
X82002380Y-76666190D01*
|
||||
X83002380Y-76332857D01*
|
||||
X83002380Y-75475714D02*
|
||||
X83002380Y-76047142D01*
|
||||
X83002380Y-75761428D02*
|
||||
X82002380Y-75761428D01*
|
||||
X82145238Y-75856666D01*
|
||||
X82240476Y-75951904D01*
|
||||
X82288095Y-76047142D01*
|
||||
%TO.C,C1*%
|
||||
X92523333Y-90837142D02*
|
||||
X92475714Y-90884761D01*
|
||||
X92332857Y-90932380D01*
|
||||
X92237619Y-90932380D01*
|
||||
X92094761Y-90884761D01*
|
||||
X91999523Y-90789523D01*
|
||||
X91951904Y-90694285D01*
|
||||
X91904285Y-90503809D01*
|
||||
X91904285Y-90360952D01*
|
||||
X91951904Y-90170476D01*
|
||||
X91999523Y-90075238D01*
|
||||
X92094761Y-89980000D01*
|
||||
X92237619Y-89932380D01*
|
||||
X92332857Y-89932380D01*
|
||||
X92475714Y-89980000D01*
|
||||
X92523333Y-90027619D01*
|
||||
X93475714Y-90932380D02*
|
||||
X92904285Y-90932380D01*
|
||||
X93190000Y-90932380D02*
|
||||
X93190000Y-89932380D01*
|
||||
X93094761Y-90075238D01*
|
||||
X92999523Y-90170476D01*
|
||||
X92904285Y-90218095D01*
|
||||
%TO.C,JP1*%
|
||||
X95686666Y-100207380D02*
|
||||
X95686666Y-100921666D01*
|
||||
X95639047Y-101064523D01*
|
||||
X95543809Y-101159761D01*
|
||||
X95400952Y-101207380D01*
|
||||
X95305714Y-101207380D01*
|
||||
X96162857Y-101207380D02*
|
||||
X96162857Y-100207380D01*
|
||||
X96543809Y-100207380D01*
|
||||
X96639047Y-100255000D01*
|
||||
X96686666Y-100302619D01*
|
||||
X96734285Y-100397857D01*
|
||||
X96734285Y-100540714D01*
|
||||
X96686666Y-100635952D01*
|
||||
X96639047Y-100683571D01*
|
||||
X96543809Y-100731190D01*
|
||||
X96162857Y-100731190D01*
|
||||
X97686666Y-101207380D02*
|
||||
X97115238Y-101207380D01*
|
||||
X97400952Y-101207380D02*
|
||||
X97400952Y-100207380D01*
|
||||
X97305714Y-100350238D01*
|
||||
X97210476Y-100445476D01*
|
||||
X97115238Y-100493095D01*
|
||||
%TO.C,C2*%
|
||||
X95103333Y-85757142D02*
|
||||
X95055714Y-85804761D01*
|
||||
X94912857Y-85852380D01*
|
||||
X94817619Y-85852380D01*
|
||||
X94674761Y-85804761D01*
|
||||
X94579523Y-85709523D01*
|
||||
X94531904Y-85614285D01*
|
||||
X94484285Y-85423809D01*
|
||||
X94484285Y-85280952D01*
|
||||
X94531904Y-85090476D01*
|
||||
X94579523Y-84995238D01*
|
||||
X94674761Y-84900000D01*
|
||||
X94817619Y-84852380D01*
|
||||
X94912857Y-84852380D01*
|
||||
X95055714Y-84900000D01*
|
||||
X95103333Y-84947619D01*
|
||||
X95484285Y-84947619D02*
|
||||
X95531904Y-84900000D01*
|
||||
X95627142Y-84852380D01*
|
||||
X95865238Y-84852380D01*
|
||||
X95960476Y-84900000D01*
|
||||
X96008095Y-84947619D01*
|
||||
X96055714Y-85042857D01*
|
||||
X96055714Y-85138095D01*
|
||||
X96008095Y-85280952D01*
|
||||
X95436666Y-85852380D01*
|
||||
X96055714Y-85852380D01*
|
||||
D11*
|
||||
%TO.C,Y1*%
|
||||
X112962500Y-90050000D02*
|
||||
X110462500Y-90050000D01*
|
||||
X112962500Y-87750000D02*
|
||||
X110462500Y-87750000D01*
|
||||
X115637500Y-90000000D02*
|
||||
X115637500Y-87800000D01*
|
||||
%TO.C,U3*%
|
||||
X121920000Y-100620000D02*
|
||||
X121270000Y-100620000D01*
|
||||
X121920000Y-97500000D02*
|
||||
X121270000Y-97500000D01*
|
||||
X121920000Y-100620000D02*
|
||||
X123595000Y-100620000D01*
|
||||
X121920000Y-97500000D02*
|
||||
X122570000Y-97500000D01*
|
||||
%TO.C,U2*%
|
||||
X124920000Y-86640000D02*
|
||||
X124920000Y-89440000D01*
|
||||
X118920000Y-93440000D02*
|
||||
X118420000Y-93440000D01*
|
||||
X124920000Y-89440000D02*
|
||||
X125320000Y-89440000D01*
|
||||
X118420000Y-93440000D02*
|
||||
X118420000Y-89440000D01*
|
||||
X125320000Y-93440000D02*
|
||||
X124920000Y-93440000D01*
|
||||
X125320000Y-89440000D02*
|
||||
X125320000Y-93440000D01*
|
||||
X118420000Y-89440000D02*
|
||||
X118920000Y-89440000D01*
|
||||
D12*
|
||||
%TO.C,U1*%
|
||||
X113310000Y-92730000D02*
|
||||
X113160000Y-92730000D01*
|
||||
X110310000Y-95230000D02*
|
||||
X110210000Y-95230000D01*
|
||||
X113310000Y-95230000D02*
|
||||
X113310000Y-92730000D01*
|
||||
X113160000Y-95230000D02*
|
||||
X113310000Y-95230000D01*
|
||||
X110210000Y-95230000D02*
|
||||
X110210000Y-92730000D01*
|
||||
X110210000Y-92730000D02*
|
||||
X110310000Y-92730000D01*
|
||||
X110310000Y-95630000D02*
|
||||
X110310000Y-95230000D01*
|
||||
D11*
|
||||
%TO.C,R2*%
|
||||
X98680000Y-101753641D02*
|
||||
X98680000Y-101446359D01*
|
||||
X99440000Y-101753641D02*
|
||||
X99440000Y-101446359D01*
|
||||
%TO.C,R1*%
|
||||
X101446359Y-63120000D02*
|
||||
X101753641Y-63120000D01*
|
||||
X101446359Y-63880000D02*
|
||||
X101753641Y-63880000D01*
|
||||
%TO.C,J1*%
|
||||
X114400000Y-100900000D02*
|
||||
G75*
|
||||
G03*
|
||||
X114400000Y-100900000I-1680000J0D01*
|
||||
G01*
|
||||
X117900000Y-100900000D02*
|
||||
G75*
|
||||
G03*
|
||||
X117900000Y-100900000I-1680000J0D01*
|
||||
G01*
|
||||
X110900000Y-100900000D02*
|
||||
G75*
|
||||
G03*
|
||||
X110900000Y-100900000I-1680000J0D01*
|
||||
G01*
|
||||
X106586000Y-99459999D02*
|
||||
G75*
|
||||
G03*
|
||||
X104830106Y-99474642I-866000J-1439999D01*
|
||||
G01*
|
||||
X104279999Y-100034000D02*
|
||||
G75*
|
||||
G03*
|
||||
X104294642Y-101789894I1439999J-866000D01*
|
||||
G01*
|
||||
X107145000Y-101791000D02*
|
||||
G75*
|
||||
G03*
|
||||
X107145504Y-100009807I-1425003J891000D01*
|
||||
G01*
|
||||
X105720000Y-102580000D02*
|
||||
G75*
|
||||
G03*
|
||||
X106610264Y-102324721I3J1679990D01*
|
||||
G01*
|
||||
X104854000Y-102340000D02*
|
||||
G75*
|
||||
G03*
|
||||
X105748674Y-102580099I866003J1440014D01*
|
||||
G01*
|
||||
X108245000Y-102081000D02*
|
||||
X108151000Y-102174000D01*
|
||||
X108075000Y-101841000D02*
|
||||
X107946000Y-101969000D01*
|
||||
X115075000Y-101841000D02*
|
||||
X114946000Y-101969000D01*
|
||||
X103670000Y-105060000D02*
|
||||
X103670000Y-105700000D01*
|
||||
X110290000Y-99625000D02*
|
||||
X110196000Y-99719000D01*
|
||||
X103670000Y-105700000D02*
|
||||
X104070000Y-105700000D01*
|
||||
X118030000Y-97740000D02*
|
||||
X118030000Y-105460000D01*
|
||||
X103910000Y-103900000D02*
|
||||
X118030000Y-103900000D01*
|
||||
X115245000Y-102081000D02*
|
||||
X115151000Y-102174000D01*
|
||||
X111575000Y-101841000D02*
|
||||
X111446000Y-101969000D01*
|
||||
X103910000Y-97740000D02*
|
||||
X118030000Y-97740000D01*
|
||||
X113790000Y-99625000D02*
|
||||
X113696000Y-99719000D01*
|
||||
X103910000Y-105460000D02*
|
||||
X118030000Y-105460000D01*
|
||||
X111745000Y-102081000D02*
|
||||
X111651000Y-102174000D01*
|
||||
X117495000Y-99831000D02*
|
||||
X117366000Y-99959000D01*
|
||||
X110495000Y-99831000D02*
|
||||
X110366000Y-99959000D01*
|
||||
X113995000Y-99831000D02*
|
||||
X113866000Y-99959000D01*
|
||||
X117290000Y-99625000D02*
|
||||
X117196000Y-99719000D01*
|
||||
X103910000Y-105000000D02*
|
||||
X118030000Y-105000000D01*
|
||||
X103910000Y-97740000D02*
|
||||
X103910000Y-105460000D01*
|
||||
%TO.C,A1*%
|
||||
X83690000Y-85210000D02*
|
||||
X86360000Y-85210000D01*
|
||||
X127130000Y-67170000D02*
|
||||
X83690000Y-67170000D01*
|
||||
X124460000Y-69840000D02*
|
||||
X124460000Y-67170000D01*
|
||||
X88900000Y-82540000D02*
|
||||
X86360000Y-82540000D01*
|
||||
X86360000Y-82540000D02*
|
||||
X86360000Y-85210000D01*
|
||||
X124460000Y-82540000D02*
|
||||
X124460000Y-85210000D01*
|
||||
X127130000Y-85210000D02*
|
||||
X127130000Y-67170000D01*
|
||||
X88900000Y-82540000D02*
|
||||
X124460000Y-82540000D01*
|
||||
X83690000Y-67170000D02*
|
||||
X83690000Y-85210000D01*
|
||||
X88900000Y-82540000D02*
|
||||
X88900000Y-85210000D01*
|
||||
X88900000Y-85210000D02*
|
||||
X127130000Y-85210000D01*
|
||||
X86360000Y-69840000D02*
|
||||
X86360000Y-67170000D01*
|
||||
X86360000Y-69840000D02*
|
||||
X124460000Y-69840000D01*
|
||||
%TO.C,C1*%
|
||||
X90377712Y-92420000D02*
|
||||
X90377712Y-92870000D01*
|
||||
X90152712Y-92645000D02*
|
||||
X90602712Y-92645000D01*
|
||||
X90570259Y-95040000D02*
|
||||
G75*
|
||||
G03*
|
||||
X90570259Y-92920000I2119741J1060000D01*
|
||||
G01*
|
||||
%TO.C,JP1*%
|
||||
X97630000Y-98300000D02*
|
||||
X97630000Y-97095000D01*
|
||||
X95410000Y-98300000D02*
|
||||
X95410000Y-97095000D01*
|
||||
X97630000Y-97095000D02*
|
||||
X96827530Y-97095000D01*
|
||||
X97630000Y-98300000D02*
|
||||
X97083471Y-98300000D01*
|
||||
X97630000Y-99060000D02*
|
||||
X97630000Y-99820000D01*
|
||||
X95956529Y-98300000D02*
|
||||
X95410000Y-98300000D01*
|
||||
X96212470Y-97095000D02*
|
||||
X95410000Y-97095000D01*
|
||||
X97630000Y-99820000D02*
|
||||
X96520000Y-99820000D01*
|
||||
%TO.C,C2*%
|
||||
X92957712Y-87340000D02*
|
||||
X92957712Y-87790000D01*
|
||||
X92732712Y-87565000D02*
|
||||
X93182712Y-87565000D01*
|
||||
X93150259Y-89960000D02*
|
||||
G75*
|
||||
G03*
|
||||
X93150259Y-87840000I2119741J1060000D01*
|
||||
G01*
|
||||
%TD*%
|
||||
M02*
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
|
||||
%TF.CreationDate,2022-05-25T07:35:57+02:00*%
|
||||
%TF.ProjectId,Meycad,4d657963-6164-42e6-9b69-6361645f7063,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
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*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.150000*%
|
||||
%ADD11C,0.120000*%
|
||||
%ADD12C,0.100000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,REF\u002A\u002A*%
|
||||
X107886666Y-55672380D02*
|
||||
X107553333Y-55196190D01*
|
||||
X107315238Y-55672380D02*
|
||||
X107315238Y-54672380D01*
|
||||
X107696190Y-54672380D01*
|
||||
X107791428Y-54720000D01*
|
||||
X107839047Y-54767619D01*
|
||||
X107886666Y-54862857D01*
|
||||
X107886666Y-55005714D01*
|
||||
X107839047Y-55100952D01*
|
||||
X107791428Y-55148571D01*
|
||||
X107696190Y-55196190D01*
|
||||
X107315238Y-55196190D01*
|
||||
X108315238Y-55148571D02*
|
||||
X108648571Y-55148571D01*
|
||||
X108791428Y-55672380D02*
|
||||
X108315238Y-55672380D01*
|
||||
X108315238Y-54672380D01*
|
||||
X108791428Y-54672380D01*
|
||||
X109553333Y-55148571D02*
|
||||
X109220000Y-55148571D01*
|
||||
X109220000Y-55672380D02*
|
||||
X109220000Y-54672380D01*
|
||||
X109696190Y-54672380D01*
|
||||
X110220000Y-54672380D02*
|
||||
X110220000Y-54910476D01*
|
||||
X109981904Y-54815238D02*
|
||||
X110220000Y-54910476D01*
|
||||
X110458095Y-54815238D01*
|
||||
X110077142Y-55100952D02*
|
||||
X110220000Y-54910476D01*
|
||||
X110362857Y-55100952D01*
|
||||
X110981904Y-54672380D02*
|
||||
X110981904Y-54910476D01*
|
||||
X110743809Y-54815238D02*
|
||||
X110981904Y-54910476D01*
|
||||
X111220000Y-54815238D01*
|
||||
X110839047Y-55100952D02*
|
||||
X110981904Y-54910476D01*
|
||||
X111124761Y-55100952D01*
|
||||
%TO.C,Y1*%
|
||||
X111236309Y-91026190D02*
|
||||
X111236309Y-91502380D01*
|
||||
X110902976Y-90502380D02*
|
||||
X111236309Y-91026190D01*
|
||||
X111569642Y-90502380D01*
|
||||
X112426785Y-91502380D02*
|
||||
X111855357Y-91502380D01*
|
||||
X112141071Y-91502380D02*
|
||||
X112141071Y-90502380D01*
|
||||
X112045833Y-90645238D01*
|
||||
X111950595Y-90740476D01*
|
||||
X111855357Y-90788095D01*
|
||||
%TO.C,U3*%
|
||||
X121158095Y-100912380D02*
|
||||
X121158095Y-101721904D01*
|
||||
X121205714Y-101817142D01*
|
||||
X121253333Y-101864761D01*
|
||||
X121348571Y-101912380D01*
|
||||
X121539047Y-101912380D01*
|
||||
X121634285Y-101864761D01*
|
||||
X121681904Y-101817142D01*
|
||||
X121729523Y-101721904D01*
|
||||
X121729523Y-100912380D01*
|
||||
X122110476Y-100912380D02*
|
||||
X122729523Y-100912380D01*
|
||||
X122396190Y-101293333D01*
|
||||
X122539047Y-101293333D01*
|
||||
X122634285Y-101340952D01*
|
||||
X122681904Y-101388571D01*
|
||||
X122729523Y-101483809D01*
|
||||
X122729523Y-101721904D01*
|
||||
X122681904Y-101817142D01*
|
||||
X122634285Y-101864761D01*
|
||||
X122539047Y-101912380D01*
|
||||
X122253333Y-101912380D01*
|
||||
X122158095Y-101864761D01*
|
||||
X122110476Y-101817142D01*
|
||||
%TO.C,U2*%
|
||||
X125872380Y-92201904D02*
|
||||
X126681904Y-92201904D01*
|
||||
X126777142Y-92154285D01*
|
||||
X126824761Y-92106666D01*
|
||||
X126872380Y-92011428D01*
|
||||
X126872380Y-91820952D01*
|
||||
X126824761Y-91725714D01*
|
||||
X126777142Y-91678095D01*
|
||||
X126681904Y-91630476D01*
|
||||
X125872380Y-91630476D01*
|
||||
X125967619Y-91201904D02*
|
||||
X125920000Y-91154285D01*
|
||||
X125872380Y-91059047D01*
|
||||
X125872380Y-90820952D01*
|
||||
X125920000Y-90725714D01*
|
||||
X125967619Y-90678095D01*
|
||||
X126062857Y-90630476D01*
|
||||
X126158095Y-90630476D01*
|
||||
X126300952Y-90678095D01*
|
||||
X126872380Y-91249523D01*
|
||||
X126872380Y-90630476D01*
|
||||
%TO.C,U1*%
|
||||
X108712380Y-94741904D02*
|
||||
X109521904Y-94741904D01*
|
||||
X109617142Y-94694285D01*
|
||||
X109664761Y-94646666D01*
|
||||
X109712380Y-94551428D01*
|
||||
X109712380Y-94360952D01*
|
||||
X109664761Y-94265714D01*
|
||||
X109617142Y-94218095D01*
|
||||
X109521904Y-94170476D01*
|
||||
X108712380Y-94170476D01*
|
||||
X109712380Y-93170476D02*
|
||||
X109712380Y-93741904D01*
|
||||
X109712380Y-93456190D02*
|
||||
X108712380Y-93456190D01*
|
||||
X108855238Y-93551428D01*
|
||||
X108950476Y-93646666D01*
|
||||
X108998095Y-93741904D01*
|
||||
%TO.C,R2*%
|
||||
X98342380Y-101766666D02*
|
||||
X97866190Y-102100000D01*
|
||||
X98342380Y-102338095D02*
|
||||
X97342380Y-102338095D01*
|
||||
X97342380Y-101957142D01*
|
||||
X97390000Y-101861904D01*
|
||||
X97437619Y-101814285D01*
|
||||
X97532857Y-101766666D01*
|
||||
X97675714Y-101766666D01*
|
||||
X97770952Y-101814285D01*
|
||||
X97818571Y-101861904D01*
|
||||
X97866190Y-101957142D01*
|
||||
X97866190Y-102338095D01*
|
||||
X97437619Y-101385714D02*
|
||||
X97390000Y-101338095D01*
|
||||
X97342380Y-101242857D01*
|
||||
X97342380Y-101004761D01*
|
||||
X97390000Y-100909523D01*
|
||||
X97437619Y-100861904D01*
|
||||
X97532857Y-100814285D01*
|
||||
X97628095Y-100814285D01*
|
||||
X97770952Y-100861904D01*
|
||||
X98342380Y-101433333D01*
|
||||
X98342380Y-100814285D01*
|
||||
%TO.C,R1*%
|
||||
X101433333Y-62782380D02*
|
||||
X101100000Y-62306190D01*
|
||||
X100861904Y-62782380D02*
|
||||
X100861904Y-61782380D01*
|
||||
X101242857Y-61782380D01*
|
||||
X101338095Y-61830000D01*
|
||||
X101385714Y-61877619D01*
|
||||
X101433333Y-61972857D01*
|
||||
X101433333Y-62115714D01*
|
||||
X101385714Y-62210952D01*
|
||||
X101338095Y-62258571D01*
|
||||
X101242857Y-62306190D01*
|
||||
X100861904Y-62306190D01*
|
||||
X102385714Y-62782380D02*
|
||||
X101814285Y-62782380D01*
|
||||
X102100000Y-62782380D02*
|
||||
X102100000Y-61782380D01*
|
||||
X102004761Y-61925238D01*
|
||||
X101909523Y-62020476D01*
|
||||
X101814285Y-62068095D01*
|
||||
%TO.C,J1*%
|
||||
X110636666Y-96192380D02*
|
||||
X110636666Y-96906666D01*
|
||||
X110589047Y-97049523D01*
|
||||
X110493809Y-97144761D01*
|
||||
X110350952Y-97192380D01*
|
||||
X110255714Y-97192380D01*
|
||||
X111636666Y-97192380D02*
|
||||
X111065238Y-97192380D01*
|
||||
X111350952Y-97192380D02*
|
||||
X111350952Y-96192380D01*
|
||||
X111255714Y-96335238D01*
|
||||
X111160476Y-96430476D01*
|
||||
X111065238Y-96478095D01*
|
||||
%TO.C,A1*%
|
||||
X82716666Y-76904285D02*
|
||||
X82716666Y-76428095D01*
|
||||
X83002380Y-76999523D02*
|
||||
X82002380Y-76666190D01*
|
||||
X83002380Y-76332857D01*
|
||||
X83002380Y-75475714D02*
|
||||
X83002380Y-76047142D01*
|
||||
X83002380Y-75761428D02*
|
||||
X82002380Y-75761428D01*
|
||||
X82145238Y-75856666D01*
|
||||
X82240476Y-75951904D01*
|
||||
X82288095Y-76047142D01*
|
||||
%TO.C,C1*%
|
||||
X92523333Y-90837142D02*
|
||||
X92475714Y-90884761D01*
|
||||
X92332857Y-90932380D01*
|
||||
X92237619Y-90932380D01*
|
||||
X92094761Y-90884761D01*
|
||||
X91999523Y-90789523D01*
|
||||
X91951904Y-90694285D01*
|
||||
X91904285Y-90503809D01*
|
||||
X91904285Y-90360952D01*
|
||||
X91951904Y-90170476D01*
|
||||
X91999523Y-90075238D01*
|
||||
X92094761Y-89980000D01*
|
||||
X92237619Y-89932380D01*
|
||||
X92332857Y-89932380D01*
|
||||
X92475714Y-89980000D01*
|
||||
X92523333Y-90027619D01*
|
||||
X93475714Y-90932380D02*
|
||||
X92904285Y-90932380D01*
|
||||
X93190000Y-90932380D02*
|
||||
X93190000Y-89932380D01*
|
||||
X93094761Y-90075238D01*
|
||||
X92999523Y-90170476D01*
|
||||
X92904285Y-90218095D01*
|
||||
%TO.C,JP1*%
|
||||
X95686666Y-100207380D02*
|
||||
X95686666Y-100921666D01*
|
||||
X95639047Y-101064523D01*
|
||||
X95543809Y-101159761D01*
|
||||
X95400952Y-101207380D01*
|
||||
X95305714Y-101207380D01*
|
||||
X96162857Y-101207380D02*
|
||||
X96162857Y-100207380D01*
|
||||
X96543809Y-100207380D01*
|
||||
X96639047Y-100255000D01*
|
||||
X96686666Y-100302619D01*
|
||||
X96734285Y-100397857D01*
|
||||
X96734285Y-100540714D01*
|
||||
X96686666Y-100635952D01*
|
||||
X96639047Y-100683571D01*
|
||||
X96543809Y-100731190D01*
|
||||
X96162857Y-100731190D01*
|
||||
X97686666Y-101207380D02*
|
||||
X97115238Y-101207380D01*
|
||||
X97400952Y-101207380D02*
|
||||
X97400952Y-100207380D01*
|
||||
X97305714Y-100350238D01*
|
||||
X97210476Y-100445476D01*
|
||||
X97115238Y-100493095D01*
|
||||
%TO.C,C2*%
|
||||
X95103333Y-85757142D02*
|
||||
X95055714Y-85804761D01*
|
||||
X94912857Y-85852380D01*
|
||||
X94817619Y-85852380D01*
|
||||
X94674761Y-85804761D01*
|
||||
X94579523Y-85709523D01*
|
||||
X94531904Y-85614285D01*
|
||||
X94484285Y-85423809D01*
|
||||
X94484285Y-85280952D01*
|
||||
X94531904Y-85090476D01*
|
||||
X94579523Y-84995238D01*
|
||||
X94674761Y-84900000D01*
|
||||
X94817619Y-84852380D01*
|
||||
X94912857Y-84852380D01*
|
||||
X95055714Y-84900000D01*
|
||||
X95103333Y-84947619D01*
|
||||
X95484285Y-84947619D02*
|
||||
X95531904Y-84900000D01*
|
||||
X95627142Y-84852380D01*
|
||||
X95865238Y-84852380D01*
|
||||
X95960476Y-84900000D01*
|
||||
X96008095Y-84947619D01*
|
||||
X96055714Y-85042857D01*
|
||||
X96055714Y-85138095D01*
|
||||
X96008095Y-85280952D01*
|
||||
X95436666Y-85852380D01*
|
||||
X96055714Y-85852380D01*
|
||||
D11*
|
||||
%TO.C,Y1*%
|
||||
X112962500Y-90050000D02*
|
||||
X110462500Y-90050000D01*
|
||||
X112962500Y-87750000D02*
|
||||
X110462500Y-87750000D01*
|
||||
X115637500Y-90000000D02*
|
||||
X115637500Y-87800000D01*
|
||||
%TO.C,U3*%
|
||||
X121920000Y-100620000D02*
|
||||
X121270000Y-100620000D01*
|
||||
X121920000Y-97500000D02*
|
||||
X121270000Y-97500000D01*
|
||||
X121920000Y-100620000D02*
|
||||
X123595000Y-100620000D01*
|
||||
X121920000Y-97500000D02*
|
||||
X122570000Y-97500000D01*
|
||||
%TO.C,U2*%
|
||||
X124920000Y-86640000D02*
|
||||
X124920000Y-89440000D01*
|
||||
X118920000Y-93440000D02*
|
||||
X118420000Y-93440000D01*
|
||||
X124920000Y-89440000D02*
|
||||
X125320000Y-89440000D01*
|
||||
X118420000Y-93440000D02*
|
||||
X118420000Y-89440000D01*
|
||||
X125320000Y-93440000D02*
|
||||
X124920000Y-93440000D01*
|
||||
X125320000Y-89440000D02*
|
||||
X125320000Y-93440000D01*
|
||||
X118420000Y-89440000D02*
|
||||
X118920000Y-89440000D01*
|
||||
D12*
|
||||
%TO.C,U1*%
|
||||
X113310000Y-92730000D02*
|
||||
X113160000Y-92730000D01*
|
||||
X110310000Y-95230000D02*
|
||||
X110210000Y-95230000D01*
|
||||
X113310000Y-95230000D02*
|
||||
X113310000Y-92730000D01*
|
||||
X113160000Y-95230000D02*
|
||||
X113310000Y-95230000D01*
|
||||
X110210000Y-95230000D02*
|
||||
X110210000Y-92730000D01*
|
||||
X110210000Y-92730000D02*
|
||||
X110310000Y-92730000D01*
|
||||
X110310000Y-95630000D02*
|
||||
X110310000Y-95230000D01*
|
||||
D11*
|
||||
%TO.C,R2*%
|
||||
X98680000Y-101753641D02*
|
||||
X98680000Y-101446359D01*
|
||||
X99440000Y-101753641D02*
|
||||
X99440000Y-101446359D01*
|
||||
%TO.C,R1*%
|
||||
X101446359Y-63120000D02*
|
||||
X101753641Y-63120000D01*
|
||||
X101446359Y-63880000D02*
|
||||
X101753641Y-63880000D01*
|
||||
%TO.C,J1*%
|
||||
X114400000Y-100900000D02*
|
||||
G75*
|
||||
G03*
|
||||
X114400000Y-100900000I-1680000J0D01*
|
||||
G01*
|
||||
X117900000Y-100900000D02*
|
||||
G75*
|
||||
G03*
|
||||
X117900000Y-100900000I-1680000J0D01*
|
||||
G01*
|
||||
X110900000Y-100900000D02*
|
||||
G75*
|
||||
G03*
|
||||
X110900000Y-100900000I-1680000J0D01*
|
||||
G01*
|
||||
X106586000Y-99459999D02*
|
||||
G75*
|
||||
G03*
|
||||
X104830106Y-99474642I-866000J-1439999D01*
|
||||
G01*
|
||||
X104279999Y-100034000D02*
|
||||
G75*
|
||||
G03*
|
||||
X104294642Y-101789894I1439999J-866000D01*
|
||||
G01*
|
||||
X107145000Y-101791000D02*
|
||||
G75*
|
||||
G03*
|
||||
X107145504Y-100009807I-1425003J891000D01*
|
||||
G01*
|
||||
X105720000Y-102580000D02*
|
||||
G75*
|
||||
G03*
|
||||
X106610264Y-102324721I3J1679990D01*
|
||||
G01*
|
||||
X104854000Y-102340000D02*
|
||||
G75*
|
||||
G03*
|
||||
X105748674Y-102580099I866003J1440014D01*
|
||||
G01*
|
||||
X108245000Y-102081000D02*
|
||||
X108151000Y-102174000D01*
|
||||
X108075000Y-101841000D02*
|
||||
X107946000Y-101969000D01*
|
||||
X115075000Y-101841000D02*
|
||||
X114946000Y-101969000D01*
|
||||
X103670000Y-105060000D02*
|
||||
X103670000Y-105700000D01*
|
||||
X110290000Y-99625000D02*
|
||||
X110196000Y-99719000D01*
|
||||
X103670000Y-105700000D02*
|
||||
X104070000Y-105700000D01*
|
||||
X118030000Y-97740000D02*
|
||||
X118030000Y-105460000D01*
|
||||
X103910000Y-103900000D02*
|
||||
X118030000Y-103900000D01*
|
||||
X115245000Y-102081000D02*
|
||||
X115151000Y-102174000D01*
|
||||
X111575000Y-101841000D02*
|
||||
X111446000Y-101969000D01*
|
||||
X103910000Y-97740000D02*
|
||||
X118030000Y-97740000D01*
|
||||
X113790000Y-99625000D02*
|
||||
X113696000Y-99719000D01*
|
||||
X103910000Y-105460000D02*
|
||||
X118030000Y-105460000D01*
|
||||
X111745000Y-102081000D02*
|
||||
X111651000Y-102174000D01*
|
||||
X117495000Y-99831000D02*
|
||||
X117366000Y-99959000D01*
|
||||
X110495000Y-99831000D02*
|
||||
X110366000Y-99959000D01*
|
||||
X113995000Y-99831000D02*
|
||||
X113866000Y-99959000D01*
|
||||
X117290000Y-99625000D02*
|
||||
X117196000Y-99719000D01*
|
||||
X103910000Y-105000000D02*
|
||||
X118030000Y-105000000D01*
|
||||
X103910000Y-97740000D02*
|
||||
X103910000Y-105460000D01*
|
||||
%TO.C,A1*%
|
||||
X83690000Y-85210000D02*
|
||||
X86360000Y-85210000D01*
|
||||
X127130000Y-67170000D02*
|
||||
X83690000Y-67170000D01*
|
||||
X124460000Y-69840000D02*
|
||||
X124460000Y-67170000D01*
|
||||
X88900000Y-82540000D02*
|
||||
X86360000Y-82540000D01*
|
||||
X86360000Y-82540000D02*
|
||||
X86360000Y-85210000D01*
|
||||
X124460000Y-82540000D02*
|
||||
X124460000Y-85210000D01*
|
||||
X127130000Y-85210000D02*
|
||||
X127130000Y-67170000D01*
|
||||
X88900000Y-82540000D02*
|
||||
X124460000Y-82540000D01*
|
||||
X83690000Y-67170000D02*
|
||||
X83690000Y-85210000D01*
|
||||
X88900000Y-82540000D02*
|
||||
X88900000Y-85210000D01*
|
||||
X88900000Y-85210000D02*
|
||||
X127130000Y-85210000D01*
|
||||
X86360000Y-69840000D02*
|
||||
X86360000Y-67170000D01*
|
||||
X86360000Y-69840000D02*
|
||||
X124460000Y-69840000D01*
|
||||
%TO.C,C1*%
|
||||
X90377712Y-92420000D02*
|
||||
X90377712Y-92870000D01*
|
||||
X90152712Y-92645000D02*
|
||||
X90602712Y-92645000D01*
|
||||
X90570259Y-95040000D02*
|
||||
G75*
|
||||
G03*
|
||||
X90570259Y-92920000I2119741J1060000D01*
|
||||
G01*
|
||||
%TO.C,JP1*%
|
||||
X97630000Y-98300000D02*
|
||||
X97630000Y-97095000D01*
|
||||
X95410000Y-98300000D02*
|
||||
X95410000Y-97095000D01*
|
||||
X97630000Y-97095000D02*
|
||||
X96827530Y-97095000D01*
|
||||
X97630000Y-98300000D02*
|
||||
X97083471Y-98300000D01*
|
||||
X97630000Y-99060000D02*
|
||||
X97630000Y-99820000D01*
|
||||
X95956529Y-98300000D02*
|
||||
X95410000Y-98300000D01*
|
||||
X96212470Y-97095000D02*
|
||||
X95410000Y-97095000D01*
|
||||
X97630000Y-99820000D02*
|
||||
X96520000Y-99820000D01*
|
||||
%TO.C,C2*%
|
||||
X92957712Y-87340000D02*
|
||||
X92957712Y-87790000D01*
|
||||
X92732712Y-87565000D02*
|
||||
X93182712Y-87565000D01*
|
||||
X93150259Y-89960000D02*
|
||||
G75*
|
||||
G03*
|
||||
X93150259Y-87840000I2119741J1060000D01*
|
||||
G01*
|
||||
%TD*%
|
||||
M02*
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-07-02_055754.zip
Normal file
BIN
Meycad-backups/Meycad-2024-07-02_055754.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-07-03_060306.zip
Normal file
BIN
Meycad-backups/Meycad-2024-07-03_060306.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-07-03_061325.zip
Normal file
BIN
Meycad-backups/Meycad-2024-07-03_061325.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-07-03_110742.zip
Normal file
BIN
Meycad-backups/Meycad-2024-07-03_110742.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-25_170511.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-25_170511.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-25_171746.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-25_171746.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-25_172403.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-25_172403.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-25_172948.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-25_172948.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-25_173631.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-25_173631.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-26_161243.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-26_161243.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-26_162713.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-26_162713.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-26_165535.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-26_165535.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-26_171000.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-26_171000.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-08-26_171511.zip
Normal file
BIN
Meycad-backups/Meycad-2024-08-26_171511.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-09-05_062549.zip
Normal file
BIN
Meycad-backups/Meycad-2024-09-05_062549.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-09-05_063706.zip
Normal file
BIN
Meycad-backups/Meycad-2024-09-05_063706.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-09-05_064217.zip
Normal file
BIN
Meycad-backups/Meycad-2024-09-05_064217.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-09-05_064923.zip
Normal file
BIN
Meycad-backups/Meycad-2024-09-05_064923.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-09-05_065952.zip
Normal file
BIN
Meycad-backups/Meycad-2024-09-05_065952.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2024-11-10_132148.zip
Normal file
BIN
Meycad-backups/Meycad-2024-11-10_132148.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2025-04-14_062122.zip
Normal file
BIN
Meycad-backups/Meycad-2025-04-14_062122.zip
Normal file
Binary file not shown.
BIN
Meycad-backups/Meycad-2025-06-04_053120.zip
Normal file
BIN
Meycad-backups/Meycad-2025-06-04_053120.zip
Normal file
Binary file not shown.
@@ -1,120 +1,120 @@
|
||||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "(6.0.4)"
|
||||
},
|
||||
"CreationDate": "2022-05-25T07:35:57+02:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "Meycad",
|
||||
"GUID": "4d657963-6164-42e6-9b69-6361645f7063",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 52.1006,
|
||||
"Y": 50.1
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.6,
|
||||
"Finish": "None"
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.2,
|
||||
"PadToTrack": 0.2,
|
||||
"TrackToTrack": 0.2,
|
||||
"MinLineWidth": 0.25
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "Meycad-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Top Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Material": "FR4",
|
||||
"Name": "F.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Bottom Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "(6.0.4)"
|
||||
},
|
||||
"CreationDate": "2022-05-25T07:35:57+02:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "Meycad",
|
||||
"GUID": "4d657963-6164-42e6-9b69-6361645f7063",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 52.1006,
|
||||
"Y": 50.1
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.6,
|
||||
"Finish": "None"
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.2,
|
||||
"PadToTrack": 0.2,
|
||||
"TrackToTrack": 0.2,
|
||||
"MinLineWidth": 0.25
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "Meycad-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "Meycad-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Top Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Material": "FR4",
|
||||
"Name": "F.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Bottom Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
2988
Meycad.kicad_pcb
2988
Meycad.kicad_pcb
File diff suppressed because it is too large
Load Diff
150
Meycad.kicad_prl
150
Meycad.kicad_prl
@@ -1,75 +1,75 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 37,
|
||||
"active_layer_preset": "Front Assembly View",
|
||||
"auto_track_width": true,
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 1,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"ratsnest_display_mode": 0,
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": true,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36
|
||||
],
|
||||
"visible_layers": "00290a0_00000000",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"meta": {
|
||||
"filename": "Meycad.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 36,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": false,
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 1.0
|
||||
},
|
||||
"ratsnest_display_mode": 0,
|
||||
"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": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36
|
||||
],
|
||||
"visible_layers": "0001030_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"meta": {
|
||||
"filename": "Meycad.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
|
||||
5234
Meycad.kicad_sch
5234
Meycad.kicad_sch
File diff suppressed because it is too large
Load Diff
5396
Meycad.kicad_sch-bak
5396
Meycad.kicad_sch-bak
File diff suppressed because it is too large
Load Diff
13
OpenHab/org.openhab.binding.meycan/.vscode/launch.json
vendored
Normal file
13
OpenHab/org.openhab.binding.meycan/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "java",
|
||||
"name": "Debug (Attach) - openHAB",
|
||||
"request": "attach",
|
||||
"hostName": "localhost",
|
||||
"port": 5005,
|
||||
"preLaunchTask": "Build"
|
||||
}
|
||||
]
|
||||
}
|
||||
149
OpenHab/org.openhab.binding.meycan/.vscode/tasks.json
vendored
Normal file
149
OpenHab/org.openhab.binding.meycan/.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,149 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"options": {
|
||||
"env": {
|
||||
"openhab_home": "C://source//openhab_runtime",
|
||||
"openhab_runtime": "C://source//openhab_runtime//runtime",
|
||||
"openhab_addons": "C://source//openhab_runtime//addons",
|
||||
"openhab_logs": "C://source//openhab_runtime//userdata/logs",
|
||||
"dist" : "org.openhab.binding.meycan-4.0.0-SNAPSHOT.jar"
|
||||
}
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Start openHAB (Debug)",
|
||||
"type": "shell",
|
||||
"isBackground": true,
|
||||
"command": "$openhab_home/start.sh debug",
|
||||
"windows": {
|
||||
"command": "& $env:openhab_home/start.bat debug"
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Stop openHAB",
|
||||
"type": "shell",
|
||||
"command": "$openhab_runtime/bin/stop",
|
||||
"windows": {
|
||||
"command": "& $env:openhab_runtime/bin/stop.bat"
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "mvn Compile (Release)",
|
||||
"type": "shell",
|
||||
"command": "mvn",
|
||||
"args": [
|
||||
"clean",
|
||||
"install"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "mvn Compile (Online)",
|
||||
"type": "shell",
|
||||
"command": "mvn",
|
||||
"args": [
|
||||
"clean",
|
||||
"install",
|
||||
"-DskipChecks"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "mvn Compile (Offline)",
|
||||
"type": "shell",
|
||||
"command": "mvn",
|
||||
"args": [
|
||||
"-o",
|
||||
"clean",
|
||||
"install",
|
||||
"-DskipChecks"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Copy Distribution to Addons",
|
||||
"type": "shell",
|
||||
"command": "cp",
|
||||
"args": [
|
||||
"${workspaceFolder}/target/$dist",
|
||||
"$openhab_addons"
|
||||
],
|
||||
"windows": {
|
||||
"command": "copy",
|
||||
"args": [
|
||||
"${workspaceFolder}/target/$env:dist",
|
||||
"$env:openhab_addons"
|
||||
]
|
||||
},
|
||||
"dependsOn": [
|
||||
"mvn Compile (Offline)"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Build",
|
||||
"dependsOn": [
|
||||
"Copy Distribution to Addons"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Tail events.log",
|
||||
"type": "shell",
|
||||
"command": "tail",
|
||||
"args": [
|
||||
"-n",
|
||||
"50",
|
||||
"-F",
|
||||
"$openhab_logs/events.log"
|
||||
],
|
||||
"windows": {
|
||||
"command": "Get-Content",
|
||||
"args": [
|
||||
"-Last",
|
||||
"50",
|
||||
"-Path",
|
||||
"$env:openhab_logs/events.log",
|
||||
"-Wait"
|
||||
]
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Tail openhab.log",
|
||||
"type": "shell",
|
||||
"command": "tail",
|
||||
"args": [
|
||||
"-n",
|
||||
"50",
|
||||
"-F",
|
||||
"$openhab_logs/openhab.log"
|
||||
],
|
||||
"windows": {
|
||||
"command": "Get-Content",
|
||||
"args": [
|
||||
"-Last",
|
||||
"50",
|
||||
"-Path",
|
||||
"$env:openhab_logs/openhab.log",
|
||||
"-Wait"
|
||||
]
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
},
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
}
|
||||
13
OpenHab/org.openhab.binding.meycan/NOTICE
Normal file
13
OpenHab/org.openhab.binding.meycan/NOTICE
Normal file
@@ -0,0 +1,13 @@
|
||||
This content is produced and maintained by the openHAB project.
|
||||
|
||||
* Project home: https://www.openhab.org
|
||||
|
||||
== Declared Project Licenses
|
||||
|
||||
This program and the accompanying materials are made available under the terms
|
||||
of the Eclipse Public License 2.0 which is available at
|
||||
https://www.eclipse.org/legal/epl-2.0/.
|
||||
|
||||
== Source Code
|
||||
|
||||
https://github.com/openhab/openhab-addons
|
||||
94
OpenHab/org.openhab.binding.meycan/README.md
Normal file
94
OpenHab/org.openhab.binding.meycan/README.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# MeyCan Binding
|
||||
|
||||
_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._
|
||||
_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._
|
||||
|
||||
## Supported Things
|
||||
|
||||
_Please describe the different supported things / devices including their ThingTypeUID within this section._
|
||||
_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._
|
||||
|
||||
- `bridge`: Short description of the Bridge, if any
|
||||
- `sample`: Short description of the Thing with the ThingTypeUID `sample`
|
||||
|
||||
## Discovery
|
||||
|
||||
_Describe the available auto-discovery features here._
|
||||
_Mention for what it works and what needs to be kept in mind when using it._
|
||||
|
||||
## 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._
|
||||
_In this section, you should link to this file and provide some information about the options._
|
||||
_The file could e.g. look like:_
|
||||
|
||||
```
|
||||
# Configuration for the MeyCan Binding
|
||||
#
|
||||
# Default secret key for the pairing of the MeyCan Thing.
|
||||
# It has to be between 10-40 (alphanumeric) characters.
|
||||
# This may be changed by the user for security reasons.
|
||||
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._
|
||||
|
||||
_If your binding does not offer any generic configurations, you can remove this section completely._
|
||||
|
||||
## Thing Configuration
|
||||
|
||||
_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._
|
||||
|
||||
_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
|
||||
|
||||
| Name | Type | Description | Default | Required | Advanced |
|
||||
|-----------------|---------|---------------------------------------|---------|----------|----------|
|
||||
| hostname | text | Hostname or IP address of 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 |
|
||||
|
||||
## Channels
|
||||
|
||||
_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._
|
||||
|
||||
| Channel | Type | Read/Write | Description |
|
||||
|---------|--------|------------|-----------------------------|
|
||||
| control | Switch | RW | This is the control channel |
|
||||
|
||||
## Full Example
|
||||
|
||||
_Provide a full usage example based on textual configuration files._
|
||||
_*.things, *.items examples are mandatory as textual configuration is well used by many users._
|
||||
_*.sitemap examples are optional._
|
||||
|
||||
### Thing Configuration
|
||||
|
||||
```java
|
||||
Example thing configuration goes here.
|
||||
```
|
||||
### Item Configuration
|
||||
|
||||
```java
|
||||
Example item configuration goes here.
|
||||
```
|
||||
|
||||
### Sitemap Configuration
|
||||
|
||||
```perl
|
||||
Optional Sitemap configuration goes here.
|
||||
Remove this section, if not needed.
|
||||
```
|
||||
|
||||
## Any custom content here!
|
||||
|
||||
_Feel free to add additional sections for whatever you think should also be mentioned about your binding!_
|
||||
17
OpenHab/org.openhab.binding.meycan/pom.xml
Normal file
17
OpenHab/org.openhab.binding.meycan/pom.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?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"
|
||||
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>
|
||||
|
||||
<parent>
|
||||
<groupId>org.openhab.addons.bundles</groupId>
|
||||
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
|
||||
<version>4.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>org.openhab.binding.meycan</artifactId>
|
||||
|
||||
<name>openHAB Add-ons :: Bundles :: MeyCan Binding</name>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?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">
|
||||
<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>openhab-runtime-base</feature>
|
||||
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.meycan/${project.version}</bundle>
|
||||
</feature>
|
||||
</features>
|
||||
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2023 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.meycan.internal;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.core.thing.ThingTypeUID;
|
||||
|
||||
/**
|
||||
* The {@link MeyCanBindingConstants} class defines common constants, which are
|
||||
* used across the whole binding.
|
||||
*
|
||||
* @author Martin Linkwitz - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class MeyCanBindingConstants {
|
||||
|
||||
private static final String BINDING_ID = "meycan";
|
||||
|
||||
// List of all Thing Type UIDs
|
||||
public static final ThingTypeUID THING_TYPE_SAMPLE = new ThingTypeUID(BINDING_ID, "sample");
|
||||
|
||||
// List of all Channel ids
|
||||
public static final String CHANNEL_1 = "channel1";
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2023 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.meycan.internal;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
|
||||
/**
|
||||
* The {@link MeyCanConfiguration} class contains fields mapping thing configuration parameters.
|
||||
*
|
||||
* @author Martin Linkwitz - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class MeyCanConfiguration {
|
||||
|
||||
/**
|
||||
* Sample configuration parameters. Replace with your own.
|
||||
*/
|
||||
public String hostname = "";
|
||||
public String password = "";
|
||||
public int refreshInterval = 600;
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2023 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.meycan.internal;
|
||||
|
||||
import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.thing.ChannelUID;
|
||||
import org.openhab.core.thing.Thing;
|
||||
import org.openhab.core.thing.ThingStatus;
|
||||
import org.openhab.core.thing.binding.BaseThingHandler;
|
||||
import org.openhab.core.types.Command;
|
||||
import org.openhab.core.types.RefreshType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* The {@link MeyCanHandler} is responsible for handling commands, which are
|
||||
* sent to one of the channels.
|
||||
*
|
||||
* @author Martin Linkwitz - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class MeyCanHandler extends BaseThingHandler {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(MeyCanHandler.class);
|
||||
|
||||
private @Nullable MeyCanConfiguration config;
|
||||
|
||||
public MeyCanHandler(Thing thing) {
|
||||
super(thing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(ChannelUID channelUID, Command command) {
|
||||
if (CHANNEL_1.equals(channelUID.getId())) {
|
||||
if (command instanceof RefreshType) {
|
||||
// TODO: handle data refresh
|
||||
}
|
||||
|
||||
// TODO: handle command
|
||||
|
||||
// Note: if communication with thing fails for some reason,
|
||||
// indicate that by setting the status with detail information:
|
||||
// updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||
// "Could not control device at IP address x.x.x.x");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
config = getConfigAs(MeyCanConfiguration.class);
|
||||
|
||||
// TODO: Initialize the handler.
|
||||
// The framework requires you to return from this method quickly, i.e. any network access must be done in
|
||||
// the background initialization below.
|
||||
// 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.
|
||||
// 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
|
||||
// background.
|
||||
|
||||
// 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.
|
||||
// we set this upfront to reliably check status updates in unit tests.
|
||||
updateStatus(ThingStatus.UNKNOWN);
|
||||
|
||||
// Example for background initialization:
|
||||
scheduler.execute(() -> {
|
||||
boolean thingReachable = true; // <background task with long running initialization here>
|
||||
// when done do:
|
||||
if (thingReachable) {
|
||||
updateStatus(ThingStatus.ONLINE);
|
||||
} else {
|
||||
updateStatus(ThingStatus.OFFLINE);
|
||||
}
|
||||
});
|
||||
|
||||
// These logging types should be primarily used by bindings
|
||||
// logger.trace("Example trace message");
|
||||
// logger.debug("Example debug message");
|
||||
// logger.warn("Example warn message");
|
||||
//
|
||||
// Logging to INFO should be avoided normally.
|
||||
// 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
|
||||
// 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.
|
||||
// updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
|
||||
// "Can not access device as username and/or password are invalid");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2023 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.meycan.internal;
|
||||
|
||||
import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.thing.Thing;
|
||||
import org.openhab.core.thing.ThingTypeUID;
|
||||
import org.openhab.core.thing.binding.BaseThingHandlerFactory;
|
||||
import org.openhab.core.thing.binding.ThingHandler;
|
||||
import org.openhab.core.thing.binding.ThingHandlerFactory;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
|
||||
/**
|
||||
* The {@link MeyCanHandlerFactory} is responsible for creating things and thing
|
||||
* handlers.
|
||||
*
|
||||
* @author Martin Linkwitz - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
@Component(configurationPid = "binding.meycan", service = ThingHandlerFactory.class)
|
||||
public class MeyCanHandlerFactory extends BaseThingHandlerFactory {
|
||||
|
||||
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_SAMPLE);
|
||||
|
||||
@Override
|
||||
public boolean supportsThingType(ThingTypeUID thingTypeUID) {
|
||||
return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @Nullable ThingHandler createHandler(Thing thing) {
|
||||
ThingTypeUID thingTypeUID = thing.getThingTypeUID();
|
||||
|
||||
if (THING_TYPE_SAMPLE.equals(thingTypeUID)) {
|
||||
return new MeyCanHandler(thing);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<addon:addon id="meycan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
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">
|
||||
|
||||
<type>binding</type>
|
||||
<name>MeyCan Binding</name>
|
||||
<description>This is the binding for MeyCan.</description>
|
||||
|
||||
</addon:addon>
|
||||
@@ -0,0 +1,3 @@
|
||||
# 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: see also: https://www.openhab.org/docs/developer/utils/i18n.html
|
||||
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="meycan"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
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">
|
||||
|
||||
<!-- Sample Thing Type -->
|
||||
<thing-type id="sample">
|
||||
<!-- Comment this in for Things which need a Bridge to function.
|
||||
<supported-bridge-type-refs>
|
||||
<bridge-type-ref id="MeyCanBridge" />
|
||||
</supported-bridge-type-refs>
|
||||
-->
|
||||
|
||||
<label>MeyCan Binding Thing</label>
|
||||
<description>Sample thing for MeyCan Binding</description>
|
||||
|
||||
<channels>
|
||||
<channel id="channel1" typeId="sample-channel"/>
|
||||
</channels>
|
||||
|
||||
<config-description>
|
||||
<parameter name="hostname" type="text" required="true">
|
||||
<context>network-address</context>
|
||||
<label>Hostname</label>
|
||||
<description>Hostname or IP address of the device</description>
|
||||
</parameter>
|
||||
<parameter name="password" type="text" required="true">
|
||||
<context>password</context>
|
||||
<label>Password</label>
|
||||
<description>Password to access the device</description>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer" unit="s" min="1">
|
||||
<label>Refresh Interval</label>
|
||||
<description>Interval the device is polled in sec.</description>
|
||||
<default>600</default>
|
||||
<advanced>true</advanced>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<!-- Sample Channel Type -->
|
||||
<channel-type id="sample-channel">
|
||||
<item-type>Number:Temperature</item-type>
|
||||
<label>Example Temperature</label><!-- Use uppercase words, except prepositions. 2-3 words, max 25 chars -->
|
||||
<description>Sample channel for MeyCan Binding</description>
|
||||
</channel-type>
|
||||
</thing:thing-descriptions>
|
||||
@@ -1,49 +1,67 @@
|
||||
MeyCan: PROTOCOL
|
||||
|
||||
|
||||
|
||||
ArbitartionID:
|
||||
|<-- 13 bits -->| |<-- 16 bits -->|
|
||||
COMMAND DEVICE_ID
|
||||
ABC 0x14 6A
|
||||
|
||||
|
||||
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
|
||||
|
||||
Packages
|
||||
---------------------------------
|
||||
0xF00: HELLO->ADOPT
|
||||
Payload:
|
||||
2 bytes | DeviceId -> DeviceId Explicit
|
||||
2 bytes | Byte -> Software-Version (1.0)
|
||||
2 bytes | Byte -> Hw Version (4.0
|
||||
|
||||
0x050: Input Switch Triggered
|
||||
-> Broadcast
|
||||
---------------------------------
|
||||
Payload:
|
||||
1 byte| PinId -> Id of the pin of the local board.
|
||||
1 byte| State -> 1 for Switched, 0 for Unswitched
|
||||
|
||||
0x055: Command Set Switch
|
||||
-> Broadcast
|
||||
---------------------------------
|
||||
2 bytes | TargetDeviceId -> The id of the board
|
||||
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)
|
||||
1 byte | 0: Request
|
||||
| 1: Response
|
||||
DAT |
|
||||
-- n Items of format ------------
|
||||
* 2 byte: DeviceId
|
||||
* 1 byte: The State
|
||||
|
||||
|
||||
MeyCan: PROTOCOL
|
||||
|
||||
|
||||
|
||||
ArbitartionID:
|
||||
|<-- 13 bits -->| |<-- 16 bits -->|
|
||||
COMMAND DEVICE_ID
|
||||
ABC 0x14 6A
|
||||
|
||||
|
||||
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
|
||||
|
||||
Packages
|
||||
---------------------------------
|
||||
0xF00: HELLO->ADOPT
|
||||
Payload:
|
||||
2 bytes | Byte -> Software-Version (1.0)
|
||||
2 bytes | Byte -> Hw Version (4.0)
|
||||
1 bytes | DeviceTypeId
|
||||
| 1: Switch
|
||||
| 2: Switch + Rule
|
||||
| 3: UP
|
||||
|
||||
0x050: Input Switch Triggered
|
||||
-> Broadcast
|
||||
---------------------------------
|
||||
Payload:
|
||||
1 byte| PinId -> Id of the pin of the local board.
|
||||
1 byte| State -> 1 for Switched, 0 for Unswitched
|
||||
|
||||
0x055: Command Set Switch
|
||||
-> Broadcast
|
||||
---------------------------------
|
||||
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)
|
||||
1 byte | 0: Request
|
||||
| 1: Response
|
||||
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
|
||||
|
||||
BIN
Software/Switch/.MeyRule.cpp.swp
Normal file
BIN
Software/Switch/.MeyRule.cpp.swp
Normal file
Binary file not shown.
@@ -1,5 +1,7 @@
|
||||
{
|
||||
"configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader",
|
||||
"board": "MegaCoreX:megaavr:809",
|
||||
"sketch": "Swtich.ino"
|
||||
{
|
||||
"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"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
232
Software/Switch/MeyCan.cpp
Normal file
232
Software/Switch/MeyCan.cpp
Normal file
@@ -0,0 +1,232 @@
|
||||
#include "MeyCan.h";
|
||||
#include <SPI.h>;
|
||||
#include <mcp2515.h>;
|
||||
|
||||
|
||||
PinState *MeyPin = NULL;
|
||||
CanInterface *CanBusses = NULL;
|
||||
uint16_t myDeviceId;
|
||||
byte _deviceTypeId = 0;
|
||||
byte _majorHardwareVersion = 0;
|
||||
byte _minorHardwareVersion = 0;
|
||||
void (*LocalPinChangedHandler)(can_frame *frame);
|
||||
|
||||
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
|
||||
{
|
||||
interface->reset();
|
||||
interface->setBitrate(CAN_1000KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
|
||||
interface->setNormalMode();
|
||||
SendVersionPackage(interface);
|
||||
}
|
||||
|
||||
void ForEachCanInterface(void (*handle)(MCP2515 *canInterace)) {
|
||||
CanBusses->ForEachInterface(handle);
|
||||
}
|
||||
|
||||
void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId) {
|
||||
_majorHardwareVersion = majorHardwareVersion;
|
||||
_minorHardwareVersion = minorHardwareVersion;
|
||||
_deviceTypeId = deviceTypeId;
|
||||
|
||||
if (MeyPin != NULL)
|
||||
;
|
||||
MeyPin->ForEach(SetupMeyPin);
|
||||
|
||||
if (CanBusses != NULL) {
|
||||
CanBusses->ForEach(InitCanInterface, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void AddCanInterface(byte pinId) {
|
||||
MCP2515 *newCanInterface = new MCP2515(pinId);
|
||||
CanInterface *canInterface = new CanInterface();
|
||||
canInterface->interface = newCanInterface;
|
||||
|
||||
if (CanBusses == NULL)
|
||||
CanBusses = canInterface;
|
||||
else
|
||||
CanBusses->AddCanInterface(canInterface);
|
||||
}
|
||||
|
||||
void AddLocalPinChangedHandler(void (*localPinChangedHandler)(can_frame *frame)) {
|
||||
LocalPinChangedHandler = localPinChangedHandler;
|
||||
}
|
||||
|
||||
void SetDevicedId(byte high, byte low) {
|
||||
myDeviceId = (high << 8) | low;
|
||||
}
|
||||
|
||||
void SetMeyPin(byte meyPinId, byte pinId) {
|
||||
PinState *newState = new PinState();
|
||||
newState->Init(pinId, (byte)meyPinId);
|
||||
|
||||
if (MeyPin == NULL)
|
||||
MeyPin = newState;
|
||||
else
|
||||
MeyPin->AddPinState(newState);
|
||||
}
|
||||
|
||||
|
||||
bool CheckPinStatus(PinState *state) {
|
||||
if (!state->is_input)
|
||||
return false;
|
||||
|
||||
bool newValue = ReadPin(state);
|
||||
|
||||
|
||||
if (newValue != state->pin_state) {
|
||||
delay(10);
|
||||
newValue = ReadPin(state);
|
||||
if (newValue != state->pin_state) {
|
||||
state->pin_state = newValue;
|
||||
SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CheckMeyPinsTriggered() {
|
||||
MeyPin->ForEach(CheckPinStatus);
|
||||
}
|
||||
|
||||
bool ReadPin(PinState *state) {
|
||||
return digitalRead(state->pin_id);
|
||||
}
|
||||
|
||||
|
||||
void HandleFrame(can_frame *frame, MCP2515 *source) {
|
||||
CanBusses->ForEach(DoSendCanPkg, frame, source);
|
||||
HandleTriggerMeypinCanPackage(frame);
|
||||
}
|
||||
|
||||
void HandleTriggerMeypinCanPackage(can_frame *frame) {
|
||||
|
||||
|
||||
if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID) {
|
||||
|
||||
|
||||
uint16_t adressedDeviceId = ((uint16_t)frame->data[0] << 8) | frame->data[1];
|
||||
if (adressedDeviceId != myDeviceId) return;
|
||||
|
||||
|
||||
byte meyPinId = frame->data[2];
|
||||
bool state = frame->data[3] > 0;
|
||||
|
||||
PinState *adressedPin = MeyPin->Find(meyPinId);
|
||||
|
||||
if (adressedPin != NULL) {
|
||||
if (adressedPin->is_input == true) {
|
||||
pinMode(adressedPin->pin_id, OUTPUT);
|
||||
adressedPin->is_input = false;
|
||||
}
|
||||
|
||||
bool pinChanged = adressedPin->pin_state != state;
|
||||
adressedPin->pin_state = state;
|
||||
|
||||
if (pinChanged) {
|
||||
digitalWrite(adressedPin->pin_id, state);
|
||||
SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
byte CircularShift(byte b) {
|
||||
return (b << 1) | (b >> 7 & 1);
|
||||
}
|
||||
|
||||
uint16_t GetDeviceId(uint32_t canFrameId) {
|
||||
return canFrameId & 0xFFFF;
|
||||
}
|
||||
|
||||
uint16_t GetPackageType(uint32_t canFrameId) {
|
||||
return (canFrameId / 0x10000) & 0xFFF;
|
||||
}
|
||||
|
||||
|
||||
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 = 5;
|
||||
|
||||
toSend.data[0] = SOFTWARE_VERSION_HIGH;
|
||||
toSend.data[1] = SOFTWARE_VERSION_LOW;
|
||||
toSend.data[2] = _majorHardwareVersion;
|
||||
toSend.data[3] = _minorHardwareVersion;
|
||||
toSend.data[4] = _deviceTypeId;
|
||||
|
||||
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 BroadcastDebugPackage(uint8_t length, byte *data) {
|
||||
can_frame toSend;
|
||||
|
||||
toSend.can_id = CreateCanId(DEBUG_PKG_CAN_ID);
|
||||
toSend.can_dlc = length;
|
||||
for (int i = 0; i < length; i++) {
|
||||
toSend.data[i] = data[i];
|
||||
}
|
||||
|
||||
HandleFrame(&toSend, NULL);
|
||||
}
|
||||
void BroadcastDebugPackage(byte b0, byte b1) {
|
||||
byte data[2];
|
||||
data[0] = b0;
|
||||
data[1] = b1;
|
||||
BroadcastDebugPackage(2, data);
|
||||
}
|
||||
void BroadcastDebugPackage(byte b0, byte b1, byte b2) {
|
||||
byte data[3];
|
||||
data[0] = b0;
|
||||
data[1] = b1;
|
||||
data[2] = b2;
|
||||
BroadcastDebugPackage(3, data);
|
||||
}
|
||||
|
||||
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);
|
||||
if (LocalPinChangedHandler) {
|
||||
LocalPinChangedHandler(&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;
|
||||
}
|
||||
}
|
||||
139
Software/Switch/MeyCan.h
Normal file
139
Software/Switch/MeyCan.h
Normal file
@@ -0,0 +1,139 @@
|
||||
#ifndef MEYCAN_H
|
||||
#define MEYCAN_H
|
||||
|
||||
#include <SPI.h>
|
||||
#include <mcp2515.h>
|
||||
|
||||
typedef struct CanInterface
|
||||
{
|
||||
MCP2515 *interface;
|
||||
CanInterface *next = NULL;
|
||||
|
||||
void ForEachInterface(void (*handle)( MCP2515 *interface))
|
||||
{
|
||||
if (this->interface != NULL)
|
||||
handle(this->interface);
|
||||
|
||||
if (this->next != NULL)
|
||||
this->next->ForEachInterface(handle);
|
||||
}
|
||||
|
||||
void ForEach(void (*handle)( MCP2515 *interface, can_frame *frame), can_frame *frame, MCP2515* exclude = NULL)
|
||||
{
|
||||
if (this->interface != NULL && this->interface != exclude)
|
||||
handle(this->interface, frame);
|
||||
|
||||
if (this->next != NULL)
|
||||
this->next->ForEach(handle, frame, exclude);
|
||||
}
|
||||
|
||||
void AddCanInterface(CanInterface *newCanInterface)
|
||||
{
|
||||
if (next == NULL)
|
||||
{
|
||||
this->next = newCanInterface;
|
||||
newCanInterface->next = NULL;
|
||||
} else {
|
||||
next->AddCanInterface(newCanInterface);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct PinState
|
||||
{
|
||||
int pin_id;
|
||||
bool pin_state;
|
||||
bool is_input;
|
||||
byte meyPinId;
|
||||
PinState *next = NULL;
|
||||
|
||||
PinState() {}
|
||||
void Init(int pin_id, byte meyPinId)
|
||||
{
|
||||
this->pin_id = pin_id;
|
||||
this->pin_state = true;
|
||||
this->is_input = true;
|
||||
this->meyPinId = meyPinId;
|
||||
}
|
||||
|
||||
void AddPinState(PinState *nextPinState)
|
||||
{
|
||||
if (next == NULL)
|
||||
{
|
||||
this->next = nextPinState;
|
||||
nextPinState->next = NULL;
|
||||
} else {
|
||||
next->AddPinState(nextPinState);
|
||||
}
|
||||
}
|
||||
|
||||
PinState* Find(byte meyPinId)
|
||||
{
|
||||
if (this->meyPinId == meyPinId)
|
||||
return this;
|
||||
|
||||
if (this->next != NULL)
|
||||
return this->next->Find(meyPinId);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
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;
|
||||
const uint16_t DEBUG_PKG_CAN_ID = 0x0009;
|
||||
|
||||
void SetDevicedId(byte high, byte low);
|
||||
void SetMeyPin(byte meyPinId, byte pinId);
|
||||
|
||||
// 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 AddLocalPinChangedHandler(void (*localPinChangedHandler)(can_frame *frame));
|
||||
|
||||
|
||||
void AddCanInterface(byte pinId);
|
||||
|
||||
void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId);
|
||||
|
||||
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 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
|
||||
117
Software/Switch/MeyRule.cpp
Normal file
117
Software/Switch/MeyRule.cpp
Normal file
@@ -0,0 +1,117 @@
|
||||
#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->target.devId = targetDevId;
|
||||
rule->target.meyPinId = targetMeyPinId;
|
||||
rule->target.lastPinState = false;
|
||||
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->target.devId = targetDevId;
|
||||
rule->target.meyPinId = targetMeyPinId;
|
||||
rule->target.lastPinState = false;
|
||||
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->target.devId = targetDevId;
|
||||
rule->target.meyPinId = targetMeyPinId;
|
||||
rule->target.lastPinState = false;
|
||||
rule->toggle = true;
|
||||
rule->inverse = true;
|
||||
|
||||
PutRule(rule);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule) {
|
||||
|
||||
|
||||
RemotePinInfo *currentRemotePinInfo = remotePinInfo.FindOrAdd(rule->target.devId);
|
||||
|
||||
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)
|
||||
bool lastPinState = rule->target.lastPinState;
|
||||
bool pinState = dt > 0;
|
||||
|
||||
if (rule->triggeredOnce && lastPinState == pinState) return;
|
||||
|
||||
rule->target.lastPinState = pinState;
|
||||
rule->triggeredOnce = true;
|
||||
|
||||
if (rule->inverse)
|
||||
pinState = !pinState;
|
||||
|
||||
if (rule->toggle)
|
||||
pinState = (currentRemotePinInfo->getPinState(rule->target.meyPinId) ^ true);
|
||||
|
||||
currentRemotePinInfo->setPinState(rule->target.meyPinId, pinState);
|
||||
BroadcastTriggerMeyPinCanPackage(rule->target.devId, rule->target.meyPinId, 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 SetLocalPinState(can_frame *frame)
|
||||
{
|
||||
HandleTriggered(frame);
|
||||
}
|
||||
|
||||
void HandleRules(can_frame *frame) {
|
||||
|
||||
if (rules != NULL) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
HandleTriggered(frame);
|
||||
}
|
||||
107
Software/Switch/MeyRule.h
Normal file
107
Software/Switch/MeyRule.h
Normal file
@@ -0,0 +1,107 @@
|
||||
#ifndef MEYRULE_H
|
||||
#define MEYRULE_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <mcp2515.h>;
|
||||
|
||||
struct TargetPin{
|
||||
uint16_t devId;
|
||||
byte meyPinId;
|
||||
bool lastPinState = false;
|
||||
|
||||
};
|
||||
|
||||
struct Rule {
|
||||
uint16_t sourceDevId;
|
||||
byte sourceMeyPinId;
|
||||
TargetPin target = TargetPin();
|
||||
bool toggle;
|
||||
bool inverse;
|
||||
Rule *nextRule = NULL;
|
||||
bool triggeredOnce = false;
|
||||
|
||||
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 SetLocalPinState(can_frame *frame);
|
||||
|
||||
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
|
||||
117
Software/Switch/Switch.ino
Normal file
117
Software/Switch/Switch.ino
Normal file
@@ -0,0 +1,117 @@
|
||||
#include <SPI.h>;
|
||||
#include <mcp2515.h>;
|
||||
#include "MeyCan.h";
|
||||
#include "MeyRule.h";
|
||||
|
||||
#define PIN8 8
|
||||
#define PIN9 9
|
||||
|
||||
const int16_t SW_FLUR = 0XD238;
|
||||
const int16_t SW_ANBAU = 0x87A9;
|
||||
const int16_t SW_WOHNZIMMER = 0x87CA;
|
||||
const int16_t SW_TERRASSE = 0x618A;
|
||||
|
||||
|
||||
const int16_t UP_WOHNZIMMER_TUER = 0x051F; // [X X]
|
||||
const int16_t UP_WOHNZIMMER_TERASSE = 0x05df;
|
||||
const int16_t UP_FLUR_EINGANG = 0x0769; // [X]
|
||||
const int16_t UP_BUERO = 0x1177;
|
||||
const int16_t UP_FLUR_BUERO = 0x05A1; // [X]
|
||||
const int16_t UP_FLUR_KUECHE = 0x01EF;
|
||||
const int16_t UP_KINDERZIMMER = 0x0196; // [X X]
|
||||
const int16_t UP_FLUR_ELTERN = 0x0632;
|
||||
const int16_t UP_ELTERN = 0x08AE;
|
||||
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]
|
||||
|
||||
struct can_frame incomingCanFrame;
|
||||
|
||||
/*
|
||||
Software matching Hardware of meycan v8.1
|
||||
*/
|
||||
void setup() {
|
||||
SPI.begin();
|
||||
|
||||
|
||||
AddToggle(UP_WOHNZIMMER_TUER, 1, SW_WOHNZIMMER, 5);
|
||||
AddToggle(UP_WOHNZIMMER_TUER, 1, SW_WOHNZIMMER, 6);
|
||||
AddSimple(UP_WOHNZIMMER_TUER, 2, SW_WOHNZIMMER, 7);
|
||||
AddSimple(UP_WOHNZIMMER_TUER, 3, SW_WOHNZIMMER, 8);
|
||||
|
||||
|
||||
AddToggle(UP_KINDERZIMMER, 3, SW_FLUR, 6);
|
||||
AddToggle(UP_KINDERZIMMER, 3, SW_WOHNZIMMER, 2);
|
||||
AddToggle(UP_KINDERZIMMER, 2, SW_FLUR, 3);
|
||||
AddSimple(UP_KINDERZIMMER, 4, SW_FLUR, 4);
|
||||
AddSimple(UP_KINDERZIMMER, 1, SW_FLUR, 5);
|
||||
|
||||
|
||||
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_ELTERN, 1, SW_FLUR, 2);
|
||||
|
||||
AddToggle(UP_BUERO, 1, SW_WOHNZIMMER, 3);
|
||||
|
||||
AddToggle(UP_FLUR_BUERO, 1, SW_FLUR, 6);
|
||||
AddToggle(UP_FLUR_BUERO, 1, SW_WOHNZIMMER, 2);
|
||||
|
||||
AddToggle (UP_WOHNZIMMER_TERASSE, 1, SW_WOHNZIMMER, 7); // Licht 1 von Terassenschalter
|
||||
AddToggle (UP_WOHNZIMMER_TERASSE, 2, SW_WOHNZIMMER, 8); // Licht
|
||||
AddToggle (UP_WOHNZIMMER_TERASSE, 3, SW_TERRASSE, 2); // Pergola
|
||||
|
||||
/// RULE FOR SWITCH WOHNZIMMER (BOTH) OF TERASSE
|
||||
// AddSimple (UP_WOHNZIMMER_TERASSE, 3, SW_WOHNZIMMER, 5); // Eingangstür Flur Licht 2
|
||||
// AddSimple (UP_WOHNZIMMER_TERASSE, 3, SW_WOHNZIMMER, 6); // Eingangstür Flur Licht 2
|
||||
|
||||
|
||||
AddToggle(UP_KUECHE_ARBEITSPLATTE, 1, SW_ANBAU, 2);
|
||||
|
||||
AddToggle(UP_KUECHE_FLUR, 1, SW_ANBAU, 3);
|
||||
AddToggle(UP_KUECHE_FLUR, 2, SW_ANBAU, 2);
|
||||
AddToggle(UP_KUECHE_BAD, 1, SW_ANBAU, 3);
|
||||
AddToggle(UP_KUECHE_BAD, 2, SW_ANBAU, 1);
|
||||
AddToggle(UP_KUECHE_BAD, 3, SW_ANBAU, 4);
|
||||
|
||||
AddToggle(UP_FLUR_KUECHE, 1, SW_FLUR, 6);
|
||||
AddToggle(UP_FLUR_KUECHE, 1, SW_WOHNZIMMER, 2);
|
||||
|
||||
|
||||
SetMeyPin(1, PIN3);
|
||||
SetMeyPin(2, PIN5);
|
||||
SetMeyPin(3, PIN7);
|
||||
SetMeyPin(4, PIN9);
|
||||
SetMeyPin(5, PIN8);
|
||||
SetMeyPin(6, PIN6);
|
||||
SetMeyPin(7, PIN4);
|
||||
SetMeyPin(8, PIN2);
|
||||
|
||||
SetDevicedId(0x87, 0xCA);
|
||||
AddLocalPinChangedHandler(SetLocalPinStateAdapter);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -1,514 +0,0 @@
|
||||
#include <SPI.h>;
|
||||
#include <mcp2515.h>;
|
||||
|
||||
const byte SoftwareVersionHigh = 3;
|
||||
const byte SoftwareVersionLow = 0;
|
||||
const byte HardwareVersionHigh = 6;
|
||||
const byte HardwareVersionLow = 0;
|
||||
const uint32_t HELP_PACKAGE_CAN_ID = 0xFFFF;
|
||||
const uint32_t SWITCH_TRIGGERED_CAN_ID = 0x050;
|
||||
const uint32_t TRIGGER_SWITCH_CAN_ID = 0x055;
|
||||
const uint32_t DEBUG_CAN_ID = 0x000;
|
||||
|
||||
struct can_frame _frame;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t sourceDevId;
|
||||
byte sourceMeyPinId;
|
||||
uint32_t targetDevId;
|
||||
byte targetMeyPinId;
|
||||
bool toggle;
|
||||
bool inverse;
|
||||
|
||||
void InitSimple(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId)
|
||||
{
|
||||
this->sourceDevId = sourceDevId;
|
||||
this->sourceMeyPinId = sourceMeyPinId;
|
||||
this->targetDevId = targetDevId;
|
||||
this->targetMeyPinId = targetMeyPinId;
|
||||
toggle = false;
|
||||
inverse = false;
|
||||
}
|
||||
|
||||
void InitToggle(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId)
|
||||
{
|
||||
this->sourceDevId = sourceDevId;
|
||||
this->sourceMeyPinId = sourceMeyPinId;
|
||||
this->targetDevId = targetDevId;
|
||||
this->targetMeyPinId = targetMeyPinId;
|
||||
toggle = true;
|
||||
inverse = false;
|
||||
}
|
||||
|
||||
void InitToggleInverse(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId)
|
||||
{
|
||||
this->sourceDevId = sourceDevId;
|
||||
this->sourceMeyPinId = sourceMeyPinId;
|
||||
this->targetDevId = targetDevId;
|
||||
this->targetMeyPinId = targetMeyPinId;
|
||||
toggle = true;
|
||||
inverse = true;
|
||||
}
|
||||
} Rule;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int pin_id;
|
||||
bool pin_state;
|
||||
bool is_input;
|
||||
byte meyPinId;
|
||||
|
||||
PinState() {}
|
||||
void Init(int pin_id, byte meyPinId)
|
||||
{
|
||||
this->pin_id = pin_id;
|
||||
this->pin_state = true;
|
||||
this->is_input = true;
|
||||
this->meyPinId = meyPinId;
|
||||
}
|
||||
} PinState;
|
||||
|
||||
struct RemotePinInfo
|
||||
{
|
||||
const byte MAX_REMOTE_PIN_COUNT = 50;
|
||||
uint16_t DeviceId = 0; // the id of the device
|
||||
uint16_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;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct RemotePinInfo remotePinInfos = RemotePinInfo();
|
||||
PinState MeyPins[8];
|
||||
|
||||
bool flag = false;
|
||||
int16_t myDeviceId;
|
||||
|
||||
Rule Rules[16];
|
||||
|
||||
MCP2515 mcp2515_0(PIN_PA2);
|
||||
MCP2515 mcp2515_1(PIN_PA3);
|
||||
MCP2515 mcp2515_2(PIN_PB0);
|
||||
MCP2515 mcp2515_3(PIN_PB1);
|
||||
|
||||
void setup() {
|
||||
SPI.begin();
|
||||
|
||||
|
||||
|
||||
Rules[0] = Rule();
|
||||
Rules[0].InitToggleInverse(0x051F, 5, 0x3D2D, 4); // Lichtschalter Wohnzimmer Licht 1
|
||||
Rules[1] = Rule();
|
||||
Rules[1].InitToggleInverse(0x051F, 5, 0x3D2D, 3); // Lichtschalter Wohnzimmer Licht 2
|
||||
|
||||
Rules[2] = Rule();
|
||||
Rules[2].InitToggle(0x05df, 1, 0x3D2D, 4); // Licht 1 von Terassenschalter
|
||||
Rules[3] = Rule();
|
||||
Rules[3].InitToggle(0x05df, 1, 0x3D2D, 3); // Licht 2 von Terassenschalter
|
||||
|
||||
Rules[4] = Rule();
|
||||
Rules[4].InitToggle(0x0769, 1, 0x3D2D, 6); // Eingangstür Flur Licht 2
|
||||
Rules[5] = Rule();
|
||||
Rules[5].InitToggle(0x0769, 1, 0x9829, 1); //Eingangstür Flur Licht 1
|
||||
|
||||
Rules[6] = Rule();
|
||||
Rules[6].InitSimple(0x051F, 3,0x3D2D, 1); // Licht 1 Wochzimmer Eingangstür
|
||||
Rules[7] = Rule();
|
||||
Rules[7].InitSimple(0x051F, 4,0x3D2D, 2); // Licht 2 Wochzimmer Eingangstür
|
||||
|
||||
Rules[8] = Rule();
|
||||
Rules[8].InitToggle(0x1177, 1, 0x3D2D, 7); // Licht Papa Büro
|
||||
|
||||
Rules[9] = Rule();
|
||||
Rules[9].InitToggle(0x05A1, 1,0x3D2D, 6); // Flurlicht von Papas Büro
|
||||
|
||||
Rules[10] = Rule();
|
||||
Rules[10].InitToggle(0x05A1, 1,0x9829, 1); // Flurlicht von Papas Büro
|
||||
|
||||
Rules[11] = Rule();
|
||||
Rules[11].InitToggle(0x01EF, 1,0x3D2D, 6); // Flurlicht von Papas Büro
|
||||
Rules[12] = Rule();
|
||||
Rules[12].InitToggle(0x01EF, 1,0x9829, 1); // Flurlicht von Papas Büro#
|
||||
|
||||
Rules[13] = Rule();
|
||||
Rules[13].InitToggle(0x0196, 3,0x3D2D, 6); // Flurlicht von Papas Büro
|
||||
|
||||
Rules[14] = Rule();
|
||||
Rules[14].InitToggle(0x0196, 3,0x9829, 1); // Flurlicht von Papas Büro
|
||||
|
||||
Rules[15] = Rule();
|
||||
Rules[15].InitToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro
|
||||
|
||||
delay(10);
|
||||
MeyPins[0] = PinState();
|
||||
MeyPins[0].Init(PIN_PC7, (byte) 1);
|
||||
|
||||
MeyPins[1] = PinState();
|
||||
MeyPins[1].Init(PIN_PC6, (byte) 2);
|
||||
|
||||
MeyPins[2] = PinState();
|
||||
MeyPins[2].Init(PIN_PC5, (byte) 3);
|
||||
|
||||
MeyPins[3] = PinState();
|
||||
MeyPins[3].Init(PIN_PC4, (byte) 4);
|
||||
|
||||
MeyPins[4] = PinState();
|
||||
MeyPins[4].Init(PIN_PC3, (byte) 5);
|
||||
|
||||
MeyPins[5] = PinState();
|
||||
MeyPins[5].Init(PIN_PC2, (byte) 6);
|
||||
|
||||
MeyPins[6] = PinState();
|
||||
MeyPins[6].Init(PIN_PC1, (byte) 7);
|
||||
|
||||
MeyPins[7] = PinState();
|
||||
MeyPins[7].Init(PIN_PC0, (byte) 8);
|
||||
|
||||
|
||||
|
||||
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7);
|
||||
|
||||
|
||||
mcp2515_0.reset();
|
||||
mcp2515_0.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
|
||||
mcp2515_0.setNormalMode();
|
||||
|
||||
mcp2515_1.reset();
|
||||
mcp2515_1.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
|
||||
mcp2515_1.setNormalMode();
|
||||
|
||||
mcp2515_2.reset();
|
||||
mcp2515_2.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
|
||||
mcp2515_2.setNormalMode();
|
||||
|
||||
mcp2515_3.reset();
|
||||
mcp2515_3.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
|
||||
mcp2515_3.setNormalMode();
|
||||
|
||||
for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++)
|
||||
{
|
||||
pinMode(MeyPins[i].pin_id, OUTPUT);
|
||||
|
||||
digitalWrite(MeyPins[i].pin_id, LOW);
|
||||
|
||||
}
|
||||
CalculateMyDeviceId();
|
||||
|
||||
SendSerialPackage(&mcp2515_0);
|
||||
SendSerialPackage(&mcp2515_1);
|
||||
SendSerialPackage(&mcp2515_2);
|
||||
SendSerialPackage(&mcp2515_3);
|
||||
|
||||
}
|
||||
|
||||
bool debugState = false;
|
||||
void ToggleDebug()
|
||||
{
|
||||
debugState = debugState^true;
|
||||
if (debugState)
|
||||
digitalWrite(PIN_PC1, HIGH);
|
||||
else
|
||||
digitalWrite(PIN_PC1, LOW);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
if (mcp2515_0.readMessage(&_frame) == MCP2515::ERROR_OK)
|
||||
{
|
||||
mcp2515_1.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_2.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_3.sendMessage(MCP2515::TXB1, &_frame);
|
||||
HandleFrame(&_frame);
|
||||
}
|
||||
if (mcp2515_1.readMessage(&_frame) == MCP2515::ERROR_OK)
|
||||
{
|
||||
mcp2515_0.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_2.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_3.sendMessage(MCP2515::TXB1, &_frame);
|
||||
HandleFrame(&_frame);
|
||||
}
|
||||
if (mcp2515_2.readMessage(&_frame) == MCP2515::ERROR_OK)
|
||||
{
|
||||
mcp2515_0.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_1.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_3.sendMessage(MCP2515::TXB1, &_frame);
|
||||
HandleFrame(&_frame);
|
||||
}
|
||||
if (mcp2515_3.readMessage(&_frame) == MCP2515::ERROR_OK)
|
||||
{
|
||||
mcp2515_0.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_1.sendMessage(MCP2515::TXB1, &_frame);
|
||||
mcp2515_2.sendMessage(MCP2515::TXB1, &_frame);
|
||||
HandleFrame(&_frame);
|
||||
}
|
||||
}
|
||||
|
||||
void HandleFrame(can_frame *frame)
|
||||
{
|
||||
// ToggleDebug();
|
||||
HandleMeyPinTriggeredCanPackage(frame);
|
||||
HandleTriggerMeypinCanPackage(frame);
|
||||
// Handle rules needs to be the last call
|
||||
HandleRules(frame);
|
||||
}
|
||||
|
||||
// this method will save the state of the triggered pin to be present for the rules
|
||||
void HandleMeyPinTriggeredCanPackage(can_frame *frame)
|
||||
{
|
||||
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
|
||||
{
|
||||
|
||||
RemotePinInfo *currentPinState = remotePinInfos.FindOrAdd(GetDeviceId(frame->can_id) );
|
||||
|
||||
|
||||
if (currentPinState == NULL)
|
||||
{
|
||||
int16_t test2[3];
|
||||
test2[0] = 'S';
|
||||
test2[1] = 'O';
|
||||
test2[2] = 'S';
|
||||
// SendDebugCanPackage(&mcp2515_3, test2, sizeof(test2) / sizeof(int16_t));
|
||||
return;
|
||||
}
|
||||
|
||||
int16_t test[1];
|
||||
test[0] = remotePinInfos.Count();
|
||||
// SendDebugCanPackage(&mcp2515_3, test, sizeof(test) / sizeof(int16_t));
|
||||
|
||||
currentPinState->setPinState(frame->data[0], frame->data[1]);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void HandleTriggerMeypinCanPackage(can_frame *frame)
|
||||
{
|
||||
if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID && (GetDeviceId(frame->can_id) == GetMyDeviceId()))
|
||||
{
|
||||
int meyPinId = frame->data[2];
|
||||
bool state = frame->data[3] > 0;
|
||||
|
||||
PinState *adressedPin;
|
||||
for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++)
|
||||
if (MeyPins[i].meyPinId == meyPinId)
|
||||
{
|
||||
adressedPin = &MeyPins[i];
|
||||
break;
|
||||
}
|
||||
|
||||
if (adressedPin != NULL)
|
||||
{
|
||||
if (adressedPin->is_input == true)
|
||||
{
|
||||
pinMode(adressedPin->pin_id, OUTPUT);
|
||||
adressedPin->is_input = false;
|
||||
}
|
||||
adressedPin->pin_state = state;
|
||||
digitalWrite(adressedPin->pin_id, state);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void HandleRules(can_frame *frame)
|
||||
{
|
||||
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];
|
||||
|
||||
for (int i = 0; i < sizeof(Rules) / sizeof(Rule); i++)
|
||||
{
|
||||
if ( Rules[i].sourceDevId == deviceId)
|
||||
if (Rules[i].sourceMeyPinId == state)
|
||||
HandleRule(&Rules[i], dt );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandleRule(Rule *rule, byte state)
|
||||
{
|
||||
struct RemotePinInfo *currentPinState = remotePinInfos.FindOrAdd(rule->targetDevId);
|
||||
|
||||
if (currentPinState == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int pinState = state > 0;
|
||||
if (rule->inverse)
|
||||
pinState = !pinState;
|
||||
|
||||
|
||||
if (rule->toggle)
|
||||
{
|
||||
pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true) > 0;
|
||||
}
|
||||
|
||||
SendDoTriggerSwitchCanPackage(&mcp2515_0, rule->targetDevId, rule->targetMeyPinId, pinState);
|
||||
SendDoTriggerSwitchCanPackage(&mcp2515_1, rule->targetDevId, rule->targetMeyPinId, pinState);
|
||||
SendDoTriggerSwitchCanPackage(&mcp2515_2, rule->targetDevId, rule->targetMeyPinId, pinState);
|
||||
SendDoTriggerSwitchCanPackage(&mcp2515_3, rule->targetDevId, rule->targetMeyPinId, pinState);
|
||||
//digitalWrite(foundPinId->pin_id, pinState);
|
||||
//foundPinId->pin_state = pinState;
|
||||
|
||||
HandleFrame(&_frame);
|
||||
currentPinState->setPinState(rule->targetMeyPinId, pinState);
|
||||
|
||||
}
|
||||
|
||||
byte CircularShift(byte b)
|
||||
{
|
||||
return (b << 1) | (b >> 7 & 1);
|
||||
}
|
||||
|
||||
uint16_t GetDeviceId(uint32_t canFrameId)
|
||||
{
|
||||
return canFrameId & 0xFFFF;
|
||||
}
|
||||
|
||||
uint32_t GetPackageType(uint32_t canFrameId)
|
||||
{
|
||||
return (canFrameId / 0x10000) & 0xFFF;
|
||||
}
|
||||
|
||||
uint32_t CreateCanId(uint16_t commandId)
|
||||
{
|
||||
return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG;
|
||||
}
|
||||
|
||||
uint32_t CreateCanId(uint16_t commandId, uint16_t deviceId)
|
||||
{
|
||||
return ((commandId & 0xFFF) * 0x10000) | deviceId | CAN_EFF_FLAG;
|
||||
}
|
||||
|
||||
void CalculateMyDeviceId()
|
||||
{
|
||||
myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow();
|
||||
}
|
||||
|
||||
uint16_t GetMyDeviceId()
|
||||
{
|
||||
return myDeviceId;
|
||||
}
|
||||
|
||||
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)))));
|
||||
}
|
||||
|
||||
void SendSerialPackage(MCP2515 *interface)
|
||||
{
|
||||
_frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID);
|
||||
_frame.can_dlc = 4;
|
||||
|
||||
_frame.data[0] = SoftwareVersionHigh;
|
||||
_frame.data[1] = SoftwareVersionLow;
|
||||
_frame.data[2] = HardwareVersionHigh;
|
||||
_frame.data[3] = HardwareVersionLow;
|
||||
interface->sendMessage(MCP2515::TXB1, &_frame);
|
||||
}
|
||||
|
||||
void SendSwitchedTriggeredCanPackage(MCP2515 *interface, byte pinId, int state)
|
||||
{
|
||||
_frame.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID);
|
||||
_frame.can_dlc = 2;
|
||||
_frame.data[0] = pinId;
|
||||
_frame.data[1] = state;
|
||||
interface->sendMessage(MCP2515::TXB1, &_frame);
|
||||
}
|
||||
|
||||
|
||||
void SendDoTriggerSwitchCanPackage(MCP2515 *interface, uint16_t targetCanId, byte pinId, byte state)
|
||||
{
|
||||
_frame.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID, targetCanId);
|
||||
_frame.can_dlc = 4;
|
||||
_frame.data[0] = (targetCanId & 0xFF00) >> 8;
|
||||
_frame.data[1] = targetCanId & 0xFF;
|
||||
_frame.data[2] = pinId;
|
||||
_frame.data[3] = state;
|
||||
interface->sendMessage(MCP2515::TXB1, &_frame);
|
||||
}
|
||||
|
||||
void SendDebugCanPackage(MCP2515 *interface, int16_t *data, int len)
|
||||
{
|
||||
can_frame frame = can_frame();
|
||||
frame.can_id = 0;
|
||||
frame.can_id = CreateCanId(DEBUG_CAN_ID);
|
||||
|
||||
|
||||
frame.can_dlc = len * 2;
|
||||
|
||||
for (int i = 0; i < frame.can_dlc / 2; i++)
|
||||
{
|
||||
frame.data[2 * i] = ((byte[])data)[2 * i + 1];
|
||||
frame.data[2 * i + 1] = ((byte[])data)[2 * i];
|
||||
}
|
||||
|
||||
interface->sendMessage(MCP2515::TXB1, &frame);
|
||||
}
|
||||
@@ -1,318 +0,0 @@
|
||||
:1000000050C0000073C0000071C000006FC000004D
|
||||
:100010006DC000006BC0000069C0000067C0000038
|
||||
:1000200065C0000063C0000061C000005FC0000048
|
||||
:100030005DC000005BC0000059C0000057C0000058
|
||||
:1000400055C0000053C0000051C000004FC0000068
|
||||
:100050004DC000004BC0000049C0000047C0000078
|
||||
:1000600045C00000A8C6000041C000003FC000001D
|
||||
:100070003DC000003BC0000039C0000037C0000098
|
||||
:1000800035C0000033C0000031C000002FC00000A8
|
||||
:100090002DC000002BC0000029C0000027C00000B8
|
||||
:1000A000110711241FBECFEFCDBFDFE3DEBF1CE37E
|
||||
:1000B000A0E0BCE3E0EBF3E102C005900D92AE30AE
|
||||
:1000C000B107D9F72CE3AEE0BCE301C01D92A43721
|
||||
:1000D000B207E1F710E0C1E5D0E003C02197FE01CF
|
||||
:1000E000C9D7C035D107D1F7B6D604C989CF90E0BA
|
||||
:1000F000FC01E957FC4A20812F3F51F0825A9C4A6B
|
||||
:10010000DC01EC91B0E2EB9FF0011124FC5F218354
|
||||
:10011000089580912D3C811117C010922E3C1092B1
|
||||
:100120002F3C1092303C1092313C1092323C109295
|
||||
:10013000333C1092343C1092353C1092363C109275
|
||||
:10014000373C81E080932D3C8091E3058C7F90913A
|
||||
:100150002C3C892B8093E305911117C084E0C7DF05
|
||||
:1001600086E0C5DF8091C10884608093C1088091DA
|
||||
:10017000C00881628093C0089091673C8091683C80
|
||||
:100180009093C0088093C1080895913021F48EE0C7
|
||||
:10019000AEDF80E1E6CF923029F78EE1A8DF80E282
|
||||
:1001A000E0CF00008093C4088091C30887FFFCCF94
|
||||
:1001B0008091C4080895282F30E0F901E957FC4ADE
|
||||
:1001C00040814F3F09F450C0893258F4F901EC5F87
|
||||
:1001D000FC4AE081EE2329F0E13099F010F0E6309E
|
||||
:1001E00020F1F901E25AFC4AE081A0E2EA9FF00125
|
||||
:1001F0001124FC5F8081842321F1611120C046839A
|
||||
:100200000895F901EB5CFC4A5081533008F05F5FC0
|
||||
:100210007091010A81E090E001C0880F5A95EAF7D9
|
||||
:10022000809587238093010ADCCF80E1E89FF0016D
|
||||
:100230001124E05AF54F81818F7E8183D2CF45838F
|
||||
:1002400008952B5C3C4AD9018C91309771F08F3F17
|
||||
:1002500061F07096E80FF11D9FB7F89480816111ED
|
||||
:1002600007C0877F80839FBF0895F0E0E0E0F4CF70
|
||||
:100270008860F8CF8FB7F8942091103C3091113CF2
|
||||
:100280004091123C5091133CE091AA0AF091AB0AC4
|
||||
:100290009091A60A90FF08C02F5F3F4F4F4F5F4FCE
|
||||
:1002A000E091AA0AF091AB0A8FBFA8EEB3E0AFD6F7
|
||||
:1002B00023E0F695E7952A95E1F76E0F7F1F811DE4
|
||||
:1002C000911D0895CF92DF92EF92FF92D3DF6B01E1
|
||||
:1002D0007C0120E1C20E27E2D21EE11CF11C80E16C
|
||||
:1002E000C81687E2D806E104F10430F4C3DFC6166D
|
||||
:1002F000D706E806F906D0F3BDDF6C157D058E053F
|
||||
:100300009F05D0F3FF90EF90DF90CF9008958F92EC
|
||||
:100310009F92AF92BF92CF92DF92EF92FF920F9394
|
||||
:10032000CF93DF93FC018081893210F461E043DFD9
|
||||
:1003300080912E3C882319F081FF0DC07894DF91C5
|
||||
:10034000CF910F91FF90EF90DF90CF90BF90AF9043
|
||||
:100350009F908F90089580FFF2CF8090303C9090D6
|
||||
:10036000313CA090323CB090333CC12CD12C760172
|
||||
:10037000E0E09401A501B601C701A0E06FD681F1CC
|
||||
:10038000217030E040E050E060E070E080E090E01C
|
||||
:1003900065D6D1F0B0E0A0E0E03370F4AE2FA695C2
|
||||
:1003A000A695A695F0E2AF9FD0011124A05FBB4FA8
|
||||
:1003B0008E2F8770A80FB11DCE2FD0E0C85DD34C13
|
||||
:1003C00088899C91892B8C939401A501B601C70162
|
||||
:1003D00001E029D649015A016B017C01EF5FC9CFC9
|
||||
:1003E0008090343C9090353CA090363CB090373CA7
|
||||
:1003F000C12CD12C7601E0E29401A501B601C70120
|
||||
:10040000A0E02CD609F49BCF217030E040E050E012
|
||||
:1004100060E070E080E090E021D6D1F0B0E0A0E0B4
|
||||
:10042000E03370F4AE2FA695A695A69580E2A89F1E
|
||||
:10043000D0011124A05FBB4F8E2F8770A80FB11D74
|
||||
:10044000CE2FD0E0C85DD34C88899C91892B8C93AA
|
||||
:100450009401A501B601C70101E0E5D549015A01A2
|
||||
:100460006B017C01EF5FC8CFE0E0F1E14481968150
|
||||
:10047000308522858485990F911D990F9427330F1C
|
||||
:10048000311D330F311D9327229520FB279527F926
|
||||
:100490009227829589270895E0E0F1E143819581D3
|
||||
:1004A000378121858385990F911D990F9427330FEB
|
||||
:1004B000311D330F311D9327229520FB279527F9F6
|
||||
:1004C0009227829589270895CF92DF92EF92FF922B
|
||||
:1004D000CF93DF9361E085E16EDEC090183CD09051
|
||||
:1004E000193CE0901A3CF0901B3CC7019F7080358E
|
||||
:1004F000910571F5A60180E0C0E0DCE398819817D2
|
||||
:1005000038F129813A81232B31F42B813C81232B33
|
||||
:1005100011F449835A8329813A8142175307F9F02C
|
||||
:100520002D813E812115310519F08F5FE901E6CF5C
|
||||
:1005300087E090E0B1D5FC0182E3808313821482CE
|
||||
:1005400015821682C182D282ED83FE83309741F4F8
|
||||
:10055000DF91CF91FF90EF90DF90CF900895FE0153
|
||||
:10056000438154812091203C2150330B81E090E065
|
||||
:1005700002C0880F991F2A95E2F72091213C22237F
|
||||
:1005800029F0842B952B83839483E2CF80959095DB
|
||||
:1005900084239523F8CF6F927F928F929F92AF9290
|
||||
:1005A000BF92CF92DF92EF92FF920F93CF93DF93A0
|
||||
:1005B0003C0180912E3C882319F081FF1BC0F894E8
|
||||
:1005C00081E38093C00884E08093C108F3018081B7
|
||||
:1005D000893208F09CC060E0DF91CF910F91FF90CD
|
||||
:1005E000EF90DF90CF90BF90AF909F908F907F90D3
|
||||
:1005F0006F90E1CD80FFE4CF8090303C9090313C13
|
||||
:10060000A090323CB090333CC12CD12C7601B0E0AC
|
||||
:100610009401A501B601C701A0E020D591F1217098
|
||||
:1006200030E040E050E060E070E080E090E016D51F
|
||||
:10063000E1F0D0E0C0E0B03370F4CB2FC695C695A2
|
||||
:10064000C69580E2C89FE0011124C05FDB4F8B2F6D
|
||||
:100650008770C80FD11D8B2F90E02881885D934C47
|
||||
:10066000FC01208B8881887F88839401A501B601D5
|
||||
:10067000C70101E0D8D449015A016B017C01BF5F79
|
||||
:10068000C7CF8090343C9090353CA090363CB090E1
|
||||
:10069000373CC12CD12C7601B0E29401A501B60102
|
||||
:1006A000C701A0E0DBD409F48BCF217030E040E03B
|
||||
:1006B00050E060E070E080E090E0D0D4E1F0D0E085
|
||||
:1006C000C0E0B03370F4CB2FC695C695C695F0E266
|
||||
:1006D000CF9FE0011124C05FDB4F8B2F8770C80FC5
|
||||
:1006E000D11D8B2F90E02881885D934CFC01208BDD
|
||||
:1006F0008881887F88839401A501B601C70101E044
|
||||
:1007000092D449015A016B017C01BF5FC6CFDF91D2
|
||||
:10071000CF910F91FF90EF90DF90CF90BF90AF906F
|
||||
:100720009F908F907F906F900895FF920F931F93EB
|
||||
:10073000CF93DF93EC01F62E042F122F2CDF85E0F0
|
||||
:1007400030DD8F2D2EDD802F2CDD812F2ADDCE0197
|
||||
:10075000DF91CF911F910F91FF90D9CDDF92EF9252
|
||||
:10076000FF920F931F93CF93DF937C01C62FD42E5C
|
||||
:10077000152F022F10DF82E014DD8C2F12DDCD2D1E
|
||||
:10078000D12F0C0F1D2F111DC017D10719F0899102
|
||||
:1007900008DDFACFC701DF91CF911F910F91FF9034
|
||||
:1007A000EF90DF90B4CD0F931F93CF93DF93EC01C5
|
||||
:1007B000062F142FF0DE82E0F4DC802FF2DC812F94
|
||||
:1007C000F0DCCE01DF91CF911F910F91A0CDDF9290
|
||||
:1007D000EF92FF920F931F93CF93DF937C01C62F6D
|
||||
:1007E000D42E152F022FD7DE83E0DBDC8C2FD9DC53
|
||||
:1007F000CD2DD12F0C0F1D2F111DC017D10721F0AA
|
||||
:1008000080E0CFDC8993F9CFC701DF91CF911F91B1
|
||||
:100810000F91FF90EF90DF907ACD1F93CF93DF93EE
|
||||
:10082000EC01162FB8DE83E0BCDC812FBADC80E05F
|
||||
:10083000B8DC182FCE016BDD812FDF91CF911F9196
|
||||
:1008400008954F925F926F927F928F929F92AF9294
|
||||
:10085000BF92CF92DF92EF92FF921F93CF93DF93DD
|
||||
:10086000CDB7DEB72D97CDBFDEBF10911C3C193040
|
||||
:1008700008F061C04091183C5091193C60911A3CBD
|
||||
:1008800070911B3C6A017B01CC24F7FCC394DD24EE
|
||||
:10089000EE24FF244A015B0188249924AA2420E441
|
||||
:1008A000B22244244A94542C642CBFE17B2EC11004
|
||||
:1008B00006C044244A94A7E05A2E612C712C44218E
|
||||
:1008C000552166217721CC20C9F14C835B83AB0194
|
||||
:1008D00066277727242F23702860342F330F330F98
|
||||
:1008E000330F307E232B2A83F5E056954795FA95F2
|
||||
:1008F000E1F74983212F89288A288B2809F0206471
|
||||
:100900007C012D83412F50E060E27CE3CE0106960E
|
||||
:10091000E8D425E0210FAE014F5F5F4F61E4C701CE
|
||||
:100920001DDF28E048E060E4C701FFDE60E4C701A6
|
||||
:1009300074DF807789F084E090E010C09A0153E082
|
||||
:10094000369527955A95E1F729834295440F407EC5
|
||||
:100950004A831C821B82CECF90E080E02D96CDBFD3
|
||||
:10096000DEBFDF91CF911F91FF90EF90DF90CF908E
|
||||
:10097000BF90AF909F908F907F906F905F904F90BF
|
||||
:1009800008950F931F93CF93DF938C01C8E1DCE3AD
|
||||
:100990008091143C9091153CB0E0A0E0AF6FBF682F
|
||||
:1009A00088839983AA83BB8386E08C8393E09887AE
|
||||
:1009B00019868A871B8658DD8C876EDD8D87C80176
|
||||
:1009C000DF91CF911F910F913CCF9F92AF92BF9239
|
||||
:1009D000CF92DF92EF92FF920F931F93CF93DF930B
|
||||
:1009E000CDB7DEB72597CDBFDEBF5C018B01000F11
|
||||
:1009F000111F000F111FF801E35DFC4A25E0AE0155
|
||||
:100A00004F5F5F4F6181E3DE8A81C98098E0C99EB4
|
||||
:100A100060011124282F30E055E0359527955A952F
|
||||
:100A2000E1F7C20ED31E0D2C000CEE08FF0883FF69
|
||||
:100A300020C092E0CC0CDD1CEE1CFF1C9A95D1F777
|
||||
:100A40008370C80ED11CE11CF11CFE2CED2CDC2C9B
|
||||
:100A5000CC248B81C80ED11CE11CF11CFE2CED2C8A
|
||||
:100A6000DC2CCC248C81C80ED11CE11CF11C6894B8
|
||||
:100A7000F7F88D818F70982EE8E081E090E0E9151D
|
||||
:100A800028F1F801E35DFC4A6081C501C6DE83FF01
|
||||
:100A900002C06894F6F8C092183CD092193CE092DB
|
||||
:100AA0001A3CF0921B3C90921C3C035D1C4A292D81
|
||||
:100AB00040E25CE3F8016281C50189DE20E0F801D3
|
||||
:100AC00043816CE2C50131DE90E080E02596CDBF28
|
||||
:100AD000DEBFDF91CF911F910F91FF90EF90DF90DC
|
||||
:100AE000CF90BF90AF909F9008951F93CF93DF93C7
|
||||
:100AF000EC0151DD80EA55DB80E053DB182FCE019D
|
||||
:100B000006DC70E060E010FD04C011FF07C061E08A
|
||||
:100B100070E0CE01DF91CF911F9157CF85E090E03B
|
||||
:100B2000DF91CF911F910895CF92DF92EF92FF92C4
|
||||
:100B30001F93CF93DF93EC01162F262F40EE6FE02B
|
||||
:100B4000F4DD8FB7F894C090103CD090113CE09049
|
||||
:100B5000123CF090133C8FBF8AE0C80ED11CE11C00
|
||||
:100B6000F11C2FB7F8948091103C9091113CA0910A
|
||||
:100B7000123CB091133C2FBF8C159D05AE05BF05EF
|
||||
:100B800090F46EE0CE0149DE807E1813EACF81E05A
|
||||
:100B900091E0892790E0DF91CF911F91FF90EF9036
|
||||
:100BA000DF90CF90089580E0F3CF0F931F93CF9302
|
||||
:100BB000DF93EC0160E8B8DF8C01892B61F440E041
|
||||
:100BC0006AE2CE01F0DD40E969E2CE01ECDD42E807
|
||||
:100BD00068E2CE01E8DDC801DF91CF911F910F914E
|
||||
:100BE000089560E0A1CF7F928F929F92AF92BF92C3
|
||||
:100BF000CF92DF92EF92FF920F931F93CF93DF93E9
|
||||
:100C0000CDB7DEB7A297CDBFDEBF8C01C4DC80ECD0
|
||||
:100C1000C8DAC8017CDB56DBCE0101967C018EE090
|
||||
:100C2000F70111928A95E9F72EE0A70160E3C80168
|
||||
:100C300095DD2EE0A70160E4C80190DD2EE0A7015C
|
||||
:100C400060E5C8018BDD40E060E6C801ACDD40E056
|
||||
:100C500060E7C801A8DD43EA6BE2C801A4DD24E037
|
||||
:100C600047E660E6C80161DD21E047E660E7C801CC
|
||||
:100C70005CDD8CE0E8EFF2E5DE011F9601900D925D
|
||||
:100C80008A95E1F74E01FFE08F0E911CB12CA12C4B
|
||||
:100C900028E0722EF401E190F1904F0160E8C80164
|
||||
:100CA00043DF6C01892B09F065C0F2E0EF16F10417
|
||||
:100CB00009F472C058F4E114F10409F473C0EA9421
|
||||
:100CC000EF2889F0CC24C394D12C54C0E4E0EE1674
|
||||
:100CD000F10409F465C008F461C085E0E816F10488
|
||||
:100CE00089F768E101C064E091E0A916B10409F058
|
||||
:100CF0005BC01E8E1D8E7C8E1B8E24E0AE01455E79
|
||||
:100D00005F4FC8012BDDEFEFAE1ABE0AF6E0AF165B
|
||||
:100D1000B10409F0BFCF1F8E18A281E090E089A333
|
||||
:100D20009AA37E018FE1E80EF11C4E0193E2890E39
|
||||
:100D3000911C98E0792EF701A190B1907F0160E8B5
|
||||
:100D4000C801F2DE6C01892BA9F41E8E1D8E7C8EEB
|
||||
:100D50001B8EA114B10469F1AA94AB2809F0B2CF9B
|
||||
:100D600064E224E0AE01455E5F4FC801F7DC8E14FB
|
||||
:100D70009F0409F7C601A296CDBFDEBFDF91CF91D8
|
||||
:100D80001F910F91FF90EF90DF90CF90BF90AF90A9
|
||||
:100D90009F908F907F90089568E0A6CF60E1A4CFE8
|
||||
:100DA00064E1A2CF60E0A0CF1B8E1C8E1E8E1D8E34
|
||||
:100DB000A4CF60E2D6CF1F920F920FB60F921124EC
|
||||
:100DC0008F939F93AF93BF938091103C9091113C70
|
||||
:100DD000A091123CB091133C0196A11DB11D8093CE
|
||||
:100DE000103C9093113CA093123CB093133C81E0D3
|
||||
:100DF0008093A60ABF91AF919F918F910F900FBEE4
|
||||
:100E00000F901F9018951F93CF93DF93EC01162F2F
|
||||
:100E100080D91883812F6BD9CE01DF91CF911F919B
|
||||
:100E200076CAE7E6FCE384E0818381E38083E8E23D
|
||||
:100E3000FCE31582148262E08CE69CE3E4DF63E06D
|
||||
:100E40008BE69CE3E0DF68E08AE69CE3DCDF69E0B8
|
||||
:100E500089E69CE3D8CF91E088ED84BF9093610050
|
||||
:100E60008091020685608093020680910006816071
|
||||
:100E700080930006809102068F7C80658093020635
|
||||
:100E80001092E20582E08093E4059093030A8EEFCE
|
||||
:100E90008093270A8093260A80E880932D0A809306
|
||||
:100EA0002B0A8093290A80932C0A80932A0A809324
|
||||
:100EB000280A89E08093000A87E08093E505E0E84E
|
||||
:100EC000FAE037E02EEF90E885E0318324879587BC
|
||||
:100ED00080837096E03C4AE0F407B9F71092A10ACB
|
||||
:100EE0008FE39FE18093AC0A9093AD0A8091A50AAD
|
||||
:100EF00081608093A50A1092A00A8091A00A816067
|
||||
:100F00008093A00A789405D980916000806890E071
|
||||
:100F100028ED24BF809360008CE69CE364DE8CE6C1
|
||||
:100F20009CE343DE8CE69CE35CDE8BE69CE35BDECD
|
||||
:100F30008BE69CE33ADE8BE69CE353DE8AE69CE399
|
||||
:100F400052DE8AE69CE331DE8AE69CE34ADE89E6ED
|
||||
:100F50009CE349DE89E69CE328DE89E69CE341DEEA
|
||||
:100F600083DAC82F99DA9C2F8093143C9093153C18
|
||||
:100F70008CE69CE306DD8BE69CE303DD8AE69CE3DE
|
||||
:100F800000DD89E69CE3FDDCC0E0D0E08CE69CE37C
|
||||
:100F9000ACDD892B51F48BE69CE353DC8AE69CE3C1
|
||||
:100FA00050DC89E69CE34DDC8FDA8BE69CE39DDD2B
|
||||
:100FB000892B51F48CE69CE344DC8AE69CE341DC1B
|
||||
:100FC00089E69CE33EDC80DA8AE69CE38EDD892BB1
|
||||
:100FD00051F48CE69CE335DC8BE69CE332DC89E65D
|
||||
:100FE0009CE32FDC71DA89E69CE37FDD892B51F4E9
|
||||
:100FF0008CE69CE326DC8BE69CE323DC8AE69CE320
|
||||
:1010000020DC62DA5FD9209709F2FAD7BFCF38D057
|
||||
:10101000A59F900DB49F900DA49F800D911D11244C
|
||||
:10102000089597FD1094002E083098F00850232F53
|
||||
:10103000342F452F562F672F782F892F912DF4CFDE
|
||||
:101040001594979587957795679557954795379513
|
||||
:1010500027950A95AAF71124002D08950024A7FDCD
|
||||
:1010600000942A173005400550056005700580057D
|
||||
:1010700090050895EE0FFF1F0590F491E02D09945F
|
||||
:10108000A29FB001B39FC001A39F01D0B29F700D7A
|
||||
:10109000811D1124911D08950F931F93CF93DF930A
|
||||
:1010A0008230910510F482E090E0E091723CF09182
|
||||
:1010B000733C30E020E0B0E0A0E0309799F42115D7
|
||||
:1010C000310509F44AC0281B390B24303105D8F505
|
||||
:1010D0008A819B816115710589F1FB01828393836C
|
||||
:1010E000FE0111C0408151810281138148175907C7
|
||||
:1010F000E0F04817590799F4109761F012960C9395
|
||||
:10110000129713961C933296CF01DF91CF911F91C6
|
||||
:101110000F9108950093723C1093733CF4CF211506
|
||||
:10112000310551F04217530738F0A901DB019A014C
|
||||
:10113000BD01DF01F801C1CFEF01F9CF8093723C0F
|
||||
:101140009093733CCDCFFE01E20FF31F81939193F7
|
||||
:101150002250310928833983D7CF2091703C3091B8
|
||||
:10116000713C232B41F42091093C30910A3C20939F
|
||||
:10117000703C3093713C2091073C3091083C211524
|
||||
:10118000310541F42DB73EB740910B3C50910C3CDA
|
||||
:10119000241B350BE091703CF091713CE217F30792
|
||||
:1011A000A0F42E1B3F0B2817390778F0AC014E5FD7
|
||||
:1011B0005F4F2417350748F04E0F5F1F4093703C78
|
||||
:1011C0005093713C819391939FCFF0E0E0E09CCFEE
|
||||
:1011D000CF93DF930097E9F0FC01329712821382DC
|
||||
:1011E000A091723CB091733CED0130E020E010978B
|
||||
:1011F000A1F420813181820F931F2091703C3091A6
|
||||
:10120000713C2817390709F061C0E093703CF093F6
|
||||
:10121000713CDF91CF910895EA01CE17DF07E8F521
|
||||
:101220004A815B819E0141155105B1F7E901EA83CD
|
||||
:10123000FB8349915991C40FD51FEC17FD0761F449
|
||||
:10124000808191810296840F951FE901888399839B
|
||||
:10125000828193818A839B83F0E0E0E012968D91F6
|
||||
:101260009C9113970097B9F52D913C911197CD0161
|
||||
:101270000296820F931F2091703C3091713C281789
|
||||
:10128000390739F6309751F51092723C1092733C41
|
||||
:10129000A093703CB093713CBCCFC283D383408198
|
||||
:1012A0005181840F951FC817D90761F44E5F5F4FB6
|
||||
:1012B00088819981480F591F408351838A819B817E
|
||||
:1012C000828393832115310509F0B0CFE093723CFE
|
||||
:1012D000F093733C9ECFFD01DC01C0CF12821382DC
|
||||
:1012E000D7CFFB01DC0102C001900D92415050406C
|
||||
:0812F000D8F70895F894FFCF30
|
||||
:1012F80000000100020003000400050000000000D7
|
||||
:1013080000000000000000000005010101010101CA
|
||||
:1013180000000000000000000000000000000000C5
|
||||
:10132800000002030060616601707176020001022C
|
||||
:101338000304050607000102030405000102030473
|
||||
:101348000506070001020304050607000102030061
|
||||
:10135800010203040506000000000000000001016E
|
||||
:101368000101010102020202020202020303030355
|
||||
:101378000303030304040404050505050505050125
|
||||
:101388000204081020408001020408102001020411
|
||||
:101398000810204080010204081020408001020447
|
||||
:0813A8000801020408102040B6
|
||||
:0E13B000320000000000000000743C800000CD
|
||||
:00000001FF
|
||||
File diff suppressed because it is too large
Load Diff
68
Software/Testfälle.txt
Normal file
68
Software/Testfälle.txt
Normal file
@@ -0,0 +1,68 @@
|
||||
Testfälle Meycan Switch
|
||||
|
||||
PreCons for each:
|
||||
GIVEN XX XX is the deviceId of the target device
|
||||
GIVEN YY YY is another device id, which is NOT XX XX
|
||||
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)
|
||||
WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01 -> (MeyPin1 Should switch to on)
|
||||
THEN The MeyPin 1 should trigger
|
||||
THEN you receive a message 00 50 XX XX | 01 01
|
||||
THEN 2nd device should receive 2 messages
|
||||
* 00 50 XX XX | 01 01
|
||||
* 00 55 11 11 | XX XX 01 01
|
||||
|
||||
1a) A MeyPin trigger is effecltess, if only set
|
||||
GIVEN the above testcast
|
||||
WHEN Send CAN Pkg 00 55 11 11 | XX XX 01 01
|
||||
THEN Nothing changed
|
||||
THEN you dont receive a message
|
||||
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)
|
||||
THEN The MeyPin 1 should switch to OFF
|
||||
THEN you receive a message 00 50 XX XX | 01 00
|
||||
THEN 2nd device should receive 2 messages
|
||||
* 00 50 XX XX | 01 00
|
||||
* 00 55 11 11 | XX XX 01 00
|
||||
|
||||
|
||||
2) A MeyPin is not triggered, if the device id dont match
|
||||
WHEN Send CAN Pkg 00 55 11 11 | YY YY 01 01
|
||||
THEN None of the pins of the device triggered
|
||||
THEN you receive no message
|
||||
THEN 2nd device should receive 1 messages
|
||||
* 00 55 11 11 | XX XX 01 01
|
||||
|
||||
|
||||
3) A MeyPin is not triggered, if the Package Type dont match
|
||||
WHEN Send CAN Pkg 50 00 11 11 | YY YY 01 01
|
||||
THEN None of the pins of the device triggered
|
||||
THEN you receive no message
|
||||
THEN 2nd device should receive 1 messages
|
||||
* 50 00 11 11 | XX XX 01 01
|
||||
|
||||
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
|
||||
THEN None of the pins of the device triggered
|
||||
THEN you receive no message
|
||||
THEN 2nd device should receive 1 messages
|
||||
* 00 55 11 11 | XX XX 09 01
|
||||
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)
|
||||
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 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 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 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 08 01 -> (MeyPin8 Should switch to on)
|
||||
THEN you should only receive the packages from above.
|
||||
THEN you should NOT receive a VersionPackage
|
||||
WHEN you wait 15 Minutes
|
||||
THEN nothing should be send
|
||||
THEN the Pins should not trigger
|
||||
7
Software/Testsender/.vscode/arduino.json
vendored
Normal file
7
Software/Testsender/.vscode/arduino.json
vendored
Normal 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"
|
||||
}
|
||||
540
Software/Testsender/.vscode/c_cpp_properties.json
vendored
Normal file
540
Software/Testsender/.vscode/c_cpp_properties.json
vendored
Normal 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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
52
Software/Testsender/Testsender.ino
Normal file
52
Software/Testsender/Testsender.ino
Normal 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);
|
||||
}
|
||||
}
|
||||
0
Software/UPSoftware/.codex
Normal file
0
Software/UPSoftware/.codex
Normal file
149
Software/UPSoftware/MeyCan.cpp
Normal file
149
Software/UPSoftware/MeyCan.cpp
Normal file
@@ -0,0 +1,149 @@
|
||||
#include "HardwareSerial.h"
|
||||
#include <iterator>
|
||||
#include "esp32-hal-gpio.h"
|
||||
#include "MeyCan.h";
|
||||
#include "driver/twai.h"
|
||||
|
||||
PinState *MeyPin = NULL;
|
||||
uint16_t myDeviceId = 0;
|
||||
byte _deviceTypeId = 0;
|
||||
byte _majorHardwareVersion = 0;
|
||||
byte _minorHardwareVersion = 0;
|
||||
|
||||
|
||||
void SetupMeyPin(PinState *state) {
|
||||
if (state->is_input) {
|
||||
pinMode(state->pin_id, INPUT_PULLUP);
|
||||
state->pin_state = digitalRead(state->pin_id);
|
||||
} else {
|
||||
pinMode(state->pin_id, OUTPUT);
|
||||
digitalWrite(state->pin_id, LOW);
|
||||
state->pin_state = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId) {
|
||||
_majorHardwareVersion = majorHardwareVersion;
|
||||
_minorHardwareVersion = minorHardwareVersion;
|
||||
_deviceTypeId = deviceTypeId;
|
||||
|
||||
if (MeyPin != NULL)
|
||||
MeyPin->ForEach(SetupMeyPin);
|
||||
}
|
||||
|
||||
|
||||
void SetDevicedId(byte high, byte low) {
|
||||
myDeviceId = (high << 8) | low;
|
||||
}
|
||||
|
||||
void SetMeyPin(byte meyPinId, byte pinId) {
|
||||
PinState *newState = new PinState();
|
||||
newState->Init(pinId, (byte)meyPinId);
|
||||
|
||||
if (MeyPin == NULL)
|
||||
MeyPin = newState;
|
||||
else
|
||||
MeyPin->AddPinState(newState);
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
return;
|
||||
|
||||
bool newValue = ReadPin(state);
|
||||
|
||||
|
||||
if (newValue != state->pin_state) {
|
||||
delay(10);
|
||||
newValue = ReadPin(state);
|
||||
if (newValue != state->pin_state) {
|
||||
state->pin_state = newValue;
|
||||
SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void CheckMeyPinsTriggered() {
|
||||
MeyPin->ForEach(CheckPinStatus);
|
||||
}
|
||||
|
||||
|
||||
uint16_t GetDeviceId(uint32_t canFrameId) {
|
||||
return canFrameId & 0xFFFF;
|
||||
}
|
||||
|
||||
uint16_t GetPackageType(uint32_t canFrameId) {
|
||||
return (canFrameId / 0x10000) & 0xFFF;
|
||||
}
|
||||
|
||||
uint32_t CreateCanId(uint16_t commandId) {
|
||||
return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
|
||||
byte meyPinId = frame->data[2];
|
||||
bool state = frame->data[3] > 0;
|
||||
|
||||
PinState *adressedPin = MeyPin->Find(meyPinId);
|
||||
|
||||
if (adressedPin != NULL) {
|
||||
if (adressedPin->is_input == true) {
|
||||
pinMode(adressedPin->pin_id, OUTPUT);
|
||||
adressedPin->is_input = false;
|
||||
}
|
||||
|
||||
bool pinChanged = adressedPin->pin_state != state;
|
||||
adressedPin->pin_state = state;
|
||||
|
||||
if (pinChanged) {
|
||||
digitalWrite(adressedPin->pin_id, state);
|
||||
SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void HandleFrame(twai_message_t *frame) {
|
||||
HandleTriggerMeypinCanPackage(frame);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void DoSendCanPkg(twai_message_t *frame) {
|
||||
esp_err_t ret = twai_transmit(frame, pdMS_TO_TICKS(1000));
|
||||
}
|
||||
80
Software/UPSoftware/MeyCan.h
Normal file
80
Software/UPSoftware/MeyCan.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#ifndef MEYCAN_H
|
||||
#define MEYCAN_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <SPI.h>
|
||||
#include "driver/twai.h"
|
||||
|
||||
typedef struct PinState
|
||||
{
|
||||
int pin_id;
|
||||
bool pin_state;
|
||||
bool is_input;
|
||||
byte meyPinId;
|
||||
PinState *next = NULL;
|
||||
|
||||
PinState() {}
|
||||
void Init(int pin_id, byte meyPinId)
|
||||
{
|
||||
this->pin_id = pin_id;
|
||||
this->pin_state = true;
|
||||
this->is_input = true;
|
||||
this->meyPinId = meyPinId;
|
||||
}
|
||||
|
||||
void AddPinState(PinState *nextPinState)
|
||||
{
|
||||
if (next == NULL)
|
||||
{
|
||||
this->next = nextPinState;
|
||||
nextPinState->next = NULL;
|
||||
} else {
|
||||
next->AddPinState(nextPinState);
|
||||
}
|
||||
}
|
||||
|
||||
PinState* Find(byte meyPinId)
|
||||
{
|
||||
if (this->meyPinId == meyPinId)
|
||||
return this;
|
||||
|
||||
if (this->next != NULL)
|
||||
return this->next->Find(meyPinId);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ForEach(void (*handle)(PinState *theState))
|
||||
{
|
||||
handle(this);
|
||||
if (this->next != NULL)
|
||||
this->next->ForEach(handle);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const byte SOFTWARE_VERSION_HIGH = 6;
|
||||
const byte SOFTWARE_VERSION_LOW = 0;
|
||||
const byte HARDWARE_VERSION_HIGH = 8;
|
||||
const byte HARDWARE_VERSION_LOW = 1;
|
||||
|
||||
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 SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId);
|
||||
uint32_t CreateCanId(uint16_t commandId);
|
||||
void SetDevicedId(byte high, byte low);
|
||||
void SetMeyPin(byte meyPinId, byte pinId);
|
||||
uint16_t GetDeviceId(uint32_t canFrameId);
|
||||
uint16_t GetPackageType(uint32_t canFrameId);
|
||||
void SendSwitchedTriggeredCanPackage(byte pinId, int state);
|
||||
|
||||
void HandleFrame(twai_message_t *frame);
|
||||
void CheckPinStatus(PinState *state);
|
||||
void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */
|
||||
|
||||
void DoSendCanPkg(twai_message_t *frame) ;
|
||||
#endif
|
||||
@@ -1,246 +1,220 @@
|
||||
#include <SPI.h>;
|
||||
#include <mcp2515.h>;
|
||||
#include <Arduino.h>
|
||||
#include <driver/i2s.h>
|
||||
#include "opus.h"
|
||||
#include "opus_data.h"
|
||||
#include "MeyCan.h"
|
||||
|
||||
|
||||
struct can_frame _frame;
|
||||
MCP2515 mcp2515(PIN_PD4);
|
||||
const byte SoftwareVersionHigh = 3;
|
||||
const byte SoftwareVersionLow = 0;
|
||||
const byte HardwareVersionHigh = 5;
|
||||
const byte HardwareVersionLow = 0;
|
||||
constexpr int RX_PIN = 2; // CAN_TRANCEIVER_RX_PIN
|
||||
constexpr int TX_PIN = 3; // CAN_TRANCEIVER_TX_PIN
|
||||
bool driver_installed = false;
|
||||
|
||||
typedef struct PinState
|
||||
{
|
||||
int pin_id;
|
||||
bool pin_state;
|
||||
bool is_input;
|
||||
byte meyPinId;
|
||||
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.0–1.0)
|
||||
|
||||
PinState() {}
|
||||
void Init(int pin_id, byte meyPinId)
|
||||
{
|
||||
this->pin_id = pin_id;
|
||||
this->pin_state = true;
|
||||
this->is_input = true;
|
||||
this->meyPinId = meyPinId;
|
||||
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;
|
||||
}
|
||||
} ;
|
||||
|
||||
int PinCount = 8;
|
||||
PinState MeyPins[8];
|
||||
int16_t myDeviceId;
|
||||
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 6–13 : Granule Position (Zeitstempel, 8 Bytes)
|
||||
// Byte 14–17 : Stream Serial Number
|
||||
// Byte 18–21 : Page Sequence Number
|
||||
// Byte 22–25 : 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 (0–255).
|
||||
// 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() {
|
||||
SPI.begin();
|
||||
Serial.begin(115200);
|
||||
i2s_setup();
|
||||
|
||||
// Explicit GND for LED and Input
|
||||
pinMode(21, OUTPUT);
|
||||
digitalWrite(21, LOW);
|
||||
|
||||
MeyPins[0] = PinState();
|
||||
MeyPins[0].Init(PIN_PD0, (byte) 1);
|
||||
|
||||
MeyPins[1] = PinState();
|
||||
MeyPins[1].Init(PIN_PD2, (byte) 2);
|
||||
|
||||
MeyPins[2] = PinState();
|
||||
MeyPins[2].Init(PIN_PD5, (byte) 3);
|
||||
|
||||
MeyPins[3] = PinState();
|
||||
MeyPins[3].Init(PIN_PD7, (byte) 4);
|
||||
|
||||
MeyPins[4] = PinState();
|
||||
MeyPins[4].Init(PIN_PC7, (byte) 5);
|
||||
|
||||
MeyPins[5] = PinState();
|
||||
MeyPins[5].Init(PIN_PD1, (byte) 6);
|
||||
|
||||
MeyPins[6] = PinState();
|
||||
MeyPins[6].Init(PIN_PD3, (byte) 7);
|
||||
|
||||
MeyPins[7] = PinState();
|
||||
MeyPins[7].Init(PIN_PD6, (byte) 8);
|
||||
|
||||
|
||||
|
||||
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7);
|
||||
delay(20);
|
||||
mcp2515.reset();
|
||||
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
|
||||
mcp2515.setNormalMode();
|
||||
|
||||
for (int i = 0; i <= PinCount - 1; i++)
|
||||
{
|
||||
pinMode(MeyPins[i].pin_id, INPUT_PULLUP);
|
||||
MeyPins[i].pin_state = ReadPin(&MeyPins[i]);
|
||||
int err;
|
||||
dec = opus_decoder_create(SAMPLE_RATE, CHANNELS, &err);
|
||||
if (err != OPUS_OK) {
|
||||
Serial.printf("opus_decoder_create failed: %d\n", err);
|
||||
return;
|
||||
}
|
||||
Serial.println("Opus playback started");
|
||||
ConfigureAndSetupMeyCan();
|
||||
|
||||
|
||||
CalculateMyDeviceId();
|
||||
SendSerialPackage();
|
||||
xTaskCreate(canTaskFunc, "can", 4096, nullptr, 5, nullptr);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
for (int i = 0; i <= PinCount - 1; i++)
|
||||
{
|
||||
if (CheckPinStatus(&MeyPins[i]))
|
||||
SendSwitchedTriggeredCanPackage(MeyPins[i].meyPinId, MeyPins[i].pin_state);
|
||||
}
|
||||
|
||||
if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK)
|
||||
{
|
||||
|
||||
if (GetDeviceId(_frame.can_id) == GetMyDeviceId())
|
||||
{
|
||||
|
||||
int meyPinId = _frame.data[0];
|
||||
bool state = _frame.data[1] > 0;
|
||||
|
||||
PinState *adressedPin;
|
||||
for (int i = 0; i <= PinCount - 1; i++)
|
||||
if (MeyPins[i].meyPinId == meyPinId)
|
||||
{
|
||||
adressedPin = &MeyPins[i];
|
||||
break;
|
||||
}
|
||||
|
||||
if (adressedPin != NULL)
|
||||
{
|
||||
if (adressedPin->is_input == true)
|
||||
{
|
||||
pinMode(adressedPin->pin_id, OUTPUT);
|
||||
adressedPin->is_input = false;
|
||||
}
|
||||
adressedPin->pin_state = state;
|
||||
digitalWrite(adressedPin->pin_id, state);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
delay(20);
|
||||
}
|
||||
|
||||
|
||||
void SendSerialPackage()
|
||||
{
|
||||
_frame.can_id = CreateCanId(0xFFFF);
|
||||
_frame.can_dlc = 4;
|
||||
|
||||
_frame.data[0] = SoftwareVersionHigh;
|
||||
_frame.data[1] = SoftwareVersionLow;
|
||||
_frame.data[2] = HardwareVersionHigh;
|
||||
_frame.data[3] = HardwareVersionLow;
|
||||
mcp2515.sendMessage(MCP2515::TXB1, &_frame);
|
||||
}
|
||||
|
||||
|
||||
void SendSwitchedTriggeredCanPackage(byte pinId, int state)
|
||||
{
|
||||
_frame.can_id = CreateCanId(0x050);
|
||||
_frame.can_dlc = 2;
|
||||
_frame.data[0] = pinId;
|
||||
_frame.data[1] = state;
|
||||
mcp2515.sendMessage(MCP2515::TXB1, &_frame);
|
||||
}
|
||||
|
||||
|
||||
void SendDoTriggerSwitchCanPackage(uint32_t targetCanId, byte pinId, byte state)
|
||||
{
|
||||
_frame.can_id = CreateCanId(0x050);
|
||||
_frame.can_dlc = 4;
|
||||
_frame.data[0] = targetCanId & 0xFF;
|
||||
_frame.data[1] = (targetCanId & 0xFF00) >> 8;
|
||||
_frame.data[2] = pinId;
|
||||
_frame.data[3] = state;
|
||||
mcp2515.sendMessage(MCP2515::TXB1, &_frame);
|
||||
}
|
||||
|
||||
bool ReadPin(PinState * state)
|
||||
{
|
||||
if (state->pin_id == PIN_PD2)
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
byte CircularShift(byte b)
|
||||
{
|
||||
return (b << 1) | (b >> 7 & 1);
|
||||
}
|
||||
|
||||
uint32_t GetDeviceId(uint32_t canFrameId)
|
||||
{
|
||||
return canFrameId & 0xFFFF;
|
||||
}
|
||||
|
||||
uint32_t GetPackageType(uint32_t canFrameId)
|
||||
{
|
||||
return (canFrameId / 0x10000) & 0xFFF;
|
||||
}
|
||||
|
||||
uint32_t CreateCanId(uint32_t commandId)
|
||||
{
|
||||
return ((commandId & 0xFFF) * 0x10000) | GetMyDeviceId() | CAN_EFF_FLAG;
|
||||
}
|
||||
|
||||
void CalculateMyDeviceId()
|
||||
{
|
||||
myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow();
|
||||
}
|
||||
|
||||
uint16_t GetMyDeviceId()
|
||||
{
|
||||
return myDeviceId;
|
||||
}
|
||||
|
||||
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)))));
|
||||
}
|
||||
|
||||
bool CheckPinStatus(PinState * state)
|
||||
{
|
||||
if (!state->is_input)
|
||||
return false;
|
||||
|
||||
bool newValue = ReadPin(state);
|
||||
|
||||
|
||||
if (newValue != state->pin_state)
|
||||
{
|
||||
delay(10);
|
||||
newValue = ReadPin(state);
|
||||
if (newValue != state->pin_state)
|
||||
{
|
||||
state->pin_state = newValue;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
void loop() {
|
||||
play_ogg_opus(music_opus, music_opus_len);
|
||||
opus_decoder_ctl(dec, OPUS_RESET_STATE);
|
||||
}
|
||||
|
||||
@@ -1,283 +0,0 @@
|
||||
:1000000050C0000068C0000066C0000064C000006E
|
||||
:1000100062C0000060C000005EC000005CC0000064
|
||||
:100020005AC0000058C0000056C0000054C0000074
|
||||
:1000300052C0000050C000004EC000004CC0000084
|
||||
:100040004AC0000048C0000046C0000044C0000094
|
||||
:1000500042C0000040C000003EC000003CC00000A4
|
||||
:100060003AC0000002C5000036C0000034C00000E5
|
||||
:1000700032C0000030C000002EC000002CC00000C4
|
||||
:100080002AC0000028C0000026C0000024C00000D4
|
||||
:1000900022C0000020C000001EC000001CC00000E4
|
||||
:1000A0005D0511241FBECFEFCDBFDFE3DEBF2CE324
|
||||
:1000B000A0E0BCE301C01D92A838B207E1F710E050
|
||||
:1000C000C1E5D0E003C02197FE01E7D7C035D107D5
|
||||
:1000D000D1F704D5FDC794CF00008093C408809168
|
||||
:1000E000C30887FFFCCF8091C4080895CF93DF93A6
|
||||
:1000F00090E0FC01E55AFE4A20812F3F61F0FC01AF
|
||||
:10010000EE5CFE4AE08130E2E39FF0011124FC5FE7
|
||||
:10011000613021F42183DF91CF910895875F9E4A5A
|
||||
:10012000EC01A881AF3F69F0CF014096A80FB92F2D
|
||||
:10013000B11D9FB7F89422838C9188608C939FBFE8
|
||||
:10014000EACFB0E0A0E0F5CF8091473C811117C025
|
||||
:100150001092483C1092493C10924A3C10924B3C01
|
||||
:1001600010924C3C10924D3C10924E3C10924F3CE1
|
||||
:100170001092503C1092513C81E08093473C80911A
|
||||
:10018000E3058C7F9091463C892B8093E305911188
|
||||
:1001900019C061E084E0AADF61E086E0A7DF80911A
|
||||
:1001A000C10884608093C1088091C00881628093F7
|
||||
:1001B000C0089091403C8091413C9093C00880934E
|
||||
:1001C000C1080895913031F461E08EE08FDF61E085
|
||||
:1001D00080E1E4CF923019F761E08EE187DF61E0E2
|
||||
:1001E00080E2DCCF90E0FC01E052FF4AE081EE23A8
|
||||
:1001F00019F1E13021F000F1E630A8F00895875FB1
|
||||
:100200009E4AFC012081233008F02F5F3091010AC3
|
||||
:1002100081E090E001C0880F2A95EAF7809583235A
|
||||
:100220008093010A089580E1E89FF0011124E05ACB
|
||||
:10023000F54F81818F7E818308950F931F93CF9314
|
||||
:10024000DF93C82FD0E0FE01E55AFE4A00810F3F40
|
||||
:1002500099F0162F893208F4C5DFFE01EE5CFE4AE4
|
||||
:10026000E08180E2E89FF0011124FC5F808180231F
|
||||
:1002700051F0111106C00683DF91CF911F910F91AC
|
||||
:1002800008950583F9CFC75FDE4A8881309771F002
|
||||
:100290008F3F61F07096E80FF11D9FB7F894808151
|
||||
:1002A000111107C0877F80839FBFE6CFF0E0E0E0B9
|
||||
:1002B000F4CF8860F8CF8F929F92AF92BF92CF9287
|
||||
:1002C000DF92EF92FF920F93CF93DF938091813C67
|
||||
:1002D000893210F461E0B1DF8091483C882319F045
|
||||
:1002E00081FF0DC07894DF91CF910F91FF90EF9037
|
||||
:1002F000DF90CF90BF90AF909F908F90089580FF38
|
||||
:10030000F2CF80904A3C90904B3CA0904C3CB090F7
|
||||
:100310004D3CC12CD12C7601E0E09401A501B60141
|
||||
:10032000C701A0E0AED681F1217030E040E050E09E
|
||||
:1003300060E070E080E090E0A4D6D1F0B0E0A0E012
|
||||
:10034000E03370F4AE2FA695A695A69580E2A89FFF
|
||||
:10035000D0011124A05FBB4F8E2F8770A80FB11D55
|
||||
:10036000CE2FD0E0CE5BD34C88899C91892B8C9387
|
||||
:100370009401A501B601C70101E068D649015A01FF
|
||||
:100380006B017C01EF5FC9CF80904E3C90904F3C59
|
||||
:10039000A090503CB090513CC12CD12C7601E0E2B1
|
||||
:1003A0009401A501B601C701A0E06BD609F49BCF6B
|
||||
:1003B000217030E040E050E060E070E080E090E0EC
|
||||
:1003C00060D6D1F0B0E0A0E0E03370F4AE2FA69597
|
||||
:1003D000A695A69580E2A89FD0011124A05FBB4FEF
|
||||
:1003E0008E2F8770A80FB11DCE2FD0E0CE5BD34CDF
|
||||
:1003F00088899C91892B8C939401A501B601C70132
|
||||
:1004000001E024D649015A016B017C01EF5FC8CF9E
|
||||
:100410008FB7F89420912B3C30912C3C40912D3C8F
|
||||
:1004200050912E3CE091AA0AF091AB0A9091A60A55
|
||||
:1004300090FF08C02F5F3F4F4F4F5F4FE091AA0AD8
|
||||
:10044000F091AB0A8FBFA8EEB3E0F4D523E0F695A8
|
||||
:10045000E7952A95E1F76E0F7F1F811D911D089585
|
||||
:100460008F929F92AF92BF92CF92DF92EF92FF92C4
|
||||
:100470004B015C01CDDF6B017C01A8EEB3E0A5016F
|
||||
:100480009401D8D5C60ED71EE81EF91EC616D7068B
|
||||
:10049000E806F90610F4BCDFF9CFBADF6C157D056C
|
||||
:1004A0008E059F05D0F3FF90EF90DF90CF90BF9027
|
||||
:1004B000AF909F908F9008950F931F93CF93FC015F
|
||||
:1004C000808191818831910541F48EB182FB88272A
|
||||
:1004D00080F9CF911F910F9108958531910529F4ED
|
||||
:1004E0008AB1881F8827881FF4CF8731910521F4AE
|
||||
:1004F0008EB186958170EDCF8631910519F48EB15C
|
||||
:100500008170E7CF8C31910529F48EB186FB882765
|
||||
:1005100080F9DFCF8B31910529F48EB185FB8827D7
|
||||
:1005200080F9D7CF8A31910521F48EB182958170FF
|
||||
:10053000D0CF8931910529F48EB183FB882780F9CA
|
||||
:10054000C8CF8932B0F48C011127F801E55AFE4A70
|
||||
:10055000C081CF3F71F046DEF801EE5CFE4AE081DB
|
||||
:1005600080E2E89FF0011124FC5F8085C82381E0D0
|
||||
:1005700039F680E0C5CF8F929F92AF92BF92CF9213
|
||||
:10058000DF92EF92FF920F93CF93DF938091483CDD
|
||||
:10059000882319F081FF19C0F89481E38093C00883
|
||||
:1005A00084E08093C1088091813C893208F098C032
|
||||
:1005B00060E0DF91CF910F91FF90EF90DF90CF90AF
|
||||
:1005C000BF90AF909F908F9038CE80FFE6CF809005
|
||||
:1005D0004A3C90904B3CA0904C3CB0904D3CC12C80
|
||||
:1005E000D12C7601E0E09401A501B601C701A0E09D
|
||||
:1005F00048D589F1217030E040E050E060E070E0E3
|
||||
:1006000080E090E03ED5D9F0B0E0A0E0E03370F4B7
|
||||
:10061000AE2FA695A695A69580E2A89FD00111249D
|
||||
:10062000A05FBB4F8E2F8770A80FB11DCE2FD0E0DB
|
||||
:100630008C91CE5BD34C888B8C91887F8C9394016A
|
||||
:10064000A501B601C70101E001D549015A016B01BD
|
||||
:100650007C01EF5FC8CF80904E3C90904F3CA090C3
|
||||
:10066000503CB090513CC12CD12C7601E0E2940179
|
||||
:10067000A501B601C701A0E004D509F48ECF217011
|
||||
:1006800030E040E050E060E070E080E090E0F9D4DD
|
||||
:10069000D9F0B0E0A0E0E03370F4AE2FA695A695B7
|
||||
:1006A000A69580E2A89FD0011124A05FBB4F8E2F9A
|
||||
:1006B0008770A80FB11DCE2FD0E08C91CE5BD34CAC
|
||||
:1006C000888B8C91887F8C939401A501B601C7011A
|
||||
:1006D00001E0BCD449015A016B017C01EF5FC7CF37
|
||||
:1006E000DF91CF910F91FF90EF90DF90CF90BF906F
|
||||
:1006F000AF909F908F900895FF920F931F93CF9389
|
||||
:10070000DF93C82FF62E172F042F35DF82E0E4DCAD
|
||||
:100710008C2FE2DCCF2DD12F0C0F1D2F111DC017F8
|
||||
:10072000D10719F08991D8DCFACFDF91CF911F91D1
|
||||
:100730000F91FF90C0CD1F93CF93DF93182FD62F2B
|
||||
:10074000C42F19DF85E0C8DC812FC6DC8D2FC4DC07
|
||||
:100750008C2FC2DCDF91CF911F91ADCDCF93C82FED
|
||||
:100760000ADF83E0B9DC8C2FB7DC80E0B5DCC82F72
|
||||
:10077000A2DD8C2FCF910895CF92DF92EF92FF925E
|
||||
:10078000CF93C82F482F60EE8FE0D5DF8FB7F89456
|
||||
:10079000C0902B3CD0902C3CE0902D3CF0902E3C17
|
||||
:1007A0008FBF8AE0C80ED11CE11CF11C2FB7F89452
|
||||
:1007B00080912B3C90912C3CA0912D3CB0912E3CF3
|
||||
:1007C0002FBF8C159D05AE05BF0578F48EE0C6DF02
|
||||
:1007D000807EC813EBCF81E091E0892790E0CF9134
|
||||
:1007E000FF90EF90DF90CF90089580E0F5CFCF930A
|
||||
:1007F000DF93D82FC62FBFDE82E06EDC8D2F6CDC3E
|
||||
:100800008C2F6ADCDF91CF9156CDFF920F931F930F
|
||||
:10081000CF93DF93C82FF62E172F042FACDE83E083
|
||||
:100820005BDC8C2F59DCCF2DD12F0C0F1D2F111D10
|
||||
:10083000C017D10721F080E04FDC8993F9CFDF9119
|
||||
:10084000CF911F910F91FF9036CDBF92CF92DF9243
|
||||
:10085000EF92FF920F931F93CF93DF93CDB7DEB745
|
||||
:100860002597CDBFDEBF8C01000F111F000F111F98
|
||||
:10087000F801EC57FE4A45E0BE016F5F7F4F818172
|
||||
:10088000C4DF8A81C98098E0C99E60011124282FA5
|
||||
:1008900030E055E0359527955A95E1F7C20ED31E05
|
||||
:1008A0000D2C000CEE08FF0883FF20C092E0CC0C5A
|
||||
:1008B000DD1CEE1CFF1C9A95D1F78370C80ED11C6D
|
||||
:1008C000E11CF11CFE2CED2CDC2CCC248B81C80E01
|
||||
:1008D000D11CE11CF11CFE2CED2CDC2CCC248C81D9
|
||||
:1008E000C80ED11CE11CF11C6894F7F88D818F7043
|
||||
:1008F000B82EE8E081E090E0EB1510F1F801EC573C
|
||||
:10090000FE4A80812BDF83FF02C06894F6F8C09214
|
||||
:10091000303CD092313CE092323CF092333CB09289
|
||||
:10092000343C0C571E4A4B2D68E37CE3F80182816E
|
||||
:100930006CDF40E0F80163818CE2FDDE90E080E056
|
||||
:100940002596CDBFDEBFDF91CF911F910F91FF9014
|
||||
:10095000EF90DF90CF90BF900895CF92DF92EF920B
|
||||
:10096000FF920F931F93CF93DF93CDB7DEB72D97F1
|
||||
:10097000CDBFDEBF8091303C9091313CA091323CA4
|
||||
:10098000B091333CAC01BD01442777FD4395552719
|
||||
:10099000662777276C017D01CC24DD24EE2420E43A
|
||||
:1009A000F2220FEF1FEF2FEF3FE1411104C00FEFD5
|
||||
:1009B00017E020E030E080239123A223B3234423D7
|
||||
:1009C00009F442C08C839B83CD01AA27BB27282F23
|
||||
:1009D00023702860382F330F330F330F307E232BD3
|
||||
:1009E0002A8335E0969587953A95E1F789831091AA
|
||||
:1009F000343C812FCD28CE28CF2809F080648D8308
|
||||
:100A0000412F50E068E37CE3CE01069658D345E0E1
|
||||
:100A1000410FBE016F5F7F4F81E46EDE48E068E00A
|
||||
:100A200080E489DE80E49ADE8077E1F084E090E083
|
||||
:100A30002D96CDBFDEBFDF91CF911F910F91FF901B
|
||||
:100A4000EF90DF90CF9008959C0193E03695279525
|
||||
:100A50009A95E1F729838295880F807E8A831C828C
|
||||
:100A60001B82C5CF90E080E0E3CF1F920F920FB6BC
|
||||
:100A70000F9211248F939F93AF93BF9380912B3C40
|
||||
:100A800090912C3CA0912D3CB0912E3C0196A11D43
|
||||
:100A9000B11D80932B3C90932C3CA0932D3CB093A4
|
||||
:100AA0002E3C81E08093A60ABF91AF919F918F91D8
|
||||
:100AB0000F900FBE0F901F901895E0E4FCE384E0C8
|
||||
:100AC000818381E38083E2E4FCE3158214823CDBD2
|
||||
:100AD00083E08093813C61E009DBEDCBCF93DF9332
|
||||
:100AE000CDB7DEB7A297CDBFDEBF91E088ED84BF62
|
||||
:100AF0009093610080910206856080930206809148
|
||||
:100B00000006816080930006809102068F7C8065DC
|
||||
:100B1000809302061092E20582E08093E4059093B0
|
||||
:100B2000030A8EEF8093270A8093260A80E8809339
|
||||
:100B30002D0A80932B0A8093290A80932C0A809394
|
||||
:100B40002A0A8093280A89E08093000A87E080932C
|
||||
:100B5000E505E0E8FAE017E09EEF80E805E01183A4
|
||||
:100B60009487858700837096E03C2AE0F207B9F706
|
||||
:100B70001092A10A8FE39FE18093AC0A9093AD0A93
|
||||
:100B80008091A50A81608093A50A1092A00A8091A5
|
||||
:100B9000A00A81608093A00A7894D6DA85E190E07B
|
||||
:100BA0008093033C9093043C81E08093053C8093C8
|
||||
:100BB000063C8093073C26E130E02093083C3093CC
|
||||
:100BC000093C80930A3C80930B3C92E090930C3C50
|
||||
:100BD00027E130E020930D3C30930E3C80930F3C96
|
||||
:100BE0008093103C93E09093113C28E130E02093F7
|
||||
:100BF000123C3093133C8093143C8093153C94E05A
|
||||
:100C00009093163C2CE130E02093173C3093183C35
|
||||
:100C10008093193C80931A3C00931B3C2BE130E0FD
|
||||
:100C200020931C3C30931D3C80931E3C80931F3CC2
|
||||
:100C300096E09093203C2AE130E02093213C3093D1
|
||||
:100C4000223C8093233C8093243C1093253C29E153
|
||||
:100C500030E02093263C3093273C8093283C8093BF
|
||||
:100C6000293C88E080932A3C80916000806890E075
|
||||
:100C700028ED24BF809360007EDC80EC2DDA1BDB46
|
||||
:100C80006AE070E080E090E0EBDB8E010F5F1F4FC9
|
||||
:100C90008EE0F80111928A95E9F74EE0B80180E301
|
||||
:100CA0002BDD4EE0B80180E427DD4EE0B80180E5A1
|
||||
:100CB00023DD60E080E69BDD60E080E798DD63EAAD
|
||||
:100CC0008BE295DD44E067E680E635DD41E067E6EE
|
||||
:100CD00080E731DD8CE0E4EDF0E5DE011F96019068
|
||||
:100CE0000D928A95E1F75E01FFE0AF0EB11CD12CA9
|
||||
:100CF000C12CB8E09B2EF501019111915F0180E8B4
|
||||
:100D00003BDD892B71F40230110509F475C108F03F
|
||||
:100D10002CC10115110509F434C10130110509F484
|
||||
:100D200071C180E829DD892B49F460E08AE25FDD4A
|
||||
:100D300060E989E25CDD62E888E259DD80E01CDD83
|
||||
:100D4000FBE2CF2EFCE3DF2E03E01CE3F801808101
|
||||
:100D5000893210F462E0CAD9C801AEDBF80182839F
|
||||
:100D60000B5F1F4FC016D10689F750910311909168
|
||||
:100D70000511409107113091091120910B11892F14
|
||||
:100D8000880F811D880F8527942F990F911D990F2A
|
||||
:100D9000911D8927932F929590FB979597F9892715
|
||||
:100DA000922F929589278093003C50910411409195
|
||||
:100DB00006113091081120910A1190910C11440FE5
|
||||
:100DC000411D440F4527330F311D330F311D43277C
|
||||
:100DD000229520FB279527F9422792954927409392
|
||||
:100DE000013C90E0982F8827092E000CAA0BBB0B22
|
||||
:100DF00050E070E060E06F6F7F68842B952BA62B2E
|
||||
:100E0000B72B8093303C9093313CA093323CB0930D
|
||||
:100E1000333C84E08093343C81E08093383C1092F2
|
||||
:100E2000393C82E080933A3C10923B3C96DD992419
|
||||
:100E3000939465E0862E70E0A72E70E0B72EE2E076
|
||||
:100E40007E2E33E0C32E3CE3D32EF601838188232C
|
||||
:100E5000C1F1C60131DBF6019281891791F16AE097
|
||||
:100E600070E080E090E0FCDAC60126DBF6019281BA
|
||||
:100E7000891739F1828394814091003C50E0542FCE
|
||||
:100E80004427052E000C660B770B2090013C312C7B
|
||||
:100E9000512C412CF0E54F2A689457F842295329E8
|
||||
:100EA000642975294093303C5093313C6093323C27
|
||||
:100EB0007093333C7092343C9093383C8093393C2F
|
||||
:100EC0004CDD25E0C20ED11CC016D10609F0BDCF05
|
||||
:100ED00052DB80EA01D980E0FFD8D82EECD990E02F
|
||||
:100EE00080E0D0FC04C0D1FE35C081E090E0ADDCF4
|
||||
:100EF000892B81F58091023C89258093023C2091C9
|
||||
:100F0000383CDD24D3948091393C811101C0D12C2F
|
||||
:100F1000E3E0FCE390E080E03481231384C0889E0A
|
||||
:100F20009001899E300D1124C9018D5F934C7C0185
|
||||
:100F3000F7018381882339F08081893210F461E0E0
|
||||
:100F4000D5D8F7011382F701D2828081893210F45B
|
||||
:100F50006D2D73D964E170E080E090E081DAA11436
|
||||
:100F6000B10409F46ECF4CD86CCF0430110509F4EC
|
||||
:100F700047C008F443C00530110509F0D2CE88E11E
|
||||
:100F800001C080E0F1E0CF16D104F1F51E8E1D8E78
|
||||
:100F90009C8E1B8E44E0BE01655E7F4FADDB2FEF64
|
||||
:100FA000C21AD20A86E0C816D10409F0A4CE1F8E58
|
||||
:100FB00018A281E090E089A39AA38E01015E1F4FE1
|
||||
:100FC0005E0193E2A90EB11CA8E09A2EF801C1902F
|
||||
:100FD000D1908F0180E8D0DB892B09F0A2CE1E8E44
|
||||
:100FE0001D8E9C8E1B8EC114D10499F0CA94CD28FD
|
||||
:100FF00009F097CE84E20EC088E0C4CF80E1C2CF72
|
||||
:1010000084E1C0CF84E0BECF1B8E1C8E1E8E1D8E51
|
||||
:10101000C1CF80E244E0BE01655E7F4F6DDB0A1503
|
||||
:101020001B05A1F67ECE019635968830910509F014
|
||||
:1010300073CF7ECF38D0A59F900DB49F900DA49F05
|
||||
:10104000800D911D1124089597FD1094002E0830F5
|
||||
:1010500098F00850232F342F452F562F672F782FC5
|
||||
:10106000892F912DF4CF159497958795779567954E
|
||||
:1010700057954795379527950A95AAF71124002D7E
|
||||
:1010800008950024A7FD00942A1730054005500557
|
||||
:1010900060057005800590050895EE0FFF1F05900F
|
||||
:1010A000F491E02D0994A29FB001B39FC001A39FCA
|
||||
:1010B00001D0B29F700D811D1124911D0895FB0177
|
||||
:1010C000DC0102C001900D9241505040D8F70895C4
|
||||
:0410D000F894FFCFC2
|
||||
:1010D40000000100020003000400050000000000FD
|
||||
:1010E40000000000000000000005010101010101F1
|
||||
:1010F40000000000000000000000000000000000EC
|
||||
:1011040000000203000001020304050607000102B7
|
||||
:101114000304050001020304050607000102030499
|
||||
:10112400050607000102030001020304050600008E
|
||||
:10113400000000000000010101010101020202029D
|
||||
:10114400020202020303030303030303040404046B
|
||||
:101154000505050505050501020408102040800168
|
||||
:101164000204081020010204081020408001020437
|
||||
:1011740008102040800102040801020408102040E5
|
||||
:081184006061660170717602E2
|
||||
:00000001FF
|
||||
File diff suppressed because it is too large
Load Diff
BIN
Software/UPSoftware/arduino-libhelix-main.zip
Normal file
BIN
Software/UPSoftware/arduino-libhelix-main.zip
Normal file
Binary file not shown.
@@ -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);
|
||||
}
|
||||
}
|
||||
26
Software/UPSoftware/examples/OpusLoopbackEsp32C3/README.md
Normal file
26
Software/UPSoftware/examples/OpusLoopbackEsp32C3/README.md
Normal 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.
|
||||
71009
Software/UPSoftware/opus_data.h
Normal file
71009
Software/UPSoftware/opus_data.h
Normal file
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
Reference in New Issue
Block a user