#include #include #include #include #include class TestFailed {}; typedef uint16_t TYPE; static void check(ScalVal arr, TYPE patt) { unsigned nelms = arr->getNelms(); TYPE buf[nelms]; unsigned i; if ( patt ) { arr->setVal(patt); } else { for ( i=0; isetVal( buf, nelms ); } memset(buf, ~patt, nelms*sizeof(buf[0])); arr->getVal(buf, nelms); if ( patt ) { for ( i=0; iaddAtAddress( f, 0, nelms ); mmiov2->addAtAddress( srvm, REGBASE+REG_ARR_OFF ); mmiov3->addAtAddress( srvm, REGBASE+REG_ARR_OFF ); INetIODev::PortBuilder pbldr( root->createPortBuilder() ); pbldr->setSRPVersion( INetIODev::SRP_UDP_V2 ); pbldr->setUdpPort ( v2port ); pbldr->useRssi ( true ); pbldr->useTDestMux ( false ); root->addAtAddress( mmiov2, pbldr ); ScalVal arrv2 = IScalVal::create( root->findByName("mmiov2/srvm/data") ); if ( arrv2->getNelms() != nelms ) { fprintf(stderr, "V2 # elements mismatch\n"); throw TestFailed(); } pbldr->setSRPVersion( INetIODev::SRP_UDP_V3 ); pbldr->setSRPTimeoutUS( 1000000 ); pbldr->setUdpPort ( v3port ); pbldr->setTDestMuxTDEST( v3tdst ); pbldr->useTDestMux ( true ); root->addAtAddress( mmiov3, pbldr ); ScalVal arrv3 = IScalVal::create( root->findByName("mmiov3/srvm/data") ); if ( arrv3->getNelms() != nelms ) { fprintf(stderr, "V3 # elements mismatch\n"); throw TestFailed(); } check(arrv2, 0xdead); check(arrv3, 0); } catch ( CPSWError e ) { fprintf(stderr,"CPSW Error caught: %s\n", e.getInfo().c_str()); throw e; } } if ( CpswObjCounter::report() ) { printf("Leaked Objects!\n"); throw TestFailed(); } return 0; }