source: rtems/c/src/lib/libbsp/lm32/shared/milkymist_dmx/dmx.c @ dce1032b

4.115
Last change on this file since dce1032b was dce1032b, checked in by Joel Sherrill <joel.sherrill@…>, on 08/01/11 at 13:48:40

2011-08-01 Sebastien Bourdeauducq <sebastien.bourdeauducq@…>

PR 1869/bsps

  • startup/bspclean.c: New file.
  • include/tm27.h: Removed.
  • ChangeLog?, Makefile.am, README, preinstall.am, include/bsp.h, include/system_conf.h, make/custom/milkymist.cfg, startup/linkcmds: Complete BSP for Milkymist One supporting Milkymist SOC 1.0.x. Includes new or updated drivers for:
    • Multi-standard video input (PAL/SECAM/NTSC)
    • Two DMX512 (RS485) ports
    • MIDI IN and MIDI OUT ports
    • VGA output
    • AC'97 audio
    • NOR flash
    • 10/100 Ethernet
    • Memory card (experimental and incomplete)
    • USB host connectors (input devices only)
    • RC5 infrared receiver
    • RS232 debug port
  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*  dmx.c
2 *
3 *  Milkymist DMX512 driver for RTEMS
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.com/license/LICENSE.
8 *
9 *  $Id$
10 *
11 *  COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
12 */
13
14#define RTEMS_STATUS_CHECKS_USE_PRINTK
15
16#include <stdlib.h>
17#include <sys/types.h>
18#include <rtems.h>
19#include <rtems/status-checks.h>
20#include <bsp.h>
21#include <rtems/libio.h>
22#include "../include/system_conf.h"
23#include "milkymist_dmx.h"
24
25#define IN_DEVICE_NAME "/dev/dmx_in"
26#define OUT_DEVICE_NAME "/dev/dmx_out"
27
28rtems_device_driver dmx_initialize(
29  rtems_device_major_number major,
30  rtems_device_minor_number minor,
31  void *arg
32)
33{
34  rtems_status_code sc;
35
36  sc = rtems_io_register_name(IN_DEVICE_NAME, major, 0);
37  RTEMS_CHECK_SC(sc, "create DMX input device");
38
39  sc = rtems_io_register_name(OUT_DEVICE_NAME, major, 1);
40  RTEMS_CHECK_SC(sc, "create DMX output device");
41
42  return RTEMS_SUCCESSFUL;
43}
44
45rtems_device_driver dmx_read(
46  rtems_device_major_number major,
47  rtems_device_minor_number minor,
48  void *arg
49)
50{
51  rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg;
52  int len;
53  unsigned int i;
54  unsigned char *values = (unsigned char *)rw_args->buffer;
55
56  len = 512 - rw_args->offset;
57  if (len < 0) {
58    rw_args->bytes_moved = 0;
59    return RTEMS_SUCCESSFUL;
60  }
61  if (len > rw_args->count)
62    len = rw_args->count;
63
64  if (minor == 0) {
65    for (i=0;i<len;i++)
66      values[i] = MM_READ(MM_DMX_RX((unsigned int)rw_args->offset+i));
67  } else {
68    for (i=0;i<len;i++)
69      values[i] = MM_READ(MM_DMX_TX((unsigned int)rw_args->offset+i));
70  }
71
72  rw_args->bytes_moved = len;
73
74  return RTEMS_SUCCESSFUL;
75}
76
77rtems_device_driver dmx_write(
78  rtems_device_major_number major,
79  rtems_device_minor_number minor,
80  void *arg
81)
82{
83  rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg;
84  int len;
85  unsigned int i;
86  unsigned char *values = (unsigned char *)rw_args->buffer;
87
88  if (minor == 0) {
89    rw_args->bytes_moved = 0;
90    return RTEMS_UNSATISFIED;
91  }
92
93  len = 512 - rw_args->offset;
94  if (len < 0) {
95    rw_args->bytes_moved = 0;
96    return RTEMS_SUCCESSFUL;
97  }
98  if (len > rw_args->count)
99    len = rw_args->count;
100
101  for (i=0;i<len;i++)
102    MM_WRITE(MM_DMX_TX((unsigned int)rw_args->offset+i), values[i]);
103
104  rw_args->bytes_moved = len;
105
106  return RTEMS_SUCCESSFUL;
107}
108
109rtems_device_driver dmx_control(
110  rtems_device_major_number major,
111  rtems_device_minor_number minor,
112  void *arg
113)
114{
115  rtems_libio_ioctl_args_t *args = arg;
116
117  switch (args->command) {
118    case DMX_SET_THRU:
119      args->ioctl_return = 0;
120      MM_WRITE(MM_DMX_THRU, (unsigned int)args->buffer);
121      return RTEMS_SUCCESSFUL;
122    case DMX_GET_THRU:
123      args->ioctl_return = 0;
124      *((unsigned int *)args->buffer) = MM_READ(MM_DMX_THRU);
125      return RTEMS_SUCCESSFUL;
126    default:
127      args->ioctl_return = -1;
128      return RTEMS_UNSATISFIED;
129  }
130}
Note: See TracBrowser for help on using the repository browser.