Category Archives: STK

How to Change the COM Port Number

Step by step guide on how to change COM Port number

Step 1: Open device manager, and expand ‘Ports (COM & LPT). I will use MobiGATE SG-B-8-U for this example

COM-01

 

Step 2: Select the COM Port you want to change, right click and click on ‘Properties’

COM-02

Step 3: Click on ‘Port Settings’ tab

COM-03

 

Step 4: Click on ‘Advanced’

COM-04

 

Step 5: Select the COM Port that is not in use. I will select COM Port 26 for this example.

COM-05

 

Step 6: Click on ‘OK’. The COM Port is changed now.

COM-06

MOBITEK STK ENGINE version 4.5 is Released

Version 4.5 supports 8 STK Engines. The setup.exe will create 8 MOBITEK STK ENGINES (previously was 4 STK Engines) in order to support the new MOBITEK Q24 STK MODEM HUB model: B-8-U

MOBITEK Q24 STK MODEM HUB model B-8-U

MOBITEK Q24 STK MODEM HUB
model B-8-U

More Information

How to Insert SIM Card

(note: for updated post, please refer to https://mobitek-system.com/blog/2017/07/how-to-insert-sim-card-into-mobitkek-mobigate/)

  1. Before you insert the SIM card into your Modem, you must check the position of SIM Card.
    – MOBITEK MobiGATE or MOBITEK Q24 STK MODEM HUBHow to Insert SIM Card-01
    – The correct position of SIM Card to be inserted:How to Insert SIM Card-02
  2. When insert the SIM Card:-
    – the “gold area” of the SIM Card should be facing at down position;
    – turn on the switch button, you can see the blue LED Blinking which means your modem is connected. to the GSM/3G network

Applies To

  • MOBITEK MobiGATE, Model: SG-B-8-L-W
  • MOBITEK MobiGATE, Model: SG-B-8-U
  • MOBITEK Q24 STK Modem Hub, Model: B-8-U
  • MOBITEK Q24 GSM Modem Hub, Model: B-8-U

 

MOBITEK Air Time Reload Development Kit Contents is Revised

MOBITEK Air Time Reload Development Kit Contents is Revised-01

MOBITEK Air Time Reload Development Kit Contents is Revised-01

MOBITEK Air Time Reload Development Kit Contents is Revised-02

MOBITEK Air Time Reload Development Kit Contents is Revised-02

 

Contains installer for MOBITEK STK API version 6.5.

More Information

 

MOBITEK STK ENGINE version 4.4 is Released

PROBLEM: the STK ENGINE has problem submitting “OK” to STK. Refer below for the log in “ini” file:

 Confirm reload to 0173737692 with RM 10.00 now
 > OK
 STK status is unknown.
 >
 STK status is unknown.
 STK status is unknown.
 STK status is unknown.
 STK status is unknown.
 STK is deactivated!
 12/21/2015 4:25:58 AM

 

SOLUTION: bug fixed in MOBITEK STK ENGINE version 4.4

 

How to Write a Multi-Threaded Java Code with MOBITEK Q24 STK API

SUMMARY OF SUPPORT for MOBITEK Q24 STK MODEM



 

Product:
  1.  MOBITEK Q24 STK MODEM HUB
  2. MOBITEK STK API version 6.3

Which programming language are you using?

  • JAVA
  • JRE version: 7.0-b147
  • JACOB versio: 1.14.3

OS

Windows 7, 64 it
SIM CARD: M-PESA
Description of Problem: We are unable to start multiple modems at once. We have written our application using JAVA, and we are using threads for each modem. The first one works fine, but the next ones fail to connect. The application complain about access.
Final Solution: We do no have Java programme in our team. We will try our best to assist you by pointing you to the right direction.The recommended way is to create an executable (.exe) for each STK modem. E.g. 8 STK modems will have 8 exe. This is easiest and safest. Threading requires programmer having good understanding of thread coding.
The “MobitekSTK6.dll” is apartment threaded. Refer to http://danadler.com/jacob/JacobThreading.html
“If you are using a component that declares itself as ThreadingModel “Apartment” (you can find this out by looking in the registry under its CLSID), and you plan to create, use and destroy this component in one thread – then you are following the rules of an STA and you can declare the thread as an STA thread.”We suggest that you code according to single threaded apartment (STA) instead of multi-threaded apartment (MTA). This means:-

  • all threads must be independent of other each other
  • thread 1 cannot call or pass values to thread 2

Please refer to
ScriptTest.java – creates an STA for the ScriptControl component and runs all its method calls from that STA.”

More Information

 

What is the Maximum Number of USB Ports in Windows?

The maximum number of USB ports can be created in Windows is 256 ports (in theory).

But reality is 127 ports, so about 31 units of MOBITEK Q24 STK Modem Hubs. So 124 SIM cards per server.

But 1 server has maximum of built-in 6 USB ports, so 6 Hubs x 4 = 24 SIM cards per server.

We suggest that you use MOBITEK Q24 STK Modem Hub, model: STKMH-EP432-C which is based on LAN connectivity to overcome USB port restriction on a server.

M-Pesa SIM Card — Input Value in UCS2 Format

M-Pesa

M-Pesa

There are new batch of M-Pesa SIM Card with STK (SIM Tool Kit) that requires you to input value in UCS2 format instead of text format.

In order to submit or input value in UCS2 using MOBITEK®  Q24 STK API , you need convert the text into USC2 (hexadecimal) format, e.g.

Michael => 004d00690063006800610065006c

 

More Information

 

Java Sample Code for MOBITEK STK API version 6.3 — Send and Read SMS

Introduction

STK refers to SIM Tookit or SIM Tool Kit.

SAT refers to SIM Application Toolkit

Both terms are interchangeable.

Java Sample Code

Declaring variables

 static Variant vMOBITEK;
 static boolean bMOBITEK;
 static int iMOBITEK;
 static String sMOBITEK;

//construct objects for each class in "MobitekSTK6.dll"

static ActiveXComponent Modem = new ActiveXComponent ("MobitekSTK6.Modem");
static ActiveXComponent STKAPI = new ActiveXComponent ("MobitekSTK6.SIMToolKit");
static ActiveXComponent SMS = new ActiveXComponent ("MobitekSTK6.SMS");

To send SMS in java

public static void sendMessage()
 //SV: to send SMS; maximum 160 characters 
 {

 //########### turn delivery status report on #######################
 //call API to turn delivery status report on
 vMOBITEK = SMS.invoke("DeliveryReportOn");
 //the return value of "DeliveryReportOn" is a boolean
 bMOBITEK = vMOBITEK.getBoolean();
 //AQ : therefore assign bMOBITEK as return value of "DeliveryReportOn" 
 if (bMOBITEK)
 {
 System.out.println("Delivery status report is turned on.");
 }
 else
 {
 System.out.println("Delivery status report is NOT turned on!");
 }
 //########### end: turn delivery status report on #######################
 
 //------------------ send SMS ----------------------------------------
 //set value of property;
 //"ToNumber" is the recipient's number;
 SMS.setProperty("ToNumber", "0176096718");
 //"ToMessage" is the SMS to be send to the recipient; maximum 160 characters
 SMS.setProperty("ToMessage", "Hello from JAVA with SMS API version 7. Test no. 6");
 //AQ : call API to send new message
 vMOBITEK = SMS.invoke("SendSMS");
 //AQ : the return value of "SendSMS" is a boolean
 bMOBITEK = vMOBITEK.getBoolean();
 //AQ : therefore assign bMOBITEK as return value of "SendSMS" 
 if (bMOBITEK)
 {
 System.out.println("Message sent!");
 
 //try 3 times
 for (int i=1; i<=3; i++) 
 {
 try {
 //AQ : call API to get delivery report
 vMOBITEK = SMS.invoke("GetDeliveryReport");
 //AQ : the return value of "GetDeliveryReport" is a boolean
 //AQ : therefore assign bMOBITEK as return value of "GetDeliveryReport"
 bMOBITEK = vMOBITEK.getBoolean();
 if (bMOBITEK)
 {
 //when "GetDelIveryStatusReport = True", then get value of properties
 int DRStatus = SMS.getPropertyAsInt("DRStatus"); 
 String DRMNRecipient = SMS.getPropertyAsString("DRMNRecipient");
 String DRMsgRef = SMS.getPropertyAsString("DRMsgRef");
 String DRFDate = SMS.getPropertyAsString("DRFDate");
 String DRFTime = SMS.getPropertyAsString("DRFTime");
 String DRRDate = SMS.getPropertyAsString("DRRDate");
 String DRRTime = SMS.getPropertyAsString("DRRTime");
 
 if (DRStatus == 1)
 {
 //System.out.println("The status of your outgoing SMS with reference number, " + DRMsgRef + ", is " + DRStatus + ".");
 System.out.println("The status of your outgoing SMS with reference number, " + DRMsgRef + ", is delivered.");
 System.out.println("Your outgoing SMS was received by the SMS Centre on " + DRRDate + ", at " + DRRTime + ", and was successfully delivered to " + DRMNRecipient + ", on " + DRFDate + ", at " + DRFTime + ".");
 }
 else
 if (DRStatus == 0)
 {
 //System.out.println("The status of your outgoing SMS with reference number, " + DRMsgRef + ", is " + DRStatus + ".");
 System.out.println("The status of your outgoing SMS with reference number, " + DRMsgRef + ", is not delivered.");
 System.out.println("Your outgoing SMS was received by the SMS Centre on " + DRRDate + ", at " + DRRTime + ", and was NOT successfully delivered to " + DRMNRecipient + "."); 
 }
 else
 if (DRStatus == 2)
 {
 //System.out.println("The status of your outgoing SMS with reference number, " + DRMsgRef + ", is " + DRStatus + ".");
 System.out.println("The status of your outgoing SMS with reference number, " + DRMsgRef + ", is unknown.");
 System.out.println("Your outgoing SMS was received by the SMS Centre on " + DRRDate + ", at " + DRRTime + ", and NO status is available.");
 }
 
 break; 
 
 }
 
 else
 {
 System.out.println("No delivery status report available!"); 
 }
 
 //SV: wait for 5 seconds before looping; delivery report from GSM network takes time
 Thread.sleep(5000);
 }
 catch (InterruptedException e)
 {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 } 
 }
 else
 {
 System.out.println("Message NOT sent!");
 }
 //------------------ end: send SMS ----------------------------------------
 }

To Read SMS in java

public static void readMessage() {
 //AQ : readMessage() function is for modem to read incoming message from the sender 
 //------------------------------------------- read SMS -------------------------------------------
 //call API to read incoming SMS 
 vMOBITEK = SMS.invoke("ReadSMS");
 //AQ : the return value of "ReadSMS" is a boolean, therefore assign bMOBITEK as return value of "ReadSMS"
 bMOBITEK = vMOBITEK.getBoolean();
 //if there is new SMS, then get property
 if (bMOBITEK)
 {
 //property "MN" is the sender's mobile number 
 String InNumber = SMS.getPropertyAsString("MN");
 //property "MSG" is the sender's message
 String InMessage = SMS.getPropertyAsString("MSG");
 //property "SCTS" time of the message received by SMS Centre
 String InTime = SMS.getPropertyAsString("SCTS");
 System.out.println("Incoming SMS Read \n From: " + InNumber + "\n Message: "+ InMessage + "\n Time: " + InTime );
 }
 else
 {
 System.out.println("No incoming SMS!");
 }
 //---------------------------------------- end: read SMS ----------------------------------------- 
 }

More Information

Path/File Access Error

Problem

When running sample code of Java for MOBITEK®  Q24 STK API, you may encounter an error message:-

Exception in thread “main” com.jacob.com.ComFailException: Invoke of: Init Source: MobitekSTK6 Description: Path/File access error

Applies To

  • MOBITEK®  Q24 STK API version 6.x
  • Windows 7 and above; 32 bit and 64 bit
  • JACOB version 1.14.3
  • JRE 1.6 and above

Solution

Run Eclipse as an administrator.