// Function Specification // // Name: cmdh_mnfg_test_parse // // Description: This function parses the manufacturing commands sent via TMGT. // // End Function Specification errlHndl_t cmdh_mnfg_test_parse (const cmdh_fsp_cmd_t * i_cmd_ptr, cmdh_fsp_rsp_t * o_rsp_ptr) { uint8_t l_rc = 0; uint8_t l_sub_cmd = 0; errlHndl_t l_errl = NULL; // Sub-command is always first byte of data l_sub_cmd = i_cmd_ptr->data[0]; TRAC_INFO("cmdh_mnfg_test_parse: Mnfg sub-command [0x%02x]", l_sub_cmd); switch (l_sub_cmd) { case MNFG_RUN_STOP_SLEW: l_rc = cmdh_mnfg_run_stop_slew(i_cmd_ptr, o_rsp_ptr); break; case MNFG_OVERSUB_EMULATION: l_rc = cmdh_mnfg_emulate_oversub(i_cmd_ptr, o_rsp_ptr); break; case MNFG_LIST_SENSORS: l_rc = cmdh_mnfg_list_sensors(i_cmd_ptr, o_rsp_ptr); break; case MNFG_GET_SENSOR: l_rc = cmdh_mnfg_get_sensor(i_cmd_ptr, o_rsp_ptr); break; case MNFG_MEMORY_SLEW: l_rc = cmdh_mnfg_mem_slew(i_cmd_ptr, o_rsp_ptr); break; case MNFG_QUAD_PSTATE: l_rc = cmdh_mnfg_request_quad_pstate(i_cmd_ptr, o_rsp_ptr); break; case MNFG_READ_PSTATE_TABLE: l_rc = cmdh_mnfg_read_pstate_table(i_cmd_ptr, o_rsp_ptr); break; default: // Should never get here... l_rc = ERRL_RC_INVALID_DATA; break; } // All errors in MNFG logged internally if (l_rc) { TRAC_ERR("Mfg command 0x%02x failed with rc = %d", l_sub_cmd, l_rc); // Build Error Response packet cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, l_rc, &l_errl); } return l_errl; }
// Function Specification // // Name: cmdh_snapshot_sync // // Description: Resets the snapshot buffer array and starts a new snapshot buffer from time 0. // // End Function Specification errlHndl_t cmdh_snapshot_sync(const cmdh_fsp_cmd_t * i_cmd_ptr, cmdh_fsp_rsp_t * o_rsp_ptr) { cmdh_snapshot_sync_query_t *l_cmd_ptr = (cmdh_snapshot_sync_query_t *) i_cmd_ptr; cmdh_snapshot_sync_resp_t *l_resp_ptr = (cmdh_snapshot_sync_resp_t *) o_rsp_ptr; errlHndl_t l_err = NULL; uint8_t l_query_sz = 0; ERRL_RC l_rc = 0; do { l_query_sz = CMDH_DATALEN_FIELD_UINT16(i_cmd_ptr); // Verify query data size if(l_query_sz != CMDH_SNAPSHOT_SYNC_DATA_SIZE) { TRAC_ERR("cmdh_snapshot_sync: Received an invalid packet size. Expecting 1 byte, received:%i", l_query_sz); l_rc = ERRL_RC_INVALID_CMD_LEN; break; } l_cmd_ptr = (cmdh_snapshot_sync_query_t *)i_cmd_ptr; // Check received packet version if (CMDH_SNAPSHOT_SYNC_VERSION != l_cmd_ptr->version) { TRAC_ERR("cmdh_snapshot_sync: Version %i cmd is not supported.", l_cmd_ptr->version); l_rc = ERRL_RC_INVALID_DATA; break; } // Set the global reset flag, that will cause all saved data to be cleared in the // next callback that is done every 30 seconds via a timer. g_cmdh_snapshot_reset = TRUE; // Reset current index to stop any possible calls from tmgt to get snapshot buffers. g_cmdh_snapshot_cur_index = CMDH_SNAPSHOT_DEFAULT_CUR_INDEX; // Reset timer and start counting from now. This will cause a call to the snapshot_callback // function below which will reset the other globals based on the fact that g_cmdh_snapshot_reset // is set to true. l_rc = ssx_timer_schedule(&G_snapshotTimer, 0, SSX_SECONDS(30)); if (l_rc != SSX_OK) { TRAC_ERR("cmdh_snapshot_sync: reseting the snapshot timer failed."); break; } TRAC_INFO("cmdh_snapshot_sync: Snapshot buffer has been reset!"); l_resp_ptr->data_length[0] = 0; l_resp_ptr->data_length[1] = 0; G_rsp_status = 0; }while(FALSE); if (l_rc) { // Build Error Response packet cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, l_rc, &l_err); } return(l_err); }
// Function Specification // // Name: cmdh_get_snapshot_buffer // // Description: Returns requested snapshot buffer to tmgt when requested. // // End Function Specification errlHndl_t cmdh_get_snapshot_buffer(const cmdh_fsp_cmd_t * i_cmd_ptr, cmdh_fsp_rsp_t * o_rsp_ptr) { cmdh_get_snapshot_query_t *l_cmd_ptr = (cmdh_get_snapshot_query_t *) i_cmd_ptr; ERRL_RC l_rc = ERRL_RC_SUCCESS; uint16_t l_query_sz = 0; errlHndl_t l_err = NULL; do { // Command is only supported on Master OCC if (G_occ_role == OCC_SLAVE) { TRAC_ERR("cmdh_get_snapshot_buffer: Get snapshot buffer command not supported on Slave OCCs!"); l_rc = ERRL_RC_INVALID_CMD; break; } // Function Inputs Sanity Check if( (NULL == i_cmd_ptr) || (NULL == o_rsp_ptr) ) { TRAC_ERR("cmdh_get_snapshot_buffer: Received invalid inputs."); l_rc = ERRL_RC_INTERNAL_FAIL; break; } l_query_sz = CMDH_DATALEN_FIELD_UINT16(i_cmd_ptr); // Command Length Check. Should have 4 bytes total if(l_query_sz != CMDH_GET_SNAPSHOT_QUERY_DATALEN) { TRAC_ERR("cmdh_get_snapshot_buffer: Received an invalid packet size. Expecting 4 bytes, received:%i", l_query_sz); l_rc = ERRL_RC_INVALID_CMD_LEN; break; } // Call appropriate function based on version. switch (l_cmd_ptr->version) { case CMDH_GET_SNAPSHOT_NONITE_VERSION: l_rc = cmdh_snapshot_buffer_nonite(i_cmd_ptr, o_rsp_ptr); break; case CMDH_GET_SNAPSHOT_ITE_VERSION: default: TRAC_ERR("cmdh_get_snapshot_buffer: Version %i cmd is not supported.", l_cmd_ptr->version); l_rc = ERRL_RC_INVALID_DATA; break; } } while(0); if (l_rc) { // Build Error Response packet cmdh_build_errl_rsp(i_cmd_ptr, o_rsp_ptr, l_rc, &l_err); } return l_err; }