+ /* If the nodeID isn't 0xFF the slave shall not participate */
+ if(getNodeId(d)!=0xFF)break;
+ if(getLSSBitCheck(m)==128)d->lss_transfer.FastScan_SM=LSS_FS_RESET;
+
+ switch(d->lss_transfer.FastScan_SM){
+ case LSS_FS_RESET:
+ {
+ UNS32 errorCode;
+ const indextable *ptrTable;
+ ODCallback_t *Callback;
+
+ MSG_WAR(0x3D2A, "SlaveLSS Reseting LSSPos", 0);
+ d->lss_transfer.LSSPos=0;
+ d->lss_transfer.FastScan_SM=LSS_FS_PROCESSING;
+
+ ptrTable = (*d->scanIndexOD)(0x1018, &errorCode, &Callback);
+ d->lss_transfer.IDNumber=*(UNS32*)ptrTable->pSubindex[d->lss_transfer.LSSPos+1].pObject;
+
+ sendSlaveLSSMessage(d,LSS_IDENT_SLAVE,0,0);
+ }
+ break;
+ case LSS_FS_PROCESSING:/*if(getLSSBitCheck(m)<32)*/
+ if(d->lss_transfer.LSSPos==getLSSSub(m))
+ {
+ UNS32 Mask=0xFFFFFFFF<<getLSSBitCheck(m);
+
+ MSG_WAR(0x3D2B, "SlaveLSS FastScan IDNumber", getLSSIdent(m));
+ MSG_WAR(0x3D2C, "SlaveLSS FastScan BitMask ", Mask);
+ MSG_WAR(0x3D2D, "SlaveLSS FastScan LSS-ID ", d->lss_transfer.IDNumber);
+
+ if((getLSSIdent(m) & Mask)==(d->lss_transfer.IDNumber & Mask))
+ {
+ sendSlaveLSSMessage(d,LSS_IDENT_SLAVE,0,0);
+ }
+
+ if(getLSSBitCheck(m)==0)
+ {
+ d->lss_transfer.FastScan_SM=LSS_FS_CONFIRMATION;
+ }
+ }
+ break;
+ case LSS_FS_CONFIRMATION:
+ if(d->lss_transfer.LSSPos==getLSSSub(m))
+ {
+ if(getLSSIdent(m)==d->lss_transfer.IDNumber)
+ {
+ /* Current LSS-ID[sub] confirmed correctly */
+ MSG_WAR(0x3D2E, "SlaveLSS FastScan IDNumber and LSS-ID match=>", d->lss_transfer.IDNumber);
+ if(d->lss_transfer.LSSPos==3)
+ {
+ /* All LSS-ID[sub] identified correctly, switching to configuration mode */
+ MSG_WAR(0x3D2F, "SlaveLSS switching to configuration mode ", 0);
+ d->lss_transfer.nodeID=getNodeId(d);
+ d->lss_transfer.mode=LSS_CONFIGURATION_MODE;
+ d->lss_transfer.FastScan_SM=LSS_FS_RESET;
+ d->lss_transfer.LSSPos=0xFF;
+ }
+ else
+ {
+ /* Switch to the next LSS-ID[sub] */
+ UNS32 errorCode;
+ const indextable *ptrTable;
+ ODCallback_t *Callback;
+
+ d->lss_transfer.LSSPos=getLSSNext(m);
+ ptrTable = (*d->scanIndexOD)(0x1018, &errorCode, &Callback);
+ d->lss_transfer.IDNumber=*(UNS32*)ptrTable->pSubindex[d->lss_transfer.LSSPos+1].pObject;
+ d->lss_transfer.FastScan_SM=LSS_FS_PROCESSING;
+ }
+ sendSlaveLSSMessage(d,LSS_IDENT_SLAVE,0,0);
+ }
+ }
+ break;
+ }