6 Commits
7 changed files with 887 additions and 263 deletions
+1
View File
@@ -31,3 +31,4 @@ creaturedex.wiki/
# KiCad
*.zip
*.lck
schematics/.history/
+5
View File
@@ -15,6 +15,7 @@
"vias": 1.0,
"zones": 0.6
},
"prototype_zone_fills": false,
"selection_filter": {
"dimensions": true,
"footprints": true,
@@ -54,6 +55,7 @@
"zone_display_mode": 0
},
"git": {
"integration_disabled": false,
"repo_type": "",
"repo_username": "",
"ssh_key": ""
@@ -73,6 +75,7 @@
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_time_domain_details": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
@@ -83,6 +86,7 @@
"files": []
},
"schematic": {
"hierarchy_collapsed": [],
"selection_filter": {
"graphics": true,
"images": true,
@@ -90,6 +94,7 @@
"lockedItems": false,
"otherItems": true,
"pins": true,
"ruleAreas": true,
"symbols": true,
"text": true,
"wires": true
+43 -5
View File
@@ -10,17 +10,28 @@
"via_dimensions": []
},
"ipc2581": {
"bom_rev": "",
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
"mpn": "",
"sch_revision": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"component_class_settings": {
"assignments": [],
"meta": {
"version": 0
},
"sheet_component_classes": {
"enabled": false
}
},
"cvpcb": {
"equivalence_files": []
},
@@ -210,11 +221,14 @@
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"field_name_whitespace": "warning",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"ground_pin_not_ground": "warning",
"hier_label_mismatch": "error",
"isolated_pin_label": "warning",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
@@ -237,6 +251,7 @@
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"stacked_pin_name": "warning",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"undefined_netclass": "error",
@@ -269,13 +284,14 @@
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"tuning_profile": "",
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 4
"version": 5
},
"net_colors": null,
"netclass_assignments": null,
@@ -297,6 +313,10 @@
},
"schematic": {
"annotate_start_num": 0,
"annotation": {
"method": 0,
"sort_order": 0
},
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
@@ -368,6 +388,7 @@
"sort_asc": true,
"sort_field": "Reference"
},
"bus_aliases": {},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
@@ -375,6 +396,7 @@
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"hop_over_size_choice": 0,
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
@@ -398,6 +420,7 @@
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"reuse_designators": true,
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
@@ -406,13 +429,28 @@
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
"subpart_id_separator": 0,
"top_level_sheets": [
{
"filename": "creaturedex.kicad_sch",
"name": "creaturedex",
"uuid": "f0cf9cac-01dc-4071-b72f-ebf42dbd12d6"
}
],
"used_designators": "",
"variants": []
},
"sheets": [
[
"f0cf9cac-01dc-4071-b72f-ebf42dbd12d6",
"Root"
"creaturedex"
]
],
"text_variables": {}
"text_variables": {},
"tuning_profiles": {
"meta": {
"version": 0
},
"tuning_profiles_impedance_geometric": []
}
}
File diff suppressed because it is too large Load Diff
+14 -2
View File
@@ -30,7 +30,7 @@ use embedded_hal_bus::i2c::AtomicDevice;
use embedded_hal_bus::util::AtomicCell;
use esp_hal::Blocking;
use esp_hal::clock::CpuClock;
use esp_hal::gpio::{Input, InputConfig, Pull};
use esp_hal::gpio::{Input, InputConfig, Level, Output, OutputConfig, Pull};
use esp_hal::i2c::master::{Config as I2cConfig, I2c};
use esp_hal::timer::timg::TimerGroup;
use log::error;
@@ -74,10 +74,22 @@ async fn main(spawner: Spawner) {
peripherals.GPIO37, // miso
peripherals.GPIO11, // primary cs
peripherals.GPIO13, // oled cs
peripherals.GPIO10, // shared reset
peripherals.GPIO10, // primary reset
peripherals.GPIO47, // secondary reset
peripherals.GPIO12, // shared dc
)));
let _secondary_oled_cs_2 = Output::new(
peripherals.GPIO14,
Level::High,
OutputConfig::default(),
);
let _secondary_oled_cs_3 = Output::new(
peripherals.GPIO21,
Level::High,
OutputConfig::default(),
);
let config = I2cConfig::default().with_frequency(esp_hal::time::Rate::from_khz(400));
let i2c = match I2c::new(peripherals.I2C0, config) {
Ok(bus) => bus
+10 -8
View File
@@ -225,7 +225,7 @@ pub struct Sprite {
#[derive(Debug, Clone)]
pub struct Card {
pub uuid: String,
pub uuid: u32,
pub event: Events,
pub cardtype: CardType,
pub name: String,
@@ -241,14 +241,16 @@ pub struct Card {
impl<'a> TryFrom<RawCard> for Card {
type Error = &'static str;
fn try_from(payload: RawCard) -> Result<Self, Self::Error> {
let uuid: String = "empty for now".into(); //str::from_utf8(payload.card_uuid).unwrap().into();
let event = decode_known_event(&payload.event_encoding);
let cardtype = CardType::from(payload.card_type);
let (name, trait1, trait2, trait3) = decode_packed_card_text(&payload.packed_card_text);
let secret = decode_secret(&payload.secret);
fn try_from(raw_card: RawCard) -> Result<Self, Self::Error> {
let uuid: u32 = (u16::from_ne_bytes(raw_card.event_encoding) as u32) << 16
| (u16::from_ne_bytes(raw_card.card_uuid) as u32);
let event = decode_known_event(&raw_card.event_encoding);
let cardtype = CardType::from(raw_card.card_type);
let (name, trait1, trait2, trait3) = decode_packed_card_text(&raw_card.packed_card_text);
let secret = decode_secret(&raw_card.secret);
let sprite = Sprite {
data: payload.sprite.to_vec(),
data: raw_card.sprite.to_vec(),
};
Ok(Self {
uuid,
+12 -8
View File
@@ -1,4 +1,3 @@
use crate::display::primary_lcd::{PrimaryLcdDisplay, init_primary_lcd_on_bus};
use alloc::boxed::Box;
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embedded_hal::digital::ErrorType;
@@ -12,6 +11,7 @@ use esp_hal::spi::master::{Config as SpiConfig, Spi};
use esp_hal::time::Rate;
use crate::display::secondary_oled::{SecondaryOledDisplay, init_secondary_oled_on_bus};
use crate::display::primary_lcd::{PrimaryLcdDisplay, init_primary_lcd_on_bus};
use core::cell::RefCell;
use embassy_sync::blocking_mutex::Mutex as BlockingMutex;
@@ -52,14 +52,15 @@ pub type DualPrimaryDisplay<'a> =
pub type DualSecondaryDisplay<'a> =
SecondaryOledDisplay<'a, DisplaySpiBus, SharedPin<'a, Output<'a>>, SharedPin<'a, Output<'a>>>;
pub fn init_dual_displays<SPI, SCK, MOSI, MISO, CS1, CS2, RES, DC>(
pub fn init_dual_displays<SPI, SCK, MOSI, MISO, CS1, CS2, RES1, RES2, DC>(
spi_peripheral: SPI,
sck: SCK,
mosi: MOSI,
miso: MISO,
cs_primary: CS1,
cs_secondary: CS2,
reset_pin: RES,
reset_primary: RES1,
reset_secondary: RES2,
dc_pin: DC,
) -> (DualPrimaryDisplay<'static>, DualSecondaryDisplay<'static>)
where
@@ -69,7 +70,8 @@ where
MISO: PeripheralInput<'static>,
CS1: OutputPin + 'static,
CS2: OutputPin + 'static,
RES: OutputPin + 'static,
RES1: OutputPin + 'static,
RES2: OutputPin + 'static,
DC: OutputPin + 'static,
{
let spi = Spi::new(
@@ -84,15 +86,17 @@ where
.with_miso(miso);
let bus_static: &'static AtomicCell<_> = Box::leak(Box::new(AtomicCell::new(spi)));
let reset_static =
SharedPin::pre_wrap(Output::new(reset_pin, Level::High, OutputConfig::default()));
let reset_primary_static =
SharedPin::pre_wrap(Output::new(reset_primary, Level::High, OutputConfig::default()));
let reset_secondary_static =
SharedPin::pre_wrap(Output::new(reset_secondary, Level::High, OutputConfig::default()));
let dc_static = SharedPin::pre_wrap(Output::new(dc_pin, Level::High, OutputConfig::default()));
let mut delay = Delay::new();
let primary = init_primary_lcd_on_bus(
bus_static,
cs_primary,
SharedPin::new(reset_static),
SharedPin::new(reset_primary_static),
SharedPin::new(dc_static),
&mut delay,
);
@@ -100,7 +104,7 @@ where
let secondary = init_secondary_oled_on_bus(
bus_static,
cs_secondary,
SharedPin::new(reset_static),
SharedPin::new(reset_secondary_static),
SharedPin::new(dc_static),
&mut delay,
);