Compare commits

..

48 Commits
main ... Test

Author SHA1 Message Date
Leon Wilzer e8facb4f4d spectrum 2022-11-23 18:40:54 +01:00
Leon Wilzer 5d11173711 spectrum 2022-11-23 18:40:10 +01:00
Leon Wilzer f0ca3f02b6 spectrum 2022-11-23 18:39:27 +01:00
Leon Wilzer 7464eb67e8 spectrum 2022-11-23 18:37:49 +01:00
Leon Wilzer 04ab351a79 spectrum 2022-11-23 18:36:14 +01:00
Leon Wilzer d54970289c spectrum 2022-11-23 18:34:36 +01:00
Leon Wilzer e6c9b03ee9 spectrum 2022-11-23 18:32:32 +01:00
Leon Wilzer 8709e0c415 spectrum 2022-11-23 18:31:23 +01:00
Leon Wilzer 1439693cf5 spectrum 2022-11-23 18:28:37 +01:00
Leon Wilzer e1adace604 spectrum 2022-11-23 18:26:29 +01:00
Leon Wilzer 3612b4b5df spectrum 2022-11-23 18:21:38 +01:00
Leon Wilzer 7fd61af329 spectrum 2022-11-23 18:13:08 +01:00
Leon Wilzer 6f279e01d8 spectrum 2022-11-23 18:08:47 +01:00
Leon Wilzer 96f368b4f5 spectrum 2022-11-23 18:05:40 +01:00
Leon Wilzer 9d3e9ccb45 spectrum 2022-11-23 18:03:07 +01:00
Leon Wilzer f6a63d8c5a spectrum 2022-11-23 17:58:46 +01:00
Leon Wilzer dd224fc223 spectrum 2022-11-23 17:44:04 +01:00
Leon Wilzer c8e8b722be spectrum 2022-11-23 17:43:10 +01:00
Leon Wilzer 941fcb8205 spectrum 2022-11-23 17:41:47 +01:00
Leon Wilzer f34c6acec4 spectrum 2022-11-23 17:35:45 +01:00
Leon Wilzer a7d49dbd9c spectrum 2022-11-23 17:34:54 +01:00
Leon Wilzer f2f0b2dccb spectrum 2022-11-23 17:33:47 +01:00
Leon Wilzer 16d8cc01dc spectrum 2022-11-23 17:32:15 +01:00
Leon Wilzer 1b38c4d638 spectrum 2022-11-23 17:26:24 +01:00
Leon Wilzer ac505afafe spectrum 2022-11-23 17:25:50 +01:00
Leon Wilzer 6c89a5b0d3 spectrum 2022-11-23 17:03:42 +01:00
Leon Wilzer e786945b8a spectrum 2022-11-23 17:03:13 +01:00
Leon Wilzer 18f7beaf6d spectrum 2022-11-23 17:01:56 +01:00
Leon Wilzer 1ca43965b1 spectrum 2022-11-23 17:01:18 +01:00
Leon Wilzer 2db70bae65 spectrum 2022-11-23 17:00:48 +01:00
Leon Wilzer c9462ecb16 spectrum 2022-11-23 17:00:10 +01:00
Leon Wilzer 4ab315cb0e simple rgb test 2022-11-23 16:59:06 +01:00
Leon Wilzer 4c542dc5d7 simple rgb test 2022-11-23 16:02:30 +01:00
Leon Wilzer 244791623c simple rgb test 2022-11-23 16:01:53 +01:00
Leon Wilzer 87e796e265 idk 2022-11-23 16:00:40 +01:00
Leon Wilzer 5a01c153b7 idk 2022-11-23 15:54:08 +01:00
Leon Wilzer f2084052d6 idk 2022-11-23 15:40:32 +01:00
Leon Wilzer 9c5d6fa7d1 idk 2022-11-23 15:39:35 +01:00
Leon Wilzer f6c99df275 idk 2022-11-23 15:38:34 +01:00
Leon Wilzer d37cccced7 idk 2022-11-23 15:33:38 +01:00
Leon Wilzer 2ff6570588 idk 2022-11-23 15:23:10 +01:00
Leon Wilzer 715d1fb59d idk 2022-11-23 15:18:27 +01:00
Leon Wilzer 95f4b78eb2 idk 2022-11-23 15:16:34 +01:00
Leon Wilzer 118ce9b99c idk 2022-11-23 14:58:46 +01:00
Leon Wilzer 76308a81dc idk 2022-11-23 13:47:23 +01:00
Leon Wilzer e36debccbb idk 2022-11-23 13:41:41 +01:00
Leon Wilzer 812ec58d0d idk 2022-11-23 13:40:34 +01:00
Leon Wilzer 2f3214dbeb idk 2022-11-23 13:04:41 +01:00
8 changed files with 309 additions and 95382 deletions

