Tuesday, June 3, 2014

Update for Rev1 customers

This should have the restore settings feature fixed.  Note that you will need to check and save your User Adjustment and Methanol settings one more time.  After that you should be good to go.  Again sorry about this!  Also, I don't think it will be necessary to disconnect the cable to prevent the settings changes anymore since this will allow you to load up your last saved settings.


***Note that you MUST update your BLE Mini for this update to work***

How to update BLE Mini:
https://www.youtube.com/watch?v=sUP7Mt2gDVM

Also note that with the newest firmware, the light will be green.  Then after the first connection, the blue led will turn on.


Install instructions for iOS app:
1) Unzip the archive
2) Drag both the IPA file and the .mobileprovision file into iTunes
3) Make sure JB4 Mobile is set to sync.
4) Press sync.

I will be providing links to everything you need in an email.  If you haven't received an email yet, email me and let me know.

Monday, June 2, 2014

Quick IPA Maker for iOS builds

Made a script and automator app to make IPA files with a simple drag and drop.

Setup and usage instructions:

1) Unzip the archive linked below
2) Copy the "iOS App Builds" folder to your home drive (ex: /Users/MY_HOME_FOLDER/iOS App Builds)
3) Navigate to whatever build folder you have with your .app and .dSYM packages
4) Open another window with the IPAMaker automater icon visible
5) Drag the .app package onto the IPAMaker icon and drop it.
6) You will now have a folder with the app's name and build number on it containing the IPA and .dSYM file

Link to IPAMaker: http://bit.ly/ipamaker01

Monday, November 4, 2013

JB4 Serial Communication OS X and iOS

Note: All of this information is no longer relevant.  I've made A LOT of progress on my JB4 apps.

Please refer to this link for information: http://www.n54tech.com/forums/showthread.php?t=21742
**Yes, my thread finally got stickied. :) **

I decided to start working on a Mac app to communicate with my 135i's JB4 piggyback tuner. The JB4 allows you control boost levels, air/fuel ratios, etc.

With the Mac interface complete, I've begun work on the iPhone version. The iPhone will communicate with the JB4 over Bluetooth Low Energy using the BLE Mini.

Caveats:
The BLE Mini firmware comes stock with 57600 baud rate. The JB4 uses a baud rate of 9600.  Luckily I was able to find a 9600 bps version of the firmware as compiling my own would be a mess with TI's licensing programs.

Here is the post I made on N54Tech.com about the project. The overall feedback seems to be pretty good so far. 





iPhone Teaser 11/04/2013:
Finally got the serial communication worked out for iPhone.  Just a demo of interfacing with the JB4 over bluetooth. :)
Yes the final version will be much prettier, this is just a proof of concept.



Releases:
Mac JB4 Beta Release 1.0.4:

Features disabled for now:
Changing Maps
Simulated Steering wheel controls
Firmware disaster recovery

Everything else should be good to go.

Notes:
I've only been able to test this on my 135i N54 with the G5 ISO.
You may need to enable non-signed applications on your mac.  To do this,
Open System Preferences->Security & Privacy->General->Allow Apps downloaded from "Anywhere"
*Stop and display will only appear if the JB4 is currently logging.

Changelog:
Fixed bug with AFR,DutyCycle,FuelEn not logging.
1.0.1:
Added key shortcuts
Added firmware uploading
Added exporting pictures
1.0.2:
Fixed bug with Stop and Display from first connection.
1.0.3:
Fixed bug with Baro Pressure values.
Enabled Restore Defaults.
Enabled Y Scale.
Enabled Upload Timeout.
Enabled textbox coloring.
Improved error displaying during firmware uploading.
1.0.4:
Fixed some color issues.
Fixed bug for some vehicles in reading codes.


Please let me know of any bugs/issues you experience.



Link:
JB4 1.0.4

Drivers:
Drivers



If you like it and want to donate then feel free. :)
Donate

This software is provided AS-IS.  I am not responsible for any damage done to you, your car, or anyone else.

Sunday, September 29, 2013

Speedo Plus for iPhone

Speedo Plus is a simple GPS based speedometer. It displays your current speed in an easy-to-read digital format along with the standard analog one. Your speed can be displayed in MPH or KPH. Speedo Plus also saves your max speed which can be displayed on the main page. An accuracy icon let's you know how accurate Speedo Plus currently is (green is the best, yellow is ok, and red means the accuracy is too low to get the correct speed).

Speedo Plus has been submitted to the App Store and is awaiting approval.




Tuesday, January 22, 2013

College Courses

Well, I was placed in an advanced iOS development class, but even so the class wouldn't do me much good.  So I talked to the head of the Computer Science dept showing him some of my work, and now I get to help design some apps for the college and have it count as my class work.  Works for me. :)

How to batch vote on PollDaddy (Mac OS X) Hack

Well I decided to try to make a way to do batch votes on PollDaddy.  It was actually pretty easy once you play around with FireBug a little bit to find the necessary fields.  Kinda sloppy, but gets the job done.

Here is the source:
Updated 1/22/13 3:14p



//
//  main.m
//  Pollhacky
//
//  Created by Donald A Wittbrodt on 1/22/13.
//  Copyright (c) 2013 Donnie Wittbrodt. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "DLoad.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        DLoad *dl = [[DLoad alloc] init];
        int numMillisecondsToDelay = 50;
        NSLog(@"Press 1 then Enter to exit.  Votes once every %d milliseconds to avoid invalid votes.", numMillisecondsToDelay);
        dl.delayTimeInMilliseconds = numMillisecondsToDelay;
        [NSThread detachNewThreadSelector:@selector(bruteVote) toTarget:dl withObject:nil];
        int i=0;
        while(1) {
            //Check to see if user cancelled
            scanf("%d", &i);
            if(i == 1) {
                //Tell the bruteVote to stop
                dl.stillVoting = NO;
                break;
            }
            //Give the main thread a small break to ease cpu usage
            usleep(0.5);
        }
        [dl release];
        
    }
    return 0;
}






//
//  DLoad.h
//  Pollhacky
//
//  Created by Donald A Wittbrodt on 1/22/13.
//  Copyright (c) 2013 Donnie Wittbrodt. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface DLoad : NSObject <NSURLConnectionDelegate>
{
    BOOL stillVoting;
    int delayTimeInMilliseconds;
    
    
}
-(void)bruteVote;
@property BOOL stillVoting;
@property int delayTimeInMilliseconds;
@end






//
//  DLoad.m
//  Pollhacky
//
//  Created by Donald A Wittbrodt on 1/22/13.
//  Copyright (c) 2013 Donnie Wittbrodt. All rights reserved.
//

#import "DLoad.h"

@implementation DLoad
@synthesize stillVoting, delayTimeInMilliseconds;

-(id)init
{
    self = [super init];
    if(self) {
        stillVoting = YES;
        delayTimeInMilliseconds = 250;
    }
    return self;
}

-(void)bruteVote
{
    while(stillVoting) {
        //Find the poll id for the poll you want
        NSString *pollID = @""; //Example: 6830128
        //Find the answer id for the answer you want
        NSString *answerID = @""; //Example: 31000396
        
        NSURL *pollURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://polldaddy.com/poll/%@/", pollID]];
        
        //Get the hmtl string to get the time and token fields
        NSString *getStr = [NSString stringWithContentsOfURL:pollURL encoding:NSUTF8StringEncoding error:nil];
        //Get the time
        NSString *t = [[[[getStr componentsSeparatedByString:@",&quot;t&quot;:"] objectAtIndex:1] componentsSeparatedByString:@",&quot;"] objectAtIndex:0];
        //Get the token
        NSString *token = [[[getStr componentsSeparatedByString:@"&quot;n&quot;:&quot;"] objectAtIndex:1] substringWithRange:NSMakeRange(0, 32)];
        
        NSString *fURLString = [NSString stringWithFormat:@"http://polldaddy.com/vote.php?va=10&pt=0&r=0&p=%@&a=%@%%2C&o=&t=%@&token=%@", pollID, answerID, t, token];
        NSString *str = [NSString stringWithContentsOfURL:[NSURL URLWithString:fURLString] encoding:NSUTF8StringEncoding error:nil];
        
        //NSLog(@"%@", str);
        if([str rangeOfString:@"Thank you for voting!"].location != NSNotFound) {
            NSLog(@"Voted!! :)");
        }
        else {
            NSLog(@"Vote failed. :(");
        }
        
        //Sleep delayTimeInMilliseconds to give cpu a break
        usleep(delayTimeInMilliseconds);
    }
}
@end