mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-26 17:46:14 +01:00
Add files via upload
This commit is contained in:
parent
623e105805
commit
431db07c80
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
//sensorCAM parser.cpp version 3.01 Aug 2024
|
//sensorCAM parser.cpp version 3.03 Sep 2024
|
||||||
#include "CamParser.h"
|
#include "CamParser.h"
|
||||||
#include "FSH.h"
|
#include "FSH.h"
|
||||||
#include "IO_EXSensorCAM.h"
|
#include "IO_EXSensorCAM.h"
|
||||||
|
@ -48,17 +48,18 @@ bool CamParser::parseN(Print * stream, byte paramCount, int16_t p[]) {
|
||||||
}
|
}
|
||||||
if (EXSensorCAM::CAMBaseVpin==0) return false; // no cam defined
|
if (EXSensorCAM::CAMBaseVpin==0) return false; // no cam defined
|
||||||
|
|
||||||
if((p[0] == ve) || (p[0] == ver) || (p[0] == 'V')) camop='^';
|
|
||||||
// send UPPER case to sensorCAM to flag binary data from a DCCEX-CS parser
|
// send UPPER case to sensorCAM to flag binary data from a DCCEX-CS parser
|
||||||
switch(paramCount) {
|
switch(paramCount) {
|
||||||
case 1: //<N ver> produces '^'
|
case 1: //<N ver> produces '^'
|
||||||
|
if((p[0] == ve) || (p[0] == ver) || (p[0] == 'V')) camop='^';
|
||||||
if (STRCHR_P((const char *)F("EFGMQRVW^"),camop) == nullptr) return false;
|
if (STRCHR_P((const char *)F("EFGMQRVW^"),camop) == nullptr) return false;
|
||||||
if (camop=='F') camop=']'; //<NF> for Reset/Finish webCAM.
|
|
||||||
if (camop=='Q') param3=10; //<NQ> for activation state of all 10 banks of sensors
|
if (camop=='Q') param3=10; //<NQ> for activation state of all 10 banks of sensors
|
||||||
break; // Coded as ']' else conflicts with <Nf %%>
|
if (camop=='F') camop=']'; //<NF> for Reset/Finish webCAM.
|
||||||
|
break; // F Coded as ']' else conflicts with <Nf %%>
|
||||||
|
|
||||||
case 2: //<N camop p1>
|
case 2: //<N camop p1>
|
||||||
if (STRCHR_P((const char *)F("ABFILMNOPQRSTUV^"),camop)==nullptr) return false;
|
if (STRCHR_P((const char *)F("ABFILMNOPQRSTUV"),camop)==nullptr) return false;
|
||||||
param1=p[1];
|
param1=p[1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,11 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with CommandStation. If not, see <https://www.gnu.org/licenses/>.
|
* along with CommandStation. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#define driverVer 304
|
#define driverVer 305
|
||||||
|
// v305 less debug & alpha ordered switch
|
||||||
// v304 static oldb0; t(##[,%%];
|
// v304 static oldb0; t(##[,%%];
|
||||||
// v303 zipped with CS 5.2.76 and uploaded to repo (with debug)
|
// v303 zipped with CS 5.2.76 and uploaded to repo (with debug)
|
||||||
// v302 SEND=StringFormatter::send; remove Sp(); + 'q'; memcpy( .8) -> .7);
|
// v302 SEND=StringFormatter::send, remove Sp(), add 'q', memcpy( .8) -> .7);
|
||||||
// v301 improved 'f','p'&'q' code and driver version calc. Correct bsNo calc. for 'a'
|
// v301 improved 'f','p'&'q' code and driver version calc. Correct bsNo calc. for 'a'
|
||||||
// v300 stripped & revised without expander functionality. Needs sensorCAM.h v300 AND CamParser.cpp
|
// v300 stripped & revised without expander functionality. Needs sensorCAM.h v300 AND CamParser.cpp
|
||||||
// v222 uses '@'for EXIORDD read. handles <NB $> and <NN $ ##>
|
// v222 uses '@'for EXIORDD read. handles <NB $> and <NN $ ##>
|
||||||
|
@ -222,7 +223,7 @@ int ioESP32(uint8_t i2cAddr,uint8_t *rBuf,int inbytes,uint8_t *outBuff,int outby
|
||||||
//rBuf contains packet of up to 32 bytes usually with (ascii) cmd header in rBuf[0]
|
//rBuf contains packet of up to 32 bytes usually with (ascii) cmd header in rBuf[0]
|
||||||
//sensorCmd command header byte from CAM (in rBuf[0]?)
|
//sensorCmd command header byte from CAM (in rBuf[0]?)
|
||||||
int processIncomingPkt(uint8_t *rBuf,uint8_t sensorCmd) {
|
int processIncomingPkt(uint8_t *rBuf,uint8_t sensorCmd) {
|
||||||
static uint8_t oldb0; //for debug only
|
//static uint8_t oldb0; //for debug only
|
||||||
int k;
|
int k;
|
||||||
int b;
|
int b;
|
||||||
char str[] = "11111111";
|
char str[] = "11111111";
|
||||||
|
@ -230,9 +231,10 @@ static uint8_t oldb0; //for debug only
|
||||||
switch (sensorCmd){
|
switch (sensorCmd){
|
||||||
case '`': //response to request for digitalInputStates[] table '@'=>'`'
|
case '`': //response to request for digitalInputStates[] table '@'=>'`'
|
||||||
memcpy(_digitalInputStates, rBuf+1, digitalBytesNeeded);
|
memcpy(_digitalInputStates, rBuf+1, digitalBytesNeeded);
|
||||||
if ( _digitalInputStates[0]!=oldb0) { oldb0=_digitalInputStates[0]; //debug
|
// if ( _digitalInputStates[0]!=oldb0) { oldb0=_digitalInputStates[0]; //debug
|
||||||
// for (k=0;k<5;k++) {Serial.print(" ");Serial.print(_digitalInputStates[k],HEX);}
|
// for (k=0;k<5;k++) {Serial.print(" ");Serial.print(_digitalInputStates[k],HEX);}
|
||||||
}break;
|
// }
|
||||||
|
break;
|
||||||
|
|
||||||
case EXIORDY: //some commands give back acknowledgement only
|
case EXIORDY: //some commands give back acknowledgement only
|
||||||
break;
|
break;
|
||||||
|
@ -241,12 +243,23 @@ static uint8_t oldb0; //for debug only
|
||||||
DIAG(F("CAM cmd error 0xFE 0x%x"),rBuf[1]);
|
DIAG(F("CAM cmd error 0xFE 0x%x"),rBuf[1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '~': //information from '^' version request <N ve[r]>
|
case '~': //information from '^' version request <N v[er]>
|
||||||
DIAG(F("EX-SensorCAM device found, I2C:%s,CAM Version v%d.%d.%d vpins %u-%u"),
|
DIAG(F("EX-SensorCAM device found, I2C:%s,CAM Version v%d.%d.%d vpins %u-%u"),
|
||||||
_I2CAddress.toString(), rBuf[1]/10, rBuf[1]%10, rBuf[2],(int) _firstVpin, (int) _firstVpin +_nPins-1);
|
_I2CAddress.toString(), rBuf[1]/10, rBuf[1]%10, rBuf[2],(int) _firstVpin, (int) _firstVpin +_nPins-1);
|
||||||
DIAG(F("IO_EXSensorCAM driver v0.%d.%d vpin: %d "), driverVer/100,driverVer%100,_firstVpin);
|
DIAG(F("IO_EXSensorCAM driver v0.%d.%d vpin: %d "), driverVer/100,driverVer%100,_firstVpin);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
DIAG(F("(f %%%%) frame header 'f' for bsNo %d/%d - showing Quarter sample (1 row) only"), rBuf[1]/8,rBuf[1]%8);
|
||||||
|
SEND(&USB_SERIAL,F("<n row: %d Ref bytes: "),rBuf[2]);
|
||||||
|
for(k=3;k<15;k++)
|
||||||
|
SEND(&USB_SERIAL,F("%x%x%s"), rBuf[k]>>4, rBuf[k]&15, k%3==2 ? " " : " ");
|
||||||
|
Serial.print(" latest grab: ");
|
||||||
|
for(k=16;k<28;k++)
|
||||||
|
SEND(&USB_SERIAL,F("%x%x%s"), rBuf[k]>>4, rBuf[k]&15, (k%3==0) ? " " : " ");
|
||||||
|
Serial.print(" n>\n");
|
||||||
|
break;
|
||||||
|
|
||||||
case 'i': //information from i%%
|
case 'i': //information from i%%
|
||||||
k=256*rBuf[5]+rBuf[4];
|
k=256*rBuf[5]+rBuf[4];
|
||||||
DIAG(F("(i%%%%[,$$]) Info: Sensor 0%o(%d) enabled:%d status:%d row=%d x=%d Twin=0%o pvtThreshold=%d A~%d")
|
DIAG(F("(i%%%%[,$$]) Info: Sensor 0%o(%d) enabled:%d status:%d row=%d x=%d Twin=0%o pvtThreshold=%d A~%d")
|
||||||
|
@ -263,22 +276,6 @@ static uint8_t oldb0; //for debug only
|
||||||
,rBuf[4],rBuf[2],rBuf[3],rBuf[5]);
|
,rBuf[4],rBuf[2],rBuf[3],rBuf[5]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'q':
|
|
||||||
for (int i =0; i<8; i++) str[i] = ((rBuf[2] << i) & 0x80 ? '1' : '0');
|
|
||||||
DIAG(F("(q $) Query bank %c ENABLED sensors(S%c7-%c0): %s "), rBuf[1], rBuf[1], rBuf[1], str);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'f':
|
|
||||||
DIAG(F("(f %%%%) frame header 'f' for bsNo %d/%d - showing Quarter sample (1 row) only"), rBuf[1]/8,rBuf[1]%8);
|
|
||||||
SEND(&USB_SERIAL,F("<n row: %d Ref bytes: "),rBuf[2]);
|
|
||||||
for(k=3;k<15;k++)
|
|
||||||
SEND(&USB_SERIAL,F("%x%x%s"), rBuf[k]>>4, rBuf[k]&15, k%3==2 ? " " : " ");
|
|
||||||
Serial.print(" latest grab: ");
|
|
||||||
for(k=16;k<28;k++)
|
|
||||||
SEND(&USB_SERIAL,F("%x%x%s"), rBuf[k]>>4, rBuf[k]&15, (k%3==0) ? " " : " ");
|
|
||||||
Serial.print(" n>\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
b=rBuf[1]-2;
|
b=rBuf[1]-2;
|
||||||
if(b<4) { Serial.print("<n (p%%) Bank empty n>\n"); break; }
|
if(b<4) { Serial.print("<n (p%%) Bank empty n>\n"); break; }
|
||||||
|
@ -288,6 +285,11 @@ static uint8_t oldb0; //for debug only
|
||||||
Serial.print(" n>\n");
|
Serial.print(" n>\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'q':
|
||||||
|
for (int i =0; i<8; i++) str[i] = ((rBuf[2] << i) & 0x80 ? '1' : '0');
|
||||||
|
DIAG(F("(q $) Query bank %c ENABLED sensors(S%c7-%c0): %s "), rBuf[1], rBuf[1], rBuf[1], str);
|
||||||
|
break;
|
||||||
|
|
||||||
case 't': //threshold etc. from t## //bad pkt if 't' FF's
|
case 't': //threshold etc. from t## //bad pkt if 't' FF's
|
||||||
if(rBuf[1]==0xFF) {Serial.println("<n bad CAM 't' packet: 74 FF n>");_savedCmd[2] +=1; return 0;}
|
if(rBuf[1]==0xFF) {Serial.println("<n bad CAM 't' packet: 74 FF n>");_savedCmd[2] +=1; return 0;}
|
||||||
SEND(&USB_SERIAL,F("<n (t[##[,%%%%]]) Threshold:%d sensor S00:-%d"),rBuf[1],min(rBuf[2]&0x7F,99));
|
SEND(&USB_SERIAL,F("<n (t[##[,%%%%]]) Threshold:%d sensor S00:-%d"),rBuf[1],min(rBuf[2]&0x7F,99));
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
void halSetup() {
|
void halSetup() {
|
||||||
|
|
||||||
I2CManager.setClock(100000);
|
// I2CManager.setClock(100000); //to set i2c bus clock rate
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// The following directives define auxiliary display devices.
|
// The following directives define auxiliary display devices.
|
||||||
|
@ -306,16 +306,9 @@ void halSetup() {
|
||||||
// Note that the I2C address is defined in the EX-IOExpander code, and 0x65 is the default.
|
// Note that the I2C address is defined in the EX-IOExpander code, and 0x65 is the default.
|
||||||
// The example is for an Arduino Nano.
|
// The example is for an Arduino Nano.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//EXIOExpander::create(800, 18, 0x65);
|
//EXIOExpander::create(800, 18, 0x65);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// The following directive defines a rotary encoder instance.
|
// The following directive defines a rotary encoder instance.
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@ -353,12 +346,11 @@ void halSetup() {
|
||||||
// #define SENSORCAM_VPIN0 #00 in config.h if not using 700.
|
// #define SENSORCAM_VPIN0 #00 in config.h if not using 700.
|
||||||
// Number of VPINs=pin count (must not exceed 80)
|
// Number of VPINs=pin count (must not exceed 80)
|
||||||
// I2C address=an available I2C address (default 0x11)
|
// I2C address=an available I2C address (default 0x11)
|
||||||
// #define ESP32CAP 0x13 in config.h to raise allowable ESP32 range of addresses
|
|
||||||
// Note that the I2C address (0x11) is the default in the sensorCAM code
|
|
||||||
//
|
//
|
||||||
// EXSensorCAM::create(700, 80, 0x11);
|
// EXSensorCAM::create(700, 80, 0x11); //preference is now to use HAL(700 80 0x11) in myAutomation.h
|
||||||
EXSensorCAM::create(700, 80, 0x11); //preference is now to use HAL(700 80 0x11) in myAutomation.h
|
|
||||||
//EXSensorCAM::create(600, 80, 0x12); //alternate or second CAM device address creation
|
//EXSensorCAM::create(600, 80, 0x12); //alternate or second CAM device address creation
|
||||||
|
//preference is now to use HAL(EXSensorCAM 700 80 0x11) in myAutomation.h rather than :create
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user