- 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
|
100
OneWireIO.ino
100
OneWireIO.ino
@ -1,15 +1,21 @@
|
||||
#include "OWSlave.h"
|
||||
#include "Arduino.h"
|
||||
#include "SerialChannel.h"
|
||||
|
||||
#define LEDPin 13
|
||||
#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
|
||||
|
||||
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
|
||||
volatile boolean owReset = false;
|
||||
|
||||
OWSlave oneWire(OWPin);
|
||||
SerialChannel oscilloscope;
|
||||
SerialChannel debug;
|
||||
|
||||
void setup()
|
||||
{
|
||||
@ -20,43 +26,69 @@ void setup()
|
||||
|
||||
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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
detachInterrupt(InterruptNumber);
|
||||
owReset=false;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
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)
|
||||
{
|
||||
// overflow of back buffer, we loose the current sample
|
||||
backBufferPos = BufferSize - 1;
|
||||
}
|
||||
attachInterrupt(InterruptNumber,onewireInterrupt,CHANGE);
|
||||
}
|
||||
|
||||
void onewireInterrupt(void)
|
||||
{
|
||||
volatile long lastMicros = micros() - prevInt;
|
||||
prevInt = micros();
|
||||
if (lastMicros >= 410 && lastMicros <= 550)
|
||||
{
|
||||
// OneWire Reset Detected
|
||||
owReset=true;
|
||||
}
|
||||
//digitalWrite(LEDPin, digitalRead(OWPin));
|
||||
}
|
||||
|
||||
|
||||
|
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