An experimental timer interrupt driven software based 1-Wire master interface that was created by Robert David Brinzer for a University of Glasgow Level 4 Electronic and Software Engineering Final Year project. This implementation requires mbed RTOS and does not use NOP waits. Perfect for programs that require multi-tasking. Includes the Read and Search network commands and can be easily extended to support new network and transport commands.
Instructions/Transport.h
- Committer:
- sroy
- Date:
- 2013-04-15
- Revision:
- 0:7c6dd6bc20e4
File content as of revision 0:7c6dd6bc20e4:
#ifndef ROM_COMMANDS #define ROM_COMMANDS #include "OneWire.h" class ROMCommands; #define READ_ROM 0x33 #define SKIP_ROM 0xCC #define MATCH_ROM 0x55 #define SEARCH_ROM 0xF0 // type used to represent a one-wire rom code typedef unsigned long long OneWire_ROM; // types used for the one-wire registers typedef struct TransportRead{ unsigned char read; // bits or rom read unsigned char crc8; // crc8 check } TransportRead; /** Persistant search structure * Used to keep track of search state and results between executions of the search transport layer command */ typedef struct TransportSearchPersist{ /** Rom code result of previous search operation * * @note value should be ignored if a one-wire execution error occured */ OneWire_ROM rom; signed char last; // used internally by the micro instruction system to keep track of state /** Used to tell when to end a search sequence * * TRUE when the search has completed * * FALSE when there are still rom codes left to search */ bool done; /** Clears existing search state and results in preparation for a new search * * This will reset search progress to start a search sequence from the beginning * * @note Search sequences should be restarted if a one-wire execution error occured as persistant state values might be invalid */ void clear(); } TransportSearchPersist; typedef struct TransportSearch{ unsigned char read; // bits or rom read unsigned char crc8; // crc8 check signed char marker; // last conflict marker unsigned char bit; // storage place current bit result } TransportSearch; /** One-Wire Transport layer class * Used to set up a one-wire instruction with a transport layer */ class OWTransport{ public: /** Set a one-wire instruction to perform the read transport layer command * * @param inst One-wire instruction that will carry out the command * @param out One-wire rom that will be used to store the read rom code */ static void read(OneWire_Instruction * inst, OneWire_ROM * out); /** Set a one-wire instruction to perform the search transport layer command * * @param inst One-wire instruction that will carry out the command * @param search Persistant search structure that will be used for search state and results */ static void search(OneWire_Instruction * inst, TransportSearchPersist * search); private: // private functions which carry out the one-wire logic static void _inst_readsetup(OneWire * which); static void _inst_read(OneWire * which); static void _inst_readhandler(OneWire * which, char bit); static void _inst_searchsetup(OneWire * which); static void _inst_search(OneWire * which); static void _inst_searchhandler(OneWire * which, char bit); }; #endif