void EP1_IN_Callback(void) { // uint16_t Data_Len; /* data length*/ // // if (GetENDPOINT(ENDP1) & EP_DTOG_TX) // { // /*read from ENDP1_BUF0Addr buffer*/ // Data_Len = GetEPDblBuf0Count(ENDP1); // PMAToUserBufferCopy(Stream_Buff, ENDP1_BUF0Addr, Data_Len); // } // else // { // /*read from ENDP1_BUF1Addr buffer*/ // Data_Len = GetEPDblBuf1Count(ENDP1); // PMAToUserBufferCopy(Stream_Buff, ENDP1_BUF1Addr, Data_Len); // } // FreeUserBuffer(ENDP1, EP_DBUF_IN); // NEWFIX // FreeUserBuffer(ENDP1, EP_DBUF_OUT); //#ifdef SEND_8BIT send_empty_packet(); //#endif packet_sending = 0; // In_Data_Offset += Data_Len; }
SCSAPI_VOID scs_telemetry_shutdown(void) { send_empty_packet(); serial_port.close(); game_log(SCS_LOG_TYPE_message, "Plugin shutdown"); game_log = NULL; }
SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_init_params_t *const params) { if (version != SCS_TELEMETRY_VERSION_1_00) { return SCS_RESULT_unsupported; } const scs_telemetry_init_params_v100_t *const version_params = static_cast<const scs_telemetry_init_params_v100_t *>(params); game_log = version_params->common.log; game_log(SCS_LOG_TYPE_message, "Plugin initialising"); std::string cwd; get_cwd(cwd); game_log(SCS_LOG_TYPE_message, (std::string("Plugin CWD: ") + cwd).c_str()); std::string option_filepath(cwd + "\\plugins\\dash_plugin.txt"); if (!option_file.read_file(option_filepath)) { game_log(SCS_LOG_TYPE_error, (std::string("Error reading settings file: ") + option_filepath).c_str()); return SCS_RESULT_generic_error; } const std::string com_port = option_file.get_option_string("comport", "COM3"); game_log(SCS_LOG_TYPE_message, (std::string("Using serial port: ") + com_port).c_str()); // Open COM port std::string errmsg; if (!serial_port.open(com_port, errmsg)) { game_log(SCS_LOG_TYPE_error, errmsg.c_str()); return SCS_RESULT_generic_error; } send_empty_packet(); // Register for in game events bool registered = (version_params->register_for_event( SCS_TELEMETRY_EVENT_frame_end, telemetry_frame_end, NULL) == SCS_RESULT_ok) && (version_params->register_for_event( SCS_TELEMETRY_EVENT_configuration, telemetry_configuration, NULL) == SCS_RESULT_ok); // Register for truck channels #define REG_CHAN(CHANNEL, TYPE) \ registered &= (version_params->register_for_channel( \ SCS_TELEMETRY_TRUCK_CHANNEL_ ## CHANNEL, SCS_U32_NIL, SCS_VALUE_TYPE_ ## TYPE, \ SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_ ## TYPE, &telemetry.CHANNEL) == SCS_RESULT_ok) REG_CHAN(speed, float); REG_CHAN(engine_rpm, float); REG_CHAN(engine_gear, s32); REG_CHAN(parking_brake, bool); REG_CHAN(motor_brake, bool); REG_CHAN(brake_air_pressure, float); REG_CHAN(brake_air_pressure_warning, bool); REG_CHAN(brake_air_pressure_emergency, bool); REG_CHAN(brake_temperature, float); REG_CHAN(fuel, float); REG_CHAN(fuel_warning, bool); REG_CHAN(fuel_average_consumption, float); REG_CHAN(oil_pressure, float); REG_CHAN(oil_pressure_warning, bool); REG_CHAN(oil_temperature, float); REG_CHAN(water_temperature, float); REG_CHAN(water_temperature_warning, bool); REG_CHAN(battery_voltage, float); REG_CHAN(battery_voltage_warning, bool); REG_CHAN(electric_enabled, bool); REG_CHAN(engine_enabled, bool); REG_CHAN(light_lblinker, bool); REG_CHAN(light_rblinker, bool); REG_CHAN(light_parking, bool); REG_CHAN(light_low_beam, bool); REG_CHAN(light_high_beam, bool); REG_CHAN(light_brake, bool); REG_CHAN(light_reverse, bool); REG_CHAN(odometer, float); if (!registered) { game_log(SCS_LOG_TYPE_error, "Unable to register callbacks"); return SCS_RESULT_generic_error; } memset(&telemetry, 0, sizeof(telemetry)); return SCS_RESULT_ok; }