Skip to content

Commit 9d7cf4b

Browse files
committed
initial commit
0 parents  commit 9d7cf4b

File tree

10 files changed

+690
-0
lines changed

10 files changed

+690
-0
lines changed

.github/workflows/build.yml

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: build
2+
3+
on:
4+
- push
5+
- pull_request
6+
7+
env:
8+
CARGO_TERM_COLOR: always
9+
10+
jobs:
11+
rust:
12+
runs-on: ${{ matrix.os }}
13+
strategy:
14+
matrix:
15+
os: [macos-latest, ubuntu-latest, windows-latest]
16+
steps:
17+
- uses: actions/checkout@v2
18+
- uses: dorny/paths-filter@v2
19+
id: changes
20+
with:
21+
filters: |
22+
rust:
23+
- '**.rs'
24+
- 'Cargo.lock'
25+
- '.github/workflows/**'
26+
- if: steps.changes.outputs.rust == 'true'
27+
run: cargo build
28+
rustdoc:
29+
runs-on: ubuntu-latest
30+
steps:
31+
- uses: actions/checkout@v2
32+
- uses: dorny/paths-filter@v2
33+
id: changes
34+
with:
35+
filters: |
36+
rust:
37+
- '**.rs'
38+
- 'Cargo.lock'
39+
- '.github/workflows/**'
40+
- if: steps.changes.outputs.rust == 'true'
41+
run: cargo doc

