/*-1* spinconsole.c2*3* Author: Maksym Sobolyev <[email protected]>4* Copyright (c) 2009 Sippy Software, Inc.5* All rights reserved.6*7* Subject to the following obligations and disclaimer of warranty, use and8* redistribution of this software, in source or object code forms, with or9* without modifications are expressly permitted by Whistle Communications;10* provided, however, that:11* 1. Any and all reproductions of the source or object code must include the12* copyright notice above and the following disclaimer of warranties; and13* 2. No rights are granted, in any manner or form, to use Whistle14* Communications, Inc. trademarks, including the mark "WHISTLE15* COMMUNICATIONS" on advertising, endorsements, or otherwise except as16* such appears in the above copyright notice or in the software.17*18* THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND19* TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO20* REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,21* INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF22* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.23* WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY24* REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS25* SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.26* IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES27* RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING28* WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,29* PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR30* SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY31* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT32* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF33* THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY34* OF SUCH DAMAGE.35*/3637#include <stand.h>38#include <bootstrap.h>3940static void spinc_probe(struct console *cp);41static int spinc_init(int arg);42static void spinc_putchar(int c);43static int spinc_getchar(void);44static int spinc_ischar(void);4546extern struct console *consoles[];4748struct console spinconsole = {49.c_name = "spinconsole",50.c_desc = "spin port",51.c_probe = spinc_probe,52.c_init = spinc_init,53.c_out = spinc_putchar,54.c_in = spinc_getchar,55.c_ready = spinc_ischar56};5758static struct console *parent = NULL;5960static void61spinc_probe(struct console *cp)62{6364if (parent == NULL)65parent = consoles[0];66parent->c_probe(cp);67}6869static int70spinc_init(int arg)71{7273return (parent->c_init(arg));74}7576static void77spinc_putchar(int c)78{79static unsigned tw_chars = 0x5C2D2F7C; /* "\-/|" */80static time_t lasttime = 0;81time_t now;8283now = time(0);84if (now < (lasttime + 1))85return;86#ifdef TERM_EMU87if (lasttime > 0)88parent->c_out('\b');89#endif90lasttime = now;91parent->c_out((char)tw_chars);92tw_chars = (tw_chars >> 8) | ((tw_chars & (unsigned long)0xFF) << 24);93}9495static int96spinc_getchar(void)97{9899return (-1);100}101102static int103spinc_ischar(void)104{105106return (0);107}108109110