text:
How YouCAN Is Growing Grassroots Education Leaders to Improve Their Schools a...
How YouCAN Is Growing Grassroots Education Leaders to Improve Their Schools and Communities
Profound Gentlemen
By Kate Stringer
When first-grade teacher May Amoyaw wanted to start a grassroots education project in her Baltimore community, she knew the idea couldn't come solely from her.
"I'm not originally from Baltimore, so I didn't feel like it was my job to go in and create something for them," Amoyaw said. "I really wanted to elevate the voices that were already there. If you guys are already doing it, great, let's get together, let me add my part, and let's do what we can for our neighborhood."
Amoyaw's belief in this approach was further supported through her advocacy training with YouCAN, a program begun last year by education reform nonprofit 50CAN to develop community education leaders across the U.S.
Through YouCAN's training, Amoyaw learned to build and connect systems already in place. She created a parent advisory council and conducted a listening tour to hear about community education problems and efforts to address them.
(The 74 Exclusive: Ed Reform Groups StudentsFirst and 50CAN to Merge)
50CAN already had an Education Advocacy Fellowship program, but the desire for training in how to effect community-driven change far outstripped its capacity: When the organization introduced the paid, year-long program in January 2015, it received nearly 800 applications for just five spots.
So 50CAN started YouCAN, which is more cost-effective and can accept more applicants. Starting with a two-day orientation in Washington, D.C., the 11-month program helps advocates create education-oriented projects and provides training, one-on-one mentoring, and peer support.
As the second class of YouCAN fellows begins this month, projects started by last year's trainees are going strong. From addressing illiteracy to retaining minority teachers in the classroom, here's a look at some of the solutions YouCAN advocates have cultivated.
Literacy: Not just for early learners
Kesha Lee, a longtime education proponent, had known that literacy was an issue for families in her southeast D.C. neighborhood. But she saw an unexpected hunger for reading when she tried to start a lending library in a local barbershop. After delivering 400 books, she left for vacation. When she returned, all the books were gone.
"I talked to the owner, and he said, 'Kesha, the kids kept asking me, "Can I keep them?" and I didn't have the heart to tell them no.' " Lee said. "I said, 'OK, that's a good problem to have.' "
In Washington, there's a huge disparity in the access that people in different neighborhoods have to buying books. A 2016 study about book deserts examined the literary resources for sale across neighborhoods and revealed that in southeast D.C., there was one book for every 830 children — but the wealthier Capitol Hill neighborhood had one book for every two kids (this does not include library books).
For her YouCAN project, Lee wanted to address this literacy inequality. But she didn't want her work to be limited to one group of learners. Instead, she wanted to show how poor literacy promoted systemic inequalities across all ages. In her neighborhood, younger children don't have access to books, an average of only 3 percent of middle and high schoolers are proficient in reading, and the illiteracy rate among people over 16 has been as high as 50 percent. Such literacy gaps create barriers between blue-collar and middle-class jobs.
"Why aren't people more angry? Why aren't we more upset about this?" Lee asked. "Especially the fact that we live in D.C., which is the tragedy of all this: It's one of the more highly educated cities in the U.S."
Sign Up for The 74's Newsletter
To raise awareness, she is launching a website that can serve as an advocacy space. She has mapped out plans to submit op-eds to major media publications and is considering advertising on public transportation. She's also attending local community meetings to make her pitch on why this issue needs more attention.
One focus is connecting existing organizations and raising awareness of resources that are already available but aren't advertised well in the neighborhood. For example, Lee said, many parents aren't aware that they can register for D.C.'s Books From Birth program, which sends a free book each month to every child age 0 to 5 who lives in the District.
Also receiving focus are the lending libraries that inspired Lee's work in the first place. Three libraries are operating in neighborhood barbershops now, and she hopes that through her new website, the community can help decide where the next ones should go. Through a YouCAN crowdfunding project, she's already raised $2,000 for new books.
Building an oasis in a food desert
Every day, May Amoyaw would watch her first-graders arrive at school with soda, candy, and Cheetos for breakfast. She knew they hadn't bought junk food because they craved artificial flavorings — none of the grocery stores within a mile of the school sold the kinds of healthy snacks that Amoyaw sometimes purchased for the kids with her own money.
Those students were on her mind when Amoyaw signed up to be a YouCAN advocate. She didn't know what she wanted her grassroots education project to entail, but she knew she wanted to connect what was often referred to as "the two Baltimores": the parents and students with the policymakers. Most important, she wanted the community's voice, rather than her own, to lead the discussion.
But the issue of food deserts kept coming up as something people in the community wanted to change — and some were already trying to. When Amoyaw talked with Councilman Kristerfer Burnett, she learned about the Edmondson Village Farmers Market, which was created specifically to address the neighborhood's food desert.
So Amoyaw asked if she could add a youth component, having students grow fruits and vegetables and sell them at the market.
Amoyaw connected with the Edgewood-Lyndhurst Recreation Center, where many students played basketball as they waited for their parents after school, and had eight raised garden beds constructed outside for what's now called the Blade Project.
The farmers market won't reopen until the spring, but Amoyaw is already envisioning a larger future for the Blade Project.
"My big vision is, I hope that every school will have fresh produce that is grown by the students themselves," she said. "There's something very powerful about doing something yourself versus going to Giant and picking it up."
With hydroponic techniques that allow food to be grown without soil, Amoyaw also hopes students can start gardening at home.
Minority teachers make the difference
Jason Terrell never taught Jalen, a middle-schooler at his school in Charlotte, N.C., but every day Jalen would come find Terrell — before school, during class, after school — just to talk. Jalen was a repeat student and had disciplinary issues, but he found a mentor in Terrell, one of the few educators in the school who looked like him: a black male.
Research shows that when student demographics are mirrored by their teachers, achievement scores improve. But while schools have gotten better at recruiting minority teachers, their ranks have grown at a slower rate than the population of minority students. And as difficult as it is to recruit minority teachers, retaining them is even harder.
Terrell and his Teach for America roommate Mario Jovan Shaw both felt the frustrations of being among the few black male educators in their schools. They were often called on to fill disciplinary roles or coaching spots, but rarely for curriculum or professional development. So they started Profound Gentlemen in 2014 with the goal of retaining enough men of color in schools for students of color to engage with.
(The 74: How Denver Is Tackling the 'Invisible Tax' on Black Educators)
"People are becoming more receptive to keeping the teachers in the classroom, making sure they have the best development opportunities possible instead of just getting teachers in the door," Terrell said.
He said he hopes to connect male educators of color both with their professional peers and with their students. The nonprofit Profound Gentlemen network has 150 member educators who create mentorship groups at their schools. These groups can be incorporated into a sports team or developed from scratch. The goal is for the group to work on social-emotional learning activities for at least two hours a month, discussing things like handling trauma, stress, or anger. And with grant money from YouCAN, Profound Gentlemen can give financial support to some of those projects.
"In my time as a baseball coach, I never had, really, the conversation around how to manage your anger with my baseball team. I didn't even think of it," Terrell said. "I wish I would have had an opportunity to have conversations with my group of guys. I think I would have had even more of an impact on them beyond the sport."
Terrell and Shaw also created an app to help educators connect with one another, explore different mentoring programs, and share advice. And they want to begin supporting professional development opportunities.
"At the end of the day, before they can be mentors in their school, they have to be killing it in the classroom," Terrell said.
Articles by Kate Stringer


