Split up code into namespaces.

This commit is contained in:
Maxwell Pray
2022-09-01 13:54:38 -07:00
parent c8733448b9
commit 8faab1f700
5 changed files with 118 additions and 77 deletions
+32
View File
@@ -0,0 +1,32 @@
#define LED_PIN 13
#define LED_ON_MS 35
#define LED_OFF_MS 460
#include <Arduino.h>
namespace LedBlaster {
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void emit_0() {
digitalWrite(LED_PIN, HIGH);
delayMicroseconds(LED_ON_MS);
digitalWrite(LED_PIN, LOW);
delayMicroseconds(LED_OFF_MS);
}
void emit_1() {
delayMicroseconds(LED_ON_MS + LED_OFF_MS);
}
void emit_byte(uint8_t serial_byte) {
emit_0();
for (int i = 0; i < 8; i++) {
bitRead(serial_byte, i) ? emit_1() : emit_0();
}
}
}
+13
View File
@@ -0,0 +1,13 @@
#ifndef LED_BLASTER_H
#define LED_BLASTER_H
#include <Arduino.h>
namespace LedBlaster {
void setup();
void emit_0();
void emit_1();
void emit_byte(uint8_t serial_byte);
}
#endif
+55
View File
@@ -0,0 +1,55 @@
#ifndef NOTEBOOK_ADAPTER_H
#define NOTEBOOK_ADAPTER_H
#define COMMAND_PING 'x'
#define COMMAND_QUERY '?'
#define COMMAND_TRANSMIT 'U'
#define COMMAND_QUERY_PAYLOAD "M764"
#define PING_EXPIRE_MS 1000
#include <Arduino.h>
namespace NotebookAdapter {
unsigned long last_ping_ms = 0;
bool command_mode = true;
void emulate_command_mode(uint8_t serial_byte) {
switch(serial_byte) {
case COMMAND_PING:
Serial.write(COMMAND_PING);
break;
case COMMAND_QUERY:
Serial.print(COMMAND_QUERY_PAYLOAD);
Serial.write(0);
break;
case COMMAND_TRANSMIT:
Serial.write(COMMAND_TRANSMIT);
command_mode = false;
break;
}
}
void emulate_data_mode(uint8_t serial_byte) {
if (millis() - last_ping_ms > PING_EXPIRE_MS) {
command_mode = true;
}
Serial.write(serial_byte);
last_ping_ms = millis();
}
void emulate(uint8_t serial_byte) {
void(*function)(uint8_t) = command_mode ? emulate_command_mode : emulate_data_mode;
function(serial_byte);
}
}
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef NOTEBOOK_ADAPTER_H
#define NOTEBOOK_ADAPTER_H
#include <Arduino.h>
namespace NotebookAdapter {
void emulate_command_mode(uint8_t serial_byte);
void emulate_data_mode(uint8_t serial_byte);
void emulate(uint8_t serial_byte);
}
#endif
+6 -77
View File
@@ -1,87 +1,16 @@
#define LED_PIN 13 #include "led_blaster.h"
#include "notebook_adapter.h"
#define LED_ON_MS 35
#define LED_OFF_MS 460
#define COMMAND_PING 'x'
#define COMMAND_QUERY '?'
#define COMMAND_TRANSMIT 'U'
#define HANDSHAKE_PAYLOAD "M764"
#define PING_EXPIRE_MS 1000
unsigned long last_ping_ms = 0;
bool command_mode = true;
void led_emit_0() {
digitalWrite(LED_PIN, HIGH);
delayMicroseconds(LED_ON_MS);
digitalWrite(LED_PIN, LOW);
delayMicroseconds(LED_OFF_MS);
}
void led_emit_1() {
delayMicroseconds(LED_ON_MS + LED_OFF_MS);
}
void led_emit_byte(uint8_t serial_byte) {
led_emit_0();
for (int i = 0; i < 8; i++) {
bitRead(serial_byte, i) ? led_emit_1() : led_emit_0();
}
}
void emulate_notebook_adapter_command(uint8_t serial_byte) {
switch(serial_byte) {
case COMMAND_PING:
Serial.write(COMMAND_PING);
break;
case COMMAND_QUERY:
Serial.print(HANDSHAKE_PAYLOAD);
Serial.write(0);
break;
case COMMAND_TRANSMIT:
Serial.write(COMMAND_TRANSMIT);
command_mode = false;
break;
}
}
void emulate_notebook_adapter_data(uint8_t serial_byte) {
if (millis() - last_ping_ms > PING_EXPIRE_MS) {
command_mode = true;
}
Serial.write(serial_byte);
last_ping_ms = millis();
}
void emulate_notebook_adapter(uint8_t serial_byte) {
void(*function)(uint8_t) = command_mode ? emulate_notebook_adapter_command : emulate_notebook_adapter_data;
function(serial_byte);
}
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
pinMode(LED_PIN, OUTPUT); LedBlaster::setup();
} }
void loop() { void loop() {
int serial_byte = Serial.read(); int serial_byte = Serial.read();
if (serial_byte == -1) { if (serial_byte != -1) {
return; LedBlaster::emit_byte(serial_byte);
NotebookAdapter::emulate(serial_byte);
} }
led_emit_byte(serial_byte);
emulate_notebook_adapter(serial_byte);
} }