From dfe9c075f50d169e2db461cdc31ed1ac30088d09 Mon Sep 17 00:00:00 2001 From: smckown Date: Tue, 9 Sep 2008 17:55:51 +0000 Subject: [PATCH] Add support for the cp210x chipset, which is simply a debounced version status of the chip's USB_SUSPENDn pin. --- tos/chips/cp210x/CP210X.nc | 70 ++++++++++ tos/chips/cp210x/CP210XC.nc | 52 +++++++ tos/chips/cp210x/CP210XP.nc | 129 ++++++++++++++++++ tos/platforms/tmicore/.platform | 2 + .../tmicore/chips/cp210x/CP210XPinsC.nc | 54 ++++++++ 5 files changed, 307 insertions(+) create mode 100644 tos/chips/cp210x/CP210X.nc create mode 100644 tos/chips/cp210x/CP210XC.nc create mode 100644 tos/chips/cp210x/CP210XP.nc create mode 100644 tos/platforms/tmicore/chips/cp210x/CP210XPinsC.nc diff --git a/tos/chips/cp210x/CP210X.nc b/tos/chips/cp210x/CP210X.nc new file mode 100644 index 00000000..07f82b57 --- /dev/null +++ b/tos/chips/cp210x/CP210X.nc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2008, Titanium Mirror, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * HIL interface for the CP210X USB/serial controller chip. + * + * @author R. Steve McKown + */ + +interface CP210X { + /** + * @returns the current attach state of the USB connector. + */ + async command bool isEnabled(); + + /** + * Enable notifications from the cp210x. This does not enable the USB bus. + */ + async command void enable(); + + /** + * Disable notifications from the cp210x. This does not disable the USB bus. + */ + async command void disable(); + + /** + * Signalled any time the USB connection moves from any other state to the + * enabled state. In the enabled state, USB is supplying power and data + * connections can be established. Signals are only send if notifications + * have been enabled. + */ + async event void enabled(); + + /** + * Signalled any time the USB connection moves out of enabled state. This + * may be because the USB host or hub has placed the local USB device into + * suspend, the upstream hub has powered down, or the interconnecting cable + * has been disconnected. In all cases, only very minimal power is available + * from USB, all existing data connections are aborted and no new connections + * can be established. Signals are only sent if notifications have been + * enabled. + */ + async event void suspended(); +} diff --git a/tos/chips/cp210x/CP210XC.nc b/tos/chips/cp210x/CP210XC.nc new file mode 100644 index 00000000..0cf925d3 --- /dev/null +++ b/tos/chips/cp210x/CP210XC.nc @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2008, Titanium Mirror, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * HIL implementation for the CP210X USB/serial controller chip family. + * + * @author R. Steve McKown + */ + +configuration CP210XC { + provides interface CP210X; +} +implementation { + components CP210XP; + CP210X = CP210XP; + + components MainC; + MainC.SoftwareInit -> CP210XP.Init; + + components CP210XPinsC as PinsC; + CP210XP.USB_SUSPENDn -> PinsC.USB_SUSPENDn; + CP210XP.IntUSB_SUSPENDn -> PinsC.IntUSB_SUSPENDn; + + components new TimerMilliC(); + CP210XP.Timer -> TimerMilliC; +} diff --git a/tos/chips/cp210x/CP210XP.nc b/tos/chips/cp210x/CP210XP.nc new file mode 100644 index 00000000..ce45bb57 --- /dev/null +++ b/tos/chips/cp210x/CP210XP.nc @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2008, Titanium Mirror, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * HIL implementation for the CP210X USB/serial controller chip family. + * + * @author R. Steve McKown + */ + +module CP210XP { + provides { + interface Init; + interface CP210X; + } + uses { + interface GeneralIO as USB_SUSPENDn; + interface GpioInterrupt as IntUSB_SUSPENDn; + interface Timer; + } +} +implementation { + const static unsigned DELAY = 256; /* 1/4 sec in binary milliseconds */ + bool enabled; + + void setInt() + { + if (call USB_SUSPENDn.get()) + call IntUSB_SUSPENDn.enableFallingEdge(); + else + call IntUSB_SUSPENDn.enableRisingEdge(); + } + + void unsetInt() + { + call IntUSB_SUSPENDn.disable(); + } + + void update() + { + atomic setInt(); + } + + command error_t Init.init() + { + update(); + return SUCCESS; + } + + async command void CP210X.enable() + { + atomic { + enabled = TRUE; + setInt(); + } + } + + async command void CP210X.disable() + { + atomic { + enabled = FALSE; + unsetInt(); + } + } + + async command bool CP210X.isEnabled() + { + /* USB_SUSPENDn is active low and enabled is !suspend */ + return call USB_SUSPENDn.get(); + } + + task void signalChange() + { + bool suspended; + + atomic suspended = call USB_SUSPENDn.get(); + if (suspended) + signal CP210X.suspended(); + else + signal CP210X.enabled(); + } + + task void startTimer() + { + call Timer.startOneShot(DELAY); + } + + async event void IntUSB_SUSPENDn.fired() + { + post startTimer(); + } + + event void Timer.fired() + { + atomic { + update(); + if (enabled) + post signalChange(); + } + } + + default async event void CP210X.enabled() {} + default async event void CP210X.suspended() {} +} diff --git a/tos/platforms/tmicore/.platform b/tos/platforms/tmicore/.platform index bb841720..3e8fdb1b 100755 --- a/tos/platforms/tmicore/.platform +++ b/tos/platforms/tmicore/.platform @@ -6,6 +6,7 @@ push( @includes, qw( %T/platforms/tmicore %T/platforms/tmicore/chips/bq2403x + %T/platforms/tmicore/chips/cp210x %T/platforms/telosa %T/chips/msp430 %T/chips/msp430/adc12 @@ -16,6 +17,7 @@ push( @includes, qw( %T/chips/msp430/sensors %T/chips/at45db %T/chips/bq2403x + %T/chips/cp210x %T/lib/timer %T/lib/serial %T/lib/adc diff --git a/tos/platforms/tmicore/chips/cp210x/CP210XPinsC.nc b/tos/platforms/tmicore/chips/cp210x/CP210XPinsC.nc new file mode 100644 index 00000000..9d19f8b4 --- /dev/null +++ b/tos/platforms/tmicore/chips/cp210x/CP210XPinsC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2008, Titanium Mirror, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Pin assignments for the cp2103 on the tmicore. + * + * @author R. Steve McKown + */ + +configuration CP210XPinsC { + provides { + interface GeneralIO as USB_SUSPENDn; + interface GpioInterrupt as IntUSB_SUSPENDn; + } +} +implementation { + components new Msp430GpioC() as USB_SUSPENDnC; + USB_SUSPENDn = USB_SUSPENDnC; + + components new Msp430InterruptC() as IntUSB_SUSPENDnC; + IntUSB_SUSPENDn = IntUSB_SUSPENDnC; + + components HplMsp430GeneralIOC as IOC; + USB_SUSPENDnC.HplGeneralIO -> IOC.Port24; + + components HplMsp430InterruptC as IntC; + IntUSB_SUSPENDnC.HplInterrupt -> IntC.Port24; +} -- 2.39.2