text:
Highlands & Islands Weather Live
Dispute ends as air traffic controllers accept revised offer
Highlands and Islands Airport Limited (HIAL) confirmed ballot had resulted in "overwhelming acceptance".
Resolved: Pay dispute
Published 3rd January 2020 at 3:01 pm
Air traffic controllers balloted on revised pay offer
Air traffic controllers in the Highlands have accepted a revised pay offer from their employers – resolving a long-running dispute.
Highlands and Islands Airport Limited (HIAL) confirmed a ballot of the union Prospect's membership had resulted in "an overwhelming acceptance".
Inglis Lyon, managing director of HIAL, said on Friday: "I'm pleased to advise that the air traffic controller pay dispute has now been resolved.
"Prospect has confirmed today that, following a ballot of their membership, there was an overwhelming acceptance of our revised pay offer.
"Acceptance of this offer sees air traffic controllers receiving the 2019/20 pay increase already awarded to other HIAL staff, along with a commitment to a similar award in 2020/21, assuming that Scottish Government's pay policy remains broadly the same.
"In addition, they will receive a retention payment for a three-year period.
"This now draws the air traffic controller industrial action to a close and we look forward to working with our air traffic control staff as we strive to maintain and develop sustainable airport services for the future."
Prospect had agreed to lift a work-to-rule approach in November, while a deal was being considered.
Prior to that members took industrial action in May and were scheduled to walk out again on June 12 but called off the strike after HIAL put forward a deal which was also later rejected.
Other strikes then took place at Inverness Airport on July 21, at Sumburgh, Kirkwall and Wick airports on July 22, and at Dundee, Stornoway and Benbecula airports on July 23.
Air traffic controllers then rejected a HIAL offer in September before the latest was accepted on Friday.
HighlandsScotland

redpajama_set_name: RedPajamaCommonCrawl


MIAMI, April 26, 2013—SAVE Dade and SAVE Foundation today announced their 2013 Champions of Equality to be honored May 20 at the eighth annual awards reception.
SAVE Dade established the Champions of Equality awards reception in 2005 to honor people who have significantly advanced the cause of equality for the lesbian, gay, bisexual, and transgender (LGBT) community in Miami-Dade County. The event's honorees this year include State Representative David Richardson, U.S. Congressman Joe Garcia, and Miami-Dade County Commission Chairwoman Rebeca Sosa.
Representative David Richardson made history after being elected Florida's first openly gay state legislator in August 2012. "I'm so proud to represent the LGBT community and the community at large," he says. "I'm humbled by the honor SAVE has bestowed on me." Richardson has served Florida's 113th house district admirably in Tallahassee since the start of the legislative session in January.
Richardson wasn't the only winner during the 2012 election cycle. Florida's 26th congressional district elected Congressman Joe Garcia by a double-digit margin last November. Garcia has been a leader in the Cuban-American community on LGBT issues and has been a steadfast advocate for gays and lesbians in the House of Representatives.
SAVE Dade is also proud to honor Commission Chair Rebeca Sosa, the current Chair of the Miami-Dade County Commission. Elected in a 2001 special election to serve the county's 6th District, the Commission appointed her last year to assume the position of Chair, a role that she has graciously fulfilled. As commissioner, Sosa voted in May 2008 for the ordinance that created the Miami Dade domestic partner registry. She has also expressed support for a transgender-inclusive amendment to the Miami-Dade County Human Rights Ordinance which would prohibit discrimination on the basis of gender identity and expression, among other protected classes. SAVE Dade is proud to honor Chairwoman Sosa for her support of LGBT priorities.
This year's Champions of Equality reception will be held May 10th at the Hilton Miami Downtown from 6:00 PM - 9:30 PM. Tickets to the event, which will include a cocktail reception and silent auction, are $100 in advance and $150 at the door. Tickets are currently available for presale at www.savedade.org/champions.


This is a placeholder page for Mary Issacs, which means this person is not currently on this site. We do suggest using the tools below to find Mary Issacs.
You are visiting the placeholder page for Mary Issacs. This page is here because someone used our placeholder utility to look for Mary Issacs. We created this page automatically in hopes Mary Issacs would find it. If you are not Mary Issacs, but are an alumni of Bryan High School Bryan, OH, register on this site for free now.


