Handle factory reset from API

Hi,

I am trying a network joiner session from the API. First I do a factory reset to clear any previous network data in memory. However when I run the following code, it seems like the program reset

as well, which prevents the rest of my code from being executed. 

 

// this is a custom cli command
otError cli_prov_joiner (void *aContext, uint8_t aArgsLength, char *aArgs[]) {
	otError error;
	otJoinerDiscerner discerner;
	#define pskd "J01NME"

	memset(&discerner, 0, sizeof(discerner));
	discerner.mValue = 0x1234;	// this will be replaced by aArgs[1] 
	discerner.mLength = 16;

	otInstance *instance = openthread_get_default_instance();
	if (instance == NULL) {
		otCliOutputFormat ("get instantace  error");
		return OT_ERROR_FAILED;
	}

	otCliOutputFormat ("\n\r factory reset ");
	otInstanceFactoryReset(instance);

    // following  doesnt get a chance to execute 
	otCliOutputFormat ("done factory reset");
	error = otJoinerSetDiscerner (instance,  &discerner);
	if (error != OT_ERROR_NONE) {
		otCliOutputFormat ("joiner descerner set error");
		return (error);
	}

	otCliOutputFormat ("\n\r ifconfig up ");
	error = otIp6SetEnabled(instance, true);	// ifconfig up
	if (error != OT_ERROR_NONE) {
		otCliOutputFormat ("ifconfig up error");
		return (error);
	}
	
	error = otJoinerStart(instance, 
							pskd, 
							NULL, 
							NULL,
							NULL,
							NULL,
							NULL,
							joiner_callback,
							NULL);
	if (error != OT_ERROR_NONE) {
		otCliOutputFormat ("joiner start error");
		return (error);
	}

	return (OT_ERROR_NONE);
}

I have tried following instead of factory reset, but the joining fails.

1. ifconfig down

2. thread stop

3. panid set to 0xffff

4. set joiner discerner to 1234/16

4. ifconfig up

5. joiner start "J01NME"

What can I do?

Cheers,

Kaushalya

Related