Split up code into namespaces.
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user