initial demo
This commit is contained in:
parent
1a714bd907
commit
e3235b34a4
8 changed files with 167 additions and 51 deletions
|
|
@ -4,7 +4,7 @@ use ch32_hal::timer::simple_pwm::SimplePwm;
|
|||
use ch32_hal::timer::Channel;
|
||||
use ch32_hal::delay::Delay;
|
||||
|
||||
use crate::insert_coin::services::{DacService, LedService, TickService, TickServiceData};
|
||||
use crate::insert_coin::services::{DacService, LedService, TickService, TickServiceData, Service};
|
||||
|
||||
|
||||
// static mut led0_index: usize = 0;
|
||||
|
|
@ -122,8 +122,6 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> {
|
|||
pub fn service(&mut self) {
|
||||
|
||||
if self.is_active() {
|
||||
self.led0.tick();
|
||||
self.led1.tick();
|
||||
self.dac.tick();
|
||||
|
||||
|
||||
|
|
@ -159,8 +157,6 @@ impl<'a, T: GeneralInstance16bit> InsertCoin<'a, T> {
|
|||
let led1_dcs = [0u8, 25u8, 50u8, 75u8, 100u8];
|
||||
|
||||
loop {
|
||||
self.led0.tick();
|
||||
self.led1.tick();
|
||||
self.dac.tick();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ use services::LedService;
|
|||
|
||||
pub use services::TickTimerService;
|
||||
|
||||
pub use services::{TickService, TickServiceData};
|
||||
pub use services::{TickService, TickServiceData, Service};
|
||||
pub use insert_coin::{InsertCoin, CoreConfig, SimplePwmCore};
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
use ch32_hal::timer::Channel;
|
||||
|
||||
use crate::insert_coin::services::{TickServiceData, TickService};
|
||||
use crate::insert_coin::services::{Service, TickService, TickServiceData};
|
||||
|
||||
pub struct LedService {
|
||||
service_data: core::cell::RefCell<TickServiceData>,
|
||||
// need_service: core::cell::RefCell<bool>,
|
||||
need_service: bool,
|
||||
pub channel: Channel,
|
||||
pub amplitude: u8,
|
||||
}
|
||||
|
|
@ -11,7 +12,8 @@ pub struct LedService {
|
|||
impl LedService {
|
||||
pub fn new(channel: Channel, service_data: TickServiceData) -> Self {
|
||||
Self {
|
||||
service_data: core::cell::RefCell::new(service_data),
|
||||
// service_data: core::cell::RefCell::new(service_data),
|
||||
need_service: false,
|
||||
channel,
|
||||
amplitude: 0,
|
||||
}
|
||||
|
|
@ -19,23 +21,19 @@ impl LedService {
|
|||
|
||||
pub fn set_amplitude(&mut self, amplitude: u8) {
|
||||
self.amplitude = amplitude;
|
||||
self.need_service = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl TickService for LedService {
|
||||
fn tick(&self) {
|
||||
let mut tc = self.service_data.borrow_mut();
|
||||
tc.ticks_remaining = tc.ticks_remaining.saturating_sub(1);
|
||||
}
|
||||
impl Service for LedService {
|
||||
|
||||
fn need_service(&self) -> bool {
|
||||
self.service_data.borrow().ticks_remaining == 0
|
||||
self.need_service
|
||||
}
|
||||
|
||||
fn service(&self) {
|
||||
let mut tc = self.service_data.borrow_mut();
|
||||
tc.ticks_remaining = tc.ticks_per_service;
|
||||
fn service(&mut self) {
|
||||
self.need_service = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
mod services;
|
||||
pub use services::{TickService, TickServiceData};
|
||||
pub use services::{TickService, TickServiceData, Service};
|
||||
|
||||
mod led;
|
||||
pub use led::LedService;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ impl TickServiceData {
|
|||
pub fn new(ticks_per_service: usize) -> Self {
|
||||
Self {
|
||||
ticks_per_service,
|
||||
ticks_remaining: 0,
|
||||
ticks_remaining: ticks_per_service,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,3 +23,9 @@ pub trait TickService {
|
|||
/// the service needs to be serviced here
|
||||
fn service(&self);
|
||||
}
|
||||
|
||||
|
||||
pub trait Service {
|
||||
fn need_service(&self) -> bool;
|
||||
fn service(&mut self);
|
||||
}
|
||||
|
|
@ -4,25 +4,45 @@ use crate::insert_coin::services::{TickServiceData, TickService};
|
|||
|
||||
pub struct TickTimerService {
|
||||
service_data: core::cell::RefCell<TickServiceData>,
|
||||
auto_reset: bool,
|
||||
enabled: bool,
|
||||
}
|
||||
|
||||
impl TickTimerService {
|
||||
pub fn new(service_data: TickServiceData) -> Self {
|
||||
pub fn new(service_data: TickServiceData, auto_reset: bool) -> Self {
|
||||
Self {
|
||||
service_data: core::cell::RefCell::new(service_data),
|
||||
auto_reset,
|
||||
enabled: false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_enabled(&self) -> bool {
|
||||
self.enabled
|
||||
}
|
||||
|
||||
pub fn reset(&mut self) {
|
||||
let mut sd = self.service_data.borrow_mut();
|
||||
sd.ticks_per_service = sd.ticks_remaining;
|
||||
self.enabled = false;
|
||||
}
|
||||
|
||||
pub fn enable(&mut self, enable: bool) {
|
||||
self.enabled = enable;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl TickService for TickTimerService {
|
||||
fn tick(&self) {
|
||||
let mut tc = self.service_data.borrow_mut();
|
||||
tc.ticks_remaining = tc.ticks_remaining.saturating_sub(1);
|
||||
if self.enabled {
|
||||
let mut tc = self.service_data.borrow_mut();
|
||||
tc.ticks_remaining = tc.ticks_remaining.saturating_sub(1);
|
||||
}
|
||||
}
|
||||
|
||||
fn need_service(&self) -> bool {
|
||||
self.service_data.borrow().ticks_remaining == 0
|
||||
self.enabled && self.service_data.borrow().ticks_remaining == 0
|
||||
}
|
||||
|
||||
fn service(&self) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue