Page 1 of 2 12 LastLast
Results 1 to 15 of 17

Thread: EEhack v6 EDITION

  1. #1
    Fuel Injected!
    Join Date
    Mar 2013
    Posts
    1,475

    EEhack v6 EDITION

    I am planning to modify the eehack program to work with v6 94-95 engines.

    I will need some help from Steveo for some of the mods.

    Now I have been able to connect and log some data.
    The definition file is modded but needs more work.

    Next on the list is to add read write support.

    Than will add some basic mode 4 controls.

    After that go deep in the disassembly and add more mode 4 controls.

    A list with the mode4 controls will be very helpful.

    Last stage will be to add some patches if needed.

  2. #2
    Fuel Injected!
    Join Date
    Mar 2013
    Posts
    1,475
    Just a little update.

    Data logging is done.
    Read and write is done.
    Still alot of small details to fix are left.

    The bin format will be full 128kb. Even though only half of it is used by the PCM. I will have to modify the Robertisaar p66.adx to suit the new bin format. It also keeps the eeprom info like vin,os and other stuff. It is easier to manipulate, no $8000 offsets needed to add a patch or other hacking job. It also keeps the build in eehack functionality of adding patches and side writing.
    Too bad this PCM don`t use checksum so it is up to the user to provide a good bin, no bin verification will be available.

    Stll to do is to add mode 4 controls and clean the features that can`t be used in v6 application.

  3. #3
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    i actually did a v6 version, you know.. but nobody cared and tested it so i abandoned it before it was finished

    when i wrote the definition file code i was intending to get it going again, at least just for logging, but never got around to it.

    i cant believe you actually got it flashing, that's amazing. you're doing awesome work.

  4. #4
    Fuel Injected!
    Join Date
    Sep 2018
    Posts
    103
    Hello,
    will it work on a 16196395, Then I would like to have a downloadlink and test it. Or github link, i can compile it on qt myself!
    regards
    mecanicus

  5. #5
    Fuel Injected!
    Join Date
    Mar 2013
    Posts
    1,475
    Quote Originally Posted by mecanicus View Post
    Hello,
    will it work on a 16196395, Then I would like to have a downloadlink and test it. Or github link, i can compile it on qt myself!
    regards
    mecanicus
    I tested it on a 16184737 PCM and It is supposed to work on these also 16172693, 16184164, and 16196397 P66 v6.

    16196395 seems like an older memcal type ECM. You might need a chip burner for it.


    Quote Originally Posted by steveo View Post
    i actually did a v6 version, you know.. but nobody cared and tested it so i abandoned it before it was finished

    when i wrote the definition file code i was intending to get it going again, at least just for logging, but never got around to it.

    i cant believe you actually got it flashing, that's amazing. you're doing awesome work.
    I got tired of constant bricked flashes with some commercial tools to the point, It bricked everytime in a car attempt. I tried all possible remedies, even run separate ground and aldl wire straight from the PCM with no luck.

    Actually logging was much more effort than the read /write, since the main comm id is e4, the opposite on the v8.
    Read/write went right on the first try with the proper flash routine, thanks to the core engine of the eehack. Which is written at very high level even though you don`t like how it is written, It does the job perfectly.

    On the v6 the dtc status is send on a separate message. I managed to make it logged every 3 seconds with the main message but need to display the dtcs from the DTC message on the main dash window. Do you know an easy way to link it that way.

  6. #6
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    On the v6 the dtc status is send on a separate message. I managed to make it logged every 3 seconds with the main message but need to display the dtcs from the DTC message on the main dash window. Do you know an easy way to link it that way.
    ah ok, the dashboard.

    so, it only receives messages from 0x00 and 0x05 (0x05 being my speed logging message)

    this is determined in void datalog_window::move_dashboard(datalog_packet *p)

    Code:
    void datalog_window::move_dashboard(datalog_packet *p) {
      if(p->is_msg(0xF4,0x00) ||
         (p->is_msg(0xF4,0x05) &&
          p->log->info.patch_version.get() >= 0x01)
          ) { // belongs to us
        dashboard_pkt = p;
        if(ui->mainTabSwitcher->currentIndex() == 0) display_dashboard();
      } else {
        datalog_packet *prev_pkt = p->get_prev(0xF4,0x00);
        if(prev_pkt == dashboard_pkt) return; // we're already there
        dashboard_pkt = prev_pkt;
        if(ui->mainTabSwitcher->currentIndex() == 0) display_dashboard();
      }
    }
    so basically what's happening is if the packet is 0x00 or 0x05 with a patch_version of zero (so in your case, packet 0x05 is ignored on the dashboard, since hopefully you aren't grabbing a patch version from raw memory yet) it 'moves' the dashboard to that packet.

    then the dashboard is displayed and errors too... this is done in a worker so we can be either sync or async processing of the packet depending on what the user wants

    Code:
    void datalog_window::display_dashboard_worker() {
      draw_in_progress = true; // working (ignored in sync mode)
      datalog_packet *p = dashboard_pkt;
      // draw main controls
      dashboard->draw_all(p);
      // draw errors
      if(p == NULL || p->get_msgnumber() == 0x05) {
        ui->error_text->setPlainText("---");
      } else {
        ui->error_text->setPlainText(def[0].err_str(p,p->log->info.patch_version.get()));
      }
      draw_in_progress = false; // finished
    }
    so at this point all messages other than 0x00 and 0x05 have been discarded. we check if we're on message 0x00 or 0x05 (since message 0x05, if patched, has no errors in it). this uses the first message which is assumed to be the primary one.

  7. #7
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    so what you should maybe try is, lets say your message number is 0x99 and it's on 0xE4.. first we need to stop ignoring records on that message number ...

    add something to config.h to define some static stuff

    Code:
    // define your message number here.
    #define V6_ERRMSG_NO 0x99
    #define V6_ERRMSG_DEV 0xE4
    
    // need to know which definition index belongs to that message.  static will work but you can also determine this at startup by looking at the def array to find the correct message ... i could help you with that.
    #define INDEX_OF_MSG99_IN_DEF_FILE 3
    Code:
    void datalog_window::move_dashboard(datalog_packet *p) {
      if(p->is_msg(0xF4,0x00) ||
        p->is_msg(V6_ERRMSG_DEV,V6_ERRMSG_NO) ||  // NEW ... lets look at this other message on the dashboard too.
         (p->is_msg(0xF4,0x05) &&
          p->log->info.patch_version.get() >= 0x01)
          ) { // belongs to us
        dashboard_pkt = p;
        if(ui->mainTabSwitcher->currentIndex() == 0) display_dashboard();
      } else {
        datalog_packet *prev_pkt = p->get_prev(0xF4,0x00);
        if(prev_pkt == dashboard_pkt) return; // we're already there
        dashboard_pkt = prev_pkt;
        if(ui->mainTabSwitcher->currentIndex() == 0) display_dashboard();
      }
    }
    and....

    Code:
    void datalog_window::display_dashboard_worker() {
      draw_in_progress = true; // working (ignored in sync mode)
      datalog_packet *p = dashboard_pkt;
      // draw main controls
      dashboard->draw_all(p);
      // draw errors
      if(p == NULL || p->get_msgnumber() == V6_ERRMSG_NO) {
        ui->error_text->setPlainText(def[INDEX_OF_MSG99_IN_DEF_FILE].err_str(p,p->log->info.patch_version.get()));
      }
      draw_in_progress = false; // finished
    }
    now it's possible that the function void dashboard_field::draw(datalog_packet *pkt) will blank the other displays, you might need to add

    Code:
    if(pkt->get_msgnumber() == V6_ERRMSG_NO) return;
    to the beginning of that function just so it doesn't touch the rest of the dashboard when it's on an error record.

    this could mess up playback in reverse too, you'll just have to test it out

  8. #8
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    does that make sense? on a basic level a pointer to each packet (either when it arrives or is 'played back') is sent to every single display module (each tab is its own module, so is the graphing thing), and that display module inspects it for its associated definition and message number to decide whether it wants to process it or not.

  9. #9
    Fuel Injected!
    Join Date
    Mar 2013
    Posts
    1,475
    I will try that out. The dtc message is e4 MODE 01 msg 02 and only contains dtc data. The main message 00 has non of them, so we only need to link msg 02 to the error display in the dashboard.

  10. #10
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    i'm sure we can get it working.

    so much of eehack is hard-coded to 0xE4 and 0xF4

    hey one more thing too, you should go into config.h and change

    #define LOG_MAGIC_NUMBER 0xEE0022AA

    to something different and random like

    #define LOG_MAGIC_NUMBER 0xEF6645AB

    that way V6 logs wont open in normal EEHack by accident (would probably crash it ;)

  11. #11
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    also:

    #define SETTINGS_DOMAIN "EEHackB", "fbodytech.com"

    change to something like

    #define SETTINGS_DOMAIN "EEHackv6", "fbodytech.com"

    that way eehack and its v6 version have separate settings and config

  12. #12
    Fuel Injected!
    Join Date
    Mar 2013
    Posts
    1,475
    Quote Originally Posted by steveo View Post

    now it's possible that the function void dashboard_field::draw(datalog_packet *pkt) will blank the other displays, you might need to add

    Code:
    if(pkt->get_msgnumber() == V6_ERRMSG_NO) return;

    All worked out. There is one problem though. When the dtc message gets logged it blanks the dash for one record.

    When I add the code you suggested the program crashes on "configuring modules" at startup.

  13. #13
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    ahh make sure you check for pkt == null first. null packets are possible (especially on startup)

    or just do this:

    Code:
    if(pkt != NULL || pkt->get_msgnumber() == V6_ERRMSG_NO) return;

  14. #14
    Fuel Injected!
    Join Date
    Mar 2013
    Posts
    1,475
    when I try to modify this one I always got a crash at startup. I also found that it is only responsible for startup condition. With it at startup the dashboard is not blank but adds --- on the fields

    Maybe it is not the best place to modify.

    On the application output I also got this

    Code:
    Wrong bool packet association for "Air Conditioning Enabled" def "*Main" returning zero! pkt msg "*DTC" pkt def 0x3a80d44 stored def 0x3a80cc4
    Wrong bool packet association for "Shift Position PARK/NEUTRAL" def "*Main" returning zero!
    pkt msg "*DTC" pkt def 0x3a80d44 stored def 0x3a80cc4
    Wrong bool packet association for "TCC Enable" def "*Main" returning zero!
    pkt msg "*DTC" pkt def 0x3a80d44 stored def 0x3a80cc
    Last edited by kur4o; 01-27-2019 at 11:51 PM.

  15. #15
    LT1 specialist steveo's Avatar
    Join Date
    Aug 2013
    Posts
    4,031
    it's just that i had a dumbass moment.

    it should be if(pkt != NULL && pkt->get_msgnumber() == V6_ERRMSG_NO) return;

    On the application output I also got this
    each data item has a 'definition' and each 'definition' is linked to a certain 'packet' or message, what's happening here is something is trying to pull data from a packet that it doesn't belong to (like trying to pull RPM from the error message?). it will return 'false' or zero.

    i'd assume that these are dashboard fields that are the problem. remember the dashboard only gets data from the main datastream message. synchronizing to different messages on that one screen was too problematic.

    dashboard fields are linked to controls via their 'short name' in the definition, see datalog_window::config_dashboard()

    i made it really easy to add or change dashboard fields.. that's one thing i did right..

Similar Threads

  1. Help with eehack
    By davi3078 in forum Gear Heads
    Replies: 6
    Last Post: 01-14-2024, 05:51 AM
  2. eehack cant connect
    By andyz28 in forum GM EFI Systems
    Replies: 0
    Last Post: 12-18-2018, 10:50 PM
  3. EEhack mode 13
    By curacaoz28 in forum GM EFI Systems
    Replies: 13
    Last Post: 11-07-2018, 06:30 PM
  4. EEhack
    By Stroked 388 in forum Introductions
    Replies: 37
    Last Post: 02-25-2017, 08:29 PM
  5. Whatever!!!!!!!!! Gearhead-EFI Edition
    By RobertISaar in forum Gear Heads
    Replies: 1722
    Last Post: 05-21-2016, 06:23 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •