uint8_t RF22Router::sendtoWait(uint8_t* buf, uint8_t len, uint8_t dest) { return sendtoWait(buf, len, dest, _thisAddress); }
boolean RF22Mesh::get_address() { uint8_t ret, len = GLOBAL_BUFFER_SIZE, source, dest, new_address = 0; int temp_type = -1, temp_me = -1; char *json_str; unsigned long starttime; boolean recv_ret; aJsonObject *root, *item; randomSeed( analogRead( 1 ) ); me = (uint8_t) random( 256 ); #ifdef CLIENT Serial.println( F( "This is the client" ) ); #endif while( new_address == 0 ) { root = aJson.createObject(); aJson.addNumberToObject( root, F( "t" ), (uint8_t) ADDRESS_REQUEST ); aJson.addNumberToObject( root, F( "m" ), (uint8_t) me ); json_str = aJson.print( root ); ret = sendtoWait( (uint8_t *) json_str, strlen( json_str ), RF22_BROADCAST_ADDRESS ); if( ret != RF22_ROUTER_ERROR_NONE ) { Serial.print( F( "Error Code: " ) ); Serial.println( ret ); errno = ret; //return 0; } aJson.deleteItem( root ); free( json_str ); starttime = millis(); for( int i = 0; i < 4 && new_address == 0; i++ ) { if( recvfromAckTimeout( global_msg_buffer, &len, 1000, &source, &dest ) ) { root = aJson.parse( (char *) global_msg_buffer ); item = aJson.getObjectItem( root, F( "t" ) ); if( item ) { temp_type = item->valueint; } item = aJson.getObjectItem( root, F( "m" ) ); if( item ) { temp_me = item->valueint; } if( temp_type == ADDRESS_GRANT && temp_me == me ) { new_address = aJson.getObjectItem( root, F( "a" ) )->valueint; setThisAddress( new_address ); server_address = source; return 1; } aJson.deleteItem( root ); } } } return 1; }