Compare commits
5 Commits
e1fcd0b7fe
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
040853e7dc | ||
|
|
ad33d0de79 | ||
|
|
1d62691973 | ||
|
|
dda98860d1 | ||
|
|
30264698b8 |
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[submodule "PCB_Charger"]
|
||||||
|
path = PCB_Charger
|
||||||
|
url = https://git.rd12.ru/Razvalyaev/Charger.git
|
||||||
|
branch = master
|
||||||
@@ -19,7 +19,7 @@ constexpr uint8_t MENU_OPTICAL_CALIBRATION_ITEM = 7;
|
|||||||
const char *uiFailName(FailReason reason);
|
const char *uiFailName(FailReason reason);
|
||||||
|
|
||||||
const char *appStateName(AppState state) {
|
const char *appStateName(AppState state) {
|
||||||
static const char *names[] = {"IDLE", "MENU", "BOARD_TEST", "SOLO_MEASURE", "SOLO_DRIVER", "MASTER_DISCOVER",
|
static const char *names[] = {"IDLE", "MENU", "BOARD_TEST", "PWM_OUTPUT", "SOLO_MEASURE", "SOLO_DRIVER", "MASTER_DISCOVER",
|
||||||
"MASTER_WAIT_READY", "MASTER_WAIT_RESULT", "MASTER_FINALIZE", "SLAVE_READY", "SLAVE_WAIT_START",
|
"MASTER_WAIT_READY", "MASTER_WAIT_RESULT", "MASTER_FINALIZE", "SLAVE_READY", "SLAVE_WAIT_START",
|
||||||
"SLAVE_MEASURE", "SLAVE_WAIT_ACK", "FINISHED"};
|
"SLAVE_MEASURE", "SLAVE_WAIT_ACK", "FINISHED"};
|
||||||
const uint8_t index = static_cast<uint8_t>(state);
|
const uint8_t index = static_cast<uint8_t>(state);
|
||||||
@@ -250,9 +250,12 @@ uint8_t cycleIndex(uint8_t value, uint8_t first, uint8_t last, int direction) {
|
|||||||
return value <= first ? last : static_cast<uint8_t>(value - 1U);
|
return value <= first ? last : static_cast<uint8_t>(value - 1U);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t nextMenuItem(uint8_t current, TestGroup group) {
|
uint8_t nextMenuItem(uint8_t current, TestGroup group, TestKind kind) {
|
||||||
if (group == TestGroup::BOARD)
|
if (group == TestGroup::BOARD)
|
||||||
return current == 0U ? MENU_OPTICAL_CALIBRATION_ITEM : 0U;
|
return current == 0U ? MENU_OPTICAL_CALIBRATION_ITEM : 0U;
|
||||||
|
if (kind == TestKind::PWM_OUTPUT)
|
||||||
|
return current == 0U ? 1U : current == 1U ? 2U
|
||||||
|
: current == 2U ? MENU_OPTICAL_CALIBRATION_ITEM : 0U;
|
||||||
return current >= MENU_OPTICAL_CALIBRATION_ITEM ? 0U
|
return current >= MENU_OPTICAL_CALIBRATION_ITEM ? 0U
|
||||||
: static_cast<uint8_t>(current + 1U);
|
: static_cast<uint8_t>(current + 1U);
|
||||||
}
|
}
|
||||||
@@ -356,6 +359,12 @@ void App::update() {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (state_ == AppState::PWM_OUTPUT) {
|
||||||
|
if (startEvent == ButtonEvent::LONG) stopPwmOutput();
|
||||||
|
else if (modeEvent != ButtonEvent::NONE)
|
||||||
|
Log::event("ACTION", "MODE ignored while PWM output is active");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (state_ != AppState::IDLE && state_ != AppState::MENU && state_ != AppState::FINISHED &&
|
if (state_ != AppState::IDLE && state_ != AppState::MENU && state_ != AppState::FINISHED &&
|
||||||
startEvent == ButtonEvent::LONG) { abortTest(); return; }
|
startEvent == ButtonEvent::LONG) { abortTest(); return; }
|
||||||
if (state_ != AppState::IDLE && state_ != AppState::MENU && state_ != AppState::FINISHED &&
|
if (state_ != AppState::IDLE && state_ != AppState::MENU && state_ != AppState::FINISHED &&
|
||||||
@@ -399,7 +408,8 @@ void App::update() {
|
|||||||
if (modeEvent == ButtonEvent::SHORT) {
|
if (modeEvent == ButtonEvent::SHORT) {
|
||||||
leaveOpticalCalibration();
|
leaveOpticalCalibration();
|
||||||
menuItem_ = nextMenuItem(menuItem_,
|
menuItem_ = nextMenuItem(menuItem_,
|
||||||
static_cast<TestGroup>(settings_.testGroup));
|
static_cast<TestGroup>(settings_.testGroup),
|
||||||
|
static_cast<TestKind>(settings_.testKind));
|
||||||
Log::printf("ACTION", "menu item selected index=%u", menuItem_);
|
Log::printf("ACTION", "menu item selected index=%u", menuItem_);
|
||||||
showMenu();
|
showMenu();
|
||||||
}
|
}
|
||||||
@@ -529,12 +539,12 @@ void App::printSerialHelp() {
|
|||||||
Serial.println(" set group optics|board");
|
Serial.println(" set group optics|board");
|
||||||
Serial.println(" set boardtest adc|pwm|rx");
|
Serial.println(" set boardtest adc|pwm|rx");
|
||||||
Serial.println(" set role solo|master|slave");
|
Serial.println(" set role solo|master|slave");
|
||||||
Serial.println(" set test optical|driver");
|
Serial.println(" set test optical|driver|pwm (driver/pwm: SOLO only)");
|
||||||
Serial.println(" set frequency 500|1000|2000|5000|10000|25000");
|
Serial.println(" set frequency 500|1000|2000|5000|10000");
|
||||||
Serial.println(" set max 2000|5000|10000|20000|50000|100000|200000|500000");
|
Serial.println(" set max 2000|5000|10000|50000|100000|500000 (PWM pulse in SOLO PWM)");
|
||||||
Serial.println(" set min 250|500|1000|2000|5000|10000|50000");
|
Serial.println(" set min 250|500|1000|2000|5000|10000|50000");
|
||||||
Serial.println(" set accuracy 1|2|5|10");
|
Serial.println(" set accuracy 1|2|5|10");
|
||||||
Serial.println(" set time 100|250|500|1000|2000|5000 (ms)");
|
Serial.println(" set time 100|250|500|1000|2000|5000|60000 (ms)");
|
||||||
Serial.println(" set light HH|HL|LH|LL (DRIVER only)");
|
Serial.println(" set light HH|HL|LH|LL (DRIVER only)");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -605,6 +615,9 @@ void App::handleSerialCommand(char *line) {
|
|||||||
else if (state_ == AppState::BOARD_TEST) {
|
else if (state_ == AppState::BOARD_TEST) {
|
||||||
Serial.println("OK board test stopped");
|
Serial.println("OK board test stopped");
|
||||||
stopBoardTest();
|
stopBoardTest();
|
||||||
|
} else if (state_ == AppState::PWM_OUTPUT) {
|
||||||
|
Serial.println("OK PWM output stopped");
|
||||||
|
stopPwmOutput();
|
||||||
} else if (state_ == AppState::MENU) {
|
} else if (state_ == AppState::MENU) {
|
||||||
leaveOpticalCalibration();
|
leaveOpticalCalibration();
|
||||||
state_ = AppState::IDLE; showIdle(); Serial.println("OK menu closed");
|
state_ = AppState::IDLE; showIdle(); Serial.println("OK menu closed");
|
||||||
@@ -659,6 +672,9 @@ void App::handleSerialCommand(char *line) {
|
|||||||
else if (!strcmp(value, "driver") && !TARGET_IS_C3 &&
|
else if (!strcmp(value, "driver") && !TARGET_IS_C3 &&
|
||||||
static_cast<Role>(settings_.role) == Role::SOLO) {
|
static_cast<Role>(settings_.role) == Role::SOLO) {
|
||||||
settings_.testKind = static_cast<uint8_t>(TestKind::DRIVER); accepted = true;
|
settings_.testKind = static_cast<uint8_t>(TestKind::DRIVER); accepted = true;
|
||||||
|
} else if (!strcmp(value, "pwm") &&
|
||||||
|
static_cast<Role>(settings_.role) == Role::SOLO) {
|
||||||
|
settings_.testKind = static_cast<uint8_t>(TestKind::PWM_OUTPUT); accepted = true;
|
||||||
}
|
}
|
||||||
} else if ((!strcmp(name, "frequency") || !strcmp(name, "freq")) && parseUnsigned(value, numeric)) {
|
} else if ((!strcmp(name, "frequency") || !strcmp(name, "freq")) && parseUnsigned(value, numeric)) {
|
||||||
const int index = optionIndex(PWM_FREQUENCY_OPTIONS_HZ, numeric);
|
const int index = optionIndex(PWM_FREQUENCY_OPTIONS_HZ, numeric);
|
||||||
@@ -705,6 +721,8 @@ void App::cycleRunMode() {
|
|||||||
const TestKind kind = static_cast<TestKind>(settings_.testKind);
|
const TestKind kind = static_cast<TestKind>(settings_.testKind);
|
||||||
if (role == Role::SOLO && kind == TestKind::OPTICAL && !TARGET_IS_C3) {
|
if (role == Role::SOLO && kind == TestKind::OPTICAL && !TARGET_IS_C3) {
|
||||||
settings_.testKind = static_cast<uint8_t>(TestKind::DRIVER);
|
settings_.testKind = static_cast<uint8_t>(TestKind::DRIVER);
|
||||||
|
} else if (role == Role::SOLO && kind != TestKind::PWM_OUTPUT) {
|
||||||
|
settings_.testKind = static_cast<uint8_t>(TestKind::PWM_OUTPUT);
|
||||||
} else if (role == Role::SOLO) {
|
} else if (role == Role::SOLO) {
|
||||||
settings_.role = static_cast<uint8_t>(Role::MASTER);
|
settings_.role = static_cast<uint8_t>(Role::MASTER);
|
||||||
settings_.testKind = static_cast<uint8_t>(TestKind::OPTICAL);
|
settings_.testKind = static_cast<uint8_t>(TestKind::OPTICAL);
|
||||||
@@ -725,11 +743,12 @@ void App::sanitizeRange() {
|
|||||||
settings_.boardTest = static_cast<uint8_t>(defaultBoardTest());
|
settings_.boardTest = static_cast<uint8_t>(defaultBoardTest());
|
||||||
if (settings_.role > static_cast<uint8_t>(Role::SLAVE))
|
if (settings_.role > static_cast<uint8_t>(Role::SLAVE))
|
||||||
settings_.role = static_cast<uint8_t>(Role::SOLO);
|
settings_.role = static_cast<uint8_t>(Role::SOLO);
|
||||||
if (settings_.testKind > static_cast<uint8_t>(TestKind::DRIVER))
|
if (settings_.testKind > static_cast<uint8_t>(TestKind::PWM_OUTPUT))
|
||||||
settings_.testKind = static_cast<uint8_t>(TestKind::OPTICAL);
|
settings_.testKind = static_cast<uint8_t>(TestKind::OPTICAL);
|
||||||
if (settings_.lightCode > static_cast<uint8_t>(LightCode::LL))
|
if (settings_.lightCode > static_cast<uint8_t>(LightCode::LL))
|
||||||
settings_.lightCode = static_cast<uint8_t>(LightCode::HH);
|
settings_.lightCode = static_cast<uint8_t>(LightCode::HH);
|
||||||
if (settings_.role != static_cast<uint8_t>(Role::SOLO) ||
|
if ((settings_.role != static_cast<uint8_t>(Role::SOLO) &&
|
||||||
|
settings_.testKind != static_cast<uint8_t>(TestKind::OPTICAL)) ||
|
||||||
(TARGET_IS_C3 && settings_.testKind == static_cast<uint8_t>(TestKind::DRIVER)))
|
(TARGET_IS_C3 && settings_.testKind == static_cast<uint8_t>(TestKind::DRIVER)))
|
||||||
settings_.testKind = static_cast<uint8_t>(TestKind::OPTICAL);
|
settings_.testKind = static_cast<uint8_t>(TestKind::OPTICAL);
|
||||||
settings_.frequencyIndex %= countOf(PWM_FREQUENCY_OPTIONS_HZ);
|
settings_.frequencyIndex %= countOf(PWM_FREQUENCY_OPTIONS_HZ);
|
||||||
@@ -760,8 +779,8 @@ void App::changeMenu(int d) {
|
|||||||
} else if (menuItem_ == 2) {
|
} else if (menuItem_ == 2) {
|
||||||
const uint8_t last = lastValidMaxPulseIndex(
|
const uint8_t last = lastValidMaxPulseIndex(
|
||||||
PWM_FREQUENCY_OPTIONS_HZ[settings_.frequencyIndex]);
|
PWM_FREQUENCY_OPTIONS_HZ[settings_.frequencyIndex]);
|
||||||
const uint8_t first = firstMaxPulseIndexAtLeast(
|
const uint8_t first = static_cast<TestKind>(settings_.testKind) == TestKind::PWM_OUTPUT
|
||||||
MIN_PULSE_OPTIONS_NS[settings_.minPulseIndex], last);
|
? 0U : firstMaxPulseIndexAtLeast(MIN_PULSE_OPTIONS_NS[settings_.minPulseIndex], last);
|
||||||
settings_.maxPulseIndex = cycleIndex(settings_.maxPulseIndex,
|
settings_.maxPulseIndex = cycleIndex(settings_.maxPulseIndex,
|
||||||
first, last, d);
|
first, last, d);
|
||||||
} else if (menuItem_ == 3) {
|
} else if (menuItem_ == 3) {
|
||||||
@@ -811,7 +830,8 @@ void App::showMenu() {
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
Display::formatPulse(params_.maxPulseNs, value, sizeof(value));
|
Display::formatPulse(params_.maxPulseNs, value, sizeof(value));
|
||||||
label = UiText::MENU_MAX_PULSE;
|
label = static_cast<TestKind>(settings_.testKind) == TestKind::PWM_OUTPUT
|
||||||
|
? UiText::MENU_PWM_PULSE : UiText::MENU_MAX_PULSE;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
Display::formatPulse(params_.minPulseNs, value, sizeof(value));
|
Display::formatPulse(params_.minPulseNs, value, sizeof(value));
|
||||||
@@ -847,7 +867,8 @@ void App::showMenu() {
|
|||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
formatMenuLine(label, value, one, sizeof(one));
|
formatMenuLine(label, value, one, sizeof(one));
|
||||||
if (static_cast<TestGroup>(settings_.testGroup) == TestGroup::BOARD)
|
if (static_cast<TestGroup>(settings_.testGroup) == TestGroup::BOARD ||
|
||||||
|
static_cast<TestKind>(settings_.testKind) == TestKind::PWM_OUTPUT)
|
||||||
snprintf(total, sizeof(total), "%s", UiText::BOARD_READY);
|
snprintf(total, sizeof(total), "%s", UiText::BOARD_READY);
|
||||||
else
|
else
|
||||||
formatMenuLine(UiText::MENU_TOTAL_TIME, all, total, sizeof(total));
|
formatMenuLine(UiText::MENU_TOTAL_TIME, all, total, sizeof(total));
|
||||||
@@ -900,6 +921,10 @@ void App::startTest() {
|
|||||||
startBoardTest();
|
startBoardTest();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (static_cast<TestKind>(settings_.testKind) == TestKind::PWM_OUTPUT) {
|
||||||
|
startPwmOutput();
|
||||||
|
return;
|
||||||
|
}
|
||||||
params_ = store_.params(settings_); stageCount_ = pulseWidthPointCount(params_.maxPulseNs, params_.minPulseNs);
|
params_ = store_.params(settings_); stageCount_ = pulseWidthPointCount(params_.maxPulseNs, params_.minPulseNs);
|
||||||
stageIndex_ = 0; requestedHz_ = params_.frequencyHz; requestedPulseNs_ = 0; pendingReason_ = FailReason::NONE;
|
stageIndex_ = 0; requestedHz_ = params_.frequencyHz; requestedPulseNs_ = 0; pendingReason_ = FailReason::NONE;
|
||||||
havePeer_ = false; lastHeartbeatMs_ = 0; lastPeerSeenMs_ = 0;
|
havePeer_ = false; lastHeartbeatMs_ = 0; lastPeerSeenMs_ = 0;
|
||||||
@@ -1019,6 +1044,37 @@ void App::stopBoardTest() {
|
|||||||
showIdle();
|
showIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void App::startPwmOutput() {
|
||||||
|
params_ = store_.params(settings_);
|
||||||
|
requestedHz_ = params_.frequencyHz;
|
||||||
|
requestedPulseNs_ = params_.maxPulseNs;
|
||||||
|
stageIndex_ = 0;
|
||||||
|
stageCount_ = 1;
|
||||||
|
pwm_.configureActiveLight(true);
|
||||||
|
if (!pwm_.start(requestedHz_, requestedPulseNs_, actual_)) {
|
||||||
|
Log::printf("PWM", "start failed: frequency=%luHz pulse=%luns",
|
||||||
|
requestedHz_, requestedPulseNs_);
|
||||||
|
finish(false, FailReason::RESOLUTION);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
state_ = AppState::PWM_OUTPUT;
|
||||||
|
char target[32], one[48];
|
||||||
|
formatTarget(actual_.actualHz, actual_.actualPulseNs, target, sizeof(target));
|
||||||
|
snprintf(one, sizeof(one), "%s: %s", uiTestName(TestKind::PWM_OUTPUT), target);
|
||||||
|
display_.show(one, UiText::BOARD_STOP);
|
||||||
|
Log::printf("PWM", "continuous output GPIO=%u requested=%luHz/%luns actual=%luHz/%luns duty=%.2f%%",
|
||||||
|
GPIO_PWM, requestedHz_, requestedPulseNs_, actual_.actualHz,
|
||||||
|
actual_.actualPulseNs, actual_.actualDutyPct);
|
||||||
|
}
|
||||||
|
|
||||||
|
void App::stopPwmOutput() {
|
||||||
|
Log::event("PWM", "continuous output stopped");
|
||||||
|
pwm_.stop();
|
||||||
|
state_ = AppState::IDLE;
|
||||||
|
setActivePerformance(false);
|
||||||
|
showIdle();
|
||||||
|
}
|
||||||
|
|
||||||
bool App::armSlave(bool preserveDisplay) {
|
bool App::armSlave(bool preserveDisplay) {
|
||||||
setActivePerformance(false);
|
setActivePerformance(false);
|
||||||
pwm_.stop();
|
pwm_.stop();
|
||||||
@@ -1652,6 +1708,11 @@ void App::printConfiguration() {
|
|||||||
Serial.printf("MAC=%02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
Serial.printf("MAC=%02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
Serial.printf("GPIO PWM=%u RX=%u START=%u MODE=%u SDA=%u SCL=%u\n", GPIO_PWM, GPIO_RX,
|
Serial.printf("GPIO PWM=%u RX=%u START=%u MODE=%u SDA=%u SCL=%u\n", GPIO_PWM, GPIO_RX,
|
||||||
GPIO_BUTTON_START, GPIO_BUTTON_MODE, GPIO_SDA, GPIO_SCL);
|
GPIO_BUTTON_START, GPIO_BUTTON_MODE, GPIO_SDA, GPIO_SCL);
|
||||||
|
if (static_cast<TestKind>(settings_.testKind) == TestKind::PWM_OUTPUT) {
|
||||||
|
Serial.printf("Continuous PWM output %lu Hz, pulse %lu ns; RX unused\n",
|
||||||
|
params_.frequencyHz, params_.maxPulseNs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (static_cast<TestKind>(settings_.testKind) == TestKind::DRIVER) {
|
if (static_cast<TestKind>(settings_.testKind) == TestKind::DRIVER) {
|
||||||
const char *code = lightCodeName(static_cast<LightCode>(settings_.lightCode));
|
const char *code = lightCodeName(static_cast<LightCode>(settings_.lightCode));
|
||||||
Serial.printf("Test %lu Hz, pulse %lu..%lu ns, accuracy %.2f%%, %lums, TX light=%c RX active light=%c\n",
|
Serial.printf("Test %lu Hz, pulse %lu..%lu ns, accuracy %.2f%%, %lums, TX light=%c RX active light=%c\n",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "SettingsStore.h"
|
#include "SettingsStore.h"
|
||||||
|
|
||||||
enum class AppState : uint8_t {
|
enum class AppState : uint8_t {
|
||||||
IDLE, MENU, BOARD_TEST, SOLO_MEASURE, SOLO_DRIVER, MASTER_DISCOVER, MASTER_WAIT_READY,
|
IDLE, MENU, BOARD_TEST, PWM_OUTPUT, SOLO_MEASURE, SOLO_DRIVER, MASTER_DISCOVER, MASTER_WAIT_READY,
|
||||||
MASTER_WAIT_RESULT, MASTER_FINALIZE, SLAVE_READY, SLAVE_WAIT_START, SLAVE_MEASURE,
|
MASTER_WAIT_RESULT, MASTER_FINALIZE, SLAVE_READY, SLAVE_WAIT_START, SLAVE_MEASURE,
|
||||||
SLAVE_WAIT_ACK, FINISHED
|
SLAVE_WAIT_ACK, FINISHED
|
||||||
};
|
};
|
||||||
@@ -33,6 +33,8 @@ class App {
|
|||||||
void startBoardTest();
|
void startBoardTest();
|
||||||
void updateBoardTest(uint32_t now);
|
void updateBoardTest(uint32_t now);
|
||||||
void stopBoardTest();
|
void stopBoardTest();
|
||||||
|
void startPwmOutput();
|
||||||
|
void stopPwmOutput();
|
||||||
bool armSlave(bool preserveDisplay = false);
|
bool armSlave(bool preserveDisplay = false);
|
||||||
bool prepareStage(bool showProgress = true);
|
bool prepareStage(bool showProgress = true);
|
||||||
bool startLocalMeasurement(float hz, float duty);
|
bool startLocalMeasurement(float hz, float duty);
|
||||||
|
|||||||
@@ -2,9 +2,13 @@
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
// Uncomment to build the standalone PWM/RX pulse probe instead of the tester UI.
|
||||||
|
#define SIGNAL_PROBE_FIRMWARE
|
||||||
|
|
||||||
// ------------------------- Hardware configuration -------------------------
|
// ------------------------- Hardware configuration -------------------------
|
||||||
// Enabled for the hand-wired prototype. Comment out for the production PCB.
|
// Enabled for the hand-wired prototype. Comment out for the production PCB.
|
||||||
// Both profiles map S3 signals by physical header position with 5V/GND aligned.
|
// Both profiles map S3 signals by physical header position with 5V/GND aligned.
|
||||||
|
|
||||||
#define MAKETKA
|
#define MAKETKA
|
||||||
|
|
||||||
// Select exactly one populated receiver circuit. Use
|
// Select exactly one populated receiver circuit. Use
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ constexpr const char *ROLE_NAMES[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
constexpr const char *TEST_NAMES[] = {
|
constexpr const char *TEST_NAMES[] = {
|
||||||
"ОПТИКА", "ДРАЙВЕР"
|
"ОПТИКА", "ДРАЙВЕР", "ШИМ"
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const char *TEST_GROUP_NAMES[] = {
|
constexpr const char *TEST_GROUP_NAMES[] = {
|
||||||
@@ -54,6 +54,7 @@ constexpr const char *START_RUN = "ГОТОВ К ЗАПУСКУ";
|
|||||||
constexpr const char *MENU_FREQUENCY = "ЧАСТОТА ШИМ:";
|
constexpr const char *MENU_FREQUENCY = "ЧАСТОТА ШИМ:";
|
||||||
constexpr const char *MENU_TEST_GROUP = "ГРУППА ТЕСТОВ:";
|
constexpr const char *MENU_TEST_GROUP = "ГРУППА ТЕСТОВ:";
|
||||||
constexpr const char *MENU_MAX_PULSE = "МАКС. ИМПУЛЬС:";
|
constexpr const char *MENU_MAX_PULSE = "МАКС. ИМПУЛЬС:";
|
||||||
|
constexpr const char *MENU_PWM_PULSE = "ИМПУЛЬС ШИМ:";
|
||||||
constexpr const char *MENU_MIN_PULSE = "МИН. ИМПУЛЬС:";
|
constexpr const char *MENU_MIN_PULSE = "МИН. ИМПУЛЬС:";
|
||||||
constexpr const char *MENU_ACCURACY = "ТОЧНОСТЬ:";
|
constexpr const char *MENU_ACCURACY = "ТОЧНОСТЬ:";
|
||||||
constexpr const char *MENU_TEST_TIME = "ВРЕМЯ ВЫБОРКИ:";
|
constexpr const char *MENU_TEST_TIME = "ВРЕМЯ ВЫБОРКИ:";
|
||||||
@@ -97,7 +98,7 @@ constexpr const char *ROLE_NAMES[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
constexpr const char *TEST_NAMES[] = {
|
constexpr const char *TEST_NAMES[] = {
|
||||||
"OPTICAL", "DRIVER"
|
"OPTICAL", "DRIVER", "PWM"
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const char *TEST_GROUP_NAMES[] = {
|
constexpr const char *TEST_GROUP_NAMES[] = {
|
||||||
@@ -133,6 +134,7 @@ constexpr const char *START_RUN = "READY TO START";
|
|||||||
constexpr const char *MENU_FREQUENCY = "PWM FREQUENCY:";
|
constexpr const char *MENU_FREQUENCY = "PWM FREQUENCY:";
|
||||||
constexpr const char *MENU_TEST_GROUP = "TEST GROUP:";
|
constexpr const char *MENU_TEST_GROUP = "TEST GROUP:";
|
||||||
constexpr const char *MENU_MAX_PULSE = "MAX PULSE:";
|
constexpr const char *MENU_MAX_PULSE = "MAX PULSE:";
|
||||||
|
constexpr const char *MENU_PWM_PULSE = "PWM PULSE:";
|
||||||
constexpr const char *MENU_MIN_PULSE = "MIN PULSE:";
|
constexpr const char *MENU_MIN_PULSE = "MIN PULSE:";
|
||||||
constexpr const char *MENU_ACCURACY = "ACCURACY:";
|
constexpr const char *MENU_ACCURACY = "ACCURACY:";
|
||||||
constexpr const char *MENU_TEST_TIME = "TEST TIME:";
|
constexpr const char *MENU_TEST_TIME = "TEST TIME:";
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ const char *testGroupName(TestGroup group) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *testKindName(TestKind kind) {
|
const char *testKindName(TestKind kind) {
|
||||||
static const char *names[] = {"OPTICAL", "DRIVER"};
|
static const char *names[] = {"OPTICAL", "DRIVER", "PWM OUTPUT"};
|
||||||
const uint8_t i = static_cast<uint8_t>(kind);
|
const uint8_t i = static_cast<uint8_t>(kind);
|
||||||
return i < 2 ? names[i] : "?";
|
return i < 3 ? names[i] : "?";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *boardTestName(BoardTest test) {
|
const char *boardTestName(BoardTest test) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
enum class Role : uint8_t { SOLO, MASTER, SLAVE };
|
enum class Role : uint8_t { SOLO, MASTER, SLAVE };
|
||||||
enum class TestGroup : uint8_t { OPTICS, BOARD };
|
enum class TestGroup : uint8_t { OPTICS, BOARD };
|
||||||
enum class TestKind : uint8_t { OPTICAL, DRIVER };
|
enum class TestKind : uint8_t { OPTICAL, DRIVER, PWM_OUTPUT };
|
||||||
enum class BoardTest : uint8_t { ADC, PWM_OUTPUT, RX_INPUT };
|
enum class BoardTest : uint8_t { ADC, PWM_OUTPUT, RX_INPUT };
|
||||||
enum class LightCode : uint8_t { HH, HL, LH, LL };
|
enum class LightCode : uint8_t { HH, HL, LH, LL };
|
||||||
enum class FailReason : uint8_t {
|
enum class FailReason : uint8_t {
|
||||||
|
|||||||
@@ -8,17 +8,29 @@
|
|||||||
#include <esp_task_wdt.h>
|
#include <esp_task_wdt.h>
|
||||||
#include <esp_timer.h>
|
#include <esp_timer.h>
|
||||||
#include <esp32-hal-cpu.h>
|
#include <esp32-hal-cpu.h>
|
||||||
#include <soc/gpio_struct.h>
|
#include <soc/gpio_reg.h>
|
||||||
|
#include <soc/soc.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32C3
|
||||||
|
#include <riscv/rv_utils.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline uint32_t IRAM_ATTR maskAllInterrupts() {
|
static inline uint32_t IRAM_ATTR maskAllInterrupts() {
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32C3
|
||||||
|
return RV_CLEAR_CSR(mstatus, MSTATUS_MIE);
|
||||||
|
#else
|
||||||
uint32_t state;
|
uint32_t state;
|
||||||
asm volatile("rsil %0, 15" : "=a"(state) :: "memory");
|
asm volatile("rsil %0, 15" : "=a"(state) :: "memory");
|
||||||
return state;
|
return state;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void IRAM_ATTR restoreInterrupts(uint32_t state) {
|
static inline void IRAM_ATTR restoreInterrupts(uint32_t state) {
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32C3
|
||||||
|
RV_SET_CSR(mstatus, state & MSTATUS_MIE);
|
||||||
|
#else
|
||||||
asm volatile("wsr %0, ps\nrsync" :: "a"(state) : "memory");
|
asm volatile("wsr %0, ps\nrsync" :: "a"(state) : "memory");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void DriverEdgeStats::reset() {
|
void DriverEdgeStats::reset() {
|
||||||
@@ -193,7 +205,7 @@ void IRAM_ATTR DriverTest::pollTaskLoop() {
|
|||||||
constexpr uint32_t PIN_MASK = (1UL << GPIO_PWM) | (1UL << GPIO_RX);
|
constexpr uint32_t PIN_MASK = (1UL << GPIO_PWM) | (1UL << GPIO_RX);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
||||||
uint32_t levels = GPIO.in & PIN_MASK;
|
uint32_t levels = REG_READ(GPIO_IN_REG) & PIN_MASK;
|
||||||
uint32_t nextStart = 0;
|
uint32_t nextStart = 0;
|
||||||
uint32_t windowEnd = 0;
|
uint32_t windowEnd = 0;
|
||||||
uint32_t lastTxStart = 0;
|
uint32_t lastTxStart = 0;
|
||||||
@@ -205,7 +217,7 @@ void IRAM_ATTR DriverTest::pollTaskLoop() {
|
|||||||
uint32_t interruptState = 0;
|
uint32_t interruptState = 0;
|
||||||
|
|
||||||
auto sampleOnce = [&]() {
|
auto sampleOnce = [&]() {
|
||||||
const uint32_t current = GPIO.in & PIN_MASK;
|
const uint32_t current = REG_READ(GPIO_IN_REG) & PIN_MASK;
|
||||||
if (current == levels) return;
|
if (current == levels) return;
|
||||||
const uint32_t now = esp_cpu_get_cycle_count();
|
const uint32_t now = esp_cpu_get_cycle_count();
|
||||||
const uint32_t changed = current ^ levels;
|
const uint32_t changed = current ^ levels;
|
||||||
@@ -636,8 +648,7 @@ void IRAM_ATTR DriverTest::recordRaw(uint32_t tick, bool rising,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ring_[write] = {tick, rising, source};
|
ring_[write] = {tick, rising, source};
|
||||||
asm volatile("memw" ::: "memory");
|
__atomic_store_n(&ringWrite_, next, __ATOMIC_RELEASE);
|
||||||
ringWrite_ = next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DriverTest::readRaw(TimedEvent *events, size_t capacity,
|
size_t DriverTest::readRaw(TimedEvent *events, size_t capacity,
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
|
#include "Config.h"
|
||||||
|
#ifdef SIGNAL_PROBE_FIRMWARE
|
||||||
|
#include "SignalProbe.h"
|
||||||
|
SignalProbe app;
|
||||||
|
#else
|
||||||
#include "App.h"
|
#include "App.h"
|
||||||
App app;
|
App app;
|
||||||
|
#endif
|
||||||
|
|
||||||
void setup() { app.begin(); }
|
void setup() { app.begin(); }
|
||||||
void loop() { app.update(); }
|
void loop() { app.update(); }
|
||||||
|
|||||||
@@ -88,6 +88,19 @@ bool PulseReceiver::start(uint32_t expectedHz, float expectedDutyPct,
|
|||||||
return startCapture(false);
|
return startCapture(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PulseReceiver::startRaw() {
|
||||||
|
if (!queue_ || running_) return false;
|
||||||
|
#if OPTICAL_USE_MCPWM_CAPTURE
|
||||||
|
if (!captureTimer_) return false;
|
||||||
|
#endif
|
||||||
|
#if !OPTICAL_USE_MCPWM_CAPTURE
|
||||||
|
cpuTickHz_ = getCpuFrequencyMhz() * 1000000UL;
|
||||||
|
if (!cpuTickHz_) return false;
|
||||||
|
#endif
|
||||||
|
resetStream();
|
||||||
|
return startCapture(false);
|
||||||
|
}
|
||||||
|
|
||||||
#if OPTICAL_USE_MCPWM_CAPTURE
|
#if OPTICAL_USE_MCPWM_CAPTURE
|
||||||
bool PulseReceiver::configureDriverTxCapture(bool risingEdge) {
|
bool PulseReceiver::configureDriverTxCapture(bool risingEdge) {
|
||||||
if (running_) return false;
|
if (running_) return false;
|
||||||
@@ -376,6 +389,18 @@ size_t PulseReceiver::readPeriods(PulsePeriod *periods, size_t capacity,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t PulseReceiver::readRawEdges(CaptureEvent *events, size_t capacity,
|
||||||
|
TickType_t waitTicks) {
|
||||||
|
if (!events || !capacity) return 0;
|
||||||
|
size_t count = 0;
|
||||||
|
Edge edge = {};
|
||||||
|
while (count < capacity && nextOrderedEdge(edge, count ? 0 : waitTicks)) {
|
||||||
|
const TimedEdge timed = extendEdge(edge);
|
||||||
|
events[count++] = {timed.tick, timed.rising, CaptureSource::RX};
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
size_t PulseReceiver::readEvents(CaptureEvent *events, size_t capacity,
|
size_t PulseReceiver::readEvents(CaptureEvent *events, size_t capacity,
|
||||||
TickType_t waitTicks) {
|
TickType_t waitTicks) {
|
||||||
if (!events || capacity < 3U || !txCaptureEnabled_ || !driverPulseTicks_ ||
|
if (!events || capacity < 3U || !txCaptureEnabled_ || !driverPulseTicks_ ||
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ class PulseReceiver {
|
|||||||
public:
|
public:
|
||||||
bool begin();
|
bool begin();
|
||||||
bool start(uint32_t expectedHz, float expectedDutyPct, bool activeLightOn);
|
bool start(uint32_t expectedHz, float expectedDutyPct, bool activeLightOn);
|
||||||
|
bool startRaw();
|
||||||
bool startDriver(uint32_t frequencyHz, uint32_t pulseNs,
|
bool startDriver(uint32_t frequencyHz, uint32_t pulseNs,
|
||||||
bool activeTxLightOn);
|
bool activeTxLightOn);
|
||||||
void stop();
|
void stop();
|
||||||
void resetStream();
|
void resetStream();
|
||||||
size_t readPeriods(PulsePeriod *periods, size_t capacity, TickType_t waitTicks = 0);
|
size_t readPeriods(PulsePeriod *periods, size_t capacity, TickType_t waitTicks = 0);
|
||||||
|
size_t readRawEdges(CaptureEvent *events, size_t capacity, TickType_t waitTicks = 0);
|
||||||
size_t readEvents(CaptureEvent *events, size_t capacity, TickType_t waitTicks = 0);
|
size_t readEvents(CaptureEvent *events, size_t capacity, TickType_t waitTicks = 0);
|
||||||
uint32_t takeDroppedItems();
|
uint32_t takeDroppedItems();
|
||||||
uint32_t tickHz() const;
|
uint32_t tickHz() const;
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
namespace { constexpr uint16_t SETTINGS_VERSION = 11; constexpr char NAMESPACE[] = "opt-test"; }
|
namespace { constexpr uint16_t SETTINGS_VERSION = 11; constexpr char NAMESPACE[] = "opt-test"; }
|
||||||
|
|
||||||
void SettingsStore::defaults(Settings &s) const {
|
void SettingsStore::defaults(Settings &s) const {
|
||||||
// 2 kHz, 200 us .. 2 us, 5%, 1 s.
|
// 2 kHz, 100 us .. 2 us, 5%, 1 s.
|
||||||
s = {SETTINGS_VERSION, static_cast<uint8_t>(Role::SOLO),
|
s = {SETTINGS_VERSION, static_cast<uint8_t>(Role::SOLO),
|
||||||
static_cast<uint8_t>(TestKind::OPTICAL), static_cast<uint8_t>(LightCode::HH),
|
static_cast<uint8_t>(TestKind::OPTICAL), static_cast<uint8_t>(LightCode::HH),
|
||||||
2, 6, 3, 2, 3, static_cast<uint8_t>(TestGroup::OPTICS),
|
2, 4, 3, 2, 3, static_cast<uint8_t>(TestGroup::OPTICS),
|
||||||
static_cast<uint8_t>(BoardTest::ADC), 0};
|
static_cast<uint8_t>(BoardTest::ADC), 0};
|
||||||
s.checksum = settingsChecksum(s);
|
s.checksum = settingsChecksum(s);
|
||||||
}
|
}
|
||||||
@@ -20,9 +20,9 @@ bool SettingsStore::valid(const Settings &s) const {
|
|||||||
return s.version == SETTINGS_VERSION && s.role <= static_cast<uint8_t>(Role::SLAVE) &&
|
return s.version == SETTINGS_VERSION && s.role <= static_cast<uint8_t>(Role::SLAVE) &&
|
||||||
s.testGroup <= static_cast<uint8_t>(TestGroup::BOARD) &&
|
s.testGroup <= static_cast<uint8_t>(TestGroup::BOARD) &&
|
||||||
s.boardTest <= static_cast<uint8_t>(BoardTest::RX_INPUT) &&
|
s.boardTest <= static_cast<uint8_t>(BoardTest::RX_INPUT) &&
|
||||||
s.testKind <= static_cast<uint8_t>(TestKind::DRIVER) &&
|
s.testKind <= static_cast<uint8_t>(TestKind::PWM_OUTPUT) &&
|
||||||
s.lightCode <= static_cast<uint8_t>(LightCode::LL) &&
|
s.lightCode <= static_cast<uint8_t>(LightCode::LL) &&
|
||||||
(s.testKind != static_cast<uint8_t>(TestKind::DRIVER) ||
|
(s.testKind == static_cast<uint8_t>(TestKind::OPTICAL) ||
|
||||||
s.role == static_cast<uint8_t>(Role::SOLO)) &&
|
s.role == static_cast<uint8_t>(Role::SOLO)) &&
|
||||||
s.frequencyIndex < countOf(PWM_FREQUENCY_OPTIONS_HZ) &&
|
s.frequencyIndex < countOf(PWM_FREQUENCY_OPTIONS_HZ) &&
|
||||||
s.maxPulseIndex < countOf(MAX_PULSE_OPTIONS_NS) &&
|
s.maxPulseIndex < countOf(MAX_PULSE_OPTIONS_NS) &&
|
||||||
|
|||||||
236
OpticalChannelTester/SignalProbe.cpp
Normal file
236
OpticalChannelTester/SignalProbe.cpp
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
#include "SignalProbe.h"
|
||||||
|
#include "Config.h"
|
||||||
|
#include <esp32-hal-cpu.h>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
constexpr uint32_t DISPLAY_INTERVAL_MS = 250;
|
||||||
|
constexpr uint8_t PERIOD_TOLERANCE_PCT = 10;
|
||||||
|
|
||||||
|
bool pwmPointAvailable(uint32_t frequencyHz, uint32_t pulseNs) {
|
||||||
|
return static_cast<uint64_t>(frequencyHz) * pulseNs < 1000000000ULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void formatWidth(uint64_t nanoseconds, char *out, size_t size) {
|
||||||
|
if (nanoseconds < 1000ULL)
|
||||||
|
snprintf(out, size, "%lluns", nanoseconds);
|
||||||
|
else if (nanoseconds < 1000000ULL)
|
||||||
|
snprintf(out, size, "%.2fus", nanoseconds / 1000.0);
|
||||||
|
else
|
||||||
|
snprintf(out, size, "%.2fms", nanoseconds / 1000000.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void formatPulseCount(uint64_t count, char *out, size_t size) {
|
||||||
|
if (count < 1000000ULL) snprintf(out, size, "%llu", count);
|
||||||
|
else if (count < 1000000000ULL) snprintf(out, size, "%lluM", count / 1000000ULL);
|
||||||
|
else snprintf(out, size, "%lluG", count / 1000000000ULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SignalProbe::SignalProbe() : startButton_(GPIO_BUTTON_START),
|
||||||
|
modeButton_(GPIO_BUTTON_MODE) {}
|
||||||
|
|
||||||
|
void SignalProbe::begin() {
|
||||||
|
Serial.begin(SERIAL_BAUD);
|
||||||
|
#if ARDUINO_USB_CDC_ON_BOOT
|
||||||
|
Serial.setTxTimeoutMs(SERIAL_TX_TIMEOUT_MS);
|
||||||
|
#endif
|
||||||
|
setCpuFrequencyMhz(160);
|
||||||
|
startButton_.begin();
|
||||||
|
modeButton_.begin();
|
||||||
|
pwm_.begin();
|
||||||
|
pwm_.configureActiveLight(true);
|
||||||
|
display_.begin();
|
||||||
|
receiverInitialized_ = receiver_.begin();
|
||||||
|
rxReady_ = receiverInitialized_ && captureStart();
|
||||||
|
applyPwm();
|
||||||
|
Serial.printf("Signal probe: MODE short=frequency, MODE long=pulse, START short=reset RX minimum, START long=PWM on/off, hold both=RX active level; RX=%s\n",
|
||||||
|
rxActiveHigh_ ? "HIGH" : "LOW");
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SignalProbe::captureStart() {
|
||||||
|
if (!receiver_.startRaw()) {
|
||||||
|
Serial.println("RX capture start failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
havePulseStart_ = false;
|
||||||
|
havePulseEnd_ = false;
|
||||||
|
extraEdgeInPeriod_ = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::resetMinimum() {
|
||||||
|
if (rxReady_) receiver_.stop();
|
||||||
|
rxReady_ = receiverInitialized_ && captureStart();
|
||||||
|
minTicks_ = UINT64_MAX;
|
||||||
|
pulseCount_ = 0;
|
||||||
|
edgeCount_ = 0;
|
||||||
|
rejectedPeriods_ = 0;
|
||||||
|
displayDirty_ = true;
|
||||||
|
Serial.println("RX minimum reset");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::updateCapture() {
|
||||||
|
if (!rxReady_) return;
|
||||||
|
CaptureEvent edges[64];
|
||||||
|
for (uint8_t batch = 0; batch < 8; ++batch) {
|
||||||
|
const size_t count = receiver_.readRawEdges(edges, countOf(edges));
|
||||||
|
if (!count) break;
|
||||||
|
uint64_t batchMinimum = minTicks_;
|
||||||
|
uint64_t batchPulses = 0;
|
||||||
|
uint64_t batchRejected = 0;
|
||||||
|
const bool activeRising = rxActiveHigh_;
|
||||||
|
const uint32_t expectedHz = PWM_FREQUENCY_OPTIONS_HZ[frequencyIndex_];
|
||||||
|
const uint64_t expectedPeriod = receiver_.tickHz() / expectedHz;
|
||||||
|
for (size_t i = 0; i < count; ++i) {
|
||||||
|
if (edges[i].rising == activeRising) {
|
||||||
|
if (havePulseStart_) {
|
||||||
|
const uint64_t period = edges[i].tick - pulseStartTick_;
|
||||||
|
const uint64_t width = havePulseEnd_
|
||||||
|
? pulseEndTick_ - pulseStartTick_ : 0;
|
||||||
|
const uint64_t error = period > expectedPeriod
|
||||||
|
? period - expectedPeriod : expectedPeriod - period;
|
||||||
|
if (havePulseEnd_ && !extraEdgeInPeriod_ && period && width && width < period &&
|
||||||
|
error * 100U <= expectedPeriod * PERIOD_TOLERANCE_PCT) {
|
||||||
|
if (width < batchMinimum) batchMinimum = width;
|
||||||
|
++batchPulses;
|
||||||
|
} else {
|
||||||
|
++batchRejected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pulseStartTick_ = edges[i].tick;
|
||||||
|
havePulseStart_ = true;
|
||||||
|
havePulseEnd_ = false;
|
||||||
|
extraEdgeInPeriod_ = false;
|
||||||
|
} else if (havePulseStart_ && !havePulseEnd_ &&
|
||||||
|
edges[i].tick > pulseStartTick_) {
|
||||||
|
pulseEndTick_ = edges[i].tick;
|
||||||
|
havePulseEnd_ = true;
|
||||||
|
} else if (havePulseStart_) {
|
||||||
|
extraEdgeInPeriod_ = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const uint32_t dropped = receiver_.takeDroppedItems();
|
||||||
|
if (dropped) {
|
||||||
|
Serial.printf("RX capture overflow: %lu edges lost; restarting capture\n", dropped);
|
||||||
|
receiver_.stop();
|
||||||
|
rxReady_ = captureStart();
|
||||||
|
displayDirty_ = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
edgeCount_ += count;
|
||||||
|
pulseCount_ += batchPulses;
|
||||||
|
rejectedPeriods_ += batchRejected;
|
||||||
|
displayDirty_ = true;
|
||||||
|
if (batchMinimum < minTicks_) {
|
||||||
|
minTicks_ = batchMinimum;
|
||||||
|
displayDirty_ = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::applyPwm() {
|
||||||
|
pwm_.stop();
|
||||||
|
if (!pwmEnabled_) {
|
||||||
|
Serial.println("PWM off");
|
||||||
|
displayDirty_ = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const uint32_t frequency = PWM_FREQUENCY_OPTIONS_HZ[frequencyIndex_];
|
||||||
|
const uint32_t pulse = MAX_PULSE_OPTIONS_NS[pulseIndex_];
|
||||||
|
if (!pwm_.start(frequency, pulse, actual_)) {
|
||||||
|
Serial.printf("PWM start failed: %lu Hz, %lu ns\n", frequency, pulse);
|
||||||
|
pwmEnabled_ = false;
|
||||||
|
} else {
|
||||||
|
Serial.printf("PWM GPIO=%u requested=%luHz/%luns actual=%luHz/%luns\n",
|
||||||
|
GPIO_PWM, frequency, pulse, actual_.actualHz, actual_.actualPulseNs);
|
||||||
|
}
|
||||||
|
displayDirty_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::advanceFrequency() {
|
||||||
|
const uint8_t count = static_cast<uint8_t>(countOf(PWM_FREQUENCY_OPTIONS_HZ));
|
||||||
|
for (uint8_t step = 0; step < count; ++step) {
|
||||||
|
frequencyIndex_ = static_cast<uint8_t>((frequencyIndex_ + 1U) % count);
|
||||||
|
if (pwmPointAvailable(PWM_FREQUENCY_OPTIONS_HZ[frequencyIndex_],
|
||||||
|
MAX_PULSE_OPTIONS_NS[pulseIndex_])) break;
|
||||||
|
}
|
||||||
|
applyPwm();
|
||||||
|
resetMinimum();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::advancePulse() {
|
||||||
|
const uint8_t count = static_cast<uint8_t>(countOf(MAX_PULSE_OPTIONS_NS));
|
||||||
|
for (uint8_t step = 0; step < count; ++step) {
|
||||||
|
pulseIndex_ = static_cast<uint8_t>((pulseIndex_ + 1U) % count);
|
||||||
|
if (pwmPointAvailable(PWM_FREQUENCY_OPTIONS_HZ[frequencyIndex_],
|
||||||
|
MAX_PULSE_OPTIONS_NS[pulseIndex_])) break;
|
||||||
|
}
|
||||||
|
applyPwm();
|
||||||
|
resetMinimum();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::show() {
|
||||||
|
char frequency[16], pulse[16], first[64], second[64];
|
||||||
|
const uint32_t shownFrequency = pwm_.running() ? actual_.actualHz
|
||||||
|
: PWM_FREQUENCY_OPTIONS_HZ[frequencyIndex_];
|
||||||
|
const uint32_t shownPulse = pwm_.running() ? actual_.actualPulseNs
|
||||||
|
: MAX_PULSE_OPTIONS_NS[pulseIndex_];
|
||||||
|
Display::formatPwmFrequency(shownFrequency,
|
||||||
|
frequency, sizeof(frequency));
|
||||||
|
Display::formatPulse(shownPulse, pulse, sizeof(pulse));
|
||||||
|
snprintf(first, sizeof(first), "PWM%s %s %s", pwmEnabled_ ? "" : " OFF",
|
||||||
|
frequency, pulse);
|
||||||
|
if (!rxReady_) {
|
||||||
|
snprintf(second, sizeof(second), "RX: ERROR");
|
||||||
|
} else if (minTicks_ == UINT64_MAX) {
|
||||||
|
snprintf(second, sizeof(second), "RX E:%llu BAD:%llu", edgeCount_, rejectedPeriods_);
|
||||||
|
} else {
|
||||||
|
char width[24], count[12];
|
||||||
|
const uint64_t nanoseconds =
|
||||||
|
(minTicks_ * 1000000000ULL + receiver_.tickHz() / 2U) / receiver_.tickHz();
|
||||||
|
formatWidth(nanoseconds, width, sizeof(width));
|
||||||
|
formatPulseCount(pulseCount_, count, sizeof(count));
|
||||||
|
snprintf(second, sizeof(second), "MIN:%s N:%s", width, count);
|
||||||
|
Serial.printf("RX minimum=%lluns, periods=%llu, rejected=%llu, edges=%llu\n",
|
||||||
|
nanoseconds, pulseCount_, rejectedPeriods_, edgeCount_);
|
||||||
|
}
|
||||||
|
display_.show(first, second, 0, 0, rxActiveHigh_ ? "H" : "L");
|
||||||
|
lastDisplayMs_ = millis();
|
||||||
|
displayDirty_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalProbe::update() {
|
||||||
|
const uint32_t now = millis();
|
||||||
|
const ButtonEvent start = startButton_.update(now);
|
||||||
|
const ButtonEvent mode = modeButton_.update(now);
|
||||||
|
if (startButton_.pressed() && modeButton_.pressed()) {
|
||||||
|
if (!bothHeld_) {
|
||||||
|
bothHeld_ = true;
|
||||||
|
bothHeldSinceMs_ = now;
|
||||||
|
startButton_.suppressUntilRelease();
|
||||||
|
modeButton_.suppressUntilRelease();
|
||||||
|
}
|
||||||
|
if (!bothHeldHandled_ && now - bothHeldSinceMs_ >= BUTTON_LONG_PRESS_MS) {
|
||||||
|
rxActiveHigh_ = !rxActiveHigh_;
|
||||||
|
bothHeldHandled_ = true;
|
||||||
|
resetMinimum();
|
||||||
|
Serial.printf("RX active level=%s\n", rxActiveHigh_ ? "HIGH" : "LOW");
|
||||||
|
}
|
||||||
|
} else if (bothHeld_) {
|
||||||
|
if (!startButton_.pressed() && !modeButton_.pressed()) {
|
||||||
|
bothHeld_ = false;
|
||||||
|
bothHeldHandled_ = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mode == ButtonEvent::SHORT) advanceFrequency();
|
||||||
|
else if (mode == ButtonEvent::LONG) advancePulse();
|
||||||
|
if (start == ButtonEvent::SHORT) resetMinimum();
|
||||||
|
else if (start == ButtonEvent::LONG) {
|
||||||
|
pwmEnabled_ = !pwmEnabled_;
|
||||||
|
applyPwm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateCapture();
|
||||||
|
if (displayDirty_ && now - lastDisplayMs_ >= DISPLAY_INTERVAL_MS) show();
|
||||||
|
}
|
||||||
49
OpticalChannelTester/SignalProbe.h
Normal file
49
OpticalChannelTester/SignalProbe.h
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Config.h"
|
||||||
|
#include "Buttons.h"
|
||||||
|
#include "Display.h"
|
||||||
|
#include "Pwm.h"
|
||||||
|
#include "Receiver.h"
|
||||||
|
|
||||||
|
class SignalProbe {
|
||||||
|
public:
|
||||||
|
SignalProbe();
|
||||||
|
void begin();
|
||||||
|
void update();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool captureStart();
|
||||||
|
void resetMinimum();
|
||||||
|
void updateCapture();
|
||||||
|
void advanceFrequency();
|
||||||
|
void advancePulse();
|
||||||
|
void applyPwm();
|
||||||
|
void show();
|
||||||
|
|
||||||
|
Button startButton_, modeButton_;
|
||||||
|
Display display_;
|
||||||
|
PwmGenerator pwm_;
|
||||||
|
PulseReceiver receiver_;
|
||||||
|
ActualPwm actual_ = {};
|
||||||
|
uint8_t frequencyIndex_ = 2;
|
||||||
|
uint8_t pulseIndex_ = 0;
|
||||||
|
bool pwmEnabled_ = true;
|
||||||
|
bool rxActiveHigh_ = RX_LIGHT_ON_GPIO_LEVEL == HIGH;
|
||||||
|
bool receiverInitialized_ = false;
|
||||||
|
bool rxReady_ = false;
|
||||||
|
bool havePulseStart_ = false;
|
||||||
|
bool havePulseEnd_ = false;
|
||||||
|
bool extraEdgeInPeriod_ = false;
|
||||||
|
bool displayDirty_ = true;
|
||||||
|
uint64_t pulseStartTick_ = 0;
|
||||||
|
uint64_t pulseEndTick_ = 0;
|
||||||
|
uint64_t minTicks_ = UINT64_MAX;
|
||||||
|
uint64_t pulseCount_ = 0;
|
||||||
|
uint64_t edgeCount_ = 0;
|
||||||
|
uint64_t rejectedPeriods_ = 0;
|
||||||
|
uint32_t lastDisplayMs_ = 0;
|
||||||
|
uint32_t bothHeldSinceMs_ = 0;
|
||||||
|
bool bothHeld_ = false;
|
||||||
|
bool bothHeldHandled_ = false;
|
||||||
|
};
|
||||||
BIN
PCB/Libs/MSK12C02.PcbLib
Normal file
BIN
PCB/Libs/MSK12C02.PcbLib
Normal file
Binary file not shown.
BIN
PCB/Libs/MSK12C02.SchLib
Normal file
BIN
PCB/Libs/MSK12C02.SchLib
Normal file
Binary file not shown.
5352
PCB/Libs/MSK12C02.step
Normal file
5352
PCB/Libs/MSK12C02.step
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -38,23 +38,6 @@ PrefsVaultGUID=
|
|||||||
PrefsRevisionGUID=
|
PrefsRevisionGUID=
|
||||||
|
|
||||||
[Document1]
|
[Document1]
|
||||||
DocumentPath=..\..\..\..\SSSAlDataBaseLib\SssAccesDatbase.DbLib
|
|
||||||
AnnotationEnabled=1
|
|
||||||
AnnotateStartValue=1
|
|
||||||
AnnotationIndexControlEnabled=0
|
|
||||||
AnnotateSuffix=
|
|
||||||
AnnotateScope=All
|
|
||||||
AnnotateOrder=-1
|
|
||||||
DoLibraryUpdate=1
|
|
||||||
DoDatabaseUpdate=1
|
|
||||||
ClassGenCCAutoEnabled=1
|
|
||||||
ClassGenCCAutoRoomEnabled=1
|
|
||||||
ClassGenNCAutoScope=None
|
|
||||||
DItemRevisionGUID=
|
|
||||||
GenerateClassCluster=0
|
|
||||||
DocumentUniqueId=
|
|
||||||
|
|
||||||
[Document2]
|
|
||||||
DocumentPath=Libs\Sensor Light.SchLib
|
DocumentPath=Libs\Sensor Light.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -71,7 +54,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=XHSRCRCV
|
DocumentUniqueId=XHSRCRCV
|
||||||
|
|
||||||
[Document3]
|
[Document2]
|
||||||
DocumentPath=Libs\ESP32-C3-SuperMini.SchLib
|
DocumentPath=Libs\ESP32-C3-SuperMini.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -86,9 +69,9 @@ ClassGenCCAutoRoomEnabled=1
|
|||||||
ClassGenNCAutoScope=None
|
ClassGenNCAutoScope=None
|
||||||
DItemRevisionGUID=
|
DItemRevisionGUID=
|
||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=MKGCXBOF
|
DocumentUniqueId=URAFKFNP
|
||||||
|
|
||||||
[Document4]
|
[Document3]
|
||||||
DocumentPath=Libs\ESP32-S3-SuperMini.SchLib
|
DocumentPath=Libs\ESP32-S3-SuperMini.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -103,9 +86,9 @@ ClassGenCCAutoRoomEnabled=1
|
|||||||
ClassGenNCAutoScope=None
|
ClassGenNCAutoScope=None
|
||||||
DItemRevisionGUID=
|
DItemRevisionGUID=
|
||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=XJEJLSFH
|
DocumentUniqueId=KNRSSPNM
|
||||||
|
|
||||||
[Document5]
|
[Document4]
|
||||||
DocumentPath=Libs\HFBR-1528Z_HFBR-2528Z.PcbLib
|
DocumentPath=Libs\HFBR-1528Z_HFBR-2528Z.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -122,7 +105,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document6]
|
[Document5]
|
||||||
DocumentPath=OptoTest.PcbDoc
|
DocumentPath=OptoTest.PcbDoc
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -139,7 +122,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=VJUIGDUR
|
DocumentUniqueId=VJUIGDUR
|
||||||
|
|
||||||
[Document7]
|
[Document6]
|
||||||
DocumentPath=OptoTest.SchDoc
|
DocumentPath=OptoTest.SchDoc
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -156,7 +139,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=OSZVBCBN
|
DocumentUniqueId=OSZVBCBN
|
||||||
|
|
||||||
[Document8]
|
[Document7]
|
||||||
DocumentPath=Libs\ESP32-C3-SuperMini.PcbLib
|
DocumentPath=Libs\ESP32-C3-SuperMini.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -173,7 +156,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=SBGUKPNI
|
DocumentUniqueId=SBGUKPNI
|
||||||
|
|
||||||
[Document9]
|
[Document8]
|
||||||
DocumentPath=Libs\ESP32-S3-SuperMini.PcbLib
|
DocumentPath=Libs\ESP32-S3-SuperMini.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -190,7 +173,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=BAPDEFTM
|
DocumentUniqueId=BAPDEFTM
|
||||||
|
|
||||||
[Document10]
|
[Document9]
|
||||||
DocumentPath=Libs\Switch Push Botton.PcbLib
|
DocumentPath=Libs\Switch Push Botton.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -207,7 +190,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document11]
|
[Document10]
|
||||||
DocumentPath=Libs\Switch Push Botton.SchLib
|
DocumentPath=Libs\Switch Push Botton.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -224,7 +207,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=ITMPIRQI
|
DocumentUniqueId=ITMPIRQI
|
||||||
|
|
||||||
[Document12]
|
[Document11]
|
||||||
DocumentPath=Libs\MOD_OLED_0.91_128x32.PcbLib
|
DocumentPath=Libs\MOD_OLED_0.91_128x32.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -241,7 +224,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document13]
|
[Document12]
|
||||||
DocumentPath=Libs\MOD_OLED_0.91_128x32.SchLib
|
DocumentPath=Libs\MOD_OLED_0.91_128x32.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -258,7 +241,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=UNSXUFGW
|
DocumentUniqueId=UNSXUFGW
|
||||||
|
|
||||||
[Document14]
|
[Document13]
|
||||||
DocumentPath=Libs\SN75451BP.SchLib
|
DocumentPath=Libs\SN75451BP.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -273,9 +256,9 @@ ClassGenCCAutoRoomEnabled=1
|
|||||||
ClassGenNCAutoScope=None
|
ClassGenNCAutoScope=None
|
||||||
DItemRevisionGUID=
|
DItemRevisionGUID=
|
||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=LJKXCWYK
|
DocumentUniqueId=A8G5624N
|
||||||
|
|
||||||
[Document15]
|
[Document14]
|
||||||
DocumentPath=Libs\SN75451BP.PcbLib
|
DocumentPath=Libs\SN75451BP.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -292,7 +275,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document16]
|
[Document15]
|
||||||
DocumentPath=Libs\J_ARK2.Schlib
|
DocumentPath=Libs\J_ARK2.Schlib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -307,9 +290,9 @@ ClassGenCCAutoRoomEnabled=1
|
|||||||
ClassGenNCAutoScope=None
|
ClassGenNCAutoScope=None
|
||||||
DItemRevisionGUID=
|
DItemRevisionGUID=
|
||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=KHNXINHC
|
DocumentUniqueId=HIEGOULK
|
||||||
|
|
||||||
[Document17]
|
[Document16]
|
||||||
DocumentPath=Libs\J_ARK2_2.54.PcbLib
|
DocumentPath=Libs\J_ARK2_2.54.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -326,7 +309,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document18]
|
[Document17]
|
||||||
DocumentPath=Libs\Sensor.PcbLib
|
DocumentPath=Libs\Sensor.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -343,7 +326,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=SCOMYVDB
|
DocumentUniqueId=SCOMYVDB
|
||||||
|
|
||||||
[Document19]
|
[Document18]
|
||||||
DocumentPath=Libs\BPW34.PcbLib
|
DocumentPath=Libs\BPW34.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -360,7 +343,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=DEJBNXAE
|
DocumentUniqueId=DEJBNXAE
|
||||||
|
|
||||||
[Document20]
|
[Document19]
|
||||||
DocumentPath=Libs\OPA380.PcbLib
|
DocumentPath=Libs\OPA380.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -377,7 +360,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=TPLFYPML
|
DocumentUniqueId=TPLFYPML
|
||||||
|
|
||||||
[Document21]
|
[Document20]
|
||||||
DocumentPath=Libs\OPA380.SchLib
|
DocumentPath=Libs\OPA380.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -392,9 +375,9 @@ ClassGenCCAutoRoomEnabled=1
|
|||||||
ClassGenNCAutoScope=None
|
ClassGenNCAutoScope=None
|
||||||
DItemRevisionGUID=
|
DItemRevisionGUID=
|
||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=A8G5624N
|
DocumentUniqueId=MBMSOHVF
|
||||||
|
|
||||||
[Document22]
|
[Document21]
|
||||||
DocumentPath=Libs\J_ARK3_2.54.PcbLib
|
DocumentPath=Libs\J_ARK3_2.54.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -411,7 +394,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document23]
|
[Document22]
|
||||||
DocumentPath=Libs\J_ARK3.SchLib
|
DocumentPath=Libs\J_ARK3.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -426,9 +409,9 @@ ClassGenCCAutoRoomEnabled=1
|
|||||||
ClassGenNCAutoScope=None
|
ClassGenNCAutoScope=None
|
||||||
DItemRevisionGUID=
|
DItemRevisionGUID=
|
||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=HIEGOULK
|
DocumentUniqueId=GMSJVYGO
|
||||||
|
|
||||||
[Document24]
|
[Document23]
|
||||||
DocumentPath=Libs\POT.SchLib
|
DocumentPath=Libs\POT.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -445,7 +428,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=JKPGHLQK
|
DocumentUniqueId=JKPGHLQK
|
||||||
|
|
||||||
[Document25]
|
[Document24]
|
||||||
DocumentPath=Libs\POT_RK09D1130C2P.PcbLib
|
DocumentPath=Libs\POT_RK09D1130C2P.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -462,7 +445,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document26]
|
[Document25]
|
||||||
DocumentPath=Libs\P_HEADER_1x5.SchLib
|
DocumentPath=Libs\P_HEADER_1x5.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -479,7 +462,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=KQQWVKPH
|
DocumentUniqueId=KQQWVKPH
|
||||||
|
|
||||||
[Document27]
|
[Document26]
|
||||||
DocumentPath=Libs\P_HEADER_1x5_2.54_ANGLE.PcbLib
|
DocumentPath=Libs\P_HEADER_1x5_2.54_ANGLE.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -496,7 +479,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document28]
|
[Document27]
|
||||||
DocumentPath=Libs\1208YD.PcbLib
|
DocumentPath=Libs\1208YD.PcbLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -513,7 +496,7 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=
|
DocumentUniqueId=
|
||||||
|
|
||||||
[Document29]
|
[Document28]
|
||||||
DocumentPath=Libs\1208YD.SchLib
|
DocumentPath=Libs\1208YD.SchLib
|
||||||
AnnotationEnabled=1
|
AnnotationEnabled=1
|
||||||
AnnotateStartValue=1
|
AnnotateStartValue=1
|
||||||
@@ -530,66 +513,6 @@ DItemRevisionGUID=
|
|||||||
GenerateClassCluster=0
|
GenerateClassCluster=0
|
||||||
DocumentUniqueId=GVWJKGKK
|
DocumentUniqueId=GVWJKGKK
|
||||||
|
|
||||||
[GeneratedDocument1]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.DRR
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument2]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.EXTREP
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument3]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GBL
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument4]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GBO
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument5]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GBP
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument6]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GBS
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument7]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GKO
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument8]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GTL
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument9]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GTO
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument10]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GTP
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument11]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.GTS
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument12]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.LDP
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument13]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.REP
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument14]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.RUL
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[GeneratedDocument15]
|
|
||||||
DocumentPath=Project Outputs for OptoTest\OptoTest.TXT
|
|
||||||
DItemRevisionGUID=
|
|
||||||
|
|
||||||
[Configuration1]
|
[Configuration1]
|
||||||
Name=Sources
|
Name=Sources
|
||||||
ParameterCount=0
|
ParameterCount=0
|
||||||
@@ -709,7 +632,7 @@ OutputDefault20=0
|
|||||||
[OutputGroup2]
|
[OutputGroup2]
|
||||||
Name=Simulator Outputs
|
Name=Simulator Outputs
|
||||||
Description=
|
Description=
|
||||||
TargetPrinter=Microsoft Print to PDF
|
TargetPrinter=Adobe PDF
|
||||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
|
||||||
[OutputGroup3]
|
[OutputGroup3]
|
||||||
|
|||||||
Binary file not shown.
1
PCB_Charger
Submodule
1
PCB_Charger
Submodule
Submodule PCB_Charger added at adbb733cfb
BIN
PCB_Multiboard/OptoTest.MbaDoc
Normal file
BIN
PCB_Multiboard/OptoTest.MbaDoc
Normal file
Binary file not shown.
BIN
PCB_Multiboard/OptoTest.MbsDoc
Normal file
BIN
PCB_Multiboard/OptoTest.MbsDoc
Normal file
Binary file not shown.
1096
PCB_Multiboard/OptoTest.PrjMbd
Normal file
1096
PCB_Multiboard/OptoTest.PrjMbd
Normal file
@@ -0,0 +1,1096 @@
|
|||||||
|
[Design]
|
||||||
|
Version=1.0
|
||||||
|
HierarchyMode=0
|
||||||
|
ChannelRoomNamingStyle=0
|
||||||
|
ReleasesFolder=
|
||||||
|
ChannelDesignatorFormatString=$Component_$RoomName
|
||||||
|
ChannelRoomLevelSeperator=_
|
||||||
|
OpenOutputs=1
|
||||||
|
ArchiveProject=0
|
||||||
|
TimestampOutput=0
|
||||||
|
SeparateFolders=0
|
||||||
|
TemplateLocationPath=
|
||||||
|
PinSwapBy_Netlabel=1
|
||||||
|
PinSwapBy_Pin=1
|
||||||
|
AllowPortNetNames=0
|
||||||
|
AllowSheetEntryNetNames=1
|
||||||
|
AppendSheetNumberToLocalNets=0
|
||||||
|
NetlistSinglePinNets=0
|
||||||
|
DefaultConfiguration=Default - All Constraints
|
||||||
|
UserID=0xFFFFFFFF
|
||||||
|
DefaultPcbProtel=1
|
||||||
|
DefaultPcbPcad=0
|
||||||
|
ReorderDocumentsOnCompile=1
|
||||||
|
NameNetsHierarchically=0
|
||||||
|
PowerPortNamesTakePriority=0
|
||||||
|
PushECOToAnnotationFile=1
|
||||||
|
DItemRevisionGUID=
|
||||||
|
ReportSuppressedErrorsInMessages=0
|
||||||
|
FSMCodingStyle=eFMSDropDownList_OneProcess
|
||||||
|
FSMEncodingStyle=eFMSDropDownList_OneHot
|
||||||
|
OutputPath=
|
||||||
|
LogFolderPath=
|
||||||
|
ManagedProjectGUID=
|
||||||
|
IncludeDesignInRelease=0
|
||||||
|
|
||||||
|
[Preferences]
|
||||||
|
PrefsVaultGUID=
|
||||||
|
PrefsRevisionGUID=
|
||||||
|
|
||||||
|
[Document1]
|
||||||
|
DocumentPath=OptoTest.MbaDoc
|
||||||
|
AnnotationEnabled=1
|
||||||
|
AnnotateStartValue=1
|
||||||
|
AnnotationIndexControlEnabled=0
|
||||||
|
AnnotateSuffix=
|
||||||
|
AnnotateScope=All
|
||||||
|
AnnotateOrder=-1
|
||||||
|
DoLibraryUpdate=1
|
||||||
|
DoDatabaseUpdate=1
|
||||||
|
ClassGenCCAutoEnabled=1
|
||||||
|
ClassGenCCAutoRoomEnabled=1
|
||||||
|
ClassGenNCAutoScope=None
|
||||||
|
DItemRevisionGUID=
|
||||||
|
GenerateClassCluster=0
|
||||||
|
DocumentUniqueId=d82442d4-bc50-4074-9a5f-ab3433238eee
|
||||||
|
|
||||||
|
[Document2]
|
||||||
|
DocumentPath=OptoTest.MbsDoc
|
||||||
|
AnnotationEnabled=1
|
||||||
|
AnnotateStartValue=1
|
||||||
|
AnnotationIndexControlEnabled=0
|
||||||
|
AnnotateSuffix=
|
||||||
|
AnnotateScope=All
|
||||||
|
AnnotateOrder=-1
|
||||||
|
DoLibraryUpdate=1
|
||||||
|
DoDatabaseUpdate=1
|
||||||
|
ClassGenCCAutoEnabled=1
|
||||||
|
ClassGenCCAutoRoomEnabled=1
|
||||||
|
ClassGenNCAutoScope=None
|
||||||
|
DItemRevisionGUID=
|
||||||
|
GenerateClassCluster=0
|
||||||
|
DocumentUniqueId=8534167a-ea05-4508-a2d2-705219d53200
|
||||||
|
|
||||||
|
[Document3]
|
||||||
|
DocumentPath=..\PCB\OptoTest.PrjPcb
|
||||||
|
AnnotationEnabled=1
|
||||||
|
AnnotateStartValue=1
|
||||||
|
AnnotationIndexControlEnabled=0
|
||||||
|
AnnotateSuffix=
|
||||||
|
AnnotateScope=All
|
||||||
|
AnnotateOrder=-1
|
||||||
|
DoLibraryUpdate=1
|
||||||
|
DoDatabaseUpdate=1
|
||||||
|
ClassGenCCAutoEnabled=1
|
||||||
|
ClassGenCCAutoRoomEnabled=1
|
||||||
|
ClassGenNCAutoScope=None
|
||||||
|
DItemRevisionGUID=
|
||||||
|
GenerateClassCluster=0
|
||||||
|
DocumentUniqueId=
|
||||||
|
|
||||||
|
[Document4]
|
||||||
|
DocumentPath=..\PCB_Charger\J5019_HW357.PrjPcb
|
||||||
|
AnnotationEnabled=1
|
||||||
|
AnnotateStartValue=1
|
||||||
|
AnnotationIndexControlEnabled=0
|
||||||
|
AnnotateSuffix=
|
||||||
|
AnnotateScope=All
|
||||||
|
AnnotateOrder=-1
|
||||||
|
DoLibraryUpdate=1
|
||||||
|
DoDatabaseUpdate=1
|
||||||
|
ClassGenCCAutoEnabled=1
|
||||||
|
ClassGenCCAutoRoomEnabled=1
|
||||||
|
ClassGenNCAutoScope=None
|
||||||
|
DItemRevisionGUID=
|
||||||
|
GenerateClassCluster=0
|
||||||
|
DocumentUniqueId=
|
||||||
|
|
||||||
|
[OutputGroup1]
|
||||||
|
Name=Netlist Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=CadnetixNetlist
|
||||||
|
OutputName1=Cadnetix Netlist
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
OutputType2=CalayNetlist
|
||||||
|
OutputName2=Calay Netlist
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=
|
||||||
|
OutputDefault2=0
|
||||||
|
OutputType3=EDIF
|
||||||
|
OutputName3=EDIF for PCB
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=
|
||||||
|
OutputDefault3=0
|
||||||
|
OutputType4=EESofNetlist
|
||||||
|
OutputName4=EESof Netlist
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=
|
||||||
|
OutputDefault4=0
|
||||||
|
OutputType5=IntergraphNetlist
|
||||||
|
OutputName5=Intergraph Netlist
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=
|
||||||
|
OutputDefault5=0
|
||||||
|
OutputType6=MentorBoardStationNetlist
|
||||||
|
OutputName6=Mentor BoardStation Netlist
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=
|
||||||
|
OutputDefault6=0
|
||||||
|
OutputType7=MultiWire
|
||||||
|
OutputName7=MultiWire
|
||||||
|
OutputDocumentPath7=
|
||||||
|
OutputVariantName7=
|
||||||
|
OutputDefault7=0
|
||||||
|
OutputType8=OrCadPCB2Netlist
|
||||||
|
OutputName8=Orcad/PCB2 Netlist
|
||||||
|
OutputDocumentPath8=
|
||||||
|
OutputVariantName8=
|
||||||
|
OutputDefault8=0
|
||||||
|
OutputType9=PADSNetlist
|
||||||
|
OutputName9=PADS ASCII Netlist
|
||||||
|
OutputDocumentPath9=
|
||||||
|
OutputVariantName9=
|
||||||
|
OutputDefault9=0
|
||||||
|
OutputType10=Pcad
|
||||||
|
OutputName10=Pcad for PCB
|
||||||
|
OutputDocumentPath10=
|
||||||
|
OutputVariantName10=
|
||||||
|
OutputDefault10=0
|
||||||
|
OutputType11=PCADNetlist
|
||||||
|
OutputName11=PCAD Netlist
|
||||||
|
OutputDocumentPath11=
|
||||||
|
OutputVariantName11=
|
||||||
|
OutputDefault11=0
|
||||||
|
OutputType12=PCADnltNetlist
|
||||||
|
OutputName12=PCADnlt Netlist
|
||||||
|
OutputDocumentPath12=
|
||||||
|
OutputVariantName12=
|
||||||
|
OutputDefault12=0
|
||||||
|
OutputType13=Protel2Netlist
|
||||||
|
OutputName13=Protel2 Netlist
|
||||||
|
OutputDocumentPath13=
|
||||||
|
OutputVariantName13=
|
||||||
|
OutputDefault13=0
|
||||||
|
OutputType14=ProtelNetlist
|
||||||
|
OutputName14=Protel
|
||||||
|
OutputDocumentPath14=
|
||||||
|
OutputVariantName14=
|
||||||
|
OutputDefault14=0
|
||||||
|
OutputType15=RacalNetlist
|
||||||
|
OutputName15=Racal Netlist
|
||||||
|
OutputDocumentPath15=
|
||||||
|
OutputVariantName15=
|
||||||
|
OutputDefault15=0
|
||||||
|
OutputType16=RINFNetlist
|
||||||
|
OutputName16=RINF Netlist
|
||||||
|
OutputDocumentPath16=
|
||||||
|
OutputVariantName16=
|
||||||
|
OutputDefault16=0
|
||||||
|
OutputType17=SciCardsNetlist
|
||||||
|
OutputName17=SciCards Netlist
|
||||||
|
OutputDocumentPath17=
|
||||||
|
OutputVariantName17=
|
||||||
|
OutputDefault17=0
|
||||||
|
OutputType18=TangoNetlist
|
||||||
|
OutputName18=Tango Netlist
|
||||||
|
OutputDocumentPath18=
|
||||||
|
OutputVariantName18=
|
||||||
|
OutputDefault18=0
|
||||||
|
OutputType19=TelesisNetlist
|
||||||
|
OutputName19=Telesis Netlist
|
||||||
|
OutputDocumentPath19=
|
||||||
|
OutputVariantName19=
|
||||||
|
OutputDefault19=0
|
||||||
|
OutputType20=WireListNetlist
|
||||||
|
OutputName20=WireList Netlist
|
||||||
|
OutputDocumentPath20=
|
||||||
|
OutputVariantName20=
|
||||||
|
OutputDefault20=0
|
||||||
|
|
||||||
|
[OutputGroup2]
|
||||||
|
Name=Simulator Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
|
||||||
|
[OutputGroup3]
|
||||||
|
Name=Documentation Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Virtual Printer
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=Composite
|
||||||
|
OutputName1=Composite Drawing
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType2=PCB 3D Print
|
||||||
|
OutputName2=PCB 3D Print
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=[No Variations]
|
||||||
|
OutputDefault2=0
|
||||||
|
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType3=PCB 3D Video
|
||||||
|
OutputName3=PCB 3D Video
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=[No Variations]
|
||||||
|
OutputDefault3=0
|
||||||
|
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType4=PCB Print
|
||||||
|
OutputName4=PCB Prints
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=
|
||||||
|
OutputDefault4=0
|
||||||
|
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType5=PCBDrawing
|
||||||
|
OutputName5=Draftsman
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=[No Variations]
|
||||||
|
OutputDefault5=0
|
||||||
|
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType6=PCBLIB Print
|
||||||
|
OutputName6=PCBLIB Prints
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=
|
||||||
|
OutputDefault6=0
|
||||||
|
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType7=PDF3D
|
||||||
|
OutputName7=PDF3D
|
||||||
|
OutputDocumentPath7=
|
||||||
|
OutputVariantName7=[No Variations]
|
||||||
|
OutputDefault7=0
|
||||||
|
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType8=Report Print
|
||||||
|
OutputName8=Report Prints
|
||||||
|
OutputDocumentPath8=
|
||||||
|
OutputVariantName8=
|
||||||
|
OutputDefault8=0
|
||||||
|
PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType9=Schematic Print
|
||||||
|
OutputName9=Schematic Prints
|
||||||
|
OutputDocumentPath9=
|
||||||
|
OutputVariantName9=
|
||||||
|
OutputDefault9=0
|
||||||
|
PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType10=SimView Print
|
||||||
|
OutputName10=SimView Prints
|
||||||
|
OutputDocumentPath10=
|
||||||
|
OutputVariantName10=
|
||||||
|
OutputDefault10=0
|
||||||
|
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
|
||||||
|
[OutputGroup4]
|
||||||
|
Name=Assembly Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=Assembly
|
||||||
|
OutputName1=Assembly Drawings
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=[No Variations]
|
||||||
|
OutputDefault1=0
|
||||||
|
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType2=Pick Place
|
||||||
|
OutputName2=Generates pick and place files
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=[No Variations]
|
||||||
|
OutputDefault2=0
|
||||||
|
OutputType3=Test Points For Assembly
|
||||||
|
OutputName3=Test Point Report
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=[No Variations]
|
||||||
|
OutputDefault3=0
|
||||||
|
|
||||||
|
[OutputGroup5]
|
||||||
|
Name=Fabrication Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=Board Stack Report
|
||||||
|
OutputName1=Report Board Stack
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType2=CompositeDrill
|
||||||
|
OutputName2=Composite Drill Drawing
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=
|
||||||
|
OutputDefault2=0
|
||||||
|
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType3=Drill
|
||||||
|
OutputName3=Drill Drawing/Guides
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=
|
||||||
|
OutputDefault3=0
|
||||||
|
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType4=Final
|
||||||
|
OutputName4=Final Artwork Prints
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=[No Variations]
|
||||||
|
OutputDefault4=0
|
||||||
|
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType5=Gerber
|
||||||
|
OutputName5=Gerber Files
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=[No Variations]
|
||||||
|
OutputDefault5=0
|
||||||
|
OutputType6=Gerber X2
|
||||||
|
OutputName6=Gerber X2 Files
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=
|
||||||
|
OutputDefault6=0
|
||||||
|
OutputType7=IPC2581
|
||||||
|
OutputName7=IPC-2581 Files
|
||||||
|
OutputDocumentPath7=
|
||||||
|
OutputVariantName7=
|
||||||
|
OutputDefault7=0
|
||||||
|
OutputType8=Mask
|
||||||
|
OutputName8=Solder/Paste Mask Prints
|
||||||
|
OutputDocumentPath8=
|
||||||
|
OutputVariantName8=
|
||||||
|
OutputDefault8=0
|
||||||
|
PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType9=NC Drill
|
||||||
|
OutputName9=NC Drill Files
|
||||||
|
OutputDocumentPath9=
|
||||||
|
OutputVariantName9=
|
||||||
|
OutputDefault9=0
|
||||||
|
OutputType10=ODB
|
||||||
|
OutputName10=ODB++ Files
|
||||||
|
OutputDocumentPath10=
|
||||||
|
OutputVariantName10=[No Variations]
|
||||||
|
OutputDefault10=0
|
||||||
|
OutputType11=Plane
|
||||||
|
OutputName11=Power-Plane Prints
|
||||||
|
OutputDocumentPath11=
|
||||||
|
OutputVariantName11=
|
||||||
|
OutputDefault11=0
|
||||||
|
PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType12=Test Points
|
||||||
|
OutputName12=Test Point Report
|
||||||
|
OutputDocumentPath12=
|
||||||
|
OutputVariantName12=
|
||||||
|
OutputDefault12=0
|
||||||
|
|
||||||
|
[OutputGroup6]
|
||||||
|
Name=Report Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=BOM_PartType
|
||||||
|
OutputName1=Bill of Materials
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=[No Variations]
|
||||||
|
OutputDefault1=0
|
||||||
|
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType2=ComponentCrossReference
|
||||||
|
OutputName2=Component Cross Reference Report
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=[No Variations]
|
||||||
|
OutputDefault2=0
|
||||||
|
OutputType3=ReportHierarchy
|
||||||
|
OutputName3=Report Project Hierarchy
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=[No Variations]
|
||||||
|
OutputDefault3=0
|
||||||
|
OutputType4=Script
|
||||||
|
OutputName4=Script Output
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=[No Variations]
|
||||||
|
OutputDefault4=0
|
||||||
|
OutputType5=SimpleBOM
|
||||||
|
OutputName5=Simple BOM
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=[No Variations]
|
||||||
|
OutputDefault5=0
|
||||||
|
OutputType6=SinglePinNetReporter
|
||||||
|
OutputName6=Report Single Pin Nets
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=[No Variations]
|
||||||
|
OutputDefault6=0
|
||||||
|
|
||||||
|
[OutputGroup7]
|
||||||
|
Name=Other Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=Text Print
|
||||||
|
OutputName1=Text Print
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType2=Text Print
|
||||||
|
OutputName2=Text Print
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=
|
||||||
|
OutputDefault2=0
|
||||||
|
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType3=Text Print
|
||||||
|
OutputName3=Text Print
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=
|
||||||
|
OutputDefault3=0
|
||||||
|
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType4=Text Print
|
||||||
|
OutputName4=Text Print
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=
|
||||||
|
OutputDefault4=0
|
||||||
|
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType5=Text Print
|
||||||
|
OutputName5=Text Print
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=
|
||||||
|
OutputDefault5=0
|
||||||
|
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType6=Text Print
|
||||||
|
OutputName6=Text Print
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=
|
||||||
|
OutputDefault6=0
|
||||||
|
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType7=Text Print
|
||||||
|
OutputName7=Text Print
|
||||||
|
OutputDocumentPath7=
|
||||||
|
OutputVariantName7=
|
||||||
|
OutputDefault7=0
|
||||||
|
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType8=Text Print
|
||||||
|
OutputName8=Text Print
|
||||||
|
OutputDocumentPath8=
|
||||||
|
OutputVariantName8=
|
||||||
|
OutputDefault8=0
|
||||||
|
PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType9=Text Print
|
||||||
|
OutputName9=Text Print
|
||||||
|
OutputDocumentPath9=
|
||||||
|
OutputVariantName9=
|
||||||
|
OutputDefault9=0
|
||||||
|
PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType10=Text Print
|
||||||
|
OutputName10=Text Print
|
||||||
|
OutputDocumentPath10=
|
||||||
|
OutputVariantName10=
|
||||||
|
OutputDefault10=0
|
||||||
|
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType11=Text Print
|
||||||
|
OutputName11=Text Print
|
||||||
|
OutputDocumentPath11=
|
||||||
|
OutputVariantName11=
|
||||||
|
OutputDefault11=0
|
||||||
|
PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType12=Text Print
|
||||||
|
OutputName12=Text Print
|
||||||
|
OutputDocumentPath12=
|
||||||
|
OutputVariantName12=
|
||||||
|
OutputDefault12=0
|
||||||
|
PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType13=Text Print
|
||||||
|
OutputName13=Text Print
|
||||||
|
OutputDocumentPath13=
|
||||||
|
OutputVariantName13=
|
||||||
|
OutputDefault13=0
|
||||||
|
PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType14=Text Print
|
||||||
|
OutputName14=Text Print
|
||||||
|
OutputDocumentPath14=
|
||||||
|
OutputVariantName14=
|
||||||
|
OutputDefault14=0
|
||||||
|
PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType15=Text Print
|
||||||
|
OutputName15=Text Print
|
||||||
|
OutputDocumentPath15=
|
||||||
|
OutputVariantName15=
|
||||||
|
OutputDefault15=0
|
||||||
|
PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType16=Text Print
|
||||||
|
OutputName16=Text Print
|
||||||
|
OutputDocumentPath16=
|
||||||
|
OutputVariantName16=
|
||||||
|
OutputDefault16=0
|
||||||
|
PageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType17=Text Print
|
||||||
|
OutputName17=Text Print
|
||||||
|
OutputDocumentPath17=
|
||||||
|
OutputVariantName17=
|
||||||
|
OutputDefault17=0
|
||||||
|
PageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType18=Text Print
|
||||||
|
OutputName18=Text Print
|
||||||
|
OutputDocumentPath18=
|
||||||
|
OutputVariantName18=
|
||||||
|
OutputDefault18=0
|
||||||
|
PageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType19=Text Print
|
||||||
|
OutputName19=Text Print
|
||||||
|
OutputDocumentPath19=
|
||||||
|
OutputVariantName19=
|
||||||
|
OutputDefault19=0
|
||||||
|
PageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType20=Text Print
|
||||||
|
OutputName20=Text Print
|
||||||
|
OutputDocumentPath20=
|
||||||
|
OutputVariantName20=
|
||||||
|
OutputDefault20=0
|
||||||
|
PageOptions20=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType21=Text Print
|
||||||
|
OutputName21=Text Print
|
||||||
|
OutputDocumentPath21=
|
||||||
|
OutputVariantName21=
|
||||||
|
OutputDefault21=0
|
||||||
|
PageOptions21=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType22=Text Print
|
||||||
|
OutputName22=Text Print
|
||||||
|
OutputDocumentPath22=
|
||||||
|
OutputVariantName22=
|
||||||
|
OutputDefault22=0
|
||||||
|
PageOptions22=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType23=Text Print
|
||||||
|
OutputName23=Text Print
|
||||||
|
OutputDocumentPath23=
|
||||||
|
OutputVariantName23=
|
||||||
|
OutputDefault23=0
|
||||||
|
PageOptions23=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType24=Text Print
|
||||||
|
OutputName24=Text Print
|
||||||
|
OutputDocumentPath24=
|
||||||
|
OutputVariantName24=
|
||||||
|
OutputDefault24=0
|
||||||
|
PageOptions24=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType25=Text Print
|
||||||
|
OutputName25=Text Print
|
||||||
|
OutputDocumentPath25=
|
||||||
|
OutputVariantName25=
|
||||||
|
OutputDefault25=0
|
||||||
|
PageOptions25=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType26=Text Print
|
||||||
|
OutputName26=Text Print
|
||||||
|
OutputDocumentPath26=
|
||||||
|
OutputVariantName26=
|
||||||
|
OutputDefault26=0
|
||||||
|
PageOptions26=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType27=Text Print
|
||||||
|
OutputName27=Text Print
|
||||||
|
OutputDocumentPath27=
|
||||||
|
OutputVariantName27=
|
||||||
|
OutputDefault27=0
|
||||||
|
PageOptions27=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType28=Text Print
|
||||||
|
OutputName28=Text Print
|
||||||
|
OutputDocumentPath28=
|
||||||
|
OutputVariantName28=
|
||||||
|
OutputDefault28=0
|
||||||
|
PageOptions28=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType29=Text Print
|
||||||
|
OutputName29=Text Print
|
||||||
|
OutputDocumentPath29=
|
||||||
|
OutputVariantName29=
|
||||||
|
OutputDefault29=0
|
||||||
|
PageOptions29=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
|
||||||
|
[OutputGroup8]
|
||||||
|
Name=Validation Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=BOM_Violations
|
||||||
|
OutputName1=BOM Checks Report
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
OutputType2=Component states check
|
||||||
|
OutputName2=Server's components states check
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=
|
||||||
|
OutputDefault2=0
|
||||||
|
OutputType3=Configuration compliance
|
||||||
|
OutputName3=Environment configuration compliance check
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=
|
||||||
|
OutputDefault3=0
|
||||||
|
OutputType4=Design Rules Check
|
||||||
|
OutputName4=Design Rules Check
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=
|
||||||
|
OutputDefault4=0
|
||||||
|
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType5=Differences Report
|
||||||
|
OutputName5=Differences Report
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=
|
||||||
|
OutputDefault5=0
|
||||||
|
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType6=Electrical Rules Check
|
||||||
|
OutputName6=Electrical Rules Check
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=
|
||||||
|
OutputDefault6=0
|
||||||
|
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
OutputType7=Footprint Comparison Report
|
||||||
|
OutputName7=Footprint Comparison Report
|
||||||
|
OutputDocumentPath7=
|
||||||
|
OutputVariantName7=
|
||||||
|
OutputDefault7=0
|
||||||
|
|
||||||
|
[OutputGroup9]
|
||||||
|
Name=Export Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=AutoCAD dwg/dxf PCB
|
||||||
|
OutputName1=AutoCAD dwg/dxf File PCB
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
OutputType2=AutoCAD dwg/dxf Schematic
|
||||||
|
OutputName2=AutoCAD dwg/dxf File Schematic
|
||||||
|
OutputDocumentPath2=
|
||||||
|
OutputVariantName2=
|
||||||
|
OutputDefault2=0
|
||||||
|
OutputType3=ExportIDF
|
||||||
|
OutputName3=Export IDF
|
||||||
|
OutputDocumentPath3=
|
||||||
|
OutputVariantName3=
|
||||||
|
OutputDefault3=0
|
||||||
|
OutputType4=ExportPARASOLID
|
||||||
|
OutputName4=Export PARASOLID
|
||||||
|
OutputDocumentPath4=
|
||||||
|
OutputVariantName4=[No Variations]
|
||||||
|
OutputDefault4=0
|
||||||
|
OutputType5=ExportSTEP
|
||||||
|
OutputName5=Export STEP
|
||||||
|
OutputDocumentPath5=
|
||||||
|
OutputVariantName5=[No Variations]
|
||||||
|
OutputDefault5=0
|
||||||
|
OutputType6=ExportVRML
|
||||||
|
OutputName6=Export VRML
|
||||||
|
OutputDocumentPath6=
|
||||||
|
OutputVariantName6=[No Variations]
|
||||||
|
OutputDefault6=0
|
||||||
|
OutputType7=MBAExportPARASOLID
|
||||||
|
OutputName7=Export PARASOLID
|
||||||
|
OutputDocumentPath7=
|
||||||
|
OutputVariantName7=
|
||||||
|
OutputDefault7=0
|
||||||
|
OutputType8=MBAExportSTEP
|
||||||
|
OutputName8=Export STEP
|
||||||
|
OutputDocumentPath8=
|
||||||
|
OutputVariantName8=
|
||||||
|
OutputDefault8=0
|
||||||
|
OutputType9=Save As/Export PCB
|
||||||
|
OutputName9=Save As/Export PCB
|
||||||
|
OutputDocumentPath9=
|
||||||
|
OutputVariantName9=
|
||||||
|
OutputDefault9=0
|
||||||
|
OutputType10=Save As/Export Schematic
|
||||||
|
OutputName10=Save As/Export Schematic
|
||||||
|
OutputDocumentPath10=
|
||||||
|
OutputVariantName10=
|
||||||
|
OutputDefault10=0
|
||||||
|
OutputType11=Specctra Design PCB
|
||||||
|
OutputName11=Specctra Design PCB
|
||||||
|
OutputDocumentPath11=
|
||||||
|
OutputVariantName11=
|
||||||
|
OutputDefault11=0
|
||||||
|
|
||||||
|
[OutputGroup10]
|
||||||
|
Name=PostProcess Outputs
|
||||||
|
Description=
|
||||||
|
TargetPrinter=Adobe PDF
|
||||||
|
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
|
||||||
|
OutputType1=Copy Files
|
||||||
|
OutputName1=Copy Files
|
||||||
|
OutputDocumentPath1=
|
||||||
|
OutputVariantName1=
|
||||||
|
OutputDefault1=0
|
||||||
|
|
||||||
|
[Modification Levels]
|
||||||
|
Type1=1
|
||||||
|
Type2=1
|
||||||
|
Type3=1
|
||||||
|
Type4=1
|
||||||
|
Type5=1
|
||||||
|
Type6=1
|
||||||
|
Type7=1
|
||||||
|
Type8=1
|
||||||
|
Type9=1
|
||||||
|
Type10=1
|
||||||
|
Type11=1
|
||||||
|
Type12=1
|
||||||
|
Type13=1
|
||||||
|
Type14=1
|
||||||
|
Type15=1
|
||||||
|
Type16=1
|
||||||
|
Type17=1
|
||||||
|
Type18=1
|
||||||
|
Type19=1
|
||||||
|
Type20=1
|
||||||
|
Type21=1
|
||||||
|
Type22=1
|
||||||
|
Type23=1
|
||||||
|
Type24=1
|
||||||
|
Type25=1
|
||||||
|
Type26=1
|
||||||
|
Type27=1
|
||||||
|
Type28=1
|
||||||
|
Type29=1
|
||||||
|
Type30=1
|
||||||
|
Type31=1
|
||||||
|
Type32=1
|
||||||
|
Type33=1
|
||||||
|
Type34=1
|
||||||
|
Type35=1
|
||||||
|
Type36=1
|
||||||
|
Type37=1
|
||||||
|
Type38=1
|
||||||
|
Type39=1
|
||||||
|
Type40=1
|
||||||
|
Type41=1
|
||||||
|
Type42=1
|
||||||
|
Type43=1
|
||||||
|
Type44=1
|
||||||
|
Type45=1
|
||||||
|
Type46=1
|
||||||
|
Type47=1
|
||||||
|
Type48=1
|
||||||
|
Type49=1
|
||||||
|
Type50=1
|
||||||
|
Type51=1
|
||||||
|
Type52=1
|
||||||
|
Type53=1
|
||||||
|
Type54=1
|
||||||
|
Type55=1
|
||||||
|
Type56=1
|
||||||
|
Type57=1
|
||||||
|
Type58=1
|
||||||
|
Type59=1
|
||||||
|
Type60=1
|
||||||
|
Type61=1
|
||||||
|
Type62=1
|
||||||
|
Type63=1
|
||||||
|
Type64=1
|
||||||
|
Type65=1
|
||||||
|
Type66=1
|
||||||
|
Type67=1
|
||||||
|
Type68=1
|
||||||
|
Type69=1
|
||||||
|
Type70=1
|
||||||
|
Type71=1
|
||||||
|
Type72=1
|
||||||
|
Type73=1
|
||||||
|
Type74=1
|
||||||
|
Type75=1
|
||||||
|
Type76=1
|
||||||
|
Type77=1
|
||||||
|
Type78=1
|
||||||
|
Type79=1
|
||||||
|
Type80=1
|
||||||
|
Type81=1
|
||||||
|
Type82=1
|
||||||
|
Type83=1
|
||||||
|
Type84=1
|
||||||
|
Type85=1
|
||||||
|
Type86=1
|
||||||
|
Type87=1
|
||||||
|
Type88=1
|
||||||
|
Type89=1
|
||||||
|
Type90=1
|
||||||
|
Type91=1
|
||||||
|
Type92=1
|
||||||
|
Type93=1
|
||||||
|
Type94=1
|
||||||
|
Type95=1
|
||||||
|
Type96=1
|
||||||
|
Type97=1
|
||||||
|
Type98=1
|
||||||
|
Type99=1
|
||||||
|
Type100=1
|
||||||
|
Type101=1
|
||||||
|
Type102=1
|
||||||
|
Type103=1
|
||||||
|
Type104=1
|
||||||
|
Type105=1
|
||||||
|
Type106=1
|
||||||
|
Type107=1
|
||||||
|
Type108=1
|
||||||
|
Type109=1
|
||||||
|
Type110=1
|
||||||
|
Type111=1
|
||||||
|
Type112=1
|
||||||
|
Type113=1
|
||||||
|
Type114=1
|
||||||
|
Type115=1
|
||||||
|
Type116=1
|
||||||
|
Type117=1
|
||||||
|
|
||||||
|
[Difference Levels]
|
||||||
|
Type1=1
|
||||||
|
Type2=1
|
||||||
|
Type3=1
|
||||||
|
Type4=1
|
||||||
|
Type5=1
|
||||||
|
Type6=1
|
||||||
|
Type7=1
|
||||||
|
Type8=1
|
||||||
|
Type9=1
|
||||||
|
Type10=1
|
||||||
|
Type11=1
|
||||||
|
Type12=1
|
||||||
|
Type13=1
|
||||||
|
Type14=1
|
||||||
|
Type15=1
|
||||||
|
Type16=1
|
||||||
|
Type17=1
|
||||||
|
Type18=1
|
||||||
|
Type19=1
|
||||||
|
Type20=1
|
||||||
|
Type21=1
|
||||||
|
Type22=1
|
||||||
|
Type23=1
|
||||||
|
Type24=1
|
||||||
|
Type25=1
|
||||||
|
Type26=1
|
||||||
|
Type27=1
|
||||||
|
Type28=1
|
||||||
|
Type29=1
|
||||||
|
Type30=1
|
||||||
|
Type31=1
|
||||||
|
Type32=1
|
||||||
|
Type33=1
|
||||||
|
Type34=1
|
||||||
|
Type35=1
|
||||||
|
Type36=1
|
||||||
|
Type37=1
|
||||||
|
Type38=1
|
||||||
|
Type39=1
|
||||||
|
Type40=1
|
||||||
|
Type41=1
|
||||||
|
Type42=1
|
||||||
|
Type43=1
|
||||||
|
Type44=1
|
||||||
|
Type45=1
|
||||||
|
Type46=1
|
||||||
|
Type47=1
|
||||||
|
Type48=1
|
||||||
|
Type49=1
|
||||||
|
Type50=1
|
||||||
|
Type51=1
|
||||||
|
Type52=1
|
||||||
|
Type53=1
|
||||||
|
Type54=1
|
||||||
|
Type55=1
|
||||||
|
Type56=1
|
||||||
|
Type57=1
|
||||||
|
Type58=1
|
||||||
|
Type59=1
|
||||||
|
Type60=1
|
||||||
|
Type61=1
|
||||||
|
Type62=1
|
||||||
|
Type63=1
|
||||||
|
Type64=1
|
||||||
|
Type65=1
|
||||||
|
Type66=1
|
||||||
|
|
||||||
|
[Electrical Rules Check]
|
||||||
|
Type1=1
|
||||||
|
Type2=1
|
||||||
|
Type3=2
|
||||||
|
Type4=1
|
||||||
|
Type5=2
|
||||||
|
Type6=2
|
||||||
|
Type7=1
|
||||||
|
Type8=1
|
||||||
|
Type9=1
|
||||||
|
Type10=1
|
||||||
|
Type11=2
|
||||||
|
Type12=2
|
||||||
|
Type13=2
|
||||||
|
Type14=1
|
||||||
|
Type15=1
|
||||||
|
Type16=1
|
||||||
|
Type17=1
|
||||||
|
Type18=1
|
||||||
|
Type19=1
|
||||||
|
Type20=1
|
||||||
|
Type21=1
|
||||||
|
Type22=1
|
||||||
|
Type23=1
|
||||||
|
Type24=1
|
||||||
|
Type25=2
|
||||||
|
Type26=2
|
||||||
|
Type27=2
|
||||||
|
Type28=1
|
||||||
|
Type29=1
|
||||||
|
Type30=1
|
||||||
|
Type31=1
|
||||||
|
Type32=2
|
||||||
|
Type33=2
|
||||||
|
Type34=2
|
||||||
|
Type35=1
|
||||||
|
Type36=2
|
||||||
|
Type37=1
|
||||||
|
Type38=2
|
||||||
|
Type39=2
|
||||||
|
Type40=2
|
||||||
|
Type41=0
|
||||||
|
Type42=2
|
||||||
|
Type43=1
|
||||||
|
Type44=1
|
||||||
|
Type45=2
|
||||||
|
Type46=1
|
||||||
|
Type47=2
|
||||||
|
Type48=2
|
||||||
|
Type49=1
|
||||||
|
Type50=2
|
||||||
|
Type51=1
|
||||||
|
Type52=1
|
||||||
|
Type53=1
|
||||||
|
Type54=1
|
||||||
|
Type55=1
|
||||||
|
Type56=2
|
||||||
|
Type57=1
|
||||||
|
Type58=1
|
||||||
|
Type59=2
|
||||||
|
Type60=1
|
||||||
|
Type61=2
|
||||||
|
Type62=2
|
||||||
|
Type63=1
|
||||||
|
Type64=0
|
||||||
|
Type65=2
|
||||||
|
Type66=3
|
||||||
|
Type67=2
|
||||||
|
Type68=2
|
||||||
|
Type69=2
|
||||||
|
Type70=2
|
||||||
|
Type71=2
|
||||||
|
Type72=2
|
||||||
|
Type73=2
|
||||||
|
Type74=1
|
||||||
|
Type75=2
|
||||||
|
Type76=1
|
||||||
|
Type77=1
|
||||||
|
Type78=1
|
||||||
|
Type79=1
|
||||||
|
Type80=2
|
||||||
|
Type81=3
|
||||||
|
Type82=3
|
||||||
|
Type83=3
|
||||||
|
Type84=3
|
||||||
|
Type85=3
|
||||||
|
Type86=2
|
||||||
|
Type87=2
|
||||||
|
Type88=2
|
||||||
|
Type89=1
|
||||||
|
Type90=1
|
||||||
|
Type91=3
|
||||||
|
Type92=3
|
||||||
|
Type93=2
|
||||||
|
Type94=2
|
||||||
|
Type95=2
|
||||||
|
Type96=2
|
||||||
|
Type97=2
|
||||||
|
Type98=0
|
||||||
|
Type99=1
|
||||||
|
Type100=2
|
||||||
|
Type101=1
|
||||||
|
Type102=2
|
||||||
|
Type103=2
|
||||||
|
Type104=1
|
||||||
|
Type105=2
|
||||||
|
Type106=2
|
||||||
|
Type107=2
|
||||||
|
Type108=2
|
||||||
|
Type109=1
|
||||||
|
Type110=1
|
||||||
|
Type111=1
|
||||||
|
Type112=1
|
||||||
|
Type113=1
|
||||||
|
Type114=2
|
||||||
|
Type115=2
|
||||||
|
Type116=2
|
||||||
|
Type117=3
|
||||||
|
Type118=3
|
||||||
|
Type119=3
|
||||||
|
MultiChannelAlternate=2
|
||||||
|
AlternateItemFail=3
|
||||||
|
Type122=2
|
||||||
|
|
||||||
|
[ERC Connection Matrix]
|
||||||
|
L1=NNNNNNNNNNNWNNNWW
|
||||||
|
L2=NNWNNNNWWWNWNWNWN
|
||||||
|
L3=NWEENEEEENEWNEEWN
|
||||||
|
L4=NNENNNWEENNWNENWN
|
||||||
|
L5=NNNNNNNNNNNNNNNNN
|
||||||
|
L6=NNENNNNEENNWNENWN
|
||||||
|
L7=NNEWNNWEENNWNENWN
|
||||||
|
L8=NWEENEENEEENNEENN
|
||||||
|
L9=NWEENEEEENEWNEEWW
|
||||||
|
L10=NWNNNNNENNEWNNEWN
|
||||||
|
L11=NNENNNNEEENWNENWN
|
||||||
|
L12=WWWWNWWNWWWNWWWNN
|
||||||
|
L13=NNNNNNNNNNNWNNNWW
|
||||||
|
L14=NWEENEEEENEWNEEWW
|
||||||
|
L15=NNENNNNEEENWNENWW
|
||||||
|
L16=WWWWNWWNWWWNWWWNW
|
||||||
|
L17=WNNNNNNNWNNNWWWWN
|
||||||
|
|
||||||
|
[Annotate]
|
||||||
|
SortOrder=3
|
||||||
|
SortLocation=0
|
||||||
|
MatchParameter1=Comment
|
||||||
|
MatchStrictly1=1
|
||||||
|
MatchParameter2=Library Reference
|
||||||
|
MatchStrictly2=1
|
||||||
|
PhysicalNamingFormat=$Component_$RoomName
|
||||||
|
GlobalIndexSortOrder=3
|
||||||
|
GlobalIndexSortLocation=0
|
||||||
|
|
||||||
|
[PrjClassGen]
|
||||||
|
CompClassManualEnabled=0
|
||||||
|
CompClassManualRoomEnabled=0
|
||||||
|
NetClassAutoBusEnabled=1
|
||||||
|
NetClassAutoCompEnabled=0
|
||||||
|
NetClassAutoNamedHarnessEnabled=0
|
||||||
|
NetClassManualEnabled=1
|
||||||
|
NetClassSeparateForBusSections=0
|
||||||
|
|
||||||
|
[LibraryUpdateOptions]
|
||||||
|
SelectedOnly=0
|
||||||
|
UpdateVariants=1
|
||||||
|
PartTypes=0
|
||||||
|
FullReplace=1
|
||||||
|
UpdateDesignatorLock=1
|
||||||
|
UpdatePartIDLock=1
|
||||||
|
PreserveParameterLocations=1
|
||||||
|
PreserveParameterVisibility=1
|
||||||
|
DoGraphics=1
|
||||||
|
DoParameters=1
|
||||||
|
DoModels=1
|
||||||
|
AddParameters=0
|
||||||
|
RemoveParameters=0
|
||||||
|
AddModels=1
|
||||||
|
RemoveModels=1
|
||||||
|
UpdateCurrentModels=1
|
||||||
|
|
||||||
|
[DatabaseUpdateOptions]
|
||||||
|
SelectedOnly=0
|
||||||
|
UpdateVariants=1
|
||||||
|
PartTypes=0
|
||||||
|
|
||||||
|
[Comparison Options]
|
||||||
|
ComparisonOptions0=Kind=Net|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
|
||||||
|
ComparisonOptions1=Kind=Net Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
|
||||||
|
ComparisonOptions2=Kind=Component Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
|
||||||
|
ComparisonOptions3=Kind=Rule|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
|
||||||
|
ComparisonOptions4=Kind=Differential Pair|MinPercent=50|MinMatch=1|ShowMatch=0|Confirm=0|UseName=0|InclAllRules=0
|
||||||
|
ComparisonOptions5=Kind=Structure Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
|
||||||
|
|
||||||
|
[SmartPDF]
|
||||||
|
PageOptions=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
|
||||||
|
|
||||||
4
PCB_Multiboard/OptoTest.PrjMbdStructure
Normal file
4
PCB_Multiboard/OptoTest.PrjMbdStructure
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Record=DiagramHierarchy|SourceDocument=OptoTest.MbsDoc|Kind=Multi-board Schematic Module|Designator=1|Source=..\PCB\OptoTest.PrjPcb
|
||||||
|
Record=SubProject|SourceDocument=OptoTest.MbsDoc|ProjectPath=..\PCB\OptoTest.PrjPcb
|
||||||
|
Record=DiagramHierarchy|SourceDocument=OptoTest.MbsDoc|Kind=Multi-board Schematic Module|Designator=2|Source=..\PCB_Charger\J5019_HW357.PrjPcb
|
||||||
|
Record=SubProject|SourceDocument=OptoTest.MbsDoc|ProjectPath=..\PCB_Charger\J5019_HW357.PrjPcb
|
||||||
45
README.md
45
README.md
@@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
- неблокирующий конечный автомат без `pulseIn()` и длинных `delay()`;
|
- неблокирующий конечный автомат без `pulseIn()` и длинных `delay()`;
|
||||||
- общие для оптического и драйверного тестов частота PWM и диапазон импульсов;
|
- общие для оптического и драйверного тестов частота PWM и диапазон импульсов;
|
||||||
- четыре рабочих режима: `SOLO OPTICAL`, `SOLO DRIVER` (только S3),
|
- пять рабочих режимов: `SOLO OPTICAL`, `SOLO DRIVER` (только S3),
|
||||||
`MASTER OPTICAL`, `SLAVE OPTICAL`;
|
`SOLO PWM`, `MASTER OPTICAL`, `SLAVE OPTICAL`;
|
||||||
- настраиваемый для теста драйвера код `HH`, `HL`, `LH`, `LL`; в тесте
|
- настраиваемый для теста драйвера код `HH`, `HL`, `LH`, `LL`; в тесте
|
||||||
оптики полярность входного сигнала определяется автоматически;
|
оптики полярность входного сигнала определяется автоматически;
|
||||||
- аппаратные LEDC (C3) и MCPWM (S3) с расчётом реально получившихся частоты и длительности импульса;
|
- аппаратные LEDC (C3) и MCPWM (S3) с расчётом реально получившихся частоты и длительности импульса;
|
||||||
@@ -40,7 +40,8 @@ Arduino sketch находится в каталоге `OpticalChannelTester`:
|
|||||||
- `Receiver.*` — MCPWM Capture на S3 / совместимый GPIO fallback;
|
- `Receiver.*` — MCPWM Capture на S3 / совместимый GPIO fallback;
|
||||||
- `Measurement.*` — строгая проверка периодов;
|
- `Measurement.*` — строгая проверка периодов;
|
||||||
- `Protocol.*`, `Radio.*` — ESP-NOW;
|
- `Protocol.*`, `Radio.*` — ESP-NOW;
|
||||||
- `App.*` — общий конечный автомат SOLO/MASTER/SLAVE.
|
- `App.*` — общий конечный автомат SOLO/MASTER/SLAVE;
|
||||||
|
- `SignalProbe.*` — тестовый вариант прошивки PWM/Rx.
|
||||||
|
|
||||||
## Требования Arduino IDE
|
## Требования Arduino IDE
|
||||||
|
|
||||||
@@ -187,11 +188,17 @@ MASTER <~~~~ ESP-NOW Wi-Fi channel 6 ~~~~> SLAVE
|
|||||||
|
|
||||||
В ожидании в группе `ОПТИКА` на S3:
|
В ожидании в группе `ОПТИКА` на S3:
|
||||||
|
|
||||||
- MODE short: `SOLO ОПТИКА → SOLO ДРАЙВЕР → MASTER ОПТИКА → SLAVE ОПТИКА`;
|
- MODE short: `SOLO ОПТИКА → SOLO ДРАЙВЕР → SOLO ШИМ → MASTER ОПТИКА → SLAVE ОПТИКА`;
|
||||||
- MODE long: открыть настройки;
|
- MODE long: открыть настройки;
|
||||||
- START short: начать тест;
|
- START short: начать тест;
|
||||||
- START long во время теста: ABORT, PWM немедленно выключается.
|
- START long во время теста: ABORT, PWM немедленно выключается.
|
||||||
|
|
||||||
|
На C3 режим `SOLO ДРАЙВЕР` пропускается. В `SOLO ШИМ` выход непрерывно выдаёт
|
||||||
|
выбранную частоту и длительность импульса без проверки Rx. Частота задаётся
|
||||||
|
пунктом `ЧАСТОТА ШИМ`, длительность — пунктом `ИМПУЛЬС ШИМ` (общим с
|
||||||
|
`МАКС. ИМПУЛЬС` остальных режимов). Удержание START или команда `stop` в
|
||||||
|
Serial выключает выход.
|
||||||
|
|
||||||
В ожидании в группе `ПЛАТА`:
|
В ожидании в группе `ПЛАТА`:
|
||||||
|
|
||||||
- MODE short для аналоговой платы: `АЦП ↔ ШИМ ВЫХОД`;
|
- MODE short для аналоговой платы: `АЦП ↔ ШИМ ВЫХОД`;
|
||||||
@@ -256,6 +263,36 @@ START и MODE будят устройство. Первое, пробуждаю
|
|||||||
5. время выборки.
|
5. время выборки.
|
||||||
6. код света `HH`, `HL`, `LH`, `LL` — только для теста драйвера.
|
6. код света `HH`, `HL`, `LH`, `LL` — только для теста драйвера.
|
||||||
|
|
||||||
|
В `SOLO ШИМ` меню показывает только частоту и длительность одного импульса.
|
||||||
|
|
||||||
|
### Тестовая прошивка PWM/Rx
|
||||||
|
|
||||||
|
Для отдельной проверки сигнала раскомментируйте `#define SIGNAL_PROBE_FIRMWARE`
|
||||||
|
в `OpticalChannelTester/Config.h` и загрузите тот же скетч. Эта прошивка
|
||||||
|
при включённом выходе выдаёт выбранный PWM на `GPIO_PWM` и независимо измеряет на
|
||||||
|
`GPIO_RX` минимальную длительность активного импульса и число пойманных
|
||||||
|
импульсов. Начальный активный уровень входа задаёт `RX_LIGHT_ON_GPIO_LEVEL`.
|
||||||
|
Результат показывается на OLED и в Serial
|
||||||
|
115200; при отсутствии OLED достаточно Serial.
|
||||||
|
|
||||||
|
- MODE коротко: следующая частота из `PWM_FREQUENCY_OPTIONS_HZ`;
|
||||||
|
- MODE удержать: следующая длительность из `MAX_PULSE_OPTIONS_NS`;
|
||||||
|
- START коротко: сбросить найденный минимум и начать измерение заново;
|
||||||
|
- START удержать: выключить или включить PWM;
|
||||||
|
- START и MODE удержать вместе: переключить активный уровень Rx между HIGH и
|
||||||
|
LOW и сбросить накопленные измерения.
|
||||||
|
|
||||||
|
Верхняя строка OLED показывает частоту и длительность импульса PWM; `OFF`
|
||||||
|
означает выключенный выход. Буква `H` или `L` справа показывает текущий
|
||||||
|
активный уровень Rx. Нижняя строка показывает минимум и число пойманных
|
||||||
|
импульсов.
|
||||||
|
|
||||||
|
Значения, при которых импульс не помещается в период, пропускаются. В статистику
|
||||||
|
Rx попадают только полные периоды выбранной частоты; число фронтов и отброшенных
|
||||||
|
периодов видно на экране, пока подходящие импульсы не найдены. Изменение PWM
|
||||||
|
сбрасывает накопленные измерения. Для возврата к обычному тестеру закомментируйте
|
||||||
|
`SIGNAL_PROBE_FIRMWARE` и загрузите скетч снова.
|
||||||
|
|
||||||
Экран активного уровня:
|
Экран активного уровня:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|||||||
Reference in New Issue
Block a user