text:
Permanently shadowed regions where lunar water may exist. (NASA's Goddard Space Flight Centre)
Scientists Just Reported The First Unambiguous Detection of Water on The Moon
It's official. There's water on the Moon.
We've thought that there was for over a decade, based on detections described back in 2009, but there was room for interpretation in the wavelengths used. Now, using a different wavelength unique to water, scientists report the first unambiguous detection.
Those 2009 conclusions were apparently on the money.
The ambiguity arose because the 2009 detections were made in the 3-micrometre infrared band. At this wavelength, there were two possibilities - water, or another hydroxyl compound comprising hydrogen and oxygen.
Led by astronomer Casey Honniball of the NASA Goddard Space Flight Centre, a team of scientists decided to look into the wavelength that could confirm or overturn those findings. The 6-micrometre infrared band should show a line that can only be created by two hydrogen atoms and one oxygen atom - what is called the H-O-H bend vibration.
But actually making an unambiguous detection in that band is tricky. It requires the use of the Stratospheric Observatory for Infrared Astronomy (SOFIA), a special, one-of-a-kind telescope that is flown in a plane above the bulk of Earth's atmosphere.
"SOFIA is the only current and planned observatory capable of these observations," Honniball told ScienceAlert.
"Current lunar spacecraft do not have instruments that can measure at 6 micrometres, and from the ground, Earth's atmosphere blocks 6-micron light, and so it cannot be done from ground-based observatories. SOFIA flies above 99.9 percent of the Earth's water vapour, which allows 6-micrometre light to pass through and be observed. And luckily SOFIA's FORCAST instrument can make 6-micrometre measurements and look at the Moon."
Using FORCAST, the team carefully studied a region in which the 3-micrometre detections had been made - high southern latitudes, around the south pole. There, they found the emission line they had been hoping for - that unique signature that could only be created by the H-O-H bend vibration.
Based on their detections, the team estimates water abundances of around 100 to 400 parts per million - consistent with 3-micrometre detections made by the Moon Mineralogy Mapper.
Of course, there are no liquid lakes sloshing around on the lunar surface, and any frozen water would sublimate as soon as the sunlight hit it. But there are multiple ways the Moon could still be harbouring surface water.
"We mainly think the water is in glass," Honniball said.
"When a micrometeorite impacts the Moon, it melts some lunar material, which quickly cools and forms a glass. If there is water already present, formed during or delivered during the impact, some of the water can be captured in the structure of the glass while it cooled."
In a separate paper led by astronomer Paul Hayne of the University of Colorado Boulder, scientists explored another possibility - regions of permanent shadow in polar craters. At high latitudes, high crater rims create regions that sunlight never touches.
In these spots, temperatures never reach above approximately -163 degrees Celsius (-260 degrees Fahrenheit), creating cold traps that could harbour hidden patches of water ice.
Using data from NASA's Lunar Reconnaissance Orbiter, Hayne and his colleagues calculated that there could be as much as 40,000 square kilometres (15,000 square miles) of such permanently shadowed surface. And 60 percent of that is at the south pole.
"The temperatures are so low in cold traps that ice would behave like a rock," Hayne said. "If water gets in there, it's not going anywhere for a billion years."
Both papers have very important implications for future lunar missions. NASA is planning to establish a lunar base as part of the Artemis mission; if an abundant source of water can be found nearby, lunar residents could make use of it for drinking, for growing crops, even splitting it using electrolysis to obtain hydrogen for rocket fuel.
But we need to get a better picture of where the water might be, and how much is there. The work of Haynes' team will help work out where to look; the work of Honniball's team gives us the how. All we need now is the telescope time.
"We have been granted two more hours on SOFIA and are requesting an additional 72 hours," Honniball said. "With more observations we will be able to characterise the behaviour of water across the lunar surface and understand its source, where it resides, and if it moves around the lunar surface."
Both papers have been published in Nature Astronomy. They can be found here and here.


Self drive van hire in Kirkham and Lancashire from our trusted partners. Huge selection of cheap van hire options available in Kirkham. Compare prices & book online.
Listing all types of businesses offering all types of products and services, we are well and truly the one stop shop for your rental needs. This includes Van Hire; a service that people in Kirkham notoriously struggle to shop for.
If you have found yourself on the search for Van Hire in Kirkham then we at Anything for Hire can help. To access details, reviews and quotes from all of the Van Hire businesses in Kirkham, all you have to do is request them. You can do this by answering two questions on our homepage, what you want to hire and where you want the hire to take place. Then, our system will work its magic! Presenting you with a full list of all of your options, you can scroll through the best deals in and around Kirkham. What's more is that it is not just basic Van Hire we can help you find, with also listing a variety of Cheap Van Hire and Van Rental businesses for you to shop with.
We offer Cheap Van Hire in all local areas including Ormskirk, Cleveleys, Preesall, Haslingden, Fleetwood, Nelson, Padiham, Adlington, Great Harwood, Skelmersdale, Wesham, Bacup, Leyland, Penwortham, Burnley, Whitworth, Blackpool, Carnforth. Our visitors who search for Van Hire also tend to search for Transport, Truck Hire, Self Drive Van, Van Hire, Lorry, Vans.


Brussel Sprout Salad is filled with antioxidants, vitamins and minerals. Brussel spout is an excellent source of vitamin K. Vitamin k may help prevent cancer. One of the most important benefits of vitamin K is it regulates blood clotting and it also transports calcium throughout the body.
Brussel Sprouts are also a great source of vitamin C and folate. One thing brussel sprout is known for is its ability to detoxicate. It contains high amounts of antioxidants and has anti-inflammatory agents.
Brussel Sprout Salad has high amounts of dietary fiber, manganese and vitamin A. It contains rich amounts of vitamin B6 and vitamin C.
Brussel Sprout Salad is ranked as a Grade A food. It contains most of the essential vitamins and minerals. It has more than 96 percent vitamin C, 16 percent vitamin C, 7 percent Iron and about 3 percent calcium.
One serving of brussel sprout salad has 121 calories (84 calories from fat), 9.3g total fat (0.7 saturated fat), 2mg cholesterol, 385mg sodium, 302mg potassium and 9.5g total carbohydrates.
It contains 3.2g protein in one serving.


The following are various forms and documents needed for daycare or classes at Best Friends Obedience, Agility, and Doggy Daycare. You can fill these forms out on your computer, print them out and send them in. Once they are on your screen, you need not stay connected to the internet. If you prefer you can receive paper copies of these forms by contacting Best Friends at (541) 754-6956.
The following class enrollment form is necessary for all classes.
You can fill in the forms online, then print them, or save the completed file and email it as an attachment.
Or you can print it blank and fill it out by hand.


The corner that is presumably supposed to connect to the watch star, is actually placed too far out connecting to nothing.
This happens 9 out of 10 page loads in latest Chrome on iPad (iOS 8.3), and also reproducible on desktop.
At http://en.m.wikipedia.beta.wmflabs.org/wiki/Alcatraz_Island, logged-out, after opting into Beta from the settings.
While not possible on mobile, when letting the page fully load and doing a window resize, the corner usually corrects itself. I guess the styles are computed prematurely and hitting a race condition.
Perhaps the distance can be computed relatively from the top right corner of the overlay (using the known width of the icon) instead of absolutely for from top left corner of the page container (which depends on a lot of variables only known at run time).
Krinkle added projects: Gather, MobileFrontend.
• Jdlrobson moved this task from Needs Analysis to To Do on the Reading-Web-Sprint-50-The-X-Files board.
• Jdlrobson moved this task from To Triage to Old Unorganized Resolved Tasks on the Readers-Web-Backlog board.
• Jdlrobson merged a task: T103234: TutorialOverlay arrow looks misplaced.
• Jdlrobson added a subscriber: Florian.
@Jdlrobson What are your thoughts about accepting this as a regression fix with plans to investigate the root cause? See my response please.
I'm just concerned that we keep hitting problems with this thing, and as annoying as they are I'd rather we got to the bottom of it. Since it's a visual bug it's hard to catch this re-occurring with tests.
Let me have a poke around at the code and see if I can work out what's happening here.
There was a bug in the banner image. It was deleting itself but not triggering a refresh event.
The banner patch seems to solve the issue only because it runs late.
• rmoen moved this task from Doing to -1 (Needs More Work) on the Reading-Web-Sprint-50-The-X-Files board.
• rmoen mentioned this in rEGAT1da4bcd3db9e: Delay tutorial so it is more noticeable to the user.
Verified on BC. I've raised a bug for the spurious behaviour of the lead image when there's no image to display (T103967).
Imagine we disable the banner images module and don't delay showing the tutorial, what will you see? The same bug!
@Jdlrobson, so please instead of dismissing my patch and saying that you don't understand it, let me know which part is confusing and I'll address it in a subsequent patch.
Also, why did we start delay showing the overlay all of a sudden? To "fix" the bug? Or was there a design decision?
This sounds like a different variant of the bug that you should raise a task that should be evaluated. Currently we have a banner images module. We do delay showing it.
The bit thats been confusing me is not having a bug with reproducible steps as I've said on the patch. I paired with @rmoen yesterday and we got a fixed for the issue that @Krinkle raised and that @phuedx has now signed off on.
On subject of timeout we decided that knowing that the banner will reposition itself and that the user doesn't need to have to see it instantly it was better to delay showing the pointer until the design had stabilised so it doesn't move.
I think if we fix asynchronous loading of the banner as in the bug Sam opened we could always reconsider this decision.
With @bmansurov's blessing, I'm closing this as Resolved. Thanks for the discussion y'all.


text:
Events Deals Jobs
Add New Class
Video Producer, Proper Tasty
BuzzFeed // news & entertainment content
London Posted: Thursday, December 02, 2021
BuzzFeed is the worlds leading tech-powered, diversified media company that reaches hundreds of millions of people globally through its cross-platform news & entertainment network. The company produces articles, lists, quizzes, videos, & original series; lifestyle content through brands including Tasty, the worlds largest social food network; original reporting & investigative journalism through BuzzFeed News & HuffPost; an industry-leading affiliate business, strategic partnerships, licensing & product development through BuzzFeed Commerce; & original productions across broadcast, cable, SVOD, film & digital platforms for BuzzFeed Studios.
BuzzFeed is looking for a creative & resourceful video producer with experience in food & drink who can help build compelling viral content for Tasty in the UK.
Youll be a native of the digital & pop cultural landscape with intimate knowledge of the latest & greatest in social media, food content, & emerging technology/platforms.
The ideal candidate will have a background in independent video production & an obsession with storytelling & understand how to make food look tasty on camera.
You'll develop, produce, edit & star in editorial video content on a weekly basis, ensuring it is published across as many platforms as possible.
The successful candidate will have experience working with commercial clients, including handling the ideation, creation & project management of branded videos.
Be responsible for generating engaging & viral food content on a weekly basis that appears across multiple platforms
Be responsible for ideating, planning, researching, recipe testing, shooting, editing & finishing editorial content
Appear in videos & be open to helping other teams with shoots, appearing in their videos & other branded campaigns if needed
Apply video learnings to inspire virality, new formats, & valuable integrations for branded partnerships
Work within our branded process, including internal feedback & client feedback & revisions, able to juggle multiple projects at once in various stages
Experiment & reiterate on past successes, & be interested in analysing the results of your work & help inspire others to do the same
Keep informed on the latest internet trends & social platforms & have the ability to adapt own work accordingly
Ensure recipes are to a high standard
Experience working with food & drink with the ability to generate recipes & ideas of all cuisine with ease & understand how to make food look tasty on camera.
Have a professional understanding linear editing programs such as Premiere Pro & Final Cut & have a rapid editing workflow
Have a great understanding of DSLR cameras as well as Canon C100/C300s, lenses & beyond, & the ability to use these tools to create premium content
An efficient editing workflow to ensure projects are cut as efficiently as possible
Excellent communication skills & an ability to
The ability to juggle multiple projects seamlessly with strong organisation
Experience working with commercial clients with the ability to be client-facing
All job applications must be received through the official BuzzFeed Jobs board (https://www.buzzfeed.com/about/jobs), including referrals. It is BuzzFeed's practice to not schedule job interviews until after an application is submitted through our jobs board.
Life at BuzzFeed
At BuzzFeed, we believe our work benefits from the diverse perspectives of our employees. As such, BuzzFeed celebrates inclusion & is committed to equal opportunity employment. At BuzzFeed, you can expect:
A supportive, inclusive atmosphere on a team that values your contributions
Opportunities for personal & professional growth via work experience, offerings from our in-house Learning @ BuzzFeed team, our Employee Resource Groups, & more
An attractive & equitable compensation package, including salary & stock options
A generous & well-rounded benefits program featuring PTO, unlimited sick time, comprehensive medical benefits, a family leave policy, access to mental health platforms, retirement plans, gym & wellness discounts, & much more
Plenty of snacks (healthy & indulgent), catered lunches, beverages, etc..
BuzzFeed is proud to be an equal opportunity workplace. All qualified applicants will receive consideration for employment without regard to, & will not be discriminated against based on age, race, gender, color, religion, national origin, sexual orientation, gender identity, veteran status, disability or any other protected category.
© 2021 GarysGuide About Feedback Press Terms


text:
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"

/** @addtogroup STM32F4xx_HAL_Driver
  * @{
  */

/** @defgroup TIMEx  TIMEx
  * @brief TIM HAL module driver
  * @{
  */

#ifdef HAL_TIM_MODULE_ENABLED

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/** @addtogroup TIMEx_Private_Functions
  * @{
  */
/* Private function prototypes -----------------------------------------------*/
static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState);
/**
  * @}
  */

/* Exported functions --------------------------------------------------------*/
/** @defgroup TIMEx_Exported_Functions TIM Exported Functions
  * @{
  */

/** @defgroup TIMEx_Exported_Functions_Group1 Timer Hall Sensor functions
 *  @brief    Timer Hall Sensor functions
 *
@verbatim
  ==============================================================================
                      ##### Timer Hall Sensor functions #####
  ==============================================================================
  [..]
    This section provides functions allowing to:
    (+) Initialize and configure TIM HAL Sensor.
    (+) De-initialize TIM HAL Sensor.
    (+) Start the Hall Sensor Interface.
    (+) Stop the Hall Sensor Interface.
    (+) Start the Hall Sensor Interface and enable interrupts.
    (+) Stop the Hall Sensor Interface and disable interrupts.
    (+) Start the Hall Sensor Interface and enable DMA transfers.
    (+) Stop the Hall Sensor Interface and disable DMA transfers.

@endverbatim
  * @{
  */
/**
  * @brief  Initializes the TIM Hall Sensor Interface and create the associated handle.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  sConfig: TIM Hall Sensor configuration structure
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig)
{
  TIM_OC_InitTypeDef OC_Config;

  /* Check the TIM handle allocation */
  if(htim == HAL_NULL)
  {
    return HAL_ERROR;
  }

  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));
  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));

  /* Set the TIM state */
  htim->State= HAL_TIM_STATE_BUSY;

  /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
  HAL_TIMEx_HallSensor_MspInit(htim);

  /* Configure the Time base in the Encoder Mode */
  TIM_Base_SetConfig(htim->Instance, &htim->Init);

  /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the  Hall sensor */
  TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter);

  /* Reset the IC1PSC Bits */
  htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;
  /* Set the IC1PSC value */
  htim->Instance->CCMR1 |= sConfig->IC1Prescaler;

  /* Enable the Hall sensor interface (XOR function of the three inputs) */
  htim->Instance->CR2 |= TIM_CR2_TI1S;

  /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */
  htim->Instance->SMCR &= ~TIM_SMCR_TS;
  htim->Instance->SMCR |= TIM_TS_TI1F_ED;

  /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */
  htim->Instance->SMCR &= ~TIM_SMCR_SMS;
  htim->Instance->SMCR |= TIM_SLAVEMODE_RESET;

  /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/
  OC_Config.OCFastMode = TIM_OCFAST_DISABLE;
  OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET;
  OC_Config.OCMode = TIM_OCMODE_PWM2;
  OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH;
  OC_Config.Pulse = sConfig->Commutation_Delay;

  TIM_OC2_SetConfig(htim->Instance, &OC_Config);

  /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2
    register to 101 */
  htim->Instance->CR2 &= ~TIM_CR2_MMS;
  htim->Instance->CR2 |= TIM_TRGO_OC2REF;

  /* Initialize the TIM state*/
  htim->State= HAL_TIM_STATE_READY;

  return HAL_OK;
}