2
.gitignore vendored
View File

@ -86,5 +86,3 @@ dkms.conf
*.out
*.app
# kicad backups
*-backups

View File

@ -1,180 +1,153 @@
//=============================================================================
// Demo program "Light run".
//
// Can be run under control of the ROBO TX Controller
// firmware in download (local) mode.
// Switches one after another six lamps connected to the outputs O1...O6.
//
// Disclaimer - Exclusion of Liability
//
// This software is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. It can be used and modified by anyone
// free of any license obligations or authoring rights.
//=============================================================================
// #include <stddef.h>
#include "ROBO_TX_PRG.h"
#include "ROBO_TX_FW.h"
#include <stddef.h>
#define LIGHT_ON DUTY_MAX
#define LIGHT_OFF 0
#define LIGHT_MAX DUTY_MAX
#define LIGHT_MIN DUTY_MIN
#define LIGHT_OFF 0
#define wait 10
#define RC 0x7FFF // return code: 0x7FFF - program should be further called by the firmware;
#define sRC 0
#define BEG_LAMP_IDX 0
#define END_LAMP_IDX 0
#define END_LAMP_IDX 2
#define COLOR_AMOUNT 3
enum color_pin {RED, GREEN, BLUE};
enum color_spectrum {pr, mb, pg, mr, pb, mg};
static unsigned long cur_time;
static unsigned long prev_time;
static enum {ON_1, PAUSE_1, ON_2, PAUSE_2} stage;
static short* states[COLOR_AMOUNT];
short green_state;
short red_state;
short blue_state;
enum color_pin pin;
enum color_spectrum spectrum_state;
static int lamp_idx;
static int n_loops;
static int wait;
void simple_rgb_test(TA * p_ta_array);
void spectrum();
void update_lights(TA * p_ta_array);
/*-----------------------------------------------------------------------------
* Function Name : PrgInit
*
* This it the program initialization.
* It is called once.
*-----------------------------------------------------------------------------*/
void PrgInit
(
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
)
{
prev_time = 0;
stage = ON_2;
lamp_idx = BEG_LAMP_IDX;
n_loops = 10;
wait = 1000;
prev_time = 0;
red_state = LIGHT_MIN;
green_state = LIGHT_MIN;
blue_state = LIGHT_MIN;
states[0] = &red_state;
states[1] = &green_state;
states[2] = &blue_state;
spectrum_state = 0;
pin = 0;
lamp_idx = BEG_LAMP_IDX;
}
/*-----------------------------------------------------------------------------
* Function Name : PrgTic
*
* This is the main function of this program.
* It is called every tic (1 ms) realtime.
*-----------------------------------------------------------------------------*/
int PrgTic
(
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
)
{
int rc = 0x7FFF; // return code: 0x7FFF - program should be further called by the firmware;
// 0 - program should be normally stopped by the firmware;
// any other value is considered by the firmware as an error code
// and the program is stopped.
TA * p_ta = &p_ta_array[TA_LOCAL];
TA * p_ta = &p_ta_array[TA_LOCAL];
// Get the current value of the system time
cur_time = p_ta->hook_table.GetSystemTime(TIMER_UNIT_MILLISECONDS);
while (1)
{
switch (stage)
{
case ON_1:
if (prev_time == 0)
{
// Switch the current lamp on
p_ta->output.duty[lamp_idx] = LIGHT_ON;
// Store the current value of the system time
prev_time = cur_time;
}
else
{
// The lamp should be on for the number of milliseconds from the variable "wait"
if (cur_time - prev_time >= wait)
{
// Switch the current lamp off
p_ta->output.duty[lamp_idx] = LIGHT_OFF;
if (lamp_idx + 1 <= END_LAMP_IDX)
{
prev_time = 0;
lamp_idx++; // switch to the next lamp
continue;
}
else
{
// Store the current value of the system time
prev_time = cur_time;
stage = PAUSE_1;
}
}
}
return rc;
case PAUSE_1:
// All lamps should be off for the number of milliseconds from the variable "wait"
if (cur_time - prev_time >= wait)
{
prev_time = 0;
stage = ON_2;
}
else
{
return rc;
}
case ON_2:
if (prev_time == 0)
{
// Switch the current lamp on
p_ta->output.duty[lamp_idx] = LIGHT_ON;
// Store the current value of the system time
prev_time = cur_time;
}
else
{
// The lamp should be on for the number of milliseconds from the variable "wait"
if (cur_time - prev_time >= wait)
{
// Switch the current lamp off
p_ta->output.duty[lamp_idx] = LIGHT_OFF;
if (lamp_idx - 1 >= BEG_LAMP_IDX)
{
prev_time = 0;
lamp_idx--; // switch to the previous lamp
continue;
}
else
{
// Store the current value of the system time
prev_time = cur_time;
stage = PAUSE_2;
}
}
}
return rc;
case PAUSE_2:
// All lamps should be off for 1 second
if (cur_time - prev_time >= 1000)
{
if (--n_loops <= 0)
{
rc = 0; // stop program
}
else
{
wait /= 2;
prev_time = 0;
stage = ON_1;
continue;
}
}
return rc;
default:
return rc;
}
}
return rc;
// if(cur_time-prev_time>=wait)
// {
// prev_time = cur_time;
// simple_rgb_test(p_ta_array);
// update_lights(p_ta_array);
// }
if(cur_time-prev_time>=wait)
{
prev_time = cur_time;
spectrum();
update_lights(p_ta_array);
}
return RC;
}
void spectrum()
{
switch(spectrum_state)
{
case pr:
if(++red_state>LIGHT_MAX) {++spectrum_state;}
break;
case mb:
if(--blue_state<LIGHT_MIN) {++spectrum_state;}
break;
case pg:
if(++green_state>LIGHT_MAX) {++spectrum_state;}
break;
case mr:
if(--red_state<LIGHT_MIN) {++spectrum_state;}
break;
case pb:
if(++blue_state>LIGHT_MAX) {++spectrum_state;}
break;
case mg:
if(--green_state<LIGHT_MIN) {spectrum_state = 0;}
break;
default:
spectrum_state = pr;
}
}
void simple_rgb_test
(
TA * p_ta_array // pointer to the array of transfer areas
)
{
TA * p_ta = &p_ta_array[TA_LOCAL];
p_ta->hook_table.DisplayMsg(p_ta, NULL);
switch(pin)
{
case RED:
p_ta->hook_table.DisplayMsg(p_ta, "RED");
blue_state = LIGHT_MIN;
red_state = LIGHT_MAX;
pin = GREEN;
break;
case GREEN:
p_ta->hook_table.DisplayMsg(p_ta, "GREEN");
red_state = LIGHT_MIN;
green_state = LIGHT_MAX;
pin = BLUE;
break;
case BLUE:
p_ta->hook_table.DisplayMsg(p_ta, "BLUE");
green_state = LIGHT_MIN;
blue_state = LIGHT_MAX;
pin = RED;
break;
default:
p_ta->hook_table.DisplayMsg(p_ta, NULL);
pin = RED;
}
}
void update_lights(TA * p_ta_array)
{
TA * p_ta = &p_ta_array[TA_LOCAL];
if(red_state>LIGHT_MAX) { red_state = LIGHT_MAX; }
if(green_state>LIGHT_MAX) { green_state=LIGHT_MAX; }
if(blue_state>LIGHT_MAX) { blue_state = LIGHT_MAX; }
if(red_state<LIGHT_MIN) { red_state = LIGHT_MIN; }
if(green_state<LIGHT_MIN) { green_state=LIGHT_MIN; }
if(blue_state<LIGHT_MIN) { blue_state = LIGHT_MIN; }
p_ta->output.duty[RED] = red_state;
p_ta->output.duty[GREEN] = green_state;
p_ta->output.duty[BLUE] = blue_state;
}

