Monday 16 January 2017

Reflashing / Unbricking Chinese Smart Phone



I recently bought an Leagoo M5 for my father, my son already owns one of these phones are it certainly does the job for the price.

My father Leagoo bricked 1 hour after installing the latest system updates.

Being familiar with flashing phones (experience of Cyanogenmod), I thought I'd attempt to reflash the operating system. 

There's lots of misleading information on the internet about the subject so I'd thought I'd document my experiences.

Things you need for a  re-flash:

1. A copy of the stock operating system image, this can usually be downloaded from your Smart Phones support webpage.

2. Smart Phone Flash Tool aka SP_Flash_Tool, ensure the you get the latest one (I used 5.1648).

3. A copy of USBDeview.exe (Nirsoft's)


Instructions

a. Run USBDeview and remove any copies of the MediaTek USB port driver.

b. Switch your phone off and connect to the PC via USB, the driver should automatically install.

c. Unplug your phone and REMOVE the battery.

d. Run the SP_Flash_Tool 

1. Select Download Agent (This is bundled for with the SP_Flash_Tool).

2. Select the Scatter Loading File, this will be located in the same directory where the stock rom for your phone. If you get a check sum error when load this file, delete the checksum.ini from the stock rom directory.

3. Make sure download only is set.

4.Press the download button.

e. Remove the battery from the phone.

f. Hold Volume Up/ Volume Down on the phone and insert the USB cable.

If everything is done correctly the flashing should begin.



Friday 9 September 2016

Broken Windows Spotlight

I recently install Windows 10 Pro and updated it to anniversary edition, after logging into our domain I noticed that Windows Spotlight had stopped working and the preview screen was grey.
Should this happen to you try the following solution:


  1. In Personalization->Lock Screen settings change Background to Picture.
  2. Delete everything from folder 
    C:\Users\<USERNAME>\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_<somerandomcharacters>\Settings
  3. In Personalization->Lock Screen settings change Background back to Windows Spotlight

Thursday 19 November 2015

WPF Development for Windows 10

WPF Development for Windows 10

We are currently developing LOB applicatons for Windows 10, we have decided not to develop native Windows 10 applications due to the fact that the applications have to be loaded on each users machine in the App Container. So we have turned back to generic WPF desktop Applications.

My toolset so far is:

Mah Apps for UI
Caliburn.Micro for MVVM
ProperyChanged.FODY for Project Change Injections.

I will be amending this as new tools/frameworks as used.

Thursday 17 September 2015

DOM 1084 WSearch

Ever had the dread black screen after boot on Windows 7,8 and 10 and the only thing you can do to get to the desktop is boot in Safe Mode?

You then look at the event viewer only to see thousands of
DCOM got error "1084" attempting to start the service WSearch with arguments "" in order to run the server:
{9E175B6D-F52A-11D8-B9A5-5050545030}

My solution was to remove the graphics driver and reboot, hope that helps.

Edit:
The problem is rectified by getting into Safe Mode creating a new user (as Administrator), rebooting and logging to the new user and removing the old user.
This seems to fix the problem and I have had this happening on 3 devices.

Friday 3 July 2015

SSL and ServiceStack

SSL and ServiceStack

Ok now I have my ServiceStack working with Android using the native ServiceStack client (AndroidServiceClient). I have now implemented SSL. I've opted for Self Signed Certs at the moment.

My current setup is:


Desktop->Cisco Router->Android

The desktop requires the Self Signed Certificate creating, I'm using SelfSSL.exe for the job.
C:\ssl>selfssl /N:CN=YourSerivceName /V:9999

C:\MMC
Then Add Snap-In Certificate Manager running under Local Machine.
Copy your  YourSerivceName cert to the Trusted Root Certification Authorities

C:\netsh http add sslcert ipport=0.0.0.0:xxxx appid={yyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy} certhash=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Where:
xxxx is the listening SSL port
{yyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy}  is the the assembky guid from AssemblyInfo.cs in your ServiceStack application.

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz is the Thumbprint from your YourSerivceName certificate.

In may case the to allow port xxxx through on my desktop firewall.
On my cisco router I have forward the port:
ip nat inside source static tcp desktop.pc.address xxxx my.wan.addreess xxxx extendable

Then allow the port to be accessible on the inbound rule
access-list aaa permit tcp any host my.wan.address eq xxxx

To test the port is open, start your ServiceStack application
new AppHost().Init().Start("https://+:xxxx/");
then use a free online port checking tool to see if all in ok. I use ww.yougetsignal.com/tools/open_ports/  

Congratulations you created a ServiceStack SSL service! 
 

Wednesday 1 July 2015

AndroidServiceClient with Authentication

I'm currently researching ServiceStack as a replacement to my own services for handling REST between Android and Windows.

I've got the client (Android) working using loopj's AsyncHttpClient. But I was looking for a more native library. Initially I was using Jsonserviceclient but decided on the AndroidServiceClient. The problem I had was setting up basic authentication on the connection. After a few hours of reading JsonServiceClient.java (which AndroidServiceClient extends). It transpired I have to implement my own request ConnectionFilter and set uo the request headers in the void exec(HttpURLConnection urlConnection) method.

After creating code I got the error "cannot set request property after connection is made".
Seems I needed to tweak the code to suppress this error.

CustomRequestFilter...
package com.jjoplc.pod.Views;

import android.util.Base64;
import net.servicestack.client.ConnectionFilter;
import java.net.HttpURLConnection;

/**
 * Created by norm on 01/07/2015.
 */
public class CustomRequestFilter implements ConnectionFilter {

    private String password = "";
    private String username = "";

    static  boolean done = false;
    public void exec(HttpURLConnection urlConnection) {
        if (done) {
            done = false;
            return;
        };

        done = true;

        String credentials = username + ":" + password;
        final String basicAuth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
        urlConnection.setRequestProperty("Authorization", basicAuth);
    }

    public void setUsername(String userName) {
        this.username = userName;
    }

    public void setPassword(String passWord) {
        this.password = passWord;
    }
}



Set up.


 _androidClient = new AndroidServiceClient("http://myservice:8088");
_requestFilter = new CustomRequestFilter();
_requestFilter.setUsername("User");
_requestFilter.setPassword("Password");
_androidClient.RequestFilter = _requestFilter;


And Test.


androidClient.getAsync(new dto.Hello().setName("Normski"), new AsyncResult<dto.HelloResponse>() {
    @Override
    public void success(dto.HelloResponse r) {
        view.setText(r.getResult());
    }

    @Override
    public void error(Exception ex) {
        view.setText(ex.toString());
    }
});