/**
  * @brief  DeInitializes the TIM Hall Sensor interface
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim)
{
  /* Check the parameters */
  assert_param(IS_TIM_INSTANCE(htim->Instance));

  htim->State = HAL_TIM_STATE_BUSY;

  /* Disable the TIM Peripheral Clock */
  __HAL_TIM_DISABLE(htim);

  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */
  HAL_TIMEx_HallSensor_MspDeInit(htim);

  /* Change TIM state */
  htim->State = HAL_TIM_STATE_RESET;

  /* Release Lock */
  __HAL_UNLOCK(htim);

  return HAL_OK;
}

/**
  * @brief  Initializes the TIM Hall Sensor MSP.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval None
  */
__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file
   */
}

/**
  * @brief  DeInitializes TIM Hall Sensor MSP.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval None
  */
__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file
   */
}

/**
  * @brief  Starts the TIM Hall Sensor Interface.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim)
{
  /* Check the parameters */
  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

  /* Enable the Input Capture channels 1
    (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */
  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM Hall sensor Interface.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim)
{
  /* Check the parameters */
  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

  /* Disable the Input Capture channels 1, 2 and 3
    (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */
  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the TIM Hall Sensor Interface in interrupt mode.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim)
{
  /* Check the parameters */
  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

  /* Enable the capture compare Interrupts 1 event */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

  /* Enable the Input Capture channels 1
    (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */
  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM Hall Sensor Interface in interrupt mode.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim)
{
  /* Check the parameters */
  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

  /* Disable the Input Capture channels 1
    (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */
  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

  /* Disable the capture compare Interrupts event */
  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the TIM Hall Sensor Interface in DMA mode.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  pData: The destination Buffer address.
  * @param  Length: The length of data to be transferred from TIM peripheral to memory.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length)
{
  /* Check the parameters */
  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

   if((htim->State == HAL_TIM_STATE_BUSY))
  {
     return HAL_BUSY;
  }
  else if((htim->State == HAL_TIM_STATE_READY))
  {
    if(((uint32_t)pData == 0 ) && (Length > 0))
    {
      return HAL_ERROR;
    }
    else
    {
      htim->State = HAL_TIM_STATE_BUSY;
    }
  }
  /* Enable the Input Capture channels 1
    (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */
  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

  /* Set the DMA Input Capture 1 Callback */
  htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt;
  /* Set the DMA error callback */
  htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

  /* Enable the DMA Stream for Capture 1*/
  HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length);

  /* Enable the capture compare 1 Interrupt */
  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM Hall Sensor Interface in DMA mode.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim)
{
  /* Check the parameters */
  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

  /* Disable the Input Capture channels 1
    (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */
  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

  /* Disable the capture compare Interrupts 1 event */
  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}
/**
  * @}
  */

/** @defgroup TIMEx_Exported_Functions_Group2 Timer Complementary Output Compare functions
 *  @brief    Timer Complementary Output Compare functions
 *
@verbatim
  ==============================================================================
              ##### Timer Complementary Output Compare functions #####
  ==============================================================================
  [..]
    This section provides functions allowing to:
    (+) Start the Complementary Output Compare/PWM.
    (+) Stop the Complementary Output Compare/PWM.
    (+) Start the Complementary Output Compare/PWM and enable interrupts.
    (+) Stop the Complementary Output Compare/PWM and disable interrupts.
    (+) Start the Complementary Output Compare/PWM and enable DMA transfers.
    (+) Stop the Complementary Output Compare/PWM and disable DMA transfers.

@endverbatim
  * @{
  */

