Kabuki Starship / Mbed 2 deprecated GHVentilator

Dependencies:   mbed SickBayTek

Files at this revision

API Documentation at this revision

Comitter:
kabukistarship
Date:
Sat Apr 11 08:48:28 2020 +0000
Parent:
9:256989faeb3b
Commit message:
Detail.Tek.Describe The SickBay Device firmware toolkit built with Kabuki Tek. #76

Changed in this revision

BMP280.h Show diff for this revision Revisions of this file
BMP280.hpp Show diff for this revision Revisions of this file
FastDebouncer.lib Show diff for this revision Revisions of this file
GHVentilator.h Show diff for this revision Revisions of this file
GHVentilator.hpp Show annotated file Show diff for this revision Revisions of this file
GHVentilatorArduino.hpp Show annotated file Show diff for this revision Revisions of this file
GHVentilatorChannel.h Show diff for this revision Revisions of this file
GHVentilatorChannel.hpp Show diff for this revision Revisions of this file
GHVentilatorMbed.hpp Show annotated file Show diff for this revision Revisions of this file
GHVentilatorTargetArduino.hpp Show diff for this revision Revisions of this file
GHVentilatorTargetMbed.hpp Show diff for this revision Revisions of this file
Main.cpp Show annotated file Show diff for this revision Revisions of this file
SickBayTek.lib Show annotated file Show diff for this revision Revisions of this file
_Config.h Show annotated file Show diff for this revision Revisions of this file
mbedBug.lib Show diff for this revision Revisions of this file
--- a/BMP280.h	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/**
- *  BME280 Combined humidity and pressure sensor library
- *
- *  @author  Toyomasa Watarai
- *  @version 1.0
- *  @date    06-April-2015
- *
- *  Library for "BME280 temperature, humidity and pressure sensor module" from Switch Science
- *    https://www.switch-science.com/catalog/2236/
- *
- *  For more information about the BME280:
- *    http://ae-bst.resource.bosch.com/media/products/dokumente/bme280/BST-BME280_DS001-10.pdf
- */
-#pragma once
-#ifndef BME280MbedDecl
-#define BME280MbedDecl
- 
-#include <mbedBug.h>
- 
-//#define _DEBUG
-// default BusAddress with SDO High 0x77
-// BusAddress with SDO LOW 0x76
-#define BMP280SlaveAddressDefault (0x77)
- 
- 
-/** A BME280 environmental sensor
-A library to read environmental temperature and pressure using Bosch BME280. */
- 
-class BMP280 {
-  public:
-  
-    enum {
-      // The default I2C slave BusAddress.
-      SlaveAddress = BMP280SlaveAddressDefault
-    };
- 
-    /* Creates a BME280 instance connected to the I2C pins and BusAddress.
-     *
-     * @param i2c_obj I2C object (instance)
-     * @param SlaveAddress (option) I2C-bus BusAddress (default: 0x77)
-     */
-    BMP280(I2C &Bus, char SlaveAddress = BMP280SlaveAddressDefault);
- 
-    /* Initializa BME280 sensor
-    Configure sensor setting and read parameters for calibration */
-    void Initialize();
- 
-    /* Read the current temperature value (degree Celsius) from BME280 sensor */
-    int32_t Temperature();
- 
-    /* Read the current pressure value (hectopascal)from BME280 sensor */
-    uint32_t Pressure();
- 
-    /* Read the current humidity value (humidity %) from BME280 sensor */
-    //float HumidityGet();
- 
-private:
- 
-    I2C         *i2c_p;
-    I2C         &Bus;
-    char        BusAddress;
-    uint16_t    dig_T1;
-    int16_t     dig_T2, dig_T3;
-    uint16_t    dig_P1;
-    int16_t     dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9;
-    uint16_t    dig_H1, dig_H3;
-    int16_t     dig_H2, dig_H4, dig_H5, dig_H6;
-    int32_t     t_fine;
- 
-};
- 
-#undef SlaveAddressDefault
-#endif
- 
\ No newline at end of file
--- a/BMP280.hpp	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/** Kabuki Tek Toolkit @version 0.x
-@link  https://github.com/KabukiStarship/KabukiToolkitTek.git
-@file  /BMP280.hpp
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
-This Source Code Form is subject to the terms of the Mozilla Public License, 
-v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
-one at <https://mozilla.org/MPL/2.0/>. */
-#include "BMP280.h"
-
-BMP280::BMP280(I2C &Bus, char BusAddress) :
-    Bus(Bus),
-    BusAddress(BusAddress<<1),
-    t_fine(0)
-{
-    Initialize();
-}
-    
-void BMP280::Initialize()
-{
-    char cmd[18];
- 
-    //cmd[0] = 0xf2; // ctrl_hum
-    //cmd[1] = 0x01; // Humidity oversampling x1
-    //Bus.write(BusAddress, cmd, 2);
- 
-    cmd[0] = 0xf4; // ctrl_meas
-    //cmd[1] = 0x27; // Temparature oversampling x1, Pressure oversampling x1, Normal mode
-    cmd[1] = 0b01010111; // Temparature oversampling x2 010, Pressure oversampling x16 101, Normal mode 11
-    Bus.write(BusAddress, cmd, 2);
- 
-    cmd[0] = 0xf5; // config
-    cmd[1] = 0b10111100; // Standby 1000ms, Filter x16
-    Bus.write(BusAddress, cmd, 2);
- 
-    cmd[0] = 0x88; // read dig_T regs
-    Bus.write(BusAddress, cmd, 1);
-    Bus.read(BusAddress, cmd, 6);
- 
-    dig_T1 = (cmd[1] << 8) | cmd[0];
-    dig_T2 = (cmd[3] << 8) | cmd[2];
-    dig_T3 = (cmd[5] << 8) | cmd[4];
- 
-    //DPrintf("dig_T = 0x%x, 0x%x, 0x%x\n\r", dig_T1, dig_T2, dig_T3);
-    //DPrintf("dig_T = %d, %d, %d\n\r", dig_T1, dig_T2, dig_T3);
- 
-    cmd[0] = 0x8E; // read dig_P regs
-    Bus.write(BusAddress, cmd, 1);
-    Bus.read(BusAddress, cmd, 18);
- 
-    dig_P1 = (cmd[ 1] << 8) | cmd[ 0];
-    dig_P2 = (cmd[ 3] << 8) | cmd[ 2];
-    dig_P3 = (cmd[ 5] << 8) | cmd[ 4];
-    dig_P4 = (cmd[ 7] << 8) | cmd[ 6];
-    dig_P5 = (cmd[ 9] << 8) | cmd[ 8];
-    dig_P6 = (cmd[11] << 8) | cmd[10];
-    dig_P7 = (cmd[13] << 8) | cmd[12];
-    dig_P8 = (cmd[15] << 8) | cmd[14];
-    dig_P9 = (cmd[17] << 8) | cmd[16];
- 
-    //DPrintf("dig_P = 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", 
-    //        dig_P1, dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, 
-    //        dig_P9);
- 
-  /*  cmd[0] = 0xA1; // read dig_H regs
-    Bus.write(BusAddress, cmd, 1);
-    Bus.read(BusAddress, cmd, 1);
-     cmd[1] = 0xE1; // read dig_H regs
-    Bus.write(BusAddress, &cmd[1], 1);
-    Bus.read(BusAddress, &cmd[1], 7);
-
-    dig_H1 = cmd[0];
-    dig_H2 = (cmd[2] << 8) | cmd[1];
-    dig_H3 = cmd[3];
-    dig_H4 = (cmd[4] << 4) | (cmd[5] & 0x0f);
-    dig_H5 = (cmd[6] << 4) | ((cmd[5]>>4) & 0x0f);
-    dig_H6 = cmd[7];
- 
-    DPrintf("dig_H = 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", dig_H1, dig_H2, 
-            dig_H3, dig_H4, dig_H5, dig_H6);
-*/
-}
- 
-int32_t BMP280::Temperature() {
-    int32_t temp_raw;
-    char cmd[4];
- 
-    cmd[0] = 0xfa; // temp_msb
-    Bus.write(BusAddress, cmd, 1);
-    Bus.read(BusAddress, &cmd[1], 3);
- 
-    temp_raw = (cmd[1] << 12) | (cmd[2] << 4) | (cmd[3] >> 4);
-    //DPrintf("\r\ntemp_raw:%d",temp_raw);
- 
-    int32_t temp1, temp2,temp;
- 
-    temp1 =((((temp_raw >> 3) - (dig_T1 << 1))) * dig_T2) >> 11;
-    temp2 =(((((temp_raw >> 4) - dig_T1) * ((temp_raw >> 4) - dig_T1)) >> 12) * dig_T3) >> 14;
-    //DPrintf("   temp1:%d   temp2:%d",temp1, temp2);
-    t_fine = temp1+temp2;
-    //DPrintf("   t_fine:%d",t_fine);
-    temp = (t_fine * 5 + 128) >> 8;
-    //DPrintf("   tempf:%f", float(temp) / 100.0);
-    return temp;
-}
- 
-uint32_t BMP280::Pressure() {
-    char cmd[4];
- 
-    cmd[0] = 0xf7; // press_msb
-    Bus.write(BusAddress, cmd, 1);
-    Bus.read(BusAddress, &cmd[1], 3);
- 
-    int32_t Response = (cmd[1] << 12) | (cmd[2] << 4) | (cmd[3] >> 4);
-    
-    int32_t var1, var2;
-    uint32_t press;
- 
-    var1 = (t_fine >> 1) - 64000;
-    var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * dig_P6;
-    var2 = var2 + ((var1 * dig_P5) << 1);
-    var2 = (var2 >> 2) + (dig_P4 << 16);
-    var1 = (((dig_P3 * (((var1 >> 2)*(var1 >> 2)) >> 13)) >> 3) + ((dig_P2 * var1) >> 1)) >> 18;
-    var1 = ((32768 + var1) * dig_P1) >> 15;
-    if (var1 == 0) {
-        return 0;
-    }
-    press = (((1048576 - Response) - (var2 >> 12))) * 3125;
-    if(press < 0x80000000) {
-        press = (press << 1) / var1;
-    } else {
-        press = (press / var1) * 2;
-    }
-    var1 = ((int32_t)dig_P9 * ((int32_t)(((press >> 3) * (press >> 3)) >> 13))) >> 12;
-    var2 = (((int32_t)(press >> 2)) * (int32_t)dig_P8) >> 13;
-    return (press + ((var1 + var2 + dig_P7) >> 4));
-}
\ No newline at end of file
--- a/FastDebouncer.lib	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://os.mbed.com/users/kabukistarship/code/FastDebouncer/#a3cc0aeae69a
--- a/GHVentilator.h	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/** Gravity Hookah Ventilator @version 0.x
-@link  https://github.com/KabukiStarship/SickBay.git
-@file  /GHVentilator.h
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
-This Source Code Form is subject to the terms of the Mozilla Public License, 
-v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
-one at <https://mozilla.org/MPL/2.0/>. */
-#pragma once
-#ifndef GHVentilatorDecl
-#define GHVentilatorDecl
-#include "GHVentilatorChannel.h"
-namespace SickBay {
-
-/* A Gravity Hookah Ventilator. */
-class GHVentilator {
-  public:
-  
-  enum {
-    StateOff = 0,         //< Both Machine calibrating and off states.
-    StateCalibrate = 0,   //< The Calibrate state where the Tick is 0.
-    StateRising = 1,      //< The Running state first Tick.
-    StateSinking = -1,    //< The Running state first Tick.
-    StatusCodeCount = 1,  //< The number of status codes.
-    ChannelCount = GHVentilatorChannelCount,  //< Number of ventilator channels.
-  };
-  
-  volatile int Status;    //< The status of the Device.
-  // The tick and negative calibrating positive running states.
-  volatile int Ticks;
-  int TicksMonitor,       //< The max ticks between the Device monitor updates.
-    TicksSecond,          //< The number of Ticks per Second.
-    TicksInhaleMin,       //< The min inhale ticks.
-    TicksInhaleMax,       //< The max breath period of 20 seconds.
-    TicksExhaleMin,       //< The min ticks in an exhale.
-    TicksExhaleMax,       //< The max ticks in an exhale.
-    TicksPEEP,            //< The max number of PEEP Ticks before inhaling.
-    TicksCalibration;     //< The number of ticks in the calibration state.
-  int32_t Temperature,    //< The Temperature in the tank.
-    TemperatureReference; //< The Temperature in the tank.
-  uint32_t Pressure,      //< The Pressure in the tank.
-    PressureReference,    //< The Pressure when the device is tared.
-    PressureMin,          //< The min Pressure.
-    PressureMax,          //< The max Pressure.
-    HysteresisChamber,    //< The pressure chamber hystersis +/- delta.
-    HysteresisPatient;    //< The patient Hystersis + delta.
-  GHVentilatorChannel Channels[ChannelCount];
-  
-  /* Sets some of the varaibles to default requiring a call to Init. */
-  GHVentilator ();
-  
-  /* Initializes the ventilator with the given values. */
-  void Init (int TicksPerSecond, int TicksCalibration,
-             float PressureHysteresis, float HysteresisPatient);
-  
-  /* Enters the Calibration State. */
-  void StateCalibrateEnter ();
-  
-  /* Enters the Calibration State. */
-  void StateCalibrateExit ();
-  
-  /* Returns true if the Chamber is over-pressure. */
-  bool IsOverPressure ();
-  
-  /* Returns true if the Chamber is under-pressure. */
-  bool IsUnderPressure ();
-  
-  /* Turns on the blower fan. */
-  void BlowerTurnOn ();
-  
-  /* Turns off the blower fan. */
-  void BlowerTurnOff ();
-  
-  /* Turns the Blower off and sets the Ticks to StateSinking. */
-  void StateSinkingEnter ();
-  
-  /* Turns the Blower On and sets the Ticks to StateRising. */
-  void StateRisingEnter ();
-  
-  /* Sets the TicksPEEP given 1/64 second > NewTicksPEEP < 1 second. */
-  void TicksPEEPSet (int NewTicksPEEP);
-  
-  /* Enters the Off State. */
-  void StateCalibrateOff ();
-  
-  /* Monitors this Device and it's channels. */
-  void Monitor ();
-  
-  /* Turns off the Device and all of it's chanels. */
-  void TurnOff ();
-  
-  /* Turns on the Device and all of it's chanels to the Inhale state. */
-  void TurnOnAll ();
-  
-  /* Reads the Atmospher.Pressure() and Atmospher.Temperature () */
-  void Tare(); 
-  
-  /* Sets the inhale and exhale ticks for the give channel Index. */
-  int TicksInhaleExhaleSet (int Index, int TicksInhale, int TicksExhale);
-  
-  /* Starts the system. */   
-  void Run ();
-  
-  void ChannelValveSet (GHVentilatorChannel* Channel, int Value);
-  
-  /* Sets the Channel 1 solenoid valve to the given Value. */
-  void Channel1ValveSet (int Value);
-  #if GHVentilatorChannelCount >= 2
-  /* Sets the Channel 2 solenoid valve to the given Value. */
-  void Channel2ValveSet (int Value);
-  #endif
-  #if GHVentilatorChannelCount >= 3
-  /* Sets the Channel 3 solenoid valve to the given Value. */
-  void Channel3ValveSet (int Value);
-  #endif
-  #if GHVentilatorChannelCount >= 4
-  /* Sets the Channel 4 solenoid valve to the given Value. */
-  void Channel4ValveSet (int Value);
-  #endif
-  
-  /* Updates the main device and it's channels. */
-  void Update ();
-  
-};
-
-}   //< namespace SickBay
-#endif
-#undef GHVentilatorChannelCount
-#undef GHVentilatorStateRising
-#undef GHVentilatorStateSinking
--- a/GHVentilator.hpp	Fri Apr 10 11:56:58 2020 +0000
+++ b/GHVentilator.hpp	Sat Apr 11 08:48:28 2020 +0000
@@ -1,24 +1,24 @@
-/** Gravity Hookah Ventilator @version 0.x
+/** SickBay Tek @version 0.x
 @link    https://github.com/KabukiStarship/SickBay.git
-@file    /GHVentilaorChannel.cpp
+@file    /Firmware/Tek/SBVentilaorChannel.hpp
 @author  Cale McCollough <https://cale-mccollough.github.io>
 @license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
 This Source Code Form is subject to the terms of the Mozilla Public License, 
 v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
 one at <https://mozilla.org/MPL/2.0/>. */
 
