178 lines
4.3 KiB
C++
178 lines
4.3 KiB
C++
#include <Arduino.h>
|
|
#include "OneWire2.h"
|
|
|
|
/** Major version number (X.x.x) */
|
|
#define ARDUINO_OBI_VERSION_MAJOR 0
|
|
/** Minor version number (x.X.x) */
|
|
#define ARDUINO_OBI_VERSION_MINOR 2
|
|
/** Patch version number (x.x.X) */
|
|
#define ARDUINO_OBI_VERSION_PATCH 1
|
|
|
|
#ifdef ESP_BUILD
|
|
#define ONEWIRE_PIN ESP_OW_PIN
|
|
#define ENABLE_PIN ESP_EN_PIN
|
|
#else
|
|
#define ONEWIRE_PIN 6
|
|
#define ENABLE_PIN 8
|
|
#endif
|
|
|
|
|
|
OneWire makita(ONEWIRE_PIN);
|
|
|
|
void cmd_and_read_33(byte *cmd, uint8_t cmd_len, byte *rsp, uint8_t rsp_len) {
|
|
int i;
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
makita.write(0x33,0);
|
|
|
|
for (i=0; i < 8; i++) {
|
|
delayMicroseconds(90);
|
|
rsp[i] = makita.read();
|
|
}
|
|
|
|
for (i=0; i < cmd_len; i++) {
|
|
delayMicroseconds(90);
|
|
makita.write(cmd[i],0);
|
|
}
|
|
|
|
for (i=8; i < rsp_len + 8; i++) {
|
|
delayMicroseconds(90);
|
|
rsp[i] = makita.read();
|
|
}
|
|
}
|
|
|
|
void cmd_and_read_cc(byte *cmd, uint8_t cmd_len, byte *rsp, uint8_t rsp_len) {
|
|
int i;
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
makita.write(0xcc,0);
|
|
|
|
for (i=0; i < cmd_len; i++) {
|
|
delayMicroseconds(90);
|
|
makita.write(cmd[i],0);
|
|
}
|
|
|
|
for (i=0; i < rsp_len; i++) {
|
|
delayMicroseconds(90);
|
|
rsp[i] = makita.read();
|
|
}
|
|
}
|
|
|
|
void cmd_and_read(byte *cmd, uint8_t cmd_len, byte *rsp, uint8_t rsp_len) {
|
|
int i;
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
|
|
for (i=0; i < cmd_len; i++) {
|
|
delayMicroseconds(90);
|
|
makita.write(cmd[i],0);
|
|
}
|
|
|
|
for (i=0; i < rsp_len; i++) {
|
|
delayMicroseconds(90);
|
|
rsp[i] = makita.read();
|
|
}
|
|
}
|
|
|
|
|
|
void setup() {
|
|
Serial.begin (9600);
|
|
// One-wire
|
|
pinMode(ENABLE_PIN, OUTPUT);
|
|
//pinMode(2, OUTPUT);
|
|
}
|
|
|
|
void send_usb(byte *rsp, byte rsp_len) {
|
|
for (int i=0; i < rsp_len; i++) {
|
|
Serial.write(rsp[i]);
|
|
}
|
|
}
|
|
|
|
void read_usb() {
|
|
if (Serial.available() >= 4) {
|
|
byte start = Serial.read();
|
|
byte cmd;
|
|
byte len;
|
|
byte data[255];
|
|
byte rsp[255];
|
|
byte rsp_len;
|
|
|
|
if (start == 0x01) {
|
|
len = Serial.read();
|
|
rsp_len = Serial.read();
|
|
cmd = Serial.read();
|
|
if (len > 0){
|
|
for (int i = 0; i < len; i++) {
|
|
while (Serial.available() < 1);
|
|
data[i] = Serial.read();
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
/* Set RTS */
|
|
digitalWrite(ENABLE_PIN, HIGH);
|
|
delay(400);
|
|
|
|
switch(cmd) {
|
|
case 0x01:
|
|
rsp[0] = 0x01;
|
|
rsp[2] = ARDUINO_OBI_VERSION_MAJOR;
|
|
rsp[3] = ARDUINO_OBI_VERSION_MINOR;
|
|
rsp[4] = ARDUINO_OBI_VERSION_PATCH;
|
|
break;
|
|
case 0x31:
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
makita.write(0xcc,0);
|
|
delayMicroseconds(90);
|
|
makita.write(0x99,0);
|
|
delay(400);
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
makita.write(0x31,0);
|
|
delayMicroseconds(90);
|
|
rsp[3] = makita.read();
|
|
delayMicroseconds(90);
|
|
rsp[2] = makita.read();
|
|
delayMicroseconds(90);
|
|
break;
|
|
case 0x32:
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
makita.write(0xcc,0);
|
|
delayMicroseconds(90);
|
|
makita.write(0x99,0);
|
|
delay(400);
|
|
makita.reset();
|
|
delayMicroseconds(400);
|
|
makita.write(0x32,0);
|
|
delayMicroseconds(90);
|
|
rsp[3] = makita.read();
|
|
delayMicroseconds(90);
|
|
rsp[2] = makita.read();
|
|
delayMicroseconds(90);
|
|
break;
|
|
case 0x33:
|
|
cmd_and_read_33(data, len, &rsp[2], rsp_len);
|
|
break;
|
|
case 0xCC:
|
|
cmd_and_read_cc(data, len, &rsp[2], rsp_len);
|
|
break;
|
|
default:
|
|
rsp_len = 0;
|
|
break;
|
|
}
|
|
rsp[0] = cmd;
|
|
rsp[1] = rsp_len;
|
|
send_usb(rsp, rsp_len + 2);
|
|
|
|
digitalWrite(ENABLE_PIN, LOW);
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
read_usb();
|
|
}
|