extern void eoprot_fun_ONSAY_mn(const EOnv* nv, const eOropdescriptor_t* rd) { // marco.accame on 18 mar 2014: this function is called when a say<id32, data> rop is received // and the id32 is about the management endpoint. this function is common to every board. // it is used this function and not another one because inside the hostTransceiver object it was called: // eoprot_config_onsay_endpoint_set(eoprot_endpoint_management, eoprot_fun_ONSAY_mn); // the aim of this function is to wake up a thread which is blocked because it has sent an ask<id32> // the wake up funtionality is implemented in one mode only: // a. in initialisation, someone sets some values and then reads them back. // the read back sends an ask<id32, signature=0xaa000000>. in such a case the board sends back // a say<id32, data, signature = 0xaa000000>. thus, if the received signature is 0xaa000000, then // we must unblock using feat_signal_network_reply(). if(0xaa000000 == rd->signature) { // case a: if(fakestdbool_false == feat_signal_network_reply(eo_nv_GetBRD(nv), rd->id32, rd->signature)) { char str[256] = {0}; char nvinfo[128]; eoprot_ID2information(rd->id32, nvinfo, sizeof(nvinfo)); snprintf(str, sizeof(str), "eoprot_fun_ONSAY_mn() received an unexpected message w/ 0xaa000000 signature for %s", nvinfo); embObjPrintWarning(str); return; } } }
extern void eoprot_fun_ONSAY_mc(const EOnv* nv, const eOropdescriptor_t* rd) { // marco.accame on 18 mar 2014: this function is called when a say<id32, data> rop is received // and the id32 is about the motion control endpoint. this function is common to every board. // it is used this function and not another one because inside the hostTransceiver object it was called: // eoprot_config_onsay_endpoint_set(eoprot_endpoint_motioncontrol, eoprot_fun_ONSAY_mc); // the aim of this function is to wake up a thread which is blocked because it has sent an ask<id32> // the wake up funtionality is implemented in two modes, depending on the wait mechanism used: // a. in initialisation, embObjMotionControl sets some values and then reads them back. // the read back sends an ask<id32, signature=0xaa000000>. in such a case the board sends back // a say<id32, data, signature = 0xaa000000>. thus, if the received signature is 0xaa000000, then // we must unblock using feat_signal_network_reply(). // b. during runtime, some methods send a blocking ask<id32> without signature. It is the case of instance // of getPidRaw() which waits with a eoThreadEntry::synch() call. in such a case the board send back a // normal say<id32, data> with nos signature. in this case we unlock with wake(). if(0xaa000000 == rd->signature) { // case a: if(fakestdbool_false == feat_signal_network_reply(eo_nv_GetBRD(nv), rd->id32, rd->signature)) { char str[256] = {0}; char nvinfo[128]; eoprot_ID2information(rd->id32, nvinfo, sizeof(nvinfo)); snprintf(str, sizeof(str), "eoprot_fun_ONSAY_mc() received an unexpected message w/ 0xaa000000 signature for %s", nvinfo); embObjPrintWarning(str); return; } } else { //case b: wake(nv); } }
extern void eoprot_fun_UPDT_mn_comm_cmmnds_command_replyarray(const EOnv* nv, const eOropdescriptor_t* rd) { if(fakestdbool_false == feat_signal_network_reply(eo_nv_GetBRD(nv), rd->id32, rd->signature)) { printf("ERROR: eoprot_fun_UPDT_mn_comm_cmmnds_command_replyarray() has received an unexpected message\n"); return; } }
extern void eoprot_fun_UPDT_mn_comm_cmmnds_command_replyarray(const EOnv* nv, const eOropdescriptor_t* rd) { // marco.accame on 19 mar 2014: the ethResource class sends a set<command, value> and it blocks to wait a reply. // the reply arrives in the form sig<command, value>. the signature in here does not work, as it works only with // ask<> / say<>. if(eo_ropcode_sig == rd->ropcode) { // in here we have a sig and we cannot have the 0xaa000000 signature if(fakestdbool_false == feat_signal_network_reply(eo_nv_GetBRD(nv), rd->id32, rd->signature)) { printf("ERROR: eoprot_fun_UPDT_mn_comm_cmmnds_command_replyarray() has received an unexpected message\n"); return; } } }
void eoprot_fun_UPDT_mn_appl_status(const EOnv* nv, const eOropdescriptor_t* rd) { static const char* states[] = { "applstate_config", "applstate_running", "applstate_error", "not initted" }; char str[256] = {0}; eOmn_appl_status_t* appstatus = (eOmn_appl_status_t*) rd->data; const char* state = (appstatus->currstate > 2) ? (states[3]) : (states[appstatus->currstate]); snprintf(str, sizeof(str), "MANAGEMENT-appl-status: sign = 0x%x, board EB%d -> name = %s", rd->signature, eo_nv_GetBRD(nv)+1, appstatus->name); printf("%s\n", str); snprintf(str, sizeof(str), " version = %d.%d, built on date %d %d %d, at hour %d:%d", appstatus->version.major, appstatus->version.minor, appstatus->buildate.day, appstatus->buildate.month, appstatus->buildate.year, appstatus->buildate.hour, appstatus->buildate.min); printf("%s\n", str); snprintf(str, sizeof(str), " state = %s", state); printf("%s\n", str); fflush(stdout); if((eo_ropcode_say == rd->ropcode) && (0xaa000000 == rd->signature)) { if(fakestdbool_false == feat_signal_network_reply(eo_nv_GetBRD(nv), rd->id32, rd->signature)) { printf("ERROR: eoprot_fun_UPDT_mn_appl_status() has received an unexpected message\n"); return; } } }