/**
  * @brief  Starts the TIM Output Compare signal generation on the complementary
  *         output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

     /* Enable the Capture compare channel N */
     TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
    __HAL_TIM_MOE_ENABLE(htim);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM Output Compare signal generation on the complementary
  *         output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

    /* Disable the Capture compare channel N */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);

  /* Disable the Main Output */
    __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the TIM Output Compare signal generation in interrupt mode
  *         on the complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Enable the TIM Output Compare interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Enable the TIM Output Compare interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Enable the TIM Output Compare interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
      /* Enable the TIM Output Compare interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);
    }
    break;

    default:
    break;
  }

  /* Enable the TIM Break interrupt */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);

  /* Enable the Capture compare channel N */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
  __HAL_TIM_MOE_ENABLE(htim);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM Output Compare signal generation in interrupt mode
  *         on the complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Disable the TIM Output Compare interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Disable the TIM Output Compare interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Disable the TIM Output Compare interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
      /* Disable the TIM Output Compare interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);
    }
    break;

    default:
    break;
  }

  /* Disable the Capture compare channel N */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);

  /* Disable the TIM Break interrupt (only if no more channel is active) */
  if((READ_REG(htim->Instance->CCER) & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET)
  {
    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);
  }

  /* Disable the Main Output */
  __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the TIM Output Compare signal generation in DMA mode
  *         on the complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @param  pData: The source Buffer address.
  * @param  Length: The length of data to be transferred from memory to TIM peripheral
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  if((htim->State == HAL_TIM_STATE_BUSY))
  {
     return HAL_BUSY;
  }
  else if((htim->State == HAL_TIM_STATE_READY))
  {
    if(((uint32_t)pData == 0 ) && (Length > 0))
    {
      return HAL_ERROR;
    }
    else
    {
      htim->State = HAL_TIM_STATE_BUSY;
    }
  }
  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length);

      /* Enable the TIM Output Compare DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length);

      /* Enable the TIM Output Compare DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);
    }
    break;

    case TIM_CHANNEL_3:
{
      /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length);

      /* Enable the TIM Output Compare DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
     /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length);

      /* Enable the TIM Output Compare DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);
    }
    break;

    default:
    break;
  }

  /* Enable the Capture compare channel N */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
  __HAL_TIM_MOE_ENABLE(htim);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM Output Compare signal generation in DMA mode
  *         on the complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Disable the TIM Output Compare DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Disable the TIM Output Compare DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Disable the TIM Output Compare DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
      /* Disable the TIM Output Compare interrupt */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);
    }
    break;

    default:
    break;
  }

  /* Disable the Capture compare channel N */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);

  /* Disable the Main Output */
  __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Change the htim state */
  htim->State = HAL_TIM_STATE_READY;

  /* Return function status */
  return HAL_OK;
}
/**
  * @}
  */

/** @defgroup TIMEx_Exported_Functions_Group3 Timer Complementary PWM functions
 *  @brief    Timer Complementary PWM functions
 *
@verbatim
  ==============================================================================
                 ##### Timer Complementary PWM functions #####
  ==============================================================================
  [..]
    This section provides functions allowing to:
    (+) Start the Complementary PWM.
    (+) Stop the Complementary PWM.
    (+) Start the Complementary PWM and enable interrupts.
    (+) Stop the Complementary PWM and disable interrupts.
    (+) Start the Complementary PWM and enable DMA transfers.
    (+) Stop the Complementary PWM and disable DMA transfers.
    (+) Start the Complementary Input Capture measurement.
    (+) Stop the Complementary Input Capture.
    (+) Start the Complementary Input Capture and enable interrupts.
    (+) Stop the Complementary Input Capture and disable interrupts.
    (+) Start the Complementary Input Capture and enable DMA transfers.
    (+) Stop the Complementary Input Capture and disable DMA transfers.
    (+) Start the Complementary One Pulse generation.
    (+) Stop the Complementary One Pulse.
    (+) Start the Complementary One Pulse and enable interrupts.
    (+) Stop the Complementary One Pulse and disable interrupts.

@endverbatim
  * @{
  */

/**
  * @brief  Starts the PWM signal generation on the complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  /* Enable the complementary PWM output  */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
  __HAL_TIM_MOE_ENABLE(htim);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the PWM signal generation on the complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  /* Disable the complementary PWM output  */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);

  /* Disable the Main Output */
  __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the PWM signal generation in interrupt mode on the
  *         complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Enable the TIM Capture/Compare 1 interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Enable the TIM Capture/Compare 2 interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Enable the TIM Capture/Compare 3 interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
      /* Enable the TIM Capture/Compare 4 interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);
    }
    break;

    default:
    break;
  }

  /* Enable the TIM Break interrupt */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);

  /* Enable the complementary PWM output  */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
  __HAL_TIM_MOE_ENABLE(htim);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the PWM signal generation in interrupt mode on the
  *         complementary output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Disable the TIM Capture/Compare 1 interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Disable the TIM Capture/Compare 2 interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Disable the TIM Capture/Compare 3 interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
      /* Disable the TIM Capture/Compare 3 interrupt */
      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);
    }
    break;

    default:
    break;
  }

  /* Disable the complementary PWM output  */
  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);

  /* Disable the TIM Break interrupt (only if no more channel is active) */
  if((READ_REG(htim->Instance->CCER) & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET)
  {
    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);
  }

  /* Disable the Main Output */
  __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the TIM PWM signal generation in DMA mode on the
  *         complementary output
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @param  pData: The source Buffer address.
  * @param  Length: The length of data to be transferred from memory to TIM peripheral
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  if((htim->State == HAL_TIM_STATE_BUSY))
  {
     return HAL_BUSY;
  }
  else if((htim->State == HAL_TIM_STATE_READY))
  {
    if(((uint32_t)pData == 0 ) && (Length > 0))
    {
      return HAL_ERROR;
    }
    else
    {
      htim->State = HAL_TIM_STATE_BUSY;
    }
  }
  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length);

      /* Enable the TIM Capture/Compare 1 DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length);

      /* Enable the TIM Capture/Compare 2 DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length);

      /* Enable the TIM Capture/Compare 3 DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
     /* Set the DMA Period elapsed callback */
      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt;

      /* Set the DMA error callback */
      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

      /* Enable the DMA Stream */
      HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length);

      /* Enable the TIM Capture/Compare 4 DMA request */
      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);
    }
    break;

    default:
    break;
  }

  /* Enable the complementary PWM output  */
     TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
    __HAL_TIM_MOE_ENABLE(htim);

  /* Enable the Peripheral */
  __HAL_TIM_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM PWM signal generation in DMA mode on the complementary
  *         output
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Channel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected
  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));

  switch (Channel)
  {
    case TIM_CHANNEL_1:
    {
      /* Disable the TIM Capture/Compare 1 DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);
    }
    break;

    case TIM_CHANNEL_2:
    {
      /* Disable the TIM Capture/Compare 2 DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);
    }
    break;

    case TIM_CHANNEL_3:
    {
      /* Disable the TIM Capture/Compare 3 DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);
    }
    break;

    case TIM_CHANNEL_4:
    {
      /* Disable the TIM Capture/Compare 4 DMA request */
      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);
    }
    break;

    default:
    break;
  }

  /* Disable the complementary PWM output */
    TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);

  /* Disable the Main Output */
    __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Change the htim state */
  htim->State = HAL_TIM_STATE_READY;

  /* Return function status */
  return HAL_OK;
}

/**
  * @}
  */

