File: KarateLight.h

package info (click to toggle)
ola 0.9.1-1.1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 21,340 kB
  • ctags: 23,021
  • sloc: cpp: 129,922; python: 12,265; sh: 11,778; makefile: 2,288; ansic: 1,775; java: 518; xml: 214
file content (135 lines) | stat: -rw-r--r-- 4,316 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Library General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * KarateLight.h
 * The KarateLight communication class
 * Copyright (C) 2013 Carsten Presser
 */
#ifndef PLUGINS_KARATE_KARATELIGHT_H_
#define PLUGINS_KARATE_KARATELIGHT_H_

#include <stdint.h>
#include <string>

#include "ola/BaseTypes.h"
#include "ola/DmxBuffer.h"

namespace ola {
namespace plugin {
namespace karate {

class KarateLight {
 public:
  explicit KarateLight(const std::string &dev);
  ~KarateLight();
  bool Init();
  void Close();

  bool Blank();
  bool SetColors(const DmxBuffer &da);

  uint16_t GetnChannels() const { return m_nChannels; }
  uint8_t GetFWVersion() const { return m_fw_version; }
  uint8_t GetHWVersion() const { return m_hw_version; }
  uint16_t GetDMXOffset() const { return m_dmx_offset; }
  bool IsActive() const { return m_active; }

 private:
  bool ReadBack(uint8_t *rd_data, uint8_t *rd_len);
  bool ReadByteFromEeprom(uint8_t addr, uint8_t *data);
  bool SendCommand(uint8_t cmd, const uint8_t *output_buffer,
                   int n_bytes_to_write, uint8_t *input_buffer,
                   int n_bytes_expected);
  bool UpdateColors();

  const std::string m_devname;
  int m_fd;

  static const uint16_t CMD_MAX_LENGTH = 64;
  static const uint16_t CHUNK_SIZE = 32;

  uint8_t m_fw_version;
  uint8_t m_hw_version;
  uint16_t m_nChannels;
  uint16_t m_dmx_offset;

  uint8_t m_color_buffer[DMX_UNIVERSE_SIZE];
  uint8_t m_color_buffer_old[DMX_UNIVERSE_SIZE];
  uint8_t m_use_memcmp;

  bool m_active;

  // address
  static const uint8_t CMD_HD_SYNC = 0x00;
  static const uint8_t CMD_HD_COMMAND = 0x01;
  static const uint8_t CMD_HD_CHECK = 0x02;
  static const uint8_t CMD_HD_LEN = 0x03;
  static const uint8_t CMD_DATA_START = 0x04;

  // sync words
  static const uint8_t CMD_SYNC_SEND = 0xAA;
  static const uint8_t CMD_SYNC_RECV = 0x55;

  // status
  static const uint8_t CMD_SYS_ACK = 0x01;
  static const uint8_t CMD_SYS_NACK = 0x02;
  static const uint8_t CMD_SYS_NIMP = 0xFF;
  static const uint8_t CMD_SYS_IR = 0x10;
  static const uint8_t CMD_SYS_DATA = 0x20;
  static const uint8_t CMD_SYS_NACK_LENGTH = 0x03;
  static const uint8_t CMD_SYS_NACK_CHECK = 0x04;

  // commands
  static const uint8_t CMD_GET_VERSION = 0x01;
  static const uint8_t CMD_GET_HARDWARE = 0x02;

  static const uint8_t CMD_GET_TLC_PWM_VALUE = 0x14;
  static const uint8_t CMD_SET_TLC_PWM_VALUE = 0x15;

  static const uint8_t CMD_SET_DATA_00 = 0x20;
  static const uint8_t CMD_SET_DATA_01 = 0x21;
  static const uint8_t CMD_SET_DATA_02 = 0x22;
  static const uint8_t CMD_SET_DATA_03 = 0x23;
  static const uint8_t CMD_SET_DATA_04 = 0x24;
  static const uint8_t CMD_SET_DATA_05 = 0x25;
  static const uint8_t CMD_SET_DATA_06 = 0x26;
  static const uint8_t CMD_SET_DATA_07 = 0x27;
  static const uint8_t CMD_SET_DATA_08 = 0x28;
  static const uint8_t CMD_SET_DATA_09 = 0x29;
  static const uint8_t CMD_SET_DATA_0A = 0x2A;
  static const uint8_t CMD_SET_DATA_0B = 0x2B;
  static const uint8_t CMD_SET_DATA_0C = 0x2C;
  static const uint8_t CMD_SET_DATA_0D = 0x2D;
  static const uint8_t CMD_SET_DATA_0E = 0x2E;
  static const uint8_t CMD_SET_DATA_0F = 0x2F;

  static const uint8_t CMD_GET_N_CHANNELS = 0x30;

  static const uint8_t CMD_READ_ADC0 = 0x40;

  static const uint8_t CMD_READ_EEPROM = 0x50;
  static const uint8_t CMD_WRITE_EEPROM = 0x51;

  static const uint8_t CMD_BOOT_REQUEST = 0x80;
  static const uint8_t CMD_BOOT_START = 0x81;

  static const uint8_t HW_ID_KARATE = 0x01;
  static const uint8_t HW_ID_USB2DMX = 0x02;
};
}  // namespace karate
}  // namespace plugin
}  // namespace ola

#endif  // PLUGINS_KARATE_KARATELIGHT_H_