- removed the OWSlave library (that just doesn't work, at least on Arduino Uno when talking to a DS9490 master)
- added debugging tools (oscilloscope and debug messages through serial port ; work in progress) - empty C# application for displaying debug data (work in progress)
This commit is contained in:
parent
16dbbc37e4
commit
a7ae407b6c
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
189
.gitignore
vendored
Normal file
189
.gitignore
vendored
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
x64/
|
||||||
|
build/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
|
||||||
|
# Roslyn cache directories
|
||||||
|
*.ide/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
#NUNIT
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# JustCode is a .NET coding addin-in
|
||||||
|
.JustCode
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
## TODO: Comment the next line if you want to checkin your
|
||||||
|
## web deploy settings but do note that will include unencrypted
|
||||||
|
## passwords
|
||||||
|
#*.pubxml
|
||||||
|
|
||||||
|
# NuGet Packages Directory
|
||||||
|
packages/*
|
||||||
|
## TODO: If the tool you use requires repositories.config
|
||||||
|
## uncomment the next line
|
||||||
|
#!packages/repositories.config
|
||||||
|
|
||||||
|
# Enable "build/" folder in the NuGet Packages folder since
|
||||||
|
# NuGet packages use it for MSBuild targets.
|
||||||
|
# This line needs to be after the ignore of the build folder
|
||||||
|
# (and the packages folder if the line above has been uncommented)
|
||||||
|
!packages/build/
|
||||||
|
|
||||||
|
# Windows Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Windows Store app package directory
|
||||||
|
AppPackages/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
sql/
|
||||||
|
*.Cache
|
||||||
|
ClientBin/
|
||||||
|
[Ss]tyle[Cc]op.*
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# LightSwitch generated files
|
||||||
|
GeneratedArtifacts/
|
||||||
|
_Pvt_Extensions/
|
||||||
|
ModelManifest.xml
|
382
OWSlave.cpp
382
OWSlave.cpp
@ -1,382 +0,0 @@
|
|||||||
/*
|
|
||||||
OWSlave v1.0 by Alexander Gordeyev
|
|
||||||
|
|
||||||
It is based on Jim's Studt OneWire library v2.0
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Much of the code was inspired by Derek Yerger's code, though I don't
|
|
||||||
think much of that remains. In any event that was..
|
|
||||||
(copyleft) 2006 by Derek Yerger - Free to distribute freely.
|
|
||||||
|
|
||||||
The CRC code was excerpted and inspired by the Dallas Semiconductor
|
|
||||||
sample code bearing this copyright.
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
// copy of this software and associated documentation files (the "Software"),
|
|
||||||
// to deal in the Software without restriction, including without limitation
|
|
||||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
// and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
// Software is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included
|
|
||||||
// in all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
|
|
||||||
// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
||||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
// OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
//
|
|
||||||
// Except as contained in this notice, the name of Dallas Semiconductor
|
|
||||||
// shall not be used except as stated in the Dallas Semiconductor
|
|
||||||
// Branding Policy.
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "OWSlave.h"
|
|
||||||
#include "pins_arduino.h"
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
// #include "WConstants.h"
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0)
|
|
||||||
#define DIRECT_MODE_INPUT(base, mask) ((*(base+1)) &= ~(mask))
|
|
||||||
#define DIRECT_MODE_OUTPUT(base, mask) ((*(base+1)) |= (mask))
|
|
||||||
#define DIRECT_WRITE_LOW(base, mask) ((*(base+2)) &= ~(mask))
|
|
||||||
#define DIRECT_WRITE_HIGH(base, mask) ((*(base+2)) |= (mask))
|
|
||||||
|
|
||||||
#define TIMESLOT_WAIT_RETRY_COUNT microsecondsToClockCycles(120) / 10L
|
|
||||||
|
|
||||||
OWSlave::OWSlave(uint8_t pin) {
|
|
||||||
pin_bitmask = digitalPinToBitMask(pin);
|
|
||||||
baseReg = portInputRegister(digitalPinToPort(pin));
|
|
||||||
}
|
|
||||||
|
|
||||||
void OWSlave::setRom(unsigned char rom[8]) {
|
|
||||||
for (int i=0; i<7; i++)
|
|
||||||
this->rom[i] = rom[i];
|
|
||||||
this->rom[7] = crc8(this->rom, 7);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OWSlave::setRomnc(unsigned char rom[8]) {
|
|
||||||
for (int i=0; i<8; i++)
|
|
||||||
this->rom[i] = rom[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OWSlave::waitForRequest(bool ignore_errors) {
|
|
||||||
errno = ONEWIRE_NO_ERROR;
|
|
||||||
for (;;) {
|
|
||||||
if (!waitReset(0) )
|
|
||||||
continue;
|
|
||||||
if (!presence() )
|
|
||||||
continue;
|
|
||||||
if (recvAndProcessCmd() )
|
|
||||||
return TRUE;
|
|
||||||
else if ((errno == ONEWIRE_NO_ERROR) || ignore_errors)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OWSlave::recvAndProcessCmd() {
|
|
||||||
char addr[8];
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
switch (recv() ) {
|
|
||||||
case 0xF0: // SEARCH ROM
|
|
||||||
search();
|
|
||||||
return FALSE;
|
|
||||||
case 0x33: // READ ROM
|
|
||||||
sendData(rom, 8);
|
|
||||||
if (errno != ONEWIRE_NO_ERROR)
|
|
||||||
return FALSE;
|
|
||||||
break;
|
|
||||||
case 0x55: // MATCH ROM
|
|
||||||
recvData(addr, 8);
|
|
||||||
if (errno != ONEWIRE_NO_ERROR)
|
|
||||||
return FALSE;
|
|
||||||
for (int i=0; i<8; i++)
|
|
||||||
if (rom[i] != addr[i])
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
case 0xCC: // SKIP ROM
|
|
||||||
return TRUE;
|
|
||||||
default: // Unknown command
|
|
||||||
if (errno == ONEWIRE_NO_ERROR)
|
|
||||||
return FALSE;
|
|
||||||
else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OWSlave::search() {
|
|
||||||
uint8_t bitmask;
|
|
||||||
uint8_t bit_send, bit_recv;
|
|
||||||
|
|
||||||
for (int i=0; i<8; i++) {
|
|
||||||
for (bitmask = 0x01; bitmask; bitmask <<= 1) {
|
|
||||||
bit_send = (bitmask & rom[i])?1:0;
|
|
||||||
sendBit(bit_send);
|
|
||||||
sendBit(!bit_send);
|
|
||||||
bit_recv = recvBit();
|
|
||||||
if (errno != ONEWIRE_NO_ERROR)
|
|
||||||
return FALSE;
|
|
||||||
if (bit_recv != bit_send)
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OWSlave::waitReset(uint16_t timeout_ms) {
|
|
||||||
uint8_t mask = pin_bitmask;
|
|
||||||
volatile uint8_t *reg asm("r30") = baseReg;
|
|
||||||
unsigned long time_stamp;
|
|
||||||
|
|
||||||
errno = ONEWIRE_NO_ERROR;
|
|
||||||
cli();
|
|
||||||
DIRECT_MODE_INPUT(reg, mask);
|
|
||||||
sei();
|
|
||||||
if (timeout_ms != 0) {
|
|
||||||
time_stamp = micros() + timeout_ms*1000;
|
|
||||||
while (DIRECT_READ(reg, mask)) {
|
|
||||||
if (micros() > time_stamp) {
|
|
||||||
errno = ONEWIRE_WAIT_RESET_TIMEOUT;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
while (DIRECT_READ(reg, mask)) {};
|
|
||||||
time_stamp = micros() + 540;
|
|
||||||
while (DIRECT_READ(reg, mask) == 0) {
|
|
||||||
if (micros() > time_stamp) {
|
|
||||||
errno = ONEWIRE_VERY_LONG_RESET;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((time_stamp - micros()) > 70) {
|
|
||||||
errno = ONEWIRE_VERY_SHORT_RESET;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
delayMicroseconds(30);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
bool OWSlave::waitReset() {
|
|
||||||
return waitReset(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OWSlave::presence(uint8_t delta) {
|
|
||||||
uint8_t mask = pin_bitmask;
|
|
||||||
volatile uint8_t *reg asm("r30") = baseReg;
|
|
||||||
|
|
||||||
errno = ONEWIRE_NO_ERROR;
|
|
||||||
cli();
|
|
||||||
DIRECT_WRITE_LOW(reg, mask);
|
|
||||||
DIRECT_MODE_OUTPUT(reg, mask); // drive output low
|
|
||||||
sei();
|
|
||||||
delayMicroseconds(120);
|
|
||||||
cli();
|
|
||||||
DIRECT_MODE_INPUT(reg, mask); // allow it to float
|
|
||||||
sei();
|
|
||||||
delayMicroseconds(300 - delta);
|
|
||||||
if ( !DIRECT_READ(reg, mask)) {
|
|
||||||
errno = ONEWIRE_PRESENCE_LOW_ON_LINE;
|
|
||||||
return FALSE;
|
|
||||||
} else
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
bool OWSlave::presence() {
|
|
||||||
return presence(25);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t OWSlave::sendData(char buf[], uint8_t len) {
|
|
||||||
uint8_t bytes_sended = 0;
|
|
||||||
|
|
||||||
for (int i=0; i<len; i++) {
|
|
||||||
send(buf[i]);
|
|
||||||
if (errno != ONEWIRE_NO_ERROR)
|
|
||||||
break;
|
|
||||||
bytes_sended++;
|
|
||||||
}
|
|
||||||
return bytes_sended;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t OWSlave::recvData(char buf[], uint8_t len) {
|
|
||||||
uint8_t bytes_received = 0;
|
|
||||||
|
|
||||||
for (int i=0; i<len; i++) {
|
|
||||||
buf[i] = recv();
|
|
||||||
if (errno != ONEWIRE_NO_ERROR)
|
|
||||||
break;
|
|
||||||
bytes_received++;
|
|
||||||
}
|
|
||||||
return bytes_received;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OWSlave::send(uint8_t v) {
|
|
||||||
errno = ONEWIRE_NO_ERROR;
|
|
||||||
for (uint8_t bitmask = 0x01; bitmask && (errno == ONEWIRE_NO_ERROR); bitmask <<= 1)
|
|
||||||
sendBit((bitmask & v)?1:0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t OWSlave::recv() {
|
|
||||||
uint8_t r = 0;
|
|
||||||
|
|
||||||
errno = ONEWIRE_NO_ERROR;
|
|
||||||
for (uint8_t bitmask = 0x01; bitmask && (errno == ONEWIRE_NO_ERROR); bitmask <<= 1)
|
|
||||||
if (recvBit())
|
|
||||||
r |= bitmask;
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OWSlave::sendBit(uint8_t v) {
|
|
||||||
uint8_t mask = pin_bitmask;
|
|
||||||
volatile uint8_t *reg asm("r30") = baseReg;
|
|
||||||
|
|
||||||
cli();
|
|
||||||
DIRECT_MODE_INPUT(reg, mask);
|
|
||||||
if (!waitTimeSlot() ) {
|
|
||||||
errno = ONEWIRE_WRITE_TIMESLOT_TIMEOUT;
|
|
||||||
sei();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (v & 1)
|
|
||||||
delayMicroseconds(50);
|
|
||||||
else {
|
|
||||||
cli();
|
|
||||||
DIRECT_WRITE_LOW(reg, mask);
|
|
||||||
DIRECT_MODE_OUTPUT(reg, mask);
|
|
||||||
delayMicroseconds(50);
|
|
||||||
DIRECT_WRITE_HIGH(reg, mask);
|
|
||||||
sei();
|
|
||||||
}
|
|
||||||
sei();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t OWSlave::recvBit(void) {
|
|
||||||
uint8_t mask = pin_bitmask;
|
|
||||||
volatile uint8_t *reg asm("r30") = baseReg;
|
|
||||||
uint8_t r;
|
|
||||||
|
|
||||||
cli();
|
|
||||||
DIRECT_MODE_INPUT(reg, mask);
|
|
||||||
if (!waitTimeSlot() ) {
|
|
||||||
errno = ONEWIRE_READ_TIMESLOT_TIMEOUT;
|
|
||||||
sei();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
delayMicroseconds(30);
|
|
||||||
r = DIRECT_READ(reg, mask);
|
|
||||||
sei();
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OWSlave::waitTimeSlot() {
|
|
||||||
uint8_t mask = pin_bitmask;
|
|
||||||
volatile uint8_t *reg asm("r30") = baseReg;
|
|
||||||
uint16_t retries;
|
|
||||||
|
|
||||||
retries = TIMESLOT_WAIT_RETRY_COUNT;
|
|
||||||
while ( !DIRECT_READ(reg, mask))
|
|
||||||
if (--retries == 0)
|
|
||||||
return FALSE;
|
|
||||||
retries = TIMESLOT_WAIT_RETRY_COUNT;
|
|
||||||
while ( DIRECT_READ(reg, mask))
|
|
||||||
if (--retries == 0)
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if OWSlave_CRC
|
|
||||||
// The 1-Wire CRC scheme is described in Maxim Application Note 27:
|
|
||||||
// "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products"
|
|
||||||
//
|
|
||||||
|
|
||||||
#if OWSlave_CRC8_TABLE
|
|
||||||
// This table comes from Dallas sample code where it is freely reusable,
|
|
||||||
// though Copyright (C) 2000 Dallas Semiconductor Corporation
|
|
||||||
static const uint8_t PROGMEM dscrc_table[] = {
|
|
||||||
0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
|
|
||||||
157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,
|
|
||||||
35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,
|
|
||||||
190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,
|
|
||||||
70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,
|
|
||||||
219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,
|
|
||||||
101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,
|
|
||||||
248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,
|
|
||||||
140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,
|
|
||||||
17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,
|
|
||||||
175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,
|
|
||||||
50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,
|
|
||||||
202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,
|
|
||||||
87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,
|
|
||||||
233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,
|
|
||||||
116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Compute a Dallas Semiconductor 8 bit CRC. These show up in the ROM
|
|
||||||
// and the registers. (note: this might better be done without to
|
|
||||||
// table, it would probably be smaller and certainly fast enough
|
|
||||||
// compared to all those delayMicrosecond() calls. But I got
|
|
||||||
// confused, so I use this table from the examples.)
|
|
||||||
//
|
|
||||||
uint8_t OWSlave::crc8(char addr[], uint8_t len)
|
|
||||||
{
|
|
||||||
uint8_t crc = 0;
|
|
||||||
|
|
||||||
while (len--) {
|
|
||||||
crc = pgm_read_byte(dscrc_table + (crc ^ *addr++));
|
|
||||||
}
|
|
||||||
return crc;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
//
|
|
||||||
// Compute a Dallas Semiconductor 8 bit CRC directly.
|
|
||||||
//
|
|
||||||
uint8_t OWSlave::crc8(char addr[], uint8_t len)
|
|
||||||
{
|
|
||||||
uint8_t crc = 0;
|
|
||||||
|
|
||||||
while (len--) {
|
|
||||||
uint8_t inbyte = *addr++;
|
|
||||||
for (uint8_t i = 8; i; i--) {
|
|
||||||
uint8_t mix = (crc ^ inbyte) & 0x01;
|
|
||||||
crc >>= 1;
|
|
||||||
if (mix) crc ^= 0x8C;
|
|
||||||
inbyte >>= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return crc;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
64
OWSlave.h
64
OWSlave.h
@ -1,64 +0,0 @@
|
|||||||
#ifndef iButton_h
|
|
||||||
#define iButton_h
|
|
||||||
|
|
||||||
#if defined(ARDUINO) && ARDUINO >= 100
|
|
||||||
#include "Arduino.h"
|
|
||||||
#else
|
|
||||||
#include "WProgram.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
// You can exclude CRC checks altogether by defining this to 0
|
|
||||||
#ifndef OWSlave_CRC
|
|
||||||
#define OWSlave_CRC 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Select the table-lookup method of computing the 8-bit CRC
|
|
||||||
// by setting this to 1. The lookup table no longer consumes
|
|
||||||
// limited RAM, but enlarges total code size by about 250 bytes
|
|
||||||
#ifndef OWSlave_CRC8_TABLE
|
|
||||||
#define OWSlave_CRC8_TABLE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE 1
|
|
||||||
|
|
||||||
#define ONEWIRE_NO_ERROR 0
|
|
||||||
#define ONEWIRE_READ_TIMESLOT_TIMEOUT 1
|
|
||||||
#define ONEWIRE_WRITE_TIMESLOT_TIMEOUT 2
|
|
||||||
#define ONEWIRE_WAIT_RESET_TIMEOUT 3
|
|
||||||
#define ONEWIRE_VERY_LONG_RESET 4
|
|
||||||
#define ONEWIRE_VERY_SHORT_RESET 5
|
|
||||||
#define ONEWIRE_PRESENCE_LOW_ON_LINE 6
|
|
||||||
|
|
||||||
class OWSlave {
|
|
||||||
private:
|
|
||||||
bool waitTimeSlot();
|
|
||||||
uint8_t pin_bitmask;
|
|
||||||
volatile uint8_t *baseReg;
|
|
||||||
char rom[8];
|
|
||||||
public:
|
|
||||||
bool recvAndProcessCmd();
|
|
||||||
OWSlave(uint8_t pin);
|
|
||||||
void setRom(unsigned char rom[8]);
|
|
||||||
void setRomnc(unsigned char rom[8]);
|
|
||||||
bool waitForRequest(bool ignore_errors);
|
|
||||||
bool waitReset(uint16_t timeout_ms);
|
|
||||||
bool waitReset();
|
|
||||||
bool presence(uint8_t delta);
|
|
||||||
bool presence();
|
|
||||||
bool search();
|
|
||||||
uint8_t sendData(char buf[], uint8_t data_len);
|
|
||||||
uint8_t recvData(char buf[], uint8_t data_len);
|
|
||||||
void send(uint8_t v);
|
|
||||||
uint8_t recv(void);
|
|
||||||
void sendBit(uint8_t v);
|
|
||||||
uint8_t recvBit(void);
|
|
||||||
#if OWSlave_CRC
|
|
||||||
static uint8_t crc8(char addr[], uint8_t len);
|
|
||||||
#endif
|
|
||||||
uint8_t errno;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,15 +1,21 @@
|
|||||||
#include "OWSlave.h"
|
#include "Arduino.h"
|
||||||
|
#include "SerialChannel.h"
|
||||||
|
|
||||||
#define LEDPin 13
|
#define LEDPin 13
|
||||||
#define OWPin 2
|
#define OWPin 2
|
||||||
#define InterruptNumber 0 // Must correspond to the OWPin to correctly detect state changes. On Arduino Uno, interrupt 0 is for digital pin 2
|
#define InterruptNumber 0 // Must correspond to the OWPin to correctly detect state changes. On Arduino Uno, interrupt 0 is for digital pin 2
|
||||||
|
|
||||||
unsigned char rom[8] = {0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00};
|
const int SkipSamples = 8; // how many samples we want to skip between two samples we keep (can be used to lower the sampling frequency)
|
||||||
|
const int BufferSize = 128;
|
||||||
|
byte buffer1[BufferSize];
|
||||||
|
byte buffer2[BufferSize];
|
||||||
|
byte* backBuffer = buffer1;
|
||||||
|
byte backBufferPos = 0;
|
||||||
|
byte samplesSkipped = SkipSamples;
|
||||||
|
unsigned long backBufferStartTime = micros();
|
||||||
|
|
||||||
volatile long prevInt = 0; // Previous Interrupt micros
|
SerialChannel oscilloscope;
|
||||||
volatile boolean owReset = false;
|
SerialChannel debug;
|
||||||
|
|
||||||
OWSlave oneWire(OWPin);
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
@ -20,43 +26,69 @@ void setup()
|
|||||||
|
|
||||||
attachInterrupt(InterruptNumber,onewireInterrupt,CHANGE);
|
attachInterrupt(InterruptNumber,onewireInterrupt,CHANGE);
|
||||||
|
|
||||||
oneWire.setRom(rom);
|
cli();//disable interrupts
|
||||||
|
|
||||||
|
//set up continuous sampling of analog pin 0
|
||||||
|
//clear ADCSRA and ADCSRB registers
|
||||||
|
ADCSRA = 0;
|
||||||
|
ADCSRB = 0;
|
||||||
|
|
||||||
|
ADMUX |= (1 << REFS0); //set reference voltage
|
||||||
|
ADMUX |= (1 << ADLAR); //left align the ADC value- so we can read highest 8 bits from ADCH register only
|
||||||
|
|
||||||
|
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); //set ADC clock with 128 prescaler- 16mHz/128=125kHz ; 13 cycles for a conversion which means 9600 samples per second
|
||||||
|
ADCSRA |= (1 << ADATE); //enabble auto trigger
|
||||||
|
ADCSRA |= (1 << ADIE); //enable interrupts when measurement complete
|
||||||
|
ADCSRA |= (1 << ADEN); //enable ADC
|
||||||
|
ADCSRA |= (1 << ADSC); //start ADC measurements
|
||||||
|
|
||||||
|
sei();//enable interrupts
|
||||||
|
|
||||||
|
Serial.begin(9600);
|
||||||
|
oscilloscope.init("oscilloscope");
|
||||||
|
debug.init("debug");
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
if (owReset) owHandler();
|
cli();//disable interrupts
|
||||||
|
byte* currentBuffer = backBuffer;
|
||||||
|
unsigned long currentBufferStartTime = backBufferStartTime;
|
||||||
|
byte currentBufferSize = backBufferPos;
|
||||||
|
backBuffer = (backBuffer == buffer1 ? buffer2 : buffer1);
|
||||||
|
backBufferPos = 0;
|
||||||
|
backBufferStartTime = micros();
|
||||||
|
sei();//enable interrupts
|
||||||
|
|
||||||
|
unsigned long now = micros();
|
||||||
|
debug.write((byte*)&now, 4);
|
||||||
|
debug.write("Starting buffer transmission");
|
||||||
|
|
||||||
|
oscilloscope.write((byte*)¤tBufferStartTime, 4);
|
||||||
|
oscilloscope.write(currentBuffer, currentBufferSize);
|
||||||
|
|
||||||
|
now = micros();
|
||||||
|
debug.write((byte*)&now, 4);
|
||||||
|
debug.write("Buffer transmitted");
|
||||||
}
|
}
|
||||||
|
|
||||||
void owHandler(void)
|
ISR(ADC_vect) {//when new ADC value ready
|
||||||
|
byte sample = ADCH; //store 8 bit value from analog pin 0
|
||||||
|
|
||||||
|
if(samplesSkipped++ < SkipSamples)
|
||||||
|
return;
|
||||||
|
samplesSkipped = 0;
|
||||||
|
|
||||||
|
backBuffer[backBufferPos++] = sample;
|
||||||
|
if(backBufferPos >= BufferSize)
|
||||||
{
|
{
|
||||||
detachInterrupt(InterruptNumber);
|
// overflow of back buffer, we loose the current sample
|
||||||
owReset=false;
|
backBufferPos = BufferSize - 1;
|
||||||
|
|
||||||
if (oneWire.presence()) {
|
|
||||||
if (oneWire.recvAndProcessCmd()) {
|
|
||||||
uint8_t cmd = oneWire.recv();
|
|
||||||
if (cmd == 0x44) {
|
|
||||||
digitalWrite(LEDPin, HIGH);
|
|
||||||
}
|
}
|
||||||
if (cmd == 0xBE) {
|
|
||||||
for( int i = 0; i < 9; i++) {
|
|
||||||
oneWire.send((byte)0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
attachInterrupt(InterruptNumber,onewireInterrupt,CHANGE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onewireInterrupt(void)
|
void onewireInterrupt(void)
|
||||||
{
|
{
|
||||||
volatile long lastMicros = micros() - prevInt;
|
//digitalWrite(LEDPin, digitalRead(OWPin));
|
||||||
prevInt = micros();
|
|
||||||
if (lastMicros >= 410 && lastMicros <= 550)
|
|
||||||
{
|
|
||||||
// OneWire Reset Detected
|
|
||||||
owReset=true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
SerialChannel.cpp
Normal file
29
SerialChannel.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include "Arduino.h"
|
||||||
|
#include "SerialChannel.h"
|
||||||
|
|
||||||
|
short SerialChannel::nextId = 0;
|
||||||
|
|
||||||
|
SerialChannel::SerialChannel()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SerialChannel::init(const char* name)
|
||||||
|
{
|
||||||
|
id = nextId++;
|
||||||
|
Serial.write((short)0);
|
||||||
|
Serial.write(id);
|
||||||
|
Serial.write(strlen(name));
|
||||||
|
Serial.write(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SerialChannel::write(byte* data, short byteCount)
|
||||||
|
{
|
||||||
|
Serial.write(byteCount);
|
||||||
|
Serial.write(id);
|
||||||
|
Serial.write(data, byteCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SerialChannel::write(const char* text)
|
||||||
|
{
|
||||||
|
Serial.write((byte*)text, strlen(text));
|
||||||
|
}
|
21
SerialChannel.h
Normal file
21
SerialChannel.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef _SerialChannel_h_
|
||||||
|
#define _SerialChannel_h_
|
||||||
|
|
||||||
|
class SerialChannel
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static short nextId;
|
||||||
|
short id;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SerialChannel();
|
||||||
|
|
||||||
|
void init(const char* name);
|
||||||
|
|
||||||
|
void write(byte* data, short byteCount);
|
||||||
|
|
||||||
|
void write(const char* text);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
22
SerialMonitor/SerialMonitor.sln
Normal file
22
SerialMonitor/SerialMonitor.sln
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2013
|
||||||
|
VisualStudioVersion = 12.0.31101.0
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SerialMonitor", "SerialMonitor\SerialMonitor.csproj", "{97704F53-6CA1-4155-9E8F-AEBFEEC20A8B}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{97704F53-6CA1-4155-9E8F-AEBFEEC20A8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{97704F53-6CA1-4155-9E8F-AEBFEEC20A8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{97704F53-6CA1-4155-9E8F-AEBFEEC20A8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{97704F53-6CA1-4155-9E8F-AEBFEEC20A8B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
6
SerialMonitor/SerialMonitor/App.config
Normal file
6
SerialMonitor/SerialMonitor/App.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
8
SerialMonitor/SerialMonitor/App.xaml
Normal file
8
SerialMonitor/SerialMonitor/App.xaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<Application x:Class="SerialMonitor.App"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
StartupUri="MainWindow.xaml">
|
||||||
|
<Application.Resources>
|
||||||
|
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
17
SerialMonitor/SerialMonitor/App.xaml.cs
Normal file
17
SerialMonitor/SerialMonitor/App.xaml.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace SerialMonitor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for App.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
8
SerialMonitor/SerialMonitor/MainWindow.xaml
Normal file
8
SerialMonitor/SerialMonitor/MainWindow.xaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<Window x:Class="SerialMonitor.MainWindow"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
Title="MainWindow" Height="350" Width="525">
|
||||||
|
<Grid>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
28
SerialMonitor/SerialMonitor/MainWindow.xaml.cs
Normal file
28
SerialMonitor/SerialMonitor/MainWindow.xaml.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace SerialMonitor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for MainWindow.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class MainWindow : Window
|
||||||
|
{
|
||||||
|
public MainWindow()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
55
SerialMonitor/SerialMonitor/Properties/AssemblyInfo.cs
Normal file
55
SerialMonitor/SerialMonitor/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Resources;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("SerialMonitor")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("Microsoft")]
|
||||||
|
[assembly: AssemblyProduct("SerialMonitor")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
//In order to begin building localizable applications, set
|
||||||
|
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
|
||||||
|
//inside a <PropertyGroup>. For example, if you are using US english
|
||||||
|
//in your source files, set the <UICulture> to en-US. Then uncomment
|
||||||
|
//the NeutralResourceLanguage attribute below. Update the "en-US" in
|
||||||
|
//the line below to match the UICulture setting in the project file.
|
||||||
|
|
||||||
|
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
||||||
|
|
||||||
|
|
||||||
|
[assembly: ThemeInfo(
|
||||||
|
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
|
||||||
|
//(used if a resource is not found in the page,
|
||||||
|
// or application resource dictionaries)
|
||||||
|
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
|
||||||
|
//(used if a resource is not found in the page,
|
||||||
|
// app, or any theme specific resource dictionaries)
|
||||||
|
)]
|
||||||
|
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
71
SerialMonitor/SerialMonitor/Properties/Resources.Designer.cs
generated
Normal file
71
SerialMonitor/SerialMonitor/Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.0
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace SerialMonitor.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SerialMonitor.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
117
SerialMonitor/SerialMonitor/Properties/Resources.resx
Normal file
117
SerialMonitor/SerialMonitor/Properties/Resources.resx
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
30
SerialMonitor/SerialMonitor/Properties/Settings.Designer.cs
generated
Normal file
30
SerialMonitor/SerialMonitor/Properties/Settings.Designer.cs
generated
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.0
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace SerialMonitor.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
SerialMonitor/SerialMonitor/Properties/Settings.settings
Normal file
7
SerialMonitor/SerialMonitor/Properties/Settings.settings
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
104
SerialMonitor/SerialMonitor/SerialMonitor.csproj
Normal file
104
SerialMonitor/SerialMonitor/SerialMonitor.csproj
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{97704F53-6CA1-4155-9E8F-AEBFEEC20A8B}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>SerialMonitor</RootNamespace>
|
||||||
|
<AssemblyName>SerialMonitor</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="System.Xaml">
|
||||||
|
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="WindowsBase" />
|
||||||
|
<Reference Include="PresentationCore" />
|
||||||
|
<Reference Include="PresentationFramework" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ApplicationDefinition Include="App.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</ApplicationDefinition>
|
||||||
|
<Page Include="MainWindow.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Compile Include="App.xaml.cs">
|
||||||
|
<DependentUpon>App.xaml</DependentUpon>
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MainWindow.xaml.cs">
|
||||||
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<AppDesigner Include="Properties\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
Loading…
Reference in New Issue
Block a user