Changeset b6f2ebc in mainline for kernel/genarch/src/srln/srln.c


Ignore:
Timestamp:
2009-03-12T17:52:33Z (16 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a0e1b48
Parents:
a7efdec
Message:

wire keyboard/serial module and device drivers in a more obvious way
(first a device driver is initialized and then it is connected to the generic module)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/srln/srln.c

    ra7efdec rb6f2ebc  
    2727 */
    2828
    29 /** @addtogroup genarch 
     29/** @addtogroup genarch
    3030 * @{
    3131 */
    3232/**
    3333 * @file
    34  * @brief       Serial line processing.
     34 * @brief Serial line processing.
    3535 */
    3636
     
    4141#include <arch.h>
    4242
    43 chardev_t srlnin;
    44 static chardev_t *srlnout;
     43static indev_t srlnout;
    4544
    46 static void srlnin_suspend(chardev_t *d)
    47 {
    48 }
    49 
    50 static void srlnin_resume(chardev_t *d)
    51 {
    52 }
    53 
    54 chardev_operations_t srlnin_ops = {
    55         .suspend = srlnin_suspend,
    56         .resume = srlnin_resume,
     45indev_operations_t srlnout_ops = {
     46        .poll = NULL
    5747};
    5848
    5949static void ksrln(void *arg)
    6050{
    61         chardev_t *in = (chardev_t *) arg;
    62         uint8_t ch;
    63 
    64         while (1) {
    65                 ch = _getc(in);
     51        indev_t *in = (indev_t *) arg;
     52        bool cr = false;
     53       
     54        while (true) {
     55                uint8_t ch = _getc(in);
    6656               
    67                 if (ch == '\r')
     57                if ((ch == '\n') && (cr)) {
     58                        cr = false;
    6859                        continue;
     60                }
    6961               
    70                 chardev_push_character(srlnout, ch);
     62                if (ch == '\r') {
     63                        ch = '\n';
     64                        cr = true;
     65                } else
     66                        cr = false;
     67               
     68                if (ch == 0x7f)
     69                        ch = '\b';
     70               
     71                indev_push_character(stdin, ch);
    7172        }
    7273}
    7374
    74 
    75 void srln_init(chardev_t *devout)
     75void srln_init(indev_t *devin)
    7676{
    77         thread_t *t;
    78 
    79         chardev_initialize("srln", &srlnin, &srlnin_ops);
    80         srlnout = devout;
     77        indev_initialize("srln", &srlnout, &srlnout_ops);
     78        thread_t *thread
     79            = thread_create(ksrln, devin, TASK, 0, "ksrln", false);
    8180       
    82         t = thread_create(ksrln, &srlnin, TASK, 0, "ksrln", false);
    83         ASSERT(t);
    84         thread_ready(t);
     81        if (thread) {
     82                stdin = &srlnout;
     83                thread_ready(thread);
     84        }
    8585}
    8686
    8787/** @}
    8888 */
    89 
Note: See TracChangeset for help on using the changeset viewer.