/** @defgroup TIMEx_Exported_Functions_Group4 Timer Complementary One Pulse functions
 *  @brief    Timer Complementary One Pulse functions
 *
@verbatim
  ==============================================================================
                ##### Timer Complementary One Pulse functions #####
  ==============================================================================
  [..]
    This section provides functions allowing to:
    (+) Start the Complementary One Pulse generation.
    (+) Stop the Complementary One Pulse.
    (+) Start the Complementary One Pulse and enable interrupts.
    (+) Stop the Complementary One Pulse and disable interrupts.

@endverbatim
  * @{
  */

/**
  * @brief  Starts the TIM One Pulse signal generation on the complementary
  *         output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  OutputChannel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
  {
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));

  /* Enable the complementary One Pulse output */
  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
  __HAL_TIM_MOE_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Stops the TIM One Pulse signal generation on the complementary
  *         output.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  OutputChannel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
{

  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));

  /* Disable the complementary One Pulse output */
    TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);

  /* Disable the Main Output */
    __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
  __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}

/**
  * @brief  Starts the TIM One Pulse signal generation in interrupt mode on the
  *         complementary channel.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  OutputChannel: TIM Channel to be enabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));

  /* Enable the TIM Capture/Compare 1 interrupt */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

  /* Enable the TIM Capture/Compare 2 interrupt */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

  /* Enable the complementary One Pulse output */
  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);

  /* Enable the Main Output */
  __HAL_TIM_MOE_ENABLE(htim);

  /* Return function status */
  return HAL_OK;
  }

/**
  * @brief  Stops the TIM One Pulse signal generation in interrupt mode on the
  *         complementary channel.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  OutputChannel: TIM Channel to be disabled.
  *          This parameter can be one of the following values:
  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected
  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
{
  /* Check the parameters */
  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));

  /* Disable the TIM Capture/Compare 1 interrupt */
  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

  /* Disable the TIM Capture/Compare 2 interrupt */
  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

  /* Disable the complementary One Pulse output */
  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);

  /* Disable the Main Output */
  __HAL_TIM_MOE_DISABLE(htim);

  /* Disable the Peripheral */
   __HAL_TIM_DISABLE(htim);

  /* Return function status */
  return HAL_OK;
}
/**
  * @}
  */

/** @defgroup TIMEx_Exported_Functions_Group5 Peripheral Control functions
 *  @brief   	Peripheral Control functions
 *
@verbatim
  ==============================================================================
                    ##### Peripheral Control functions #####
  ==============================================================================
  [..]
    This section provides functions allowing to:
    (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode.
    (+) Configure External Clock source.
    (+) Configure Complementary channels, break features and dead time.
    (+) Configure Master and the Slave synchronization.
    (+) Configure the commutation event in case of use of the Hall sensor interface.
    (+) Configure the DMA Burst Mode.

@endverbatim
  * @{
  */
/**
  * @brief  Configure the TIM commutation event sequence.
  * @note  This function is mandatory to use the commutation event in order to
  *        update the configuration at each commutation detection on the TRGI input of the Timer,
  *        the typical use of this feature is with the use of another Timer(interface Timer)
  *        configured in Hall sensor interface, this interface Timer will generate the
  *        commutation at its TRGO output (connected to Timer used in this function) each time
  *        the TI1 of the Interface Timer detect a commutation at its input TI1.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  InputTrigger: the Internal trigger corresponding to the Timer Interfacing with the Hall sensor.
  *          This parameter can be one of the following values:
  *            @arg TIM_TS_ITR0: Internal trigger 0 selected
  *            @arg TIM_TS_ITR1: Internal trigger 1 selected
  *            @arg TIM_TS_ITR2: Internal trigger 2 selected
  *            @arg TIM_TS_ITR3: Internal trigger 3 selected
  *            @arg TIM_TS_NONE: No trigger is needed
  * @param  CommutationSource: the Commutation Event source.
  *          This parameter can be one of the following values:
  *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer
  *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint32_t  InputTrigger, uint32_t  CommutationSource)
{
  /* Check the parameters */
  assert_param(IS_TIM_ADVANCED_INSTANCE(htim->Instance));
  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));

  __HAL_LOCK(htim);

  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) ||
      (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3))
  {
    /* Select the Input trigger */
    htim->Instance->SMCR &= ~TIM_SMCR_TS;
    htim->Instance->SMCR |= InputTrigger;
  }

  /* Select the Capture Compare preload feature */
  htim->Instance->CR2 |= TIM_CR2_CCPC;
  /* Select the Commutation event source */
  htim->Instance->CR2 &= ~TIM_CR2_CCUS;
  htim->Instance->CR2 |= CommutationSource;

  __HAL_UNLOCK(htim);

  return HAL_OK;
}

/**
  * @brief  Configure the TIM commutation event sequence with interrupt.
  * @note  This function is mandatory to use the commutation event in order to
  *        update the configuration at each commutation detection on the TRGI input of the Timer,
  *        the typical use of this feature is with the use of another Timer(interface Timer)
  *        configured in Hall sensor interface, this interface Timer will generate the
  *        commutation at its TRGO output (connected to Timer used in this function) each time
  *        the TI1 of the Interface Timer detect a commutation at its input TI1.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  InputTrigger: the Internal trigger corresponding to the Timer Interfacing with the Hall sensor.
  *          This parameter can be one of the following values:
  *            @arg TIM_TS_ITR0: Internal trigger 0 selected
  *            @arg TIM_TS_ITR1: Internal trigger 1 selected
  *            @arg TIM_TS_ITR2: Internal trigger 2 selected
  *            @arg TIM_TS_ITR3: Internal trigger 3 selected
  *            @arg TIM_TS_NONE: No trigger is needed
  * @param  CommutationSource: the Commutation Event source.
  *          This parameter can be one of the following values:
  *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer
  *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, uint32_t  InputTrigger, uint32_t  CommutationSource)
{
  /* Check the parameters */
  assert_param(IS_TIM_ADVANCED_INSTANCE(htim->Instance));
  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));

  __HAL_LOCK(htim);

  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) ||
      (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3))
  {
    /* Select the Input trigger */
    htim->Instance->SMCR &= ~TIM_SMCR_TS;
    htim->Instance->SMCR |= InputTrigger;
  }

  /* Select the Capture Compare preload feature */
  htim->Instance->CR2 |= TIM_CR2_CCPC;
  /* Select the Commutation event source */
  htim->Instance->CR2 &= ~TIM_CR2_CCUS;
  htim->Instance->CR2 |= CommutationSource;

  /* Enable the Commutation Interrupt Request */
  __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM);

  __HAL_UNLOCK(htim);

  return HAL_OK;
}

/**
  * @brief  Configure the TIM commutation event sequence with DMA.
  * @note  This function is mandatory to use the commutation event in order to
  *        update the configuration at each commutation detection on the TRGI input of the Timer,
  *        the typical use of this feature is with the use of another Timer(interface Timer)
  *        configured in Hall sensor interface, this interface Timer will generate the
  *        commutation at its TRGO output (connected to Timer used in this function) each time
  *        the TI1 of the Interface Timer detect a commutation at its input TI1.
  * @note: The user should configure the DMA in his own software, in This function only the COMDE bit is set
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  InputTrigger: the Internal trigger corresponding to the Timer Interfacing with the Hall sensor.
  *          This parameter can be one of the following values:
  *            @arg TIM_TS_ITR0: Internal trigger 0 selected
  *            @arg TIM_TS_ITR1: Internal trigger 1 selected
  *            @arg TIM_TS_ITR2: Internal trigger 2 selected
  *            @arg TIM_TS_ITR3: Internal trigger 3 selected
  *            @arg TIM_TS_NONE: No trigger is needed
  * @param  CommutationSource: the Commutation Event source.
  *          This parameter can be one of the following values:
  *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer
  *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, uint32_t  InputTrigger, uint32_t  CommutationSource)
{
  /* Check the parameters */
  assert_param(IS_TIM_ADVANCED_INSTANCE(htim->Instance));
  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));

  __HAL_LOCK(htim);

  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) ||
      (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3))
  {
    /* Select the Input trigger */
    htim->Instance->SMCR &= ~TIM_SMCR_TS;
    htim->Instance->SMCR |= InputTrigger;
  }

  /* Select the Capture Compare preload feature */
  htim->Instance->CR2 |= TIM_CR2_CCPC;
  /* Select the Commutation event source */
  htim->Instance->CR2 &= ~TIM_CR2_CCUS;
  htim->Instance->CR2 |= CommutationSource;

  /* Enable the Commutation DMA Request */
  /* Set the DMA Commutation Callback */
  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt;
  /* Set the DMA error callback */
  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;

  /* Enable the Commutation DMA Request */
  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM);

  __HAL_UNLOCK(htim);

  return HAL_OK;
}