.github/workflows/lint.yml

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: lint
2+
3+
on:
4+
- push
5+
- pull_request
6+
7+
env:
8+
CARGO_TERM_COLOR: always
9+
10+
jobs:
11+
rustfmt:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v2
15+
- uses: dorny/paths-filter@v2
16+
id: changes
17+
with:
18+
filters: |
19+
rust:
20+
- '**.rs'
21+
- 'rustfmt.toml'
22+
- '.github/workflows/**'
23+
- if: steps.changes.outputs.rust == 'true'
24+
uses: actions-rs/toolchain@v1
25+
with:
26+
toolchain: nightly
27+
components: rustfmt
28+
override: true
29+
- if: steps.changes.outputs.rust == 'true'
30+
run: cargo fmt --check
31+

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Cargo.lock
2+
/target/
3+
**/*.rs.bk

Cargo.toml

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
[package]
2+
name = "hcms-29xx"
3+
version = "0.1.0"
4+
edition = "2021"
5+
authors = ["Nick Brown <nick@altonimb.us>"]
6+
categories = ["embedded", "no-std"]
7+
description = "Driver for HCMS-29XX and HCMS-39XX display ICs"
8+
license = "MIT"
9+
repository = "https://github.com/nonik0/hcms-29xx"
10+
readme = "README.md"
11+
12+
[dependencies]
13+
embedded-hal = "1.0.0"
14+
avr-progmem = "0.4.0" # TODO: use as feature
15+
16+
# The latest releases of `proc-macro2` do not support the rust toolchain that
17+
# we use. Thus, we must fix this dependency to an older version where our
18+
# toolchain is still supported. See https://github.com/Rahix/avr-hal/issues/537
19+
[build-dependencies.proc-macro2]
20+
version = "=1.0.79"
21+
22+
#[[example]]
23+
#name = "arduino-uno"
24+
25+
#[dependencies.arduino-hal]
26+
#path = "../../arduino-hal/"
27+
#features = ["arduino-uno"]

README.md

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# HCMS-29xx Driver
2+
3+
[![Crates.io](https://img.shields.io/crates/v/hcms-29xx)](https://crates.io/crates/hcms-29xx)
4+
[![Crates.io](https://img.shields.io/crates/d/hcms-29xx)](https://crates.io/crates/hcms-29xx)
5+
[![docs.rs](https://img.shields.io/docsrs/hcms-29xx)](https://docs.rs/hcms-29xx/latest/hcms-29xx/)
6+
7+
[![lint](https://github.com/gleich/hcms-29xx/actions/workflows/lint.yml/badge.svg)](https://github.com/gleich/hcms-29xx/actions/workflows/lint.yml)
8+
[![build](https://github.com/gleich/hcms-29xx/actions/workflows/build.yml/badge.svg)](https://github.com/gleich/hcms-29xx/actions/workflows/build.yml)
9+
10+
Driver for [HCMS-29XX](https://docs.broadcom.com/doc/HCMS-29xx-Series-High-Performance-CMOS-5-x-7-Alphanumeric-Displays) and [HCMS-39XX](https://docs.broadcom.com/doc/AV02-0868EN) display ICs. Many thanks for @Andy4495's existing [HCMS39XX](https://github.com/Andy4495/HCMS39xx) Arduino/C++ library, which I used for a reference implementation.
11+
12+
## Features:
13+
* Single dependency on embedded-hal v1.0
14+
* Examples for Arduino Uno using avr-hal
15+
* TBD
16+
17+
## Install
18+
19+
To install this driver in your project add the following line to your `Cargo.toml`'s `dependencies` table:
20+
21+
```toml
22+
hcms-29xx = "0.1.0"
23+
```
24+
25+
## TODO
26+
- [ ] Arduino Uno sample
27+
- [ ] Test on other hardware, add feature flags if needed for specific functionality (e.g. progmem for AVR)
28+
- [ ] Katakana font

examples/arduino-uno.rs

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#![no_std]
2+
#![no_main]
3+
4+
use panic_halt as _;
5+
6+
const NUM_CHARS: usize = 8;
7+
const MESSAGE: &[u8] = b"Hello from Rust on Arduino!";
8+
9+
#[arduino_hal::entry]
10+
fn main() -> ! {
11+
let dp = arduino_hal::Peripherals::take().unwrap();
12+
let pins = arduino_hal::pins!(dp);
13+
14+
// modify pin assignments to match wiring, if optional pins are not specified the logic
15+
// level must set as appropriate externally with pull-up/down resistors or other means
16+
let mut display = hcms29xx::Hcms29xx::new(
17+
NUM_CHARS, // Number of characters in the display
18+
pins.d0.into_output().downgrade(), // Data pin
19+
pins.d1.into_output().downgrade(), // Clock pin
20+
pins.d2.into_output().downgrade(), // Chip select pin
21+
pins.d3.into_output().downgrade(), // Reset pin
22+
Some(pins.d4.into_output().downgrade()), // Optional: Enable pin
23+
Some(pins.d5.into_output().downgrade()), // Optional: Write pin
24+
Some(pins.d6.into_output().downgrade()), // Optional: Read pin
25+
)
26+
.unwrap();
27+
28+
display.begin().unwrap();
29+
display.display_unblank().unwrap();
30+
31+
display.set_current(1).unwrap(); // set current (0-3) to 1
32+
//display.set_brightness(15).unwrap(); // set brightness (0-15) to max
33+
//display.set_int_osc().unwrap(); // set internal oscillator (default internal)
34+
35+
// show a scrolling message, wrapping around at the end
36+
let mut cursor: usize = 0;
37+
loop {
38+
let mut buf = [0; NUM_CHARS];
39+
40+
for i in 0..NUM_CHARS {
41+
let index = (cursor + i as usize) % MESSAGE.len();
42+
buf[i as usize] = MESSAGE[index];
43+
}
44+
45+
display.print_c_string(&buf).unwrap();
46+
cursor = (cursor + 1) % MESSAGE.len();
47+
arduino_hal::delay_ms(30);
48+
}
49+
}

rust-toolchain.toml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[toolchain]
2+
channel = "nightly-2024-03-22"
3+
components = ["rust-src"]
4+
profile = "minimal"

src/constants.rs

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
pub const CHAR_WIDTH: usize = 5;
2+
pub const CHAR_HEIGHT: usize = 7;
3+
pub const DEVICE_CHARS: usize = 4;
4+
5+
pub const CONTROL_WORD_SELECT_BIT: u8 = 0b1000_0000; // low: control word 0, high: control word 1
6+
7+
pub mod control_word_0 {
8+
pub const BRIGHTNESS_MASK: u8 = 0b0000_1111;
9+
pub const CURRENT_MASK: u8 = 0b0011_0000;
10+
pub const WAKE_BIT: u8 = 0b0100_0000;
11+
12+
pub const MAX_BRIGHTNESS: u8 = 15;
13+
pub const DEFAULT_BRIGHTNESS: u8 = 12;
14+
pub const DEFAULT_CURRENT: u8 = current::MAX_4_0MA;
15+
16+
pub mod current {
17+
pub const MAX_4_0MA: u8 = 0b0010_0000;
18+
pub const MAX_6_4MA: u8 = 0b0001_0000;
19+
pub const MAX_9_3MA: u8 = 0b0000_0000;
20+
pub const MAX_12_8MA: u8 = 0b0011_0000;
21+
}
22+
}
23+
24+
pub mod control_word_1 {
25+
pub const DATA_OUT_BIT: u8 = 0b0000_0001; // low: serial, high: simultaneous
26+
pub const EXT_OSC_PRESCALER_BIT: u8 = 0b0000_0010; // low: clock/1, clock/8
27+
28+
pub const DEFAULT_DATA_OUT_MODE: u8 = DATA_OUT_BIT;
29+
}

src/font5x7.rs

+175
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
// derived from https://github.com/Andy4495/HCMS39xx/blob/main/src/font5x7.h
2+
3+
use avr_progmem::progmem;
4+
5+
progmem! {
6+
pub static progmem FONT5X7: [u8;770] = [
7+
8+
// Character 0x00 is not printable since 0x00 is used to indicate NULL terminator in c-strings
9+
// So use the first bitmap slot (5 elements) in the array to specify the Font meta-data:
10+
// ASCII offset, last ASCII character, don't care, don't care, don't care
11+
// ASCII offset is the ASCII value of the first defined bitmap in this table. It should never be less than 1.
12+
0x01, 0x99, 0x00, 0x00, 0x00, // 0x00
13+
14+
// The first 32 ASCII codes (0x00 to 0x1F) are normally non-printable control characters.
15+
// So use these slots for characters not defined by ASCII
16+
0x30, 0x48, 0x45, 0x40, 0x20, // 0x01 (inverted question mark) - changed from 0x30, 0x45, 0x48, 0x40, 0x30
17+
0x45, 0x29, 0x11, 0x29, 0x45, // 0x02 (x bar)
18+
0x7D, 0x09, 0x11, 0x21, 0x7D, // 0x03 (N bar)
19+
0x7D, 0x09, 0x05, 0x05, 0x79, // 0x04 (n bar)
20+
0x38, 0x44, 0x44, 0x38, 0x44, // 0x05 (alpha)
21+
0x7E, 0x01, 0x29, 0x2E, 0x10, // 0x06 (beta)
22+
0x30, 0x4A, 0x4D, 0x49, 0x30, // 0x07 (delta)
23+
0x60, 0x50, 0x48, 0x50, 0x60, // 0x08 (Delta)
24+
0x1E, 0x04, 0x04, 0x38, 0x40, // 0x09 (eta)
25+
0x3E, 0x49, 0x49, 0x49, 0x3E, // 0x0A (theta)
26+
0x62, 0x14, 0x08, 0x10, 0x60, // 0x0B (lambda)
27+
0x40, 0x3C, 0x20, 0x20, 0x1C, // 0x0C (mu)
28+
0x08, 0x7C, 0x04, 0x7C, 0x02, // 0x0D (pi)
29+
0x38, 0x44, 0x44, 0x3C, 0x04, // 0x0E (sigma)
30+
0x41, 0x63, 0x55, 0x49, 0x41, // 0x0F (Sigma)
31+
0x10, 0x08, 0x78, 0x08, 0x04, // 0x10 (tau)
32+
0x18, 0x24, 0x7E, 0x24, 0x18, // 0x11 (phi)
33+
0x5E, 0x61, 0x01, 0x61, 0x5E, // 0x12 (Omega)
34+
0x78, 0x14, 0x15, 0x14, 0x78, // 0x13 (ring A, Angstrom)
35+
0x38, 0x44, 0x45, 0x3C, 0x40, // 0x14 (ring a)
36+
0x78, 0x15, 0x14, 0x15, 0x78, // 0x15 (umlaut A)
37+
0x38, 0x45, 0x44, 0x3D, 0x40, // 0x16 (umlaut a)
38+
0x3C, 0x43, 0x42, 0x43, 0x3C, // 0x17 (umlaut O)
39+
0x38, 0x45, 0x44, 0x45, 0x38, // 0x18 (umlaut o)
40+
0x3C, 0x41, 0x40, 0x41, 0x3C, // 0x19 (umlaut U)
41+
0x38, 0x42, 0x40, 0x42, 0x38, // 0x1A (umlaut u)
42+
0x08, 0x08, 0x2A, 0x1C, 0x08, // 0x1B (right arrow)
43+
0x20, 0x7E, 0x02, 0x02, 0x02, // 0x1C (square root)
44+
0x12, 0x19, 0x15, 0x12, 0x00, // 0x1D (squared, superscript 2)
45+
0x48, 0x7E, 0x49, 0x41, 0x42, // 0x1E (pound sterling)
46+
0x01, 0x12, 0x7C, 0x12, 0x01, // 0x1F (yen)
47+
// Standard printable ASCII characters start at 32 (0x20)
48+
0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 (space)
49+
0x00, 0x5F, 0x00, 0x00, 0x00, // 0x21 !
50+
0x00, 0x03, 0x00, 0x03, 0x00, // 0x22 "
51+
0x14, 0x7F, 0x14, 0x7F, 0x14, // 0x23 #
52+
0x24, 0x2A, 0x7F, 0x2A, 0x12, // 0x24 $
53+
0x23, 0x13, 0x08, 0x64, 0x62, // 0x25 %
54+
0x36, 0x49, 0x56, 0x20, 0x50, // 0x26 &
55+
0x00, 0x0B, 0x07, 0x00, 0x00, // 0x27 '
56+
0x00, 0x00, 0x3E, 0x41, 0x00, // 0x28 (
57+
0x00, 0x41, 0x3E, 0x00, 0x00, // 0x29 )
58+
0x08, 0x2A, 0x1C, 0x2A, 0x08, // 0x2A *
59+
0x08, 0x08, 0x3E, 0x08, 0x08, // 0x2B +
60+
0x00, 0x58, 0x38, 0x00, 0x00, // 0x2C ,
61+
0x08, 0x08, 0x08, 0x08, 0x08, // 0x2D -
62+
0x00, 0x30, 0x30, 0x00, 0x00, // 0x2E .
63+
0x20, 0x10, 0x08, 0x04, 0x02, // 0x2F /
64+
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0x30 0
65+
0x00, 0x42, 0x7F, 0x40, 0x00, // 0x31 1
66+
0x62, 0x51, 0x49, 0x49, 0x46, // 0x32 2
67+
0x22, 0x41, 0x49, 0x49, 0x36, // 0x33 3
68+
0x18, 0x14, 0x12, 0x7F, 0x10, // 0x34 4
69+
0x27, 0x45, 0x45, 0x45, 0x39, // 0x35 5
70+
0x3C, 0x4A, 0x49, 0x49, 0x30, // 0x36 6
71+
0x01, 0x71, 0x09, 0x05, 0x03, // 0x37 7
72+
0x36, 0x49, 0x49, 0x49, 0x36, // 0x38 8
73+
0x06, 0x49, 0x49, 0x29, 0x1E, // 0x39 9
74+
0x00, 0x36, 0x36, 0x00, 0x00, // 0x3A :
75+
0x00, 0x56, 0x36, 0x00, 0x00, // 0x3B ; (changed from 0x00, 0x56, 0x3B, 0x00, 0x00)
76+
0x00, 0x08, 0x14, 0x22, 0x41, // 0x3C <
77+
0x14, 0x14, 0x14, 0x14, 0x14, // 0x3D =
78+
0x41, 0x22, 0x14, 0x08, 0x00, // 0x3E >
79+
0x02, 0x01, 0x51, 0x09, 0x06, // 0x3F ?
80+
0x3E, 0x41, 0x5D, 0x55, 0x1E, // 0x40 @
81+
0x7E, 0x09, 0x09, 0x09, 0x7E, // 0x41 A
82+
0x7F, 0x49, 0x49, 0x49, 0x36, // 0x42 B
83+
0x3E, 0x41, 0x41, 0x41, 0x22, // 0x43 C
84+
0x41, 0x7f, 0x41, 0x41, 0x3E, // 0x44 D (changed from 0x7F, 0x41, 0x41, 0x41, 0x3E)
85+
0x7F, 0x49, 0x49, 0x49, 0x41, // 0x45 E
86+
0x7F, 0x09, 0x09, 0x09, 0x01, // 0x46 F
87+
0x3E, 0x41, 0x41, 0x51, 0x32, // 0x47 G
88+
0x7F, 0x08, 0x08, 0x08, 0x7F, // 0x48 H
89+
0x00, 0x41, 0x7F, 0x41, 0x00, // 0x49 I
90+
0x20, 0x40, 0x40, 0x40, 0x3F, // 0x4A J
91+
0x7F, 0x08, 0x14, 0x22, 0x41, // 0x4B K
92+
0x7F, 0x40, 0x40, 0x40, 0x40, // 0x4C L
93+
0x7F, 0x02, 0x0C, 0x02, 0x7F, // 0x4D M
94+
0x7F, 0x04, 0x08, 0x10, 0x7F, // 0x4E N
95+
0x3E, 0x41, 0x41, 0x41, 0x3E, // 0x4F O
96+
0x7F, 0x09, 0x09, 0x09, 0x06, // 0x50 P
97+
0x3E, 0x41, 0x51, 0x21, 0x5E, // 0x51 Q
98+
0x7F, 0x09, 0x19, 0x29, 0x46, // 0x52 R
99+
0x26, 0x49, 0x49, 0x49, 0x32, // 0x53 S
100+
0x01, 0x01, 0x7F, 0x01, 0x01, // 0x54 T
101+
0x3F, 0x40, 0x40, 0x40, 0x3F, // 0x55 U
102+
0x07, 0x18, 0x60, 0x18, 0x07, // 0x56 V
103+
0x7F, 0x20, 0x18, 0x20, 0x7F, // 0x57 W
104+
0x63, 0x14, 0x08, 0x14, 0x63, // 0x58 X
105+
0x03, 0x04, 0x78, 0x04, 0x03, // 0x59 Y
106+
0x61, 0x51, 0x49, 0x45, 0x43, // 0x5A Z
107+
0x00, 0x00, 0x7F, 0x41, 0x41, // 0x5B [
108+
0x02, 0x04, 0x08, 0x10, 0x20, // 0x5C (backslash - escape character)
109+
0x41, 0x41, 0x7F, 0x00, 0x00, // 0x5D ]
110+
0x04, 0x02, 0x01, 0x02, 0x04, // 0x5E ^ (changed from 0x04, 0x02, 0x7F, 0x02, 0x04)
111+
0x40, 0x40, 0x40, 0x40, 0x40, // 0x5F _ (underscore)
112+
0x00, 0x07, 0x0B, 0x00, 0x00, // 0x60 `
113+
0x38, 0x44, 0x44, 0x3C, 0x40, // 0x61 a
114+
0x7F, 0x48, 0x44, 0x44, 0x38, // 0x62 b
115+
0x38, 0x44, 0x44, 0x44, 0x44, // 0x63 c
116+
0x38, 0x44, 0x44, 0x48, 0x7F, // 0x64 d
117+
0x38, 0x54, 0x54, 0x54, 0x08, // 0x65 e
118+
0x08, 0x7E, 0x09, 0x02, 0x00, // 0x66 f
119+
0x08, 0x14, 0x54, 0x54, 0x3C, // 0x67 g
120+
0x7F, 0x08, 0x04, 0x04, 0x78, // 0x68 h
121+
0x00, 0x44, 0x7D, 0x40, 0x00, // 0x69 i
122+
0x20, 0x40, 0x44, 0x3D, 0x00, // 0x6A j
123+
0x00, 0x7F, 0x10, 0x28, 0x44, // 0x6B k
124+
0x00, 0x41, 0x7F, 0x40, 0x00, // 0x6C l
125+
0x78, 0x04, 0x18, 0x04, 0x78, // 0x6D m
126+
0x7C, 0x08, 0x04, 0x04, 0x78, // 0x6E n
127+
0x38, 0x44, 0x44, 0x44, 0x38, // 0x6F o
128+
0x7C, 0x14, 0x24, 0x24, 0x18, // 0x70 p
129+
0x18, 0x24, 0x14, 0x7C, 0x40, // 0x71 q
130+
0x00, 0x7C, 0x08, 0x04, 0x04, // 0x72 r
131+
0x48, 0x54, 0x54, 0x54, 0x20, // 0x73 s
132+
0x04, 0x3E, 0x44, 0x20, 0x00, // 0x74 t
133+
0x3C, 0x40, 0x40, 0x20, 0x7C, // 0x75 u
134+
0x1C, 0x20, 0x40, 0x20, 0x1C, // 0x76 v
135+
0x3C, 0x40, 0x30, 0x40, 0x3C, // 0x77 w
136+
0x44, 0x28, 0x10, 0x28, 0x44, // 0x78 x
137+
0x0C, 0x50, 0x50, 0x50, 0x3C, // 0x79 y (changed from 0x04, 0x48, 0x30, 0x08, 0x04)
138+
0x44, 0x64, 0x54, 0x4C, 0x44, // 0x7A z
139+
0x00, 0x08, 0x36, 0x41, 0x00, // 0x7B {
140+
0x00, 0x00, 0x7F, 0x00, 0x00, // 0x7C | (changed from 0x00, 0x00, 0x77, 0x00, 0x00)
141+
0x00, 0x41, 0x36, 0x08, 0x00, // 0x7D }
142+
0x04, 0x02, 0x04, 0x08, 0x04, // 0x7E ~ (changed from 0x08, 0x04, 0x08, 0x10, 0x08)
143+
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x7F Solid block (replaces ASCII definition of DEL) (changed from 0x2A, 0x55, 0x2A, 0x55, 0x2A)
144+
// Additional user-defined characters can be added here, up to 0xFF (i.e., 8-bits for a max of 255 character definitions)
145+
// Be sure to update index 1 (line 32 above, second value in the "00" definition) with the updated highest supported character value when adding characters.
146+
147+
// Extra characters
148+
0x2A, 0x55, 0x2A, 0x55, 0x2A, // 0x80 Every other pixel on/off
149+
0x08, 0x1C, 0x3E, 0x7F, 0x00, // 0x81 Left pointing triangle
150+
0x00, 0x7F, 0x3E, 0x1C, 0x08, // 0x82 Right pointing triangle
151+
0x08, 0x0C, 0x0E, 0x0C, 0x08, // 0x83 Up pointing triangle
152+
0x08, 0x18, 0x38, 0x18, 0x08, // 0x84 Down pointing triangle
153+
0x08, 0x1C, 0x2A, 0x08, 0x08, // 0x85 Left arrow
154+
0x08, 0x08, 0x2A, 0x1C, 0x08, // 0x86 Right arrow
155+
0x04, 0x02, 0x7F, 0x02, 0x04, // 0x87 Up arrow
156+
0x10, 0x20, 0x7F, 0x20, 0x10, // 0x88 Down arrow
157+
0x00, 0x00, 0x07, 0x00, 0x00, // 0x89 ' Apostrophe/straight single quote
158+
0x00, 0x07, 0x00, 0x07, 0x00, // 0x8A " Straight double quote
159+
0x00, 0x01, 0x02, 0x04, 0x00, // 0x8B ` Simple back-tick
160+
0x7F, 0x41, 0x41, 0x41, 0x7F, // 0x8C box
161+
0x00, 0x08, 0x1C, 0x08, 0x00, // 0x8D inner product/dot product
162+
0x00, 0x00, 0x08, 0x00, 0x00, // 0x8E inner product/dot product (single pixel)
163+
0x00, 0x14, 0x08, 0x14, 0x00, // 0x8F cross product
164+
0x00, 0x7F, 0x00, 0x7F, 0x00, // 0x90 || logigal or
165+
0x08, 0x14, 0x2A, 0x14, 0x22, // 0x91 << double angle bracket
166+
0x22, 0x14, 0x2A, 0x14, 0x08, // 0x92 >> double angle bracket
167+
0x30, 0x38, 0x34, 0x32, 0x31, // 0x93 <= less than or equal
168+
0x31, 0x32, 0x34, 0x38, 0x30, // 0x94 >= greater than or equal
169+
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, // 0x95 triple bar, equivalence
170+
0x10, 0x00, 0x02, 0x00, 0x10, // 0x96 therefore
171+
0x04, 0x04, 0x04, 0x04, 0x1C, // 0x97 not
172+
0x00, 0x00, 0x02, 0x05, 0x02, // 0x98 degrees
173+
0x08, 0x08, 0x2A, 0x08, 0x08, // 0x99 division
174+
];
175+
}

0 commit comments

Comments
 (0)