diff options
author | Bjørn Mork <bjorn@mork.no> | 2015-12-08 17:03:30 +0100 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2015-12-08 17:03:35 +0100 |
commit | f950d23e6928c3fecf5e2a44f874c96cad4b9e0c (patch) | |
tree | d173e6a41bec6ff01c89ce8e42011f526827e009 | |
parent | 4b9ddf0a95f000a71a670de0930e8ccf27a1599a (diff) |
swi-sdk-firmware: sample SLQS application
Working now:
nemi:/home/bjorn# ~bjorn/privat/prog/git/wwan/src/swi-sdk-firmware 4
argc=2
setting sdk path to
/usr/local/src/git/swi-slqs/build/bin/hosti686/slqssdk
node=/dev/qcqmi0, key=35907206000556
bar
foo
result: 0
001.008 000 01.09.06.00 GENERIC
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r-- | src/Makefile | 12 | ||||
-rw-r--r-- | src/swi-sdk-firmware.c | 99 |
2 files changed, 111 insertions, 0 deletions
diff --git a/src/Makefile b/src/Makefile index 0f4b0b4..a136c7f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,6 +6,15 @@ BINARIES=wwan_ctl qcqmifs flush-wdm CFLAGS_USB=$(shell pkg-config libusb-1.0 --cflags) LDLIBS_USB=$(shell pkg-config libusb-1.0 --libs) +# Sierra Linux QMI SDK - partly from /usr/local/src/git/swi-slqs/pkgs/slqscompile.mak +SDKPATH=/usr/local/src/git/swi-slqs +SDKCPU=hosti686 +CFLAGS_SDK=-m32 -Wall -Werror -Wextra -DSDK_EXE='$(SDKPATH)/build/bin/$(SDKCPU)/slqssdk' +LDLIBS_SDK=-Wl,--start-group -lrt -lpthread -lslqsapi -lslqscore -lslqsqmi -Wl,--end-group +LDFLAGS_SDK=-L/usr/lib32 -L$(SDKPATH)/build/lib/$(SDKCPU) -static +inc_paths=$(shell echo $(SDKPATH)/api/*/inc) +INCLUDE_SDK=-I$(SDKPATH)/api -I$(SDKPATH)/api/inc $(inc_paths:%=-I%) + all: $(BINARIES) clean: @@ -29,5 +38,8 @@ cuseqmi: cuseqmi.c swi-firmware: swi-firmware.c $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) +swi-sdk-firmware: swi-sdk-firmware.c + $(CC) $(CFLAGS_SDK) $(INCLUDE_SDK) $(LDFLAGS_SDK) -static -lrt -lpthread -o $@ $^ $(LDLIBS_SDK) + flush-wdm: flush-wdm.c $(CC) $(CFLAGS_USB) $(LDFLAGS) -o $@ $^ $(LDLIBS_USB) diff --git a/src/swi-sdk-firmware.c b/src/swi-sdk-firmware.c new file mode 100644 index 0000000..fd76bfa --- /dev/null +++ b/src/swi-sdk-firmware.c @@ -0,0 +1,99 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/* QMI SDK */ +#include "SWIWWANCMAPI.h" +#include "qmerrno.h" + +/* stolen from SampleApps/Firmware_Download/inc/fwDld_9x15.h */ +#define IMG_FW_TYPE_CWE 2 +#define IMG_PRI_TYPE_NVU 3 +#define IMG_FW_TYPE_SPK 4 + +#define __stringify_1(x...) #x +#define __stringify(x...) __stringify_1(x) + +/* builtin sdk binary location */ +static char *sdkpath = __stringify(SDK_EXE); +char devmode; + +void get_img_info(char *imgpath) +{ + CurrentImgList CurrImgList; + CurrImageInfo currImgInfo[5]; + BYTE numEntries = 5; + int i, ret; + + printf("bar\n"); + if (strlen(imgpath)) + printf("foo\n"); + memset( (void *)&CurrImgList, 0, sizeof( CurrImgList ) ); + memset( (void *)&currImgInfo, 0, sizeof( currImgInfo ) ); + CurrImgList.pCurrImgInfo = currImgInfo; + CurrImgList.numEntries = numEntries; + + /* There are 2 possible scenario's determined by calling SLQSSwiGetFwCurr + * 1) Device does not support Gobi IM - In this case use same procedure as + * FwDloader_9x00. In this case, we need only one file( spkg format). + * 2) Device supports GIM but data returned is blank. Use normal procedure. */ + ret = SLQSSwiGetFirmwareCurr( &CurrImgList ); + + printf("result: %d\n", ret); + + printf("%s %s %s %s\n", CurrImgList.priver,CurrImgList.pkgver,CurrImgList.fwvers,CurrImgList.carrier ); + + for (i = 0; i < ret; i++) { + printf("%u %s %u %s\n", currImgInfo[i].imageType, currImgInfo[i].uniqueID, currImgInfo[i].buildIDLen, currImgInfo[i].buildID); + } + +} + +typedef struct device_info { + char node[256]; + char key[16]; +} devinfo_t; + +int start_sdk() +{ + int rc; + unsigned char num = 3; + struct device_info dev[3], *pdev; + + /* Set SDK image path */ + printf("setting sdk path to %s\n", sdkpath); + rc = SetSDKImagePath(sdkpath); + if (rc) + return rc; + + /* Establish APP<->SDK IPC to first modem found */ + rc = SLQSStart(0, NULL); + if (rc) + return rc; + + /* get the device mode */ + rc = SLQSGetDeviceMode((unsigned char *)&devmode); + + /* Can enumerate and connect only if device is in Application mode */ + if (devmode == DEVICE_STATE_READY) { + while (QCWWAN2kEnumerateDevices(&num, (unsigned char *)&dev[0])) { + printf("\nUnable to find device..\n"); + sleep(1); + } + } + pdev = &dev[0]; + printf("node=%s, key=%s\n", dev[0].node, dev[0].key); + rc = QCWWANConnect(pdev->node, pdev->key); + + return rc; +} + + +int main(int argc, char *argv[]) +{ + printf("argc=%d\n", argc); + start_sdk(); + get_img_info(argv[1]); + return 0; +} |