/**
  * @brief  Configures the TIM in master mode.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  sMasterConfig: pointer to a TIM_MasterConfigTypeDef structure that
  *         contains the selected trigger output (TRGO) and the Master/Slave
  *         mode.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef * sMasterConfig)
{
  /* Check the parameters */
  assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));

  __HAL_LOCK(htim);

  htim->State = HAL_TIM_STATE_BUSY;

  /* Reset the MMS Bits */
  htim->Instance->CR2 &= ~TIM_CR2_MMS;
  /* Select the TRGO source */
  htim->Instance->CR2 |= sMasterConfig->MasterOutputTrigger;

  /* Reset the MSM Bit */
  htim->Instance->SMCR &= ~TIM_SMCR_MSM;
  /* Set or Reset the MSM Bit */
  htim->Instance->SMCR |= sMasterConfig->MasterSlaveMode;

  htim->State = HAL_TIM_STATE_READY;

  __HAL_UNLOCK(htim);

  return HAL_OK;
}

/**
  * @brief   Configures the Break feature, dead time, Lock level, OSSI/OSSR State
  *         and the AOE(automatic output enable).
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  sBreakDeadTimeConfig: pointer to a TIM_ConfigBreakDeadConfig_TypeDef structure that
  *         contains the BDTR Register configuration  information for the TIM peripheral.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
                                              TIM_BreakDeadTimeConfigTypeDef * sBreakDeadTimeConfig)
{
  /* Check the parameters */
  assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
  assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode));
  assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode));
  assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel));
  assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState));
  assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity));
  assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput));
  assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime));

  /* Process Locked */
  __HAL_LOCK(htim);

  htim->State = HAL_TIM_STATE_BUSY;

  /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,
     the OSSI State, the dead time value and the Automatic Output Enable Bit */
  htim->Instance->BDTR = (uint32_t)sBreakDeadTimeConfig->OffStateRunMode  |
                                   sBreakDeadTimeConfig->OffStateIDLEMode |
                                   sBreakDeadTimeConfig->LockLevel        |
                                   sBreakDeadTimeConfig->DeadTime         |
                                   sBreakDeadTimeConfig->BreakState       |
                                   sBreakDeadTimeConfig->BreakPolarity    |
                                   sBreakDeadTimeConfig->AutomaticOutput;

  htim->State = HAL_TIM_STATE_READY;

  __HAL_UNLOCK(htim);

  return HAL_OK;
}

/**
  * @brief  Configures the TIM2, TIM5 and TIM11 Remapping input capabilities.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  Remap: specifies the TIM input remapping source.
  *          This parameter can be one of the following values:
  *            @arg TIM_TIM2_TIM8_TRGO: TIM2 ITR1 input is connected to TIM8 Trigger output(default)
  *            @arg TIM_TIM2_ETH_PTP:   TIM2 ITR1 input is connected to ETH PTP trigger output.
  *            @arg TIM_TIM2_USBFS_SOF: TIM2 ITR1 input is connected to USB FS SOF.
  *            @arg TIM_TIM2_USBHS_SOF: TIM2 ITR1 input is connected to USB HS SOF.
  *            @arg TIM_TIM5_GPIO:      TIM5 CH4 input is connected to dedicated Timer pin(default)
  *            @arg TIM_TIM5_LSI:       TIM5 CH4 input is connected to LSI clock.
  *            @arg TIM_TIM5_LSE:       TIM5 CH4 input is connected to LSE clock.
  *            @arg TIM_TIM5_RTC:       TIM5 CH4 input is connected to RTC Output event.
  *            @arg TIM_TIM11_GPIO:     TIM11 CH4 input is connected to dedicated Timer pin(default)
  *            @arg TIM_TIM11_HSE:      TIM11 CH4 input is connected to HSE_RTC clock
  *                                     (HSE divided by a programmable prescaler)
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap)
{
  __HAL_LOCK(htim);

  /* Check parameters */
  assert_param(IS_TIM_REMAP_INSTANCE(htim->Instance));
  assert_param(IS_TIM_REMAP(Remap));

  /* Set the Timer remapping configuration */
  htim->Instance->OR = Remap;

  htim->State = HAL_TIM_STATE_READY;

  __HAL_UNLOCK(htim);

  return HAL_OK;
}
/**
  * @}
  */

/** @defgroup TIMEx_Exported_Functions_Group6 Extension Callbacks functions
 *  @brief   Extension Callbacks functions
 *
@verbatim
  ==============================================================================
                    ##### Extension Callbacks functions #####
  ==============================================================================
  [..]
    This section provides Extension TIM callback functions:
    (+) Timer Commutation callback
    (+) Timer Break callback

@endverbatim
  * @{
  */

/**
  * @brief  Hall commutation changed callback in non blocking mode
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval None
  */
__weak void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the HAL_TIMEx_CommutationCallback could be implemented in the user file
   */
}

/**
  * @brief  Hall Break detection callback in non blocking mode
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval None
  */
__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
{
  /* NOTE : This function Should not be modified, when the callback is needed,
            the HAL_TIMEx_BreakCallback could be implemented in the user file
   */
}
/**
  * @}
  */

/** @defgroup TIMEx_Exported_Functions_Group7 Extension Peripheral State functions
 *  @brief   Extension Peripheral State functions
 *
@verbatim
  ==============================================================================
                ##### Extension Peripheral State functions #####
  ==============================================================================
  [..]
    This subsection permits to get in run-time the status of the peripheral
    and the data flow.

@endverbatim
  * @{
  */

/**
  * @brief  Return the TIM Hall Sensor interface state
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @retval HAL state
  */
HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
{
  return htim->State;
}

/**
  * @}
  */

/**
  * @brief  TIM DMA Commutation callback.
  * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains
  *                the configuration information for the specified DMA module.
  * @retval None
  */
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma)
{
  TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;

  htim->State= HAL_TIM_STATE_READY;

  HAL_TIMEx_CommutationCallback(htim);
}
/**
  * @}
  */

/**
  * @brief  Enables or disables the TIM Capture Compare Channel xN.
  * @param  TIMx to select the TIM peripheral
  * @param  Channel: specifies the TIM Channel
  *          This parameter can be one of the following values:
  *            @arg TIM_Channel_1: TIM Channel 1
  *            @arg TIM_Channel_2: TIM Channel 2
  *            @arg TIM_Channel_3: TIM Channel 3
  * @param  ChannelNState: specifies the TIM Channel CCxNE bit new state.
  *          This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable.
  * @retval None
  */
static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState)
{
  uint32_t tmp = 0;

  /* Check the parameters */
  assert_param(IS_TIM_CC4_INSTANCE(TIMx));
  assert_param(IS_TIM_COMPLEMENTARY_CHANNELS(Channel));

  tmp = TIM_CCER_CC1NE << Channel;

  /* Reset the CCxNE Bit */
  TIMx->CCER &= ~tmp;

  /* Set or reset the CCxNE Bit */
  TIMx->CCER |= (uint32_t)(ChannelNState << Channel);
}

/**
  * @}
  */

#endif /* HAL_TIM_MODULE_ENABLED */
/**
  * @}
  */

/**
  * @}
  */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

redpajama_set_name: RedPajamaGithub


Executive order D-107-1 was approved by the California Air Resource Board on June 21, 1988 for emissions compliance and installation on vehicles in New York and California. This executive order approved parts marts manufactured by Edelbrock /.
This Executive Order approved the specified parts on on June 21, 1988.


Converts a secure string into a plain text string.
Sometimes you just need to convert a secure string into a plain text string. This function does it for you. Yay! Once you do, however, the cat is out of the bag and your password will be *all over memory* and, perhaps, the file system.
Returns the plain text/decrypted value of the secure string.
# The secure string to convert.


text:
Fire Blotter | missing person at Snoqualmie Falls; hit and run on hydrant sends water flying; possible power line fire
August 30, 2019 by Danna McCall Leave a Comment
Around 3:45pm, Snoqualmie Firefighters responded to a report of a bark fire in the median of Snoqualmie Parkway. Nothing was found.
Around 6:15pm, Snoqualmie Firefighters responded to a fire alarm at Woodlands Apartments. The crews reset the alarm after determining that a child had pulled it.
Around 6:20am, Snoqualmie Firefighters assisted a 60-year-old man who had fallen and needed help getting to his walker. The man was not injured.
Around 7:45am, Snoqualmie Firefighters were dispatched to a fire alarm at
Woodland Townhomes. Nothing was found. It was likely a smoke detector sounding that had quit before crews arrived.
Around 8:50pm, Snoqualmie Firefighters observed a husband and wife heading up Snoqualmie Parkway, with the wife pushing the husband in his electric wheelchair. The crew stopped and offered assistance to the couple. There was no medical emergency, just a battery that was running low on the wheelchair and the couple needed a way to get home to pick up their wheelchair van. There were no transport vehicles available, so the crews decided to drive the wife home so she could pick up the van while the husband waited at Fisher Park. The crew then returned to the park and helped the wife with getting her husband into the wheelchair van.
Around 5:15pm, Snoqualmie Firefighters responded to the Tokul area for a reported illegal burn. Upon arrival, crews located a 20×20 burn pile of land clearing debris and railroad timbers soaked in creosote. The fire was unattended and did not have an immediate water source to control the fire. Crews contacted the occupant and advised them that the fire was not legal, there was a burn ban in effect, and that they needed to extinguish it completely for the night. The occupant agreed and began the process of
extinguishing the fire.
Around 6:45pm, Snoqualmie Firefighters were dispatched to the corner of Maple and Newton for a reported broken fire hydrant with water flowing. According to multiple residents, the hydrant was run over by a semi-truck that didn't stop after hitting it. Citizens were unable to get specific identifiers for the vehicle. Firefighters and Snoqualmie Public Works worked together to get the water shut off and ensure that the roadway wasn't undermined. No houses were flooded, and the water was secured. The scene was turned over to Snoqualmie Police Department for investigation.
Around 10:40pm, Snoqualmie Firefighters responded to a report of Sky Lanterns being lit off and flown over a wooded area. Upon arrival there were no signs of lanterns in the sky and no obvious signs of fire. The caller said that there were approximately 30 lanterns in the sky, and many looked to be landing in wooded areas. He voiced concern about possible fires. The crew informed him that those lanterns are illegal and that they would continue to monitor the area for any of them being released.
Around 12:35pm, Snoqualmie Firefighters were dispatched to a report of power lines arching with flames seen on SE Fish Hatchery Rd. Upon arrival, it was found that a large branch had fallen on two lines, causing them to arch and catch the branch on fire. The branch burned through, falling to the ground and clearing the wires. No wires appeared damaged, no ground fire occurred, and the power was still on in the area.
Around 11:15pm, Snoqualmie Firefighters responded to a reported medical alarm. Upon arrival the occupant said that he did not activate his alarm and was fine. The name associated with the account was that of the neighbor. However, the neighbor no longer lives near the patient and does not have a medical alarm. No problem was found at either house.
Around 11:55pm, Snoqualmie Firefighters were dispatched to a report of a water leak in yard. The water reportedly shut off when the sprinkler system shut off, lending to a possible broken sprinkler head. The crew drove through the area and found no obvious issues on public property and no water flowing from any residences.
Around 1:15pm, Snoqualmie Firefighters responded to a report of a smoke detector problem in a residence. The owner told them that she is disabled and can't service her own smoke detectors, asking for help checking them. The crews found that the detectors were 22-years-old and nonfunctioning. They advised the homeowner to purchase new replacements and to call the Fire Department when they arrived for assistance installing them.
Around 11:35pm, Snoqualmie Firefighters investigated a reported illegal burn of trash and yard debris. Upon arrival it was noted that there was an unattended illegal burn that was still smoldering. The crew extinguished the burn but was unable to contact the homeowner.
Around 2:30am, Snoqualmie Firefighters responded to the Echo Glen Children's Center for a reported fire alarm. Upon arrival there were no signs of fire, however the alarm was sounding, and staff could not gain access to the door of the alarm room. Firefighters forced entry at the request of staff. No problem was found and the system was unable to reset. Staff were advised to set up a 24-hour fire-watch until the alarm could be repaired.
Around 1:15pm, Snoqualmie Firefighters assisted a man complaining of back pain after a hit and run car accident in the Highlands area. Firefighters provided first aid and left the patient at the scene.
Around 12:40pm, Snoqualmie Firefighters were dispatched to the Hampton Inn for a fire alarm. The alarm turned out to be set off by steam from a shower. The room was cleared out and the alarm was reset.
At around 4:05pm, Snoqualmie Firefighters responded to a fire alarm at the Snoqualmie Valley hospital. The alarm was set off by a nebulizer used by a patient.
Around 11:25am, Snoqualmie Firefighters, along with other units, responded to the Snoqualmie Valley Hospital for a fire alarm called in by the alarm company. Security at the hospital advised that no fire was found and the system was reset.
Around 1:40pm, Snoqualmie Firefighters were dispatched with other units to the YMCA for a reported fire alarm called in by the alarm company. Firefighters found a contractor outside who advised that they were steam-cleaning the bathrooms and the steam set off the alarm. The system was reset and turned over to the facility.
Around 12:40pm, Snoqualmie Firefighters responded with Snoqualmie Police to the Snoqualmie Falls area for a reported missing person. No patient was located, and the scene was turned over to Search and Rescue.
Around 1:40pm, Snoqualmie Firefighters were dispatched with Snoqualmie Police Department a second time for a reported missing person— an 87-year-old woman who had been last seen at the top of the trail leading down to an observation deck several hours earlier. The woman had a history of dementia and was visiting the Falls with a group from her assisted living facility. A search ensued and Snoqualmie Police Department and PSE staff located the patient about 200 yards downstream from the lower powerhouse, stuck on some rocks. She did not appear injured or in distress, however she was confused as to how she got there and needed help getting off of the rocks. Firefighters and Police worked with the patient to slowly walk her back in from the rocks to the main trail. Once on the main trail, the patient was reevaluated and determined to be uninjured and in good spirits. She was turned over to managers from the assisted living center with aftercare instructions.
Around 3:50pm, Snoqualmie Firefighters investigated a possible appliance fire at the Snoqualmie Laundromat. A caller advised that while she was doing laundry, she saw flames in the back of one of the dryers and thought there might be a fire. When she removed her clothes, she found no obvious fire but was concerned that something had happened. The crew found no signs of fire and contacted the business owner. He advised that when the dryer is operating at times flames are visible as they are gas operated appliances. He advised that he would look into the problem.
[In addition to the above calls, Snoqualmie EMTs responded to 25 medical aid incidents bringing the total number of calls to date of 817 for 2019.]