180
Demo_C/Demo/LED/LightRun.c Normal file
View File

@ -0,0 +1,180 @@
//=============================================================================
// Demo program "Light run".
//
// Can be run under control of the ROBO TX Controller
// firmware in download (local) mode.
// Switches one after another six lamps connected to the outputs O1...O6.
//
// Disclaimer - Exclusion of Liability
//
// This software is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. It can be used and modified by anyone
// free of any license obligations or authoring rights.
//=============================================================================
#include "ROBO_TX_PRG.h"
#define LIGHT_ON DUTY_MAX
#define LIGHT_OFF 0
#define BEG_LAMP_IDX 0
#define END_LAMP_IDX 0
static unsigned long cur_time;
static unsigned long prev_time;
static enum {ON_1, PAUSE_1, ON_2, PAUSE_2} stage;
static int lamp_idx;
static int n_loops;
static int wait;
/*-----------------------------------------------------------------------------
* Function Name : PrgInit
*
* This it the program initialization.
* It is called once.
*-----------------------------------------------------------------------------*/
void PrgInit
(
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
)
{
prev_time = 0;
stage = ON_2;
lamp_idx = BEG_LAMP_IDX;
n_loops = 10;
wait = 1000;
}
/*-----------------------------------------------------------------------------
* Function Name : PrgTic
*
* This is the main function of this program.
* It is called every tic (1 ms) realtime.
*-----------------------------------------------------------------------------*/
int PrgTic
(
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
)
{
int rc = 0x7FFF; // return code: 0x7FFF - program should be further called by the firmware;
// 0 - program should be normally stopped by the firmware;
// any other value is considered by the firmware as an error code
// and the program is stopped.
TA * p_ta = &p_ta_array[TA_LOCAL];
// Get the current value of the system time
cur_time = p_ta->hook_table.GetSystemTime(TIMER_UNIT_MILLISECONDS);
while (1)
{
switch (stage)
{
case ON_1:
if (prev_time == 0)
{
// Switch the current lamp on
p_ta->output.duty[lamp_idx] = LIGHT_ON;
// Store the current value of the system time
prev_time = cur_time;
}
else
{
// The lamp should be on for the number of milliseconds from the variable "wait"
if (cur_time - prev_time >= wait)
{
// Switch the current lamp off
p_ta->output.duty[lamp_idx] = LIGHT_OFF;
if (lamp_idx + 1 <= END_LAMP_IDX)
{
prev_time = 0;
lamp_idx++; // switch to the next lamp
continue;
}
else
{
// Store the current value of the system time
prev_time = cur_time;
stage = PAUSE_1;
}
}
}
return rc;
case PAUSE_1:
// All lamps should be off for the number of milliseconds from the variable "wait"
if (cur_time - prev_time >= wait)
{
prev_time = 0;
stage = ON_2;
}
else
{
return rc;
}
case ON_2:
if (prev_time == 0)
{
// Switch the current lamp on
p_ta->output.duty[lamp_idx] = LIGHT_ON;
// Store the current value of the system time
prev_time = cur_time;
}
else
{
// The lamp should be on for the number of milliseconds from the variable "wait"
if (cur_time - prev_time >= wait)
{
// Switch the current lamp off
p_ta->output.duty[lamp_idx] = LIGHT_OFF;
if (lamp_idx - 1 >= BEG_LAMP_IDX)
{
prev_time = 0;
lamp_idx--; // switch to the previous lamp
continue;
}
else
{
// Store the current value of the system time
prev_time = cur_time;
stage = PAUSE_2;
}
}
}
return rc;
case PAUSE_2:
// All lamps should be off for 1 second
if (cur_time - prev_time >= 1000)
{
if (--n_loops <= 0)
{
rc = 0; // stop program
}
else
{
wait /= 2;
prev_time = 0;
stage = ON_1;
continue;
}
}
return rc;
default:
return rc;
}
}
return rc;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,77 +0,0 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 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": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"meta": {
"filename": "Elysium.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@ -1,231 +0,0 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Elysium.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"legacy_lib_dir": "",
"legacy_lib_list": []
},
"sheets": [],
"text_variables": {}
}

View File

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

File diff suppressed because it is too large Load Diff