-#include "GHVentilator.h"
-#include <mbedBug.h>
+#include "SBVentilator.h"
+#include <_KabukiTek.hpp>
 
 namespace SickBay {
 
-GHVentilator::GHVentilator ():
+SBVentilator::SBVentilator ():
     Status        (1),
     Ticks         (0),
     PressureMin   (0),
     PressureMax   (1) {}
 
-void GHVentilator::Init (int TicksSecond,
+void SBVentilator::Init (int TicksSecond,
                          int TicksCalibration, 
                          float HysteresisChamber,
                          float HysteresisPatient) {
@@ -45,10 +45,9 @@
     Channels[Index].Init (this, TicksInhale, TicksExhale, 
                           static_cast<uint32_t>(Delta));
   }
-  DPrintf("\nInitalized system with %d Ticks per Second.", TicksSecond);
 }
 
-void GHVentilator::TicksPEEPSet (int NewTicksPEEP) {
+void SBVentilator::TicksPEEPSet (int NewTicksPEEP) {
   int TicksPEEPMin = TicksSecond >> 5; //< This divides by 2^5.
   if (NewTicksPEEP < TicksPEEPMin || NewTicksPEEP > TicksSecond) {
     DPrintf("\n  > Error PEEP must be betwen 1/32 of a second to 1 second. <");
@@ -57,13 +56,13 @@
   TicksPEEP = NewTicksPEEP;
 }
 
-void GHVentilator::StateCalibrateEnter () {
+void SBVentilator::StateCalibrateEnter () {
   TurnOff ();
   BlowerTurnOn ();
   Status = StateCalibrate; //< Make sure to set this last.
 }
   
-void GHVentilator::StateCalibrateExit () {
+void SBVentilator::StateCalibrateExit () {
   PressureMax = Pressure;
   uint32_t HysteresisChamber = this->HysteresisChamber,
         PressureMid = (PressureMax - PressureMin) / 2;
@@ -73,40 +72,40 @@
            PressureMin, PressureMax);
 }
 
-void GHVentilator::StateSinkingEnter () {
+void SBVentilator::StateSinkingEnter () {
   Ticks = StateSinking;
   BlowerTurnOff ();
 }
 
-void GHVentilator::StateRisingEnter () {
+void SBVentilator::StateRisingEnter () {
   Ticks = StateRising;
   BlowerTurnOn ();
 }
 
-void GHVentilator::TurnOff () {
+void SBVentilator::TurnOff () {
   BlowerTurnOff();
   Ticks = 0;
   Status = 0;
   Channel1ValveSet (LLLow);
-  #if GHVentilatorChannelCount >= 2
+  #if SBVentilatorChannelCount >= 2
   Channel2ValveSet (LLLow);
   #endif
-  #if GHVentilatorChannelCount >= 3
+  #if SBVentilatorChannelCount >= 3
   Channel3ValveSet (LLLow);
   #endif
-  #if GHVentilatorChannelCount >= 4
+  #if SBVentilatorChannelCount >= 4
   Channel4ValveSet (LLLow);
   #endif
 }
 
-void GHVentilator::ChannelValveSet (GHVentilatorChannel* Channel, int Value) {
+void SBVentilator::ChannelValveSet (SBVentilatorChannel* Channel, int Value) {
   if      (Channel == &Channels[0]) Channel1ValveSet(Value);
   else if (Channel == &Channels[1]) Channel2ValveSet(Value);
   else if (Channel == &Channels[2]) Channel3ValveSet(Value);
   else if (Channel == &Channels[3]) Channel4ValveSet(Value);
 }
 
-int GHVentilator::TicksInhaleExhaleSet (int Index, 
+int SBVentilator::TicksInhaleExhaleSet (int Index, 
                                         int TicksInhale,
                                         int TicksExhale) {
   if (Index < 0 || Index >= ChannelCount) return -1;
@@ -119,7 +118,7 @@
   return 0;
 }
   
-void GHVentilator::Update() {
+void SBVentilator::Update() {
   int Tick = Ticks;
   if (Tick == 0) {
     int Status = this->Status;
@@ -145,13 +144,13 @@
   }
   // Check the Channels for state changes.
   for (int Index = ChannelCount - 1; Index >= 0; --Index) {
-    GHVentilatorChannel* Channel = &Channels[Index];
+    SBVentilatorChannel* Channel = &Channels[Index];
     int Tick = Channel->Ticks;
-    if (Tick <= GHVentilatorChannel::StateExhaling) {
+    if (Tick <= SBVentilatorChannel::StateExhaling) {
       if (Tick < Channel->TicksExhale) Channel->Inhale (); 
       else Channel->Ticks = Ticks - 1;
     }
-    else if (Tick >= GHVentilatorChannel::StateInhaling) {
+    else if (Tick >= SBVentilatorChannel::StateInhaling) {
       int TicksExhale = Channel->TicksExhale;
       if (Tick > TicksExhale) {
         if (Tick > TicksExhale - TicksPEEP) {
@@ -168,4 +167,4 @@
   }
 }
 }   //< namespace SickBay
-#include "GHVentilatorChannel.hpp"
\ No newline at end of file
+#include "SBVentilatorChannel.hpp"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GHVentilatorArduino.hpp	Sat Apr 11 08:48:28 2020 +0000
@@ -0,0 +1,24 @@
+/** Gravity Hookah Ventilator @version 0.x
+@link    https://github.com/KabukiStarship/SickBay.git
+@file    /SBVentilator/Firmware/SBVentilatorArduino.hpp
+@author  Cale McCollough <https://cale-mccollough.github.io>
+@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
+This Source Code Form is subject to the terms of the Mozilla Public License, 
+v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
+one at <https://mozilla.org/MPL/2.0/>. */
+#pragma once
+#ifndef SBVentilatorArduino
+#define SBVentilatorArduino
+#include "_KabukiTek.hpp"
+#include "BMP280.hpp"
+#include "SBVentilator.hpp"
+#include <Wire.h>
+namespace SickBay {
+
+int GHVentilatorRun(){
+  Wire Bus(A4, A5);
+  char ChamberAddress = BMP280SlaveAddressDefault;
+  return 0;
+}
+} //< namespace SickBay
+#endif
--- a/GHVentilatorChannel.h	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/** Gravity Hookah Ventilator @version 0.x
-@link    https://github.com/KabukiStarship/SickBay.git
-@file    /GHVentilatorChannel.h
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
-This Source Code Form is subject to the terms of the Mozilla Public License, 
-v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
-one at <https://mozilla.org/MPL/2.0/>. */
-#pragma once
-#ifndef GHVentilatorChannelDecl
-#define GHVentilatorChannelDecl
-#include <stdint.h>
-#ifndef GHVentilatorChannelCount
-#error You must define the GHVentilatorChannelCount before including \
-       "GHVentilator.hpp"
-#endif
-namespace SickBay {
-    
-class GHVentilator;
-
-/* A Gravity Hookah Ventilator channel for one patient. */
-class GHVentilatorChannel {
-  public:
-  
-  enum {
-    StateInhaling = 1,      //< The inhaling state is where Ticks < 0.
-    StateOff = 0,           //< The off state is where Ticks = 0.
-    StateExhaling = -1,     //< The exhaling state is where Ticks > 0.
-  };
-  
-  GHVentilator* Parent;     //< The GHVentilator this is part of.
-  int Ticks,                //< Ticks since the beginning of the inhale.
-      TicksInhale,          //< The tick count in the inhale duty cycle.
-      TicksExhale,          //< The period of the breathing.
-      TicksFlow,            //< The number of flow sensor ticks.
-      TicksFlowLast,        //< The previous inhale cycle TicksFlow count.
-      PulseOximeter,        //< The 7-pin pulse oximeter value.
-      Servo,                //< The Servo for reducing the pressrue.
-      ServoClosed,          //< The min servo duty cycle of no air flow.
-      ServoOpen;            //< The max servo duty cycle of an open tube.
-  int32_t Temperature,      //< The Temperature of the patients breath.
-      TemperatureReference; //< The refernce temperature upon Tare.
-  uint32_t Pressure,        //< The pressure in the patient's mask.
-      PressureReference,    //< About 1 atmosphere + the hysteresis delta.
-      PressureHysteresis;   //< The hysteresis above the PressureReference. 
-  
-  /* Initializes the channel.
-  @param PressureHysteresis 1.0 + the percent hysteresis up and down from the 
-  center the 
-  */
-  void Init (GHVentilator* Parent, int TicksInhale, int TicksExhale, 
-             float ChannelPressureHysteresis);
-             
-  /* Doesn't do anything and requires a call to . */
-  GHVentilatorChannel ();
-    
-  /* Returns a pointer to this. */
-  GHVentilatorChannel* This();
-  
-  void ChannelValveSet (GHVentilatorChannel* Channel, int Value);
-  
-  /* Turns this channel off. */
-  void TurnOff ();
-    
-  /* Sets the number of ticks on the inhale and exhale. */
-  void TicksInhaleExhaleSet (int NewTicksInhale, int NewTicksExhale);
-    
-  /* Increments theflow rate sensor pulse counter. */
-  void TickFlow ();
-    
-  /* Prints the state of object to the debug stream. */
-  void Print (int Index);
-    
-  /* Opens the solenoid valve. */
-  void Inhale ();
-    
-  /* Closes the solenoid valve. */
-  void Exhale ();
-    
-  /* Samples the Atmospheric pressure and temperature. */
-  void Tare (float PressureHysteresis);
-  
-  /* Monitor the channel for if errors. */
-  int Monitor ();
-    
-  /* Updates the channel with the DeviceTick. */
-  void Update();
-};
-}   //< namespace SickBay
-#endif
--- a/GHVentilatorChannel.hpp	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/** Gravity Hookah Ventilator @version 0.x
-@link    https://github.com/KabukiStarship/SickBay.git
-@file    /GHVentilatorChannel.cpp
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
-This Source Code Form is subject to the terms of the Mozilla Public License, 
-v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
-one at <https://mozilla.org/MPL/2.0/>. */
-
-#include "GHVentilatorChannel.h"
-
-#include <mbedBug.h>
-using namespace mbedBug;
-
-namespace SickBay {
-
-GHVentilatorChannel::GHVentilatorChannel () :
-    Ticks         (0),
-    TicksInhale   (0),
-    TicksExhale   (0),
-    PulseOximeter (0),
-    Servo         (0),
-    ServoClosed   (0),
-    ServoOpen     (1) {}
-
-void GHVentilatorChannel::Init (GHVentilator* Parent, int TicksInhale, 
-                                int TicksExhale, float PressureHysteresis) {
-  this->Parent             = Parent;
-  this->TicksInhale        = TicksInhale;
-  this->TicksExhale        = TicksExhale;
-  this->PressureHysteresis = Pressure * PressureHysteresis;
-}
-
-GHVentilatorChannel* GHVentilatorChannel::This() { return this; }
-
-void GHVentilatorChannel::TurnOff () {
-  Parent->ChannelValveSet(this, LLLow);
-  Ticks = 0;
-}
-
-void GHVentilatorChannel::TicksInhaleExhaleSet (int NewTicksInhale, 
-                                                int NewTicksExhale) {
-  int Tick = Ticks;
-  if (Tick == 0) {
-    TicksInhale = NewTicksInhale;
-    TicksExhale = NewTicksExhale;
-  }
-  TicksInhale = NewTicksInhale;
-  TicksExhale = NewTicksExhale;
-  if (Tick < 0) { // We're exhaling.
-    if (Ticks > NewTicksExhale) {
-        Ticks = NewTicksExhale;
-        Inhale ();
-    }
-  }
-  else if (Tick > 0) { // We're inhaling.
-    if (Ticks > NewTicksInhale) {
-        Ticks = NewTicksInhale;
-        Exhale ();
-    }
-    return;
-  }
-}
-
-void GHVentilatorChannel::TickFlow () {
-  ++TicksFlow;
-}
-
-void GHVentilatorChannel::Inhale () {
-  DPrintf ("\n  ? Inhaling. <");
-  Ticks = StateInhaling;
-  Parent->ChannelValveSet(this, LLHigh);
-}
-
-void GHVentilatorChannel::Exhale () {
-  DPrintf ("\n  ? Exhaling. <");
-  Ticks = StateExhaling;
-  Parent->ChannelValveSet(this, LLLow);
-  TicksFlowLast = TicksFlow;
-}
-
-}   //< namespace SickBay
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GHVentilatorMbed.hpp	Sat Apr 11 08:48:28 2020 +0000
@@ -0,0 +1,186 @@
+/** Gravity Hookah Ventilator @version 0.x
+@link    https://github.com/KabukiStarship/SickBay.git
+@file    /SBVentilator/Firmware/TargetMbed.cpp
+@author  Cale McCollough <https://cale-mccollough.github.io>
+@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
+This Source Code Form is subject to the terms of the Mozilla Public License, 
+v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
+one at <https://mozilla.org/MPL/2.0/>. */
+#pragma once
+#ifndef SBVentilatorMbed
+#define SBVentilatorMbed
+#include <_KabukiTek.hpp>
+#include <BMP280.hpp>
+#include <BExprI2CMbed.hpp>
+using namespace _;
+
+#include "SBVentilator.hpp"
+
+#define SickBayDebug 1
+#define Platform PlatformMbed
+#define SBVentilatorChannelCount 4
+
+namespace SickBay {
+ 
+
+DigitalOut Blower(D2),
+           Status(D3),
+           Channel1Valve (D4);
+DigitalIn  ChannelFlowSensor (D5);
+DigitalOut Channel2Valve (D6);
+DigitalIn  Channel2FlowSensor (D7);
+DigitalOut Channel3Valve (D8);
+DigitalIn  Channel3FlowSensor (D9);
+DigitalOut Channel4Valve (D10);
+DigitalIn  Channel4FlowSensor (D11);
+
+void SBVentilator::BlowerTurnOff() {
+  Blower = LLLow;
+}
+
+void SBVentilator::BlowerTurnOn() {
+  Blower = LLHigh;
+}
+
+bool SBVentilator::IsOverPressure () { return Pressure > PressureMax; }
+
+bool SBVentilator::IsUnderPressure () { return Pressure < PressureMax; }
+
+void SBVentilator::Channel1ValveSet (int Value) {
+  Channel1Valve = Value;
+}
+
+void SBVentilator::Channel2ValveSet (int Value) {
+  Channel2Valve = Value;
+}
+void SBVentilator::Channel3ValveSet (int Value) {
+  Channel3Valve = Value;
+}
+void SBVentilator::Channel4ValveSet (int Value) {
+  Channel4Valve = Value;
+}
+#if SBVentilatorChannelCount >= 2
+#endif
+#if SBVentilatorChannelCount >= 3
+#endif
+#if SBVentilatorChannelCount >= 4
+#endif
+
+void SBVentilator::Run(){
+  DPrintIndent (100, "Starting SBVentilator...\r\n\r\n");
+  
+  enum {
+    TicksSecond = 250,
+    TicksCalibrate = TicksSecond * 10, //< Calibrate for 10 seconds.
+  };
+  DPrintf("\nInitalizing system with %d ticks per second.", TicksSecond);
+  float ChamberPressureHysteresis = 1.25f, //< +/-25% goes up and down half-way.
+        PatientPressureHysteresis = 1.01f; //< + 1% over 1 atmosphere.
+  
+  I2C Bus(A4, A5);
+  int BMP280Address = BMP280::AddressDefault;
+  
+  // Pressure sensor for the air tank.
+  BMP280 Atmosphere0;
+  Atmosphere0.Init(EvaluateI2C, &Bus, BMP280Address);
+  Pressure = Atmosphere0.Pressure ();
+  Temperature = Atmosphere0.Temperature ();
+  // Atmoshperic sensor to Patient 1.
+  BMP280 Atmosphere1;
+  Atmosphere1.Init(EvaluateI2C, &Bus, BMP280Address + 1);
+  Channels[0].Pressure = Atmosphere1.Pressure ();
+  Channels[0].Temperature = Atmosphere1.Temperature ();
+  #if SBVentilatorChannelCount >= 2
+  // Atmoshperic sensor to Patient 2.
+  BMP280 Atmosphere2;
+  Atmosphere2.Init (EvaluateI2C, &Bus, BMP280Address + 2);
+  Channels[1].Pressure = Atmosphere2.Pressure ();
+  Channels[1].Temperature = Atmosphere2.Temperature ();
+  #endif
+  #if SBVentilatorChannelCount >= 3
+  // Atmoshperic sensor to Patient 3.
+  BMP280 Atmosphere3;
+  Atmosphere3.Init(EvaluateI2C, &Bus, BMP280Address + 3);
+  Channels[2].Pressure = Atmosphere3.Pressure ();
+  Channels[2].Temperature = Atmosphere3.Temperature ();
+  #endif
+  #if SBVentilatorChannelCount >= 4
+  // Atmoshperic sensor to Patient 4.
+  BMP280 Atmosphere4;
+  Atmosphere4.Init (EvaluateI2C, &Bus, BMP280Address + 4);
+  Channels[3].Pressure = Atmosphere4.Pressure ();
+  Channels[3].Temperature = Atmosphere4.Temperature ();
+  #endif
+  
+  Init (TicksSecond, TicksPEEP,
+        ChamberPressureHysteresis, PatientPressureHysteresis);
+  
+  // Make sure you don't start the UpdateTicker until everything is setup to
+  // enter the Configuration State.
+  Ticker UpdateTicker;    //< The x times per second update ticker.
+  UpdateTicker.attach (callback(this, &SBVentilator::Update), 
+                       1.0f / float (TicksSecond));
+  
+  while (1) { // Poll the sensors.
+    Temperature = Atmosphere0.Temperature ();
+    Pressure  = Atmosphere0.Pressure();
+    
+    SBVentilatorChannel* Channel = &Channels[0];
+    Channel->Temperature = Atmosphere1.Temperature ();
+    Channel->Pressure  = Atmosphere1.Pressure();
+    Channel = &Channels[1];
+    #if SBVentilatorChannelCount >= 2
+    Channel->Temperature = Atmosphere2.Temperature ();
+    Channel->Pressure  = Atmosphere2.Pressure();
+    #endif
+    Channel = &Channels[2];
+    #if SBVentilatorChannelCount >= 3
+    Channel->Temperature = Atmosphere3.Temperature ();
+    Channel->Pressure  = Atmosphere3.Pressure();
+    #endif
+    Channel = &Channels[3];
+    #if SBVentilatorChannelCount >= 4
+    Channel->Temperature = Atmosphere4.Temperature ();
+    Channel->Pressure  = Atmosphere4.Pressure();
+    #endif
+  }
+}
+/*
+void RemoteTicksSecondSetHandle(Arguments* input, Reply* output) {
+  // Arguments are already parsed into argv array of char*
+  DDPrintf("Object name = %s\n",input->obj_name);
+  DPrintf("Method name = %s\n",input->method_name);
+  for (int i=0; i < input->argc; i++)
+  DPrintf("argv[%1d] = %s \n",i,input->argv[i]);
+  
+  // Alternatively the arguments can be recovered as the types expected
+  // by repeated calls to getArg()
+  int arg0 = input->getArg<int>();  // Expecting argv[0] to be int
+  DPrintf("Expecting argv[0] to be int = %d\n",arg0);
+  int arg1 = input->getArg<int>();  // Expecting argv[1] to be int
+  DPrintf("Expecting argv[1] to be int = %d\n",arg1);
+ 
+  // The output parameter string is generated by calls to putData, which separates them with spaces.
+  output->putData(arg0);
+  output->putData(arg1);
+}
+ 
+void HandleTicksInhaleExhaleSet(Arguments* input, Reply* output) {
+  DPrintf("\n? Object name=\"%s\" method_name=\"%s\" <",input->obj_name,input->method_name);
+  for (int i=0; i < input->argc; i++)
+    DPrintf("argv[%1d] = %s \n",i,input->argv[i]);
+  
+  int Index = input->getArg<int>();
+  int TicksInhale = input->getArg<int>();
+  int TicksExhale = input->getArg<int>();
+ 
+  // The output parameter string is generated by calls to putData, which separates them with spaces.
+  output->putData(Channel->TicksInhaleExhaleSet(TicksInhale, TicksExhale));
+}
+
+
+RPCFunction TicksSecondSet(&HandleTicksSecondSet, "TicksSecondSet"),
+            InhaleExhaleTicksSet(&HandleTicksInhaleExhaleSet, "InhaleTicksSet");
+          */  
+} //< namespace SickBay
+#endif
\ No newline at end of file
--- a/GHVentilatorTargetArduino.hpp	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/** Gravity Hookah Ventilator @version 0.x
-@link    https://github.com/KabukiStarship/SickBay.git
-@file    /GHVentilatorTargetArduino.hpp
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
-This Source Code Form is subject to the terms of the Mozilla Public License, 
-v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
-one at <https://mozilla.org/MPL/2.0/>. */
-#pragma once
-#ifndef GHVentilatorTargetArduino
-#define GHVentilatorTargetArduino
-#include "GHVentilator.h"
-#include <Wire.h>
-namespace SickBay {
-
-int GHVentilatorRun(){
-  Wire Bus(A4, A5);
-  char ChamberAddress = BMP280SlaveAddressDefault;
-  return 0;
-}
-} //< namespace SickBay
-#endif
--- a/GHVentilatorTargetMbed.hpp	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-/** Gravity Hookah Ventilator @version 0.x
-@link    https://github.com/KabukiStarship/SickBay.git
-@file    /TargetMbed.cpp
-@author  Cale McCollough <https://cale-mccollough.github.io>
-@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
-This Source Code Form is subject to the terms of the Mozilla Public License, 
-v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
-one at <https://mozilla.org/MPL/2.0/>. */
-#pragma once
-#ifndef GHVentilatorTargetMbed
-#define GHVentilatorTargetMbed
-
-#define SickBayDebug 1
-#define Platform PlatformMbed
-#define GHVentilatorChannelCount 4
-
-// Define LLLow and LLHigh before you #include "GHVentilator.hpp"
-enum {
-  LLHigh = 1, //< Logic-level High.
-  LLLow  = 0, //< Logic-level Low.
-};
-
-#include "GHVentilator.hpp"
-#include "BMP280.hpp"
-
-namespace SickBay {
- 
-
-DigitalOut Blower(D2),
-           Status(D3),
-           Channel1Valve (D4);
-DigitalIn ChannelFlowSensor (D5);
-DigitalOut Channel2Valve (D6);
-DigitalIn Channel2FlowSensor (D7);
-DigitalOut Channel3Valve (D8);
-DigitalIn Channel3FlowSensor (D9);
-DigitalOut Channel4Valve (D10);
-DigitalIn Channel4FlowSensor (D11);
-
-void GHVentilator::BlowerTurnOff() {
-  Blower = LLLow;
-}
-
-void GHVentilator::BlowerTurnOn() {
-  Blower = LLHigh;
-}
-
-bool GHVentilator::IsOverPressure () { return Pressure > PressureMax; }
-
-bool GHVentilator::IsUnderPressure () { return Pressure < PressureMax; }
-
-void GHVentilator::Channel1ValveSet (int Value) {
-  Channel1Valve = Value;
-}
-
-void GHVentilator::Channel2ValveSet (int Value) {
-  Channel2Valve = Value;
-}
-void GHVentilator::Channel3ValveSet (int Value) {
-  Channel3Valve = Value;
-}
-void GHVentilator::Channel4ValveSet (int Value) {
-  Channel4Valve = Value;
-}
-#if GHVentilatorChannelCount >= 2
-#endif
-#if GHVentilatorChannelCount >= 3
-#endif
-#if GHVentilatorChannelCount >= 4
-#endif
-
-void GHVentilator::Run(){
-  DPrintIndent (100, "Starting GHVentilator...\r\n\r\n");
-  
-  enum {
-    TicksSecond = 250,
-    TicksCalibrate = TicksSecond * 10, //< Calibrate for 10 seconds.
-  };
-  float ChamberPressureHysteresis = 1.25f, //< +/-25% goes up and down half-way.
-        PatientPressureHysteresis = 1.01f; //< + 1% over 1 atmosphere.
-  
-  I2C Bus(A4, A5);
-  int BusAddress = BMP280SlaveAddressDefault;
-  
-   // Pressure sensor for the air tank.
-  BMP280 AtmosphereChamber(Bus, BusAddress);
-  Pressure = AtmosphereChamber.Pressure ();
-  Temperature = AtmosphereChamber.Temperature ();
-  // Atmoshperic sensor to Patient 1.
-  BMP280 Channel1Atmosphere(Bus, BusAddress + 1);
-  Channels[0].Pressure = Channel1Atmosphere.Pressure ();
-  Channels[0].Temperature = Channel1Atmosphere.Temperature ();
-  #if GHVentilatorChannelCount >= 2
-  // Atmoshperic sensor to Patient 2.
-  BMP280 Channel2Atmosphere(Bus, BusAddress + 1);
-  Channels[1].Pressure = Channel2Atmosphere.Pressure ();
-  Channels[1].Temperature = Channel2Atmosphere.Temperature ();
-  #endif
-  #if GHVentilatorChannelCount >= 3
-  // Atmoshperic sensor to Patient 3.
-  BMP280 Channel3Atmosphere(Bus, BusAddress + 2);
-  Channels[2].Pressure = Channel3Atmosphere.Pressure ();
-  Channels[2].Temperature = Channel3Atmosphere.Temperature ();
-  #endif
-  #if GHVentilatorChannelCount >= 4
-  // Atmoshperic sensor to Patient 4.
-  BMP280 Channel4Atmosphere(Bus, BusAddress + 3);
-  Channels[3].Pressure = Channel4Atmosphere.Pressure ();
-  Channels[3].Temperature = Channel4Atmosphere.Temperature ();
-  #endif
-  
-  Init (TicksSecond, TicksPEEP,
-        ChamberPressureHysteresis, PatientPressureHysteresis);
-  
-  // Make sure you don't start the UpdateTicker until everything is setup to
-  // enter the Configuration State.
-  Ticker UpdateTicker;    //< The x times per second update ticker.
-  UpdateTicker.attach (callback(this, &GHVentilator::Update), 
-                       1.0f / float (TicksSecond));
-  
-  while (1) { // Poll the pressure and temperature.
-    Temperature = AtmosphereChamber.Temperature ();
-    Pressure  = AtmosphereChamber.Pressure();
-    
-    GHVentilatorChannel* Channel = &Channels[0];
-    Channel->Temperature = Channel1Atmosphere.Temperature ();
-    Channel->Pressure  = Channel1Atmosphere.Pressure();
-    Channel = &Channels[1];
-    #if GHVentilatorChannelCount >= 2
-    Channel->Temperature = Channel2Atmosphere.Temperature ();
-    Channel->Pressure  = Channel2Atmosphere.Pressure();
-    #endif
-    Channel = &Channels[2];
-    #if GHVentilatorChannelCount >= 3
-    Channel->Temperature = Channel3Atmosphere.Temperature ();
-    Channel->Pressure  = Channel3Atmosphere.Pressure();
-    #endif
-    Channel = &Channels[3];
-    #if GHVentilatorChannelCount >= 4
-    Channel->Temperature = Channel4Atmosphere.Temperature ();
-    Channel->Pressure  = Channel4Atmosphere.Pressure();
-    #endif
-  }
-}
-/*
-void RemoteTicksSecondSetHandle(Arguments* input, Reply* output) {
-  // Arguments are already parsed into argv array of char*
-  DDPrintf("Object name = %s\n",input->obj_name);
-  DPrintf("Method name = %s\n",input->method_name);
-  for (int i=0; i < input->argc; i++)
-  DPrintf("argv[%1d] = %s \n",i,input->argv[i]);
-  
-  // Alternatively the arguments can be recovered as the types expected
-  // by repeated calls to getArg()
-  int arg0 = input->getArg<int>();  // Expecting argv[0] to be int
-  DPrintf("Expecting argv[0] to be int = %d\n",arg0);
-  int arg1 = input->getArg<int>();  // Expecting argv[1] to be int
-  DPrintf("Expecting argv[1] to be int = %d\n",arg1);
- 
-  // The output parameter string is generated by calls to putData, which separates them with spaces.
-  output->putData(arg0);
-  output->putData(arg1);
-}
- 
-void HandleTicksInhaleExhaleSet(Arguments* input, Reply* output) {
-  DPrintf("\n? Object name=\"%s\" method_name=\"%s\" <",input->obj_name,input->method_name);
-  for (int i=0; i < input->argc; i++)
-    DPrintf("argv[%1d] = %s \n",i,input->argv[i]);
-  
-  int Index = input->getArg<int>();
-  int TicksInhale = input->getArg<int>();
-  int TicksExhale = input->getArg<int>();
- 
-  // The output parameter string is generated by calls to putData, which separates them with spaces.
-  output->putData(Channel->TicksInhaleExhaleSet(TicksInhale, TicksExhale));
-}
-
-
-RPCFunction TicksSecondSet(&HandleTicksSecondSet, "TicksSecondSet"),
-            InhaleExhaleTicksSet(&HandleTicksInhaleExhaleSet, "InhaleTicksSet");
-          */  
-} //< namespace SickBay
-#endif
\ No newline at end of file
--- a/Main.cpp	Fri Apr 10 11:56:58 2020 +0000
+++ b/Main.cpp	Sat Apr 11 08:48:28 2020 +0000
@@ -1,12 +1,12 @@
 /** Gravity Hookah Ventilator @version 0.x
 @link    https://github.com/KabukiStarship/SickBay.git
-@file    /Main.cpp
+@file    /GHVentilator/Firmware/Main.cpp
 @author  Cale McCollough <https://cale-mccollough.github.io>
 @license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>.
 This Source Code Form is subject to the terms of the Mozilla Public License, 
 v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain 
 one at <https://mozilla.org/MPL/2.0/>. */
-#include "GHVentilatorTargetMbed.hpp"
+#include "GHVentilatorMbed.hpp"
 int main () {
-  return SickBay::GHVentilator().Status;
+  return SickBay::SBVentilator().Status;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SickBayTek.lib	Sat Apr 11 08:48:28 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/kabukistarship/code/SickBayTek/#278bfa29bd0d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/_Config.h	Sat Apr 11 08:48:28 2020 +0000
@@ -0,0 +1,13 @@
+/** Gravity Hookah Ventilator @version 0.x
+@link    https://github.com/KabukiStarship/GHVentilator.git
+@file    /_Config.h
+@author  Cale McCollough <https://cale-mccollough.github.io>
+@license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>; all rights 
+reserved (R). This Source Code Form is subject to the terms of the Mozilla 
+Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
+You can obtain one at <https://mozilla.org/MPL/2.0/>. */
+#pragma once
+#ifndef GHVentilator_ConfigDecl
+#define GHVentilator_ConfigDecl
+#include <_KabukiTekConfig.h>
+#endif 
--- a/mbedBug.lib	Fri Apr 10 11:56:58 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://os.mbed.com/users/kabukistarship/code/mbedBug/#02df5c1108f1