Skip to content

Commit

Permalink
nearly complete
Browse files Browse the repository at this point in the history
  • Loading branch information
adammhaile committed Feb 12, 2017
1 parent 2fbf49e commit 390efbf
Show file tree
Hide file tree
Showing 6 changed files with 195 additions and 29 deletions.
3 changes: 3 additions & 0 deletions .gitignore
@@ -0,0 +1,3 @@
*.pyc
dist
build
104 changes: 92 additions & 12 deletions Firmware/Firmware.ino
Expand Up @@ -115,6 +115,10 @@ void set_brightness(uint8_t val){
// write_config();
}

uint8_t wait_next_byte(){
while(!Serial.available()){}
return Serial.read();
}
#define IN_BUFFER_SIZE 256
void loop(){
static char buf[IN_BUFFER_SIZE];
Expand All @@ -135,18 +139,30 @@ void loop(){
cmd = CMD_BRIGHTNESS;
read_amt = 3;
break;
case CMD_RAW:
cmd = CMD_RAW;
read_amt = wait_next_byte();
read_amt += 2;
break;
case CMD_BAUD_RATE:
cmd = CMD_BAUD_RATE;
read_amt = 3;
break;
case CMD_FACTORY_RESET:
cmd = CMD_FACTORY_RESET;
read_amt = 2;
break;
}
}

buf[count] = c;
count++;

if(cmd == 0){
if(c == '\n' || c == '\r'){
count--;
buf[count] = 0;
clear_text();
Serial.println(buf); //TODO: Remove this
// Serial.write(buf); //TODO: Remove this
for(i=0, ci=0; ci<12 && i<count; i++){
c = buf[i];

Expand All @@ -164,7 +180,8 @@ void loop(){
}
}
if(i < count){
Serial.println(buf+i);
Serial.write(buf+i);
Serial.write('\n');
}

complete = true;
Expand All @@ -175,6 +192,36 @@ void loop(){
switch (cmd) {
case CMD_BRIGHTNESS:
set_brightness(buf[1]);
Serial.write(CMD_BRIGHTNESS);
Serial.write(buf[1]);
Serial.write('\n');
break;
case CMD_RAW:
clear_text();
for(i=0; i<read_amt-2 && i<12; i++){
_character_values[i] = buf[i+1];
}
break;
case CMD_BAUD_RATE:
if(buf[1] >= BAUD_2400 && buf[1] <= BAUD_76800){
_baud_rate = buf[1];
init_serial();
write_config();
}
break;
case CMD_FACTORY_RESET:
clear_text();
_character_values[4] = get_char('r');
_character_values[5] = get_char('e');
_character_values[6] = get_char('s');
_character_values[7] = get_char('e');
_character_values[8] = get_char('t');
// delay(1000);
_baud_rate = BAUD_9600;
_pwm_level = 10;
write_config();
al();
break;
}

complete = true;
Expand Down Expand Up @@ -214,10 +261,44 @@ inline void setInterrupts()
sei();
}

void setup(){
//load config
read_config();
void init_serial(){
// Serial.end();
long baud = 9600;
switch(_baud_rate){
case BAUD_2400:
baud = 2400;
break;
case BAUD_4800:
baud = 4800;
break;
case BAUD_9600:
baud = 9600;
break;
case BAUD_14400:
baud = 14400;
break;
case BAUD_19200:
baud = 19200;
break;
case BAUD_38400:
baud = 38400;
break;
case BAUD_57600:
baud = 57600;
break;
case BAUD_76800:
baud = 76800;
break;
default:
baud = 9600;
}

Serial.begin(baud);
Serial.setTimeout(1000);
delay(10); //give serial a moment to setup
}

void setup(){
byte d, i = 0;

// Setup anodes as ouputs
Expand Down Expand Up @@ -245,11 +326,10 @@ void setup(){
REG_MUXB |= _BV(PIN_MUXB);
REG_MUXC |= _BV(PIN_MUXC);

//Setup timer for plex
// Timer1.initialize(250);
// Timer1.attachInterrupt(plex);

setInterrupts();
Serial.begin(38400);
Serial.setTimeout(1000);

//load config
read_config();

init_serial();
}
11 changes: 7 additions & 4 deletions Firmware/global.h
Expand Up @@ -5,7 +5,7 @@ volatile byte _pwm_step = 0;
volatile byte _cath = 0;
volatile byte _pwm_level = 10;

#define CONFIG_CHECK 74
#define CONFIG_CHECK 66
#define CONFIG_BYTE 0
#define PWM_BYTE 1
#define BAUD_BYTE 2
Expand All @@ -19,13 +19,13 @@ volatile byte _pwm_level = 10;
#define BAUD_57600 6
#define BAUD_76800 7

uint8_t _baud_rate = BAUD_38400;
uint8_t _baud_rate = BAUD_9600;

uint8_t _cur_value;
uint8_t _character_values[CATH_COUNT*DIG_PER_CATH] = {
characters[16],
characters[17],
characters[18],
characters[17],
characters[16],
characters[19],
characters[20],
characters[21],
Expand All @@ -50,3 +50,6 @@ uint8_t _character_values[CATH_COUNT*DIG_PER_CATH] = {

//Commands
#define CMD_BRIGHTNESS 0x10
#define CMD_RAW 0x11
#define CMD_BAUD_RATE 0x12
#define CMD_FACTORY_RESET 0x13
27 changes: 27 additions & 0 deletions libaries/python/reset.py
@@ -0,0 +1,27 @@
from super7 import Super7, BaudRates
import sys
import time

bauds = [
(BaudRates.BAUD_2400, '2400'),
(BaudRates.BAUD_4800, '4800'),
(BaudRates.BAUD_9600, '9600'),
(BaudRates.BAUD_14400, '14400'),
(BaudRates.BAUD_19200, '19200'),
(BaudRates.BAUD_38400, '38400'),
(BaudRates.BAUD_57600, '57600'),
(BaudRates.BAUD_76800, '76800')
]

for rate in bauds:
print(rate[1])
s7 = Super7(sys.argv[1], baudrate=rate[0])
s7.factory_reset()
s7._com.close()

s7 = Super7(sys.argv[1], baudrate=BaudRates.BAUD_9600)
s7.write("S7 Reset")
# s7.write("do reset")
# time.sleep(1)
# s7.factory_reset()
# time.sleep(2)
42 changes: 37 additions & 5 deletions libaries/python/super7.py
Expand Up @@ -12,8 +12,8 @@
from distutils.version import LooseVersion

if LooseVersion(serial.VERSION) < LooseVersion('2.7'):
error = "pyserial v{} found, please upgrade to v2.7+! pip install pyserial --upgrade".format(
serial.VERSION)
error = ("pyserial v{} found, please upgrade to v2.7+!"
" pip install pyserial --upgrade").format(serial.VERSION)
log.error(error)
raise ImportError(error)

Expand Down Expand Up @@ -42,12 +42,19 @@ class BaudRates():

class Commands():
BRIGHTNESS = 0x10
RAW = 0x11
BAUD = 0x12
FACTORY_RESET = 0x13


class Super7(object):

def __init__(self, dev, baudrate=BaudRates.BAUD_9600):
self.dev = dev
self.baudrate = BaudRates._rate_values[baudrate]
if baudrate in BaudRates._rate_values:
self.baudrate = BaudRates._rate_values[baudrate]
else:
self.baudrate = baudrate
self._com = None
self.connect()

Expand All @@ -60,6 +67,9 @@ def findSerialDevices():

def connect(self):
try:
log.info('Reconnecting...')
if self._com:
self._com.close()
self._com = serial.Serial(self.dev, baudrate=self.baudrate)
time.sleep(1) # S7 usually resets. Wait for it...
except serial.SerialException:
Expand All @@ -75,22 +85,44 @@ def write(self, msg):
msg = msg.replace('\n', '')
msg += '\n'
self._com.write(msg)
# time.sleep(1)
# print(list(self._com.read_all()))

def clear(self):
self.write('')

def send_command(self, cmd, count=None, value=None):
# print(locals())
packet = bytearray()
packet.append(cmd)
if count is not None:
packet.append(count)
if value is not None:
packet.append(value)
if isinstance(value, (str, bytearray, list)):
packet.extend(value)
else:
packet.append(value)

packet.append('\n')
print(list(packet))
self._com.write(packet)
# print(list(self._com.read()))
# time.sleep(1)
# print([ord(i) for i in list(self._com.read_all())])

def set_brightness(self, level):
self.send_command(Commands.BRIGHTNESS, value=level)

def send_raw(self, raw_bytes):
self.send_command(Commands.RAW, count=len(raw_bytes), value=raw_bytes)

def set_baud(self, baudrate):
self.send_command(Commands.BAUD, value=baudrate)
time.sleep(1) # must provide time to set baud before reconnect
self.baudrate = BaudRates._rate_values[baudrate]
self.connect()

def factory_reset(self):
self.send_command(Commands.FACTORY_RESET)
time.sleep(1) # must provide time to reset before reconnect
self.baudrate = BaudRates._rate_values[BaudRates.BAUD_9600]
self.connect()
37 changes: 29 additions & 8 deletions libaries/python/test.py
Expand Up @@ -4,10 +4,30 @@
strings = [
'999999999996',
'Super7',
'Hello World'
# 'Hello World'
]

s7 = Super7("COM8", baudrate=BaudRates.BAUD_38400)
bauds = [
(BaudRates.BAUD_9600, 9600),
(BaudRates.BAUD_19200, 19200),
(BaudRates.BAUD_38400, 38400),
]

s7 = Super7("/dev/ttyUSB0", baudrate=bauds[0][0])
s7.set_brightness(3)
for s in strings:
s7.write(s)
time.sleep(1)
for b in bauds:
s7.set_baud(b[0])
time.sleep(1)
s7.write("baud-{}".format(b[1]))
time.sleep(1)


# for i in range(0, 245):
# s7.send_raw([i+a for a in range(12)])
# time.sleep(0.1)

# s7.set_brightness(10)
# time.sleep(1)
Expand All @@ -16,14 +36,15 @@
# s7.set_brightness(10)
# time.sleep(1)
# for s in strings:
# # print(s)
# s7.write(s)
# time.sleep(1)

# s7.clear()

for _ in range(1):
for i in range(1, 12, 1):
print(i)
s7.set_brightness(i)
time.sleep(0.5)
print('\n')
# for _ in range(1):
# for i in range(1, 12, 1):
# print(i)
# s7.set_brightness(i)
# time.sleep(0.5)
# print('\n')

0 comments on commit 390efbf

Please sign in to comment.