From 0b71a45ca7342c6c09770c2dcb440660149c6ace Mon Sep 17 00:00:00 2001 From: Bhuvanchandra DV Date: Fri, 27 Oct 2017 17:51:39 +0530 Subject: [PATCH] Commit gtk pos-demo --- .gitignore | 3 + pos-demo/LICENSE | 19 + pos-demo/Makefile | 112 + pos-demo/README.md | 4 + pos-demo/co-proc-lib.h | 87 + pos-demo/co-proc.c | 178 + pos-demo/co-proc.o | Bin 0 -> 13984 bytes pos-demo/co-proc.o.d | 1 + .../share/applications/POS-Demo.desktop | 10 + .../share/doc/POSDemoQuickInfo/ApalisT30.txt | 40 + .../doc/POSDemoQuickInfo/ColibriPXA270.txt | 36 + .../doc/POSDemoQuickInfo/ColibriPXA300.txt | 36 + .../doc/POSDemoQuickInfo/ColibriPXA310.txt | 36 + .../doc/POSDemoQuickInfo/ColibriPXA320.txt | 37 + .../share/doc/POSDemoQuickInfo/ColibriT20.txt | 37 + .../share/doc/POSDemoQuickInfo/ColibriT30.txt | 36 + .../share/doc/POSDemoQuickInfo/RobinZ510S.txt | 29 + .../share/doc/POSDemoQuickInfo/RobinZ530L.txt | 29 + .../share/doc/POSDemoQuickInfo/RobinZ530M.txt | 29 + .../share/doc/POSDemoQuickInfo/end.txt | 9 + .../meta-data/share/glade/pos-linux.glade | 2858 +++++++++++++++++ .../meta-data/share/pixmaps/apalis-icon.png | Bin 0 -> 2731 bytes .../meta-data/share/pixmaps/cloud-icon.png | Bin 0 -> 5270 bytes .../meta-data/share/pixmaps/colibri-icon.png | Bin 0 -> 2619 bytes pos-demo/meta-data/share/pixmaps/pos-icon.png | Bin 0 -> 13876 bytes .../meta-data/share/pixmaps/pos-title.png | Bin 0 -> 12533 bytes .../meta-data/share/pixmaps/robin-icon.png | Bin 0 -> 5650 bytes .../meta-data/share/pixmaps/toradex-icon.png | Bin 0 -> 8259 bytes .../share/pixmaps/toradex-linux-icon.png | Bin 0 -> 1566 bytes pos-demo/pos | Bin 0 -> 14224 bytes pos-demo/pos-elinux.c | 385 +++ pos-demo/pos-elinux.glade | 2577 +++++++++++++++ pos-demo/pos-elinux.h | 35 + pos-demo/pos-elinux.o | Bin 0 -> 57728 bytes pos-demo/pos-elinux.o.d | 563 ++++ 35 files changed, 7186 insertions(+) create mode 100644 pos-demo/LICENSE create mode 100644 pos-demo/Makefile create mode 100644 pos-demo/README.md create mode 100644 pos-demo/co-proc-lib.h create mode 100644 pos-demo/co-proc.c create mode 100644 pos-demo/co-proc.o create mode 100644 pos-demo/co-proc.o.d create mode 100644 pos-demo/meta-data/share/applications/POS-Demo.desktop create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ApalisT30.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA270.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA300.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA310.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA320.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT20.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT30.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ510S.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530L.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530M.txt create mode 100644 pos-demo/meta-data/share/doc/POSDemoQuickInfo/end.txt create mode 100644 pos-demo/meta-data/share/glade/pos-linux.glade create mode 100644 pos-demo/meta-data/share/pixmaps/apalis-icon.png create mode 100644 pos-demo/meta-data/share/pixmaps/cloud-icon.png create mode 100644 pos-demo/meta-data/share/pixmaps/colibri-icon.png create mode 100644 pos-demo/meta-data/share/pixmaps/pos-icon.png create mode 100644 pos-demo/meta-data/share/pixmaps/pos-title.png create mode 100644 pos-demo/meta-data/share/pixmaps/robin-icon.png create mode 100644 pos-demo/meta-data/share/pixmaps/toradex-icon.png create mode 100644 pos-demo/meta-data/share/pixmaps/toradex-linux-icon.png create mode 100755 pos-demo/pos create mode 100644 pos-demo/pos-elinux.c create mode 100644 pos-demo/pos-elinux.glade create mode 100644 pos-demo/pos-elinux.h create mode 100644 pos-demo/pos-elinux.o create mode 100644 pos-demo/pos-elinux.o.d diff --git a/.gitignore b/.gitignore index 28872a6..9ffc997 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /.metadata/ RemoteSystemsTempFiles/ +pos-demo/.cproject +pos-demo/.project + diff --git a/pos-demo/LICENSE b/pos-demo/LICENSE new file mode 100644 index 0000000..b88a412 --- /dev/null +++ b/pos-demo/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013-2016 Toradex + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pos-demo/Makefile b/pos-demo/Makefile new file mode 100644 index 0000000..d54ee96 --- /dev/null +++ b/pos-demo/Makefile @@ -0,0 +1,112 @@ +# file Makefile +# copyright Copyright (c) 2014 Toradex AG +# [Software License Agreement] +# author $Author$ +# version $Rev$ +# date $Date$ +# brief a simple makefile to (cross) compile. +# uses the openembedded provided sysroot and toolchain +# target linux on Colibri T20 / Colibri T30 / Colibri VF50 / Colibri VF61 / Apalis T30 / Apalis IMX6Q/D +# caveats - + +############################################################################## +# Setup your project settings +############################################################################## + +# Set the input source files, the binary name and used libraries to link +SRCS = pos-elinux.o co-proc.o +PROG := pos +LIBS = -lm -lpthread +MACHINE ?= colibri-vf + +# Set arch flags +ARCH_CFLAGS = -march=armv7-a -fno-tree-vectorize -mthumb-interwork -mfloat-abi=hard + +ifeq ($(MACHINE), colibri-t20) + ARCH_FLAGS += -mfpu=vfpv3-d16 -mtune=cortex-a9 +else ifeq ($(MACHINE), colibri-t30) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a9 +else ifeq ($(MACHINE), colibri-vf) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a5 +else ifeq ($(MACHINE), apalis-t30) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a9 +else ifeq ($(MACHINE), apalis-imx6) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a9 + CFLAGS += -DAPALIS_IMX6 +else ifeq ($(MACHINE), colibri-imx6) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a9 + CFLAGS += -DCOLIBRI_IMX6 +else ifeq ($(MACHINE), colibri-imx7) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a7 + CFLAGS += -DCOLIBRI_IMX7 +else ifeq ($(MACHINE), apalis-tk1) + ARCH_FLAGS += -mfpu=neon -mtune=cortex-a15 + CFLAGS += -DAPALIS_TK1 +else + $(error MACHINE is not set to a valid target) +endif + +# Set flags to the compiler and linker +CFLAGS += -O2 -g -Wall -DNV_IS_LDK=1 $(ARCH_CFLAGS) `$(PKG-CONFIG) --cflags gtk+-2.0` --sysroot=$(OECORE_TARGET_SYSROOT) -I$(OECORE_TARGET_SYSROOT)include +#LDFLAGS += $(OECORE_TARGET_SYSROOT)/lib/libsoc.a +LDFLAGS += `$(PKG-CONFIG) --libs gtk+-2.0` -rdynamic + +############################################################################## +# Setup your build environment +############################################################################## + +# Set the path to the oe built sysroot and +# Set the prefix for the cross compiler +OECORE_NATIVE_SYSROOT ?= /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux +OECORE_TARGET_SYSROOT ?= /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/ +CROSS_COMPILE ?= $(OECORE_NATIVE_SYSROOT)usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi- + +############################################################################## +# The rest of the Makefile usually needs no change +############################################################################## + +# Set differencies between native and cross compilation +ifneq ($(strip $(CROSS_COMPILE)),) + LDFLAGS += -L$(OECORE_TARGET_SYSROOT)usr/lib -Wl,-rpath-link,$(OECORE_TARGET_SYSROOT)usr/lib -L$(OECORE_TARGET_SYSROOT)lib -Wl,-rpath-link,$(OECORE_TARGET_SYSROOT)lib + BIN_POSTFIX = + PKG-CONFIG = export PKG_CONFIG_SYSROOT_DIR=$(OECORE_TARGET_SYSROOT); \ + export PKG_CONFIG_PATH=$(OECORE_TARGET_SYSROOT)/usr/lib/pkgconfig/; \ + $(OECORE_NATIVE_SYSROOT)/usr/bin/pkg-config +else +# Native compile + PKG-CONFIG = pkg-config + ARCH_CFLAGS = +# Append .x86 to the object files and binaries, so that native and cross builds can live side by side + BIN_POSTFIX = .x86 +endif + +# Toolchain binaries +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)ld +STRIP = $(CROSS_COMPILE)strip +RM = rm -f + +# Sets the output filename and object files +PROG := $(PROG)$(BIN_POSTFIX) +OBJS = $(SRCS:.c=$(BIN_POSTFIX).o) +DEPS = $(OBJS:.o=.o.d) + +# pull in dependency info for *existing* .o files +-include $(DEPS) + +.DEFAULT_GOAL := all + +all: $(PROG) + +$(PROG): $(OBJS) Makefile + $(CC) $(CFLAGS) $(OBJS) $(LIBS) $(LDFLAGS) -o $@ + $(STRIP) $@ + +%$(BIN_POSTFIX).o: %.c + $(CC) -c $(CFLAGS) -o $@ $< + $(CC) -MM $(CFLAGS) $< > $@.d + +clean: + $(RM) $(OBJS) $(PROG) $(DEPS) + +.PHONY: all clean diff --git a/pos-demo/README.md b/pos-demo/README.md new file mode 100644 index 0000000..c6ed798 --- /dev/null +++ b/pos-demo/README.md @@ -0,0 +1,4 @@ +# POS Demo +Point of sale demo example in GTK+ and Glade + +### diff --git a/pos-demo/co-proc-lib.h b/pos-demo/co-proc-lib.h new file mode 100644 index 0000000..c67af1b --- /dev/null +++ b/pos-demo/co-proc-lib.h @@ -0,0 +1,87 @@ +/* +Toradex AG + +CoProcLib.h +*/ + +#ifndef __COPROC_LIB_H__ +#define __COPROC_LIB_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +//wince data type +#ifndef DWORD +#define DWORD unsigned int +#endif + +#define CPL_VER_MAJ 2 +#define CPL_VER_MIN 0 +#define CPL_VER_BUILD 0 + +// SoC family Type +#define PXA 1 +#define TEG 2 +#define VF 3 +#define CPU_UNKNOWN 0 +#define MAGIC_NO 4 + +//Defines for getPROCID +#define TYPE_PXA270 0x11 +#define TYPE_MONAHANS 0x02 +#define TYPE_PXA320 0x02 +#define TYPE_PXA300 0x08 +#define TYPE_PXA310 0x09 +#define TYPE_TEGRA2 0x411FC09 +#define TYPE_TEGRA3 0x412FC09 +#define TYPE_VYBRID 0x410FC05 +#define TYPE_IMX6 0x412FC09 + MAGIC_NO /* FIXME */ + +#define MODULE_FAMILY_COLIBRI 0 +#define MODULE_FAMILY_APALIS 1 + +#define CPU_INFO "/proc/cpuinfo" +#define SOC_ID "/sys/bus/soc/devices/soc0/soc_id" + +/* +Gets CPUID (Coprocessor 15, cr0) +Processor information +*/ +DWORD getCPUID(); + +/* +Get Processor ID +Use this function to detect on which processor your program is running +*/ +DWORD getPROCID(); + +/* +Description: Returns the library Version +Parameter: +Out-Parameter: +- pVerMaj: Returns the major version number. Set this parameter to NULL if not required. +- pVerMin: Returns the minor version number. Set this parameter to NULL if not required. +- pBuild: Returns the build number. Set this parameter to NULL if not required. +Return Value: No return value. +*/ +void CPLGetLibVersion(DWORD *pVerMaj, DWORD *pVerMin, DWORD *pBuild); + +//------------------------------------------------------------------------- +/// To findout SoC family type +/// @param[out] CPU_TYPE: choose between soc family i.e PXA or tegra +DWORD GetSoCType(); + +/* +Returns +CPU_TYPE: MODULE_FAMILY_COLIBRI or MODULE_FAMILY_APALIS +*/ +DWORD getModuleFamily(char *moduleName); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/pos-demo/co-proc.c b/pos-demo/co-proc.c new file mode 100644 index 0000000..434b20d --- /dev/null +++ b/pos-demo/co-proc.c @@ -0,0 +1,178 @@ +#include "co-proc-lib.h" +#include +#include +#include + +//------------------------------------------------------------------------- +/// To findout SoC family type +/// @param[out] CPU_TYPE: choose between soc family i.e PXA or tegra +DWORD GetSoCType() +{ + DWORD CPUtype = CPU_UNKNOWN; + if((getPROCID() == TYPE_PXA320)| + (getPROCID() == TYPE_PXA300)| + (getPROCID() == TYPE_PXA310)| + (getPROCID() == TYPE_PXA270)){ + CPUtype = PXA; + } + else if((getPROCID() == TYPE_TEGRA2)| + (getPROCID() == TYPE_TEGRA3)){ + CPUtype = TEG; + } + else if (getPROCID() == TYPE_VYBRID){ + CPUtype = VF; + } + return CPUtype; +} + +DWORD getCPUID(){ + static unsigned int cpu_id = 0; /* this will stay for as long as the programm is executing */ + + if(cpu_id == 0){ /* first time this gets calculated */ + char buf[256]; + char *numStr; + FILE *file; + unsigned int res; + + /* CPU type */ + /* + 012345678901234567890123456789 + CPU implementer : 0x41 + CPU architecture: 7 + CPU variant : 0x1 + CPU part : 0xc09 + CPU revision : 0 + */ + file = fopen(CPU_INFO, "r"); + if (file){ + while (fgets(buf, 255, file)) { + if (strstr(buf, "CPU implementer")){ + numStr = strstr(&buf[14], ": "); + (void)sscanf(&numStr[4], "%x", &res); + cpu_id = (res & 0xff) << 24; + } + else if (strstr(buf, "CPU variant")){ + numStr = strstr(&buf[10], ": "); + (void)sscanf(&numStr[4], "%x", &res); + cpu_id |= (((res <<4) & 0xf0) | 0xf) << 16; + } + else if (strstr(buf, "CPU part")){ + numStr = strstr(&buf[8], ": "); + (void)sscanf(&numStr[4], "%x", &res); + cpu_id |= (res & 0xfff) << 4; + } + else if (strstr(buf, "CPU revision")){ + numStr = strstr(&buf[11], ": "); + (void)sscanf(&numStr[2], "%u", &res); + cpu_id |= (res & 0xf) ; + } + } + fclose(file); + } + else{ + printf("CPU info not available!"); + exit(-1); + } + cpu_id >>= 4; + + file = fopen(SOC_ID, "r"); + if(file){ + while(fgets(buf, 255, file)){ + if(strstr(buf, "i.MX6")){ /* Check for the id */ + cpu_id += MAGIC_NO; /* If ID matches to i.MX6xx we are adding constant to cpuID inorder to make it unique:FIXME */ + } + } + fclose(file); + } + } + return cpu_id; /* subsequent calls just return the pre-calculated value */ +} + +DWORD getPROCID(){ + DWORD procID; + procID = getCPUID(); + + //procID = procID>>4; //Remove Stepping + if((((procID >> 4) >> 12) & 0x0f) == 5){ //PXA + return (procID & 0x03F); // Return only Product ID + } + else{ + return procID; //return processor ID + } +} + +void CPLGetLibVersion(DWORD *pVerMaj, DWORD *pVerMin, DWORD *pBuild){ + if(pVerMaj) + *pVerMaj = CPL_VER_MAJ; + if(pVerMin) + *pVerMin = CPL_VER_MIN; + if(pBuild) + *pBuild = CPL_VER_BUILD; +} + +DWORD getModuleFamily(char *moduleName){ +#if 0 + uname(&uNameData); + if(strstr(uNameData.nodename, "colibri")){ + return MODULE_FAMILY_COLIBRI; + } + else if(strstr(uNameData.nodename, "apalis")){ + return MODULE_FAMILY_APALIS; + } +#endif + + char buf[256], hardware[128] = {0}; + FILE *file = NULL; + char *start = NULL, *numStr = NULL, *end = NULL; + size_t len = 0; + + file = fopen(CPU_INFO, "r"); /* Used for non-dt kernels */ + if (file){ + while (fgets(buf, 255, file)) { + if(strstr(buf, "Hardware")){ + numStr = strstr(&buf[7], ":"); + sprintf(hardware, "%s", numStr); + } + } + fclose(file); + start = strstr(hardware, "Toradex"); + if (start != NULL) { + start += 8; + end = strstr(start, "Module"); + if(end) len = end - start - 1; + else len = strcspn(start, "\n"); + } else { + file = fopen("/sys/firmware/devicetree/base/model", "r"); /* e.g: Toradex Colibri VF61 on Colibri Evaluation Board */ + if (file == NULL) { + file = fopen("/sys/bus/soc/devices/soc0/machine", "r"); /* e.g: Toradex Apalis iMX6Q on Apalis Evaluation Board */ + } + + if (file) { + while(fgets(buf, 255, file)){ + start = strstr(buf, "Toradex"); + if (start == NULL) { + printf("Invalid Machine!"); + exit(-1); + } + start += 8; + end = strstr(start, "on"); + if (end) len = end - start - 1; + else len = strlen(start); + } + fclose(file); + } + } + } else { + printf("CPU info not available!"); + exit(-1); + } + + strncpy(moduleName, start, len); /* for showing the module name on window title */ + if (strstr(moduleName, "Colibri")) { + return MODULE_FAMILY_COLIBRI; + } else if (strstr(moduleName, "Apalis")) { + return MODULE_FAMILY_APALIS; + } + + return -1; +} diff --git a/pos-demo/co-proc.o b/pos-demo/co-proc.o new file mode 100644 index 0000000000000000000000000000000000000000..eaafa4eb164fd6fad2d60c01d1f4f64a23dd0784 GIT binary patch literal 13984 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 K+KoYHlm81u&8Y1F literal 0 HcmV?d00001 diff --git a/pos-demo/co-proc.o.d b/pos-demo/co-proc.o.d new file mode 100644 index 0000000..34ae5e5 --- /dev/null +++ b/pos-demo/co-proc.o.d @@ -0,0 +1 @@ +co-proc.o: co-proc.c co-proc-lib.h diff --git a/pos-demo/meta-data/share/applications/POS-Demo.desktop b/pos-demo/meta-data/share/applications/POS-Demo.desktop new file mode 100644 index 0000000..94109cd --- /dev/null +++ b/pos-demo/meta-data/share/applications/POS-Demo.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=false +Icon[C]=pos-icon.png +Exec=/usr/bin/pos +Name[C]=POS Demo +Name=POS Demo +Icon=pos-icon.png +Name[en_IN]=POS Demo diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ApalisT30.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ApalisT30.txt new file mode 100644 index 0000000..d5691d0 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ApalisT30.txt @@ -0,0 +1,40 @@ +******************************* + Toradex Apalis T30 Module +******************************* +CPU Name NVidia Tergra 3 +CPU Type ARM Cortex-A9 +CPU Cores 4x +CPU clock 1.4 GHz +RAM 2GB DDR3(32bit) +Flash 2GB NAND(8Bit eMMc) +Display Dual(Independent) +Graphics GeForce GPU +2D/3D Yes +HDMI No +VGA No +RGB 2048 x 1536 24bpp +Touch 4-wire +Audio Yes +Ext Bus 16 Bit +USB 3 + 1 +I2C 3x + DDC +SPI 2x +One-Wire 1x +CF - +SD/MMC 2x +UART 4x +IrDA 1x +PWM 4x +GPIO up to 127 +Analog I/P 4x +PCIe 1x1, 1x4 +SeralATA 1x +SDIO/SD/MMC 1x8bit, 1x4bit +Ethernet 10/100/1000 Mbit +Camera 2x +CAN 2x +OS WinCE2013/7/6,Linux +Size 82.0x45.0x6.0 mm +Temperature 0 to 70 Degree C +Power 1.4 - 6.0 W +Availability till 2018 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA270.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA270.txt new file mode 100644 index 0000000..477e859 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA270.txt @@ -0,0 +1,36 @@ +******************************* + Toradex Colibri PXA270 Module +******************************* +CPU Name Marvell PXA270 +CPU Type Intel Xscale ARM +CPU Cores 1x +CPU clock 312/520 MHz +RAM 64MB SDRAM(32bit) +Flash 32MB NOR +Display Single +Graphics Inbuilt Controller +2D/3D No +HDMI No +VGA No +RGB 1024 x 768 18bpp +Touch 4/5-wire +Audio Yes +Ext Bus 32 Bit +USB 2x +I2C 1x +SPI 3x +One-Wire No +CF Yes +SD/MMC 1x +UART 3x +IrDA 1x +PWM 4x +GPIO up to 85 +Analog I/P 4x +Ethernet 10/100 Mbit +Camera 1x +OS WinCE 5.0 & 6.0 +Size 67.6x36.7x6.2 mm +Temperature -10 to 70 Degree C +Power 0.45 - 1.4 W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA300.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA300.txt new file mode 100644 index 0000000..7f8ba66 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA300.txt @@ -0,0 +1,36 @@ +******************************* + Toradex Colibri PXA300 Module +******************************* +CPU Name Marvell PXA300 +CPU Type Intel Xscale ARM +CPU Cores 1x +CPU clock 208 MHz +RAM 64MB DDR(16bit) +Flash 128MB NAND(8Bit) +Display Single +Graphics Inbuilt Controller +2D/3D No +HDMI No +VGA No +RGB 1024 x 768 18bpp +Touch - +Audio - +Ext Bus 16 Bit +USB 2x +I2C 1x +SPI 3x +One-Wire 1x +CF - +SD/MMC 2x +UART 3x +IrDA 1x +PWM 4x +GPIO up to 92 +Analog I/P - +Ethernet 10/100 Mbit +Camera 1x +OS WinCE 5.0 & 6.0 +Size 67.6x36.7x6.2 mm +Temperature 0 to 70 Degree C +Power 0.35 - 0.85 W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA310.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA310.txt new file mode 100644 index 0000000..053e0cf --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA310.txt @@ -0,0 +1,36 @@ +******************************* + Toradex Colibri PXA310 Module +******************************* +CPU Name Marvell PXA310 +CPU Type Intel Xscale ARM +CPU Cores 1x +CPU clock 624 MHz +RAM 128MB DDR(16bit) +Flash 512MB NAND(8Bit) +Display Single +Graphics Inbuilt Controller +2D/3D No +HDMI No +VGA No +RGB 1024 x 768 18bpp +Touch 4/5-wire +Audio Yes +Ext Bus 16 Bit +USB 2x +I2C 1x +SPI 3x +One-Wire 1x +CF - +SD/MMC 2x +UART 3x +IrDA 1x +PWM 4x +GPIO up to 92 +Analog I/P 4x +Ethernet 10/100 Mbit +Camera 1x +OS WinCE 5.0 & 6.0 +Size 67.6x36.7x6.2 mm +Temperature -20 to 85 Degree C +Power 0.7 - 1.5 W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA320.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA320.txt new file mode 100644 index 0000000..0523feb --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriPXA320.txt @@ -0,0 +1,37 @@ +******************************* + Toradex Colibri PXA320 Module +******************************* +CPU Name Marvell PXA320 +CPU Type Intel Xscale ARM +CPU Cores 1x +CPU clock 806 MHz +RAM 128MB DDR(16bit) +Flash 512MB NAND(8Bit) +Display Single +Graphics Inbuilt Controller +2D/3D No +HDMI No +VGA No +RGB 1024 x 768 18bpp +Touch 4/5-wire +Audio Yes +Ext Bus 16 Bit +USB 2x +I2C 1x +SPI 3x +One-Wire 1x +CF Yes +SD/MMC 2x +UART 3x +IrDA 1x +PWM 4x +GPIO up to 93 +Analog I/P 4x +Ethernet 10/100 Mbit +Camera 1x +OS WinCE 5.0 & 6.0 +Size 67.6x36.7x6.2 mm +Temperature 0 to 70 Degree C + -40 to 85 Degree C +Power 0.7 - 1.7 W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT20.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT20.txt new file mode 100644 index 0000000..c1e4e49 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT20.txt @@ -0,0 +1,37 @@ +******************************* + Toradex Colibri T20 Module +******************************* +CPU Name NVidia Tergra 2 +CPU Type ARM Cortex-A9 +CPU Cores 2x +CPU clock 1.0 GHz +RAM 256/512MB DDR2 32bit +Flash 512MB/1GB NAND 8Bit +Display Dual(Independent) +Graphics GeForce GPU +2D/3D Yes +HDMI No +VGA No +RGB 1920 x 1200 24bpp +Touch 4/5-wire +Audio Yes +Ext Bus 32 Bit +USB 2x +I2C 2x + DDC +SPI 3x +One-Wire 1x +CF - +SD/MMC 2x +UART 5x +IrDA 1x +PWM 4x +GPIO up to 110 +Analog I/P 4x +Ethernet 10/100 Mbit +Camera 1x +OS WinCE 6.0/7.0,Linux +Size 67.6x36.7x6.2 mm +Temperature 0 to 70 Degree C + -40 to 85 Degree C +Power 1.1 - 2.8 W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT30.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT30.txt new file mode 100644 index 0000000..949fde4 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/ColibriT30.txt @@ -0,0 +1,36 @@ +******************************* + Toradex Colibri T30 Module +******************************* +CPU Name NVidia Tergra 3 +CPU Type ARM Cortex-A9 +CPU Cores 4x +CPU clock 1.4 GHz +RAM 1GB DDR3(32bit) +Flash 2GB NAND(8Bit eMMc) +Display Dual(Independent) +Graphics GeForce GPU +2D/3D Yes +HDMI No +VGA No +RGB 2048 x 1536 24bpp +Touch 4-wire +Audio Yes +Ext Bus 16 Bit +USB 2x +I2C 3x + DDC +SPI 5x +One-Wire 1x +CF - +SD/MMC 2x +UART 5x +IrDA 1x +PWM 4x +GPIO up to 110 +Analog I/P 4x +Ethernet 10/100 Mbit +Camera 1x +OS WinCE 6.0/7.0,Linux +Size 67.6x36.7x6.2 mm +Temperature 0 to 70 Degree C +Power 1.4 - 5.1 W +Availability till 2018 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ510S.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ510S.txt new file mode 100644 index 0000000..4a154f5 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ510S.txt @@ -0,0 +1,29 @@ +******************************* + Toradex Robin Z510S Module +******************************* +CPU Name Intel Atom Z510 +CPU Type x86 +CPU Cores 1x +CPU clock 1.1 GHz +RAM 512MB DDR2 400MHz +Flash 2GB SSD on IDE +Display Dual(Independent) +Graphics Integrated Graphics +PCIe 1x1 +USB 7 x USB2.0 +I2C 1x +GPIOs 8xGPIO +Ethernet 10/100/1000 Mbit +Serial ATA 1x +SDIO/SD/MMC 2xSDIO +LPC 1x +SMB 1x +VideoDecoder MPEG2/HD/H.264 +VGA 1920x1080 +HDA 2x +OS WinXP Embedded/WePOS/Win7/WES7/WinCE6/Linux +BIOS Award +Size 84.0x55.0x10.8 mm +Temperature 0 to 60 Degree C +Power 4.7 - 6.9W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530L.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530L.txt new file mode 100644 index 0000000..6f70bc5 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530L.txt @@ -0,0 +1,29 @@ +******************************* + Toradex Robin Z530L Module +******************************* +CPU Name Intel Atom Z530 +CPU Type x86 +CPU Cores 1x +CPU clock 1.6 GHz +RAM 1GB DDR2 +Flash 4GB SSD on IDE +Display Dual(Independent) +Graphics Integrated Graphics +PCIe 1x1 +USB 7 x USB2.0 +I2C 1x +GPIOs 8xGPIO +Ethernet 10/100/1000 Mbit +SerialATA 1x +SDIO/SD/MMC 2xSDIO +LPC 1x +SMD 1x +VideoDecoder MPEG2/HD/H.264 +VGA 1920x1080 +HDA 2x +OS WinXP Embedded/WePOS/Win7/WES7/WinCE6/Linux +BIOS Award +Size 84.0x55.0x10.8 mm +Temperature 0 to 60 Degree C +Power 4.7 - 6.9W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530M.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530M.txt new file mode 100644 index 0000000..f454ede --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/RobinZ530M.txt @@ -0,0 +1,29 @@ +******************************* + Toradex Robin Z530M Module +******************************* +CPU Name Intel Atom Z530 +CPU Type x86 +CPU Cores 1x +CPU clock 1.6 GHz +RAM 512MB DDR2 +Flash 2GB SSD on IDE +Display Dual(Independent) +Graphics Integrated Graphics +PCIe 1x1 +USB 7 x USB2.0 +I2C 1x +GPIOs 8xGPIO +Ethernet 10/100/1000 Mbit +SerialATA 1x +SDIO/SD/MMC 2xSDIO +LPC 1x +SMD 1x +VideoDecoder MPEG2/HD/H.264 +VGA 1920x1080 +HDA 2x +OS WinXP Embedded/WePOS/Win7/WES7/WinCE6/Linux +BIOS Award +Size 84.0x55.0x10.8 mm +Temperature 0 to 60 Degree C +Power 4.7 - 6.9W +Availability till 2017 diff --git a/pos-demo/meta-data/share/doc/POSDemoQuickInfo/end.txt b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/end.txt new file mode 100644 index 0000000..962fd24 --- /dev/null +++ b/pos-demo/meta-data/share/doc/POSDemoQuickInfo/end.txt @@ -0,0 +1,9 @@ + + +******************************* + Please visit our website + www.toradex.com +******************************* + + + diff --git a/pos-demo/meta-data/share/glade/pos-linux.glade b/pos-demo/meta-data/share/glade/pos-linux.glade new file mode 100644 index 0000000..8ef1465 --- /dev/null +++ b/pos-demo/meta-data/share/glade/pos-linux.glade @@ -0,0 +1,2858 @@ + + + + + + 800 + 480 + False + False + True + 800 + 480 + /usr/share/pixmaps/toradex-linux-icon.png + + + + True + False + + + True + False + /usr/share/pixmaps/pos-title.png + + + False + True + 0 + + + + + 800 + 410 + True + True + True + 0 + 5 + True + + + True + False + + + True + False + + + True + False + /usr/share/pixmaps/colibri-icon.png + + + False + True + 15 + 0 + + + + + True + False + 3 + 2 + 5 + 5 + + + 150 + 50 + True + True + True + False + + + + True + False + PXA270 + + + + + + + + + + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + PXA300 + + + + + + + + + + 1 + 2 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + PXA310 + + + + + + + + + + 1 + 2 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + PXA320 + + + + + + + + + + 1 + 2 + 1 + 2 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + T20 + + + + + + + + + + 2 + 3 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + T30 + + + + + + + + + + 1 + 2 + 2 + 3 + + + + + + + False + False + 1 + + + + + False + True + 30 + 0 + + + + + True + False + + + True + False + /usr/share/pixmaps/apalis-icon.png + + + False + False + 15 + 0 + + + + + 150 + 50 + True + True + True + False + + + + True + False + T30 + + + + + + + + + + False + False + 1 + + + + + False + True + 30 + 1 + + + + + True + False + + + True + False + /usr/share/pixmaps/robin-icon.png + + + False + False + 15 + 0 + + + + + True + False + 5 + True + center + + + 150 + 50 + True + True + True + False + + + + True + False + Z530 L + + + + + + + + + + False + False + 0 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Z530 M + + + + + + + + + + True + True + 1 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Z510 S + + + + + + + + + + False + False + 2 + + + + + False + True + 1 + + + + + False + True + 30 + 2 + + + + + False + + + + + True + False + Quick Info + + + + + + + + False + + + + + True + False + + + True + False + 30 + True + + + True + False + center + + + True + True + False + False + True + + + True + False + Colibri PXA270 + + + + + + + + + + + False + False + 0 + + + + + True + True + False + False + True + + + True + False + Colibri PXA300 + + + + + + + + + + False + False + 1 + + + + + True + True + False + False + True + + + True + False + Colibri PXA310 + + + + + + + + + + False + False + 2 + + + + + True + True + False + False + True + + + True + False + Colibri PXA320 + + + + + + + + + + False + False + 3 + + + + + True + True + False + False + True + + + True + False + Colibri T20 + + + + + + + + + + False + False + 4 + + + + + True + True + False + False + True + + + True + False + Colibri T30 + + + + + + + + + + False + False + 5 + + + + + True + True + False + False + True + + + True + False + Colibri Evaluation Board v3.1 + + + + + + + + + + False + False + 6 + + + + + True + True + False + False + True + + + True + False + Iris Baseboard v1.1 + + + + + + + + + + False + False + 7 + + + + + False + False + 10 + 0 + + + + + True + False + + + True + False + center + + + True + True + False + False + True + + + True + False + Apalis T30 + + + + + + + + + + False + False + 0 + + + + + True + True + False + False + True + + + True + False + Apalis EvaluationBoard v1.0 + + + + + + + + + + False + False + 1 + + + + + False + False + 1 + 0 + + + + + True + False + center + + + True + True + False + False + True + + + True + False + Robin Z530L + + + + + + + + + + False + False + 0 + + + + + True + True + False + False + True + + + True + False + Robin Z530M + + + + + + + + + + False + False + 1 + + + + + True + True + False + False + True + + + True + False + Robin Z510S + + + + + + + + + + False + False + 2 + + + + + True + True + False + False + True + + + True + False + Daisy Pico-ITX Carrier Board + + + + + + + + + + False + False + 3 + + + + + False + False + 20 + 1 + + + + + False + False + 10 + 1 + + + + + False + False + 5 + 0 + + + + + True + False + 5 + + + True + False + 5 + center + + + 150 + 50 + True + True + True + False + + + + True + False + Select Colibri + + + + + + + + + + False + False + 0 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Select Apalis + + + + + + + + + + False + False + 1 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Select Robin + + + + + + + + + + False + False + 2 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Select All + + + + + + + + + + False + False + 3 + + + + + False + False + 0 + + + + + True + False + 5 + center + + + 310 + 50 + True + True + True + False + + + + True + False + Deselect All + + + + + + + + + + False + False + 0 + + + + + 310 + 50 + True + True + True + False + + + + True + False + Done + + + + + + + + + + False + False + 1 + + + + + False + False + 1 + + + + + True + True + 10 + 1 + + + + + 1 + False + + + + + True + False + Quick Quote + + + + + + + + 1 + False + + + + + True + False + + + True + False + + + True + True + • + False + False + True + True + + + False + False + 0 + + + + + True + True + False + False + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + spread + + + 200 + 50 + True + True + True + False + + + True + False + Remove Item + + + + + + + + + + False + False + 0 + + + + + 200 + True + True + True + False + + + 100 + 50 + True + False + Bad Item + + + + + + + + + + False + False + 1 + + + + + 200 + 50 + True + True + True + False + + + 100 + 50 + True + False + Print Bill + + + + + + + + + + False + False + 2 + + + + + False + False + 1 + + + + + 2 + False + + + + + True + False + Bill Receipt + + + + + + + + 2 + False + + + + + True + False + + + 800 + True + False + + + True + False + + + True + False + 0 + Item No: + + + + + + + False + False + 7 + 0 + + + + + 200 + True + True + • + False + False + True + True + + + False + False + 31 + 1 + + + + + False + True + 15 + 0 + + + + + 200 + 50 + True + True + True + False + + + + True + False + Good Item + + + + + + + + + + False + False + 1 + + + + + False + False + 15 + 0 + + + + + 800 + True + False + 4 + 2 + 40 + 15 + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA270, 32Mb Flash, 64MB RAM + + + + + + + + + + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T20, 512MB Flash, 256MB RAM + + + + + + + + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA300, 128MB Flash, 64MB RAM + + + + + + + + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA310, 512MB Flash, 128MB RAM + + + + + + + + + + 2 + 3 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA320, 1GB Flash, 128MB RAM + + + + + + + + + + 3 + 4 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T20, 1GB Flash, 512MB RAM + + + + + + + + + + 1 + 2 + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T30, 2GB Flash, 1GB RAM + + + + + + + + + + 1 + 2 + 2 + 3 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T30, 2GB Flash, 2GB RAM + + + + + + + + + + 1 + 2 + 3 + 4 + GTK_FILL + GTK_FILL + + + + + False + False + 10 + 1 + + + + + 3 + False + + + + + True + False + Add Items + + + + + + + + 3 + False + + + + + True + False + + + True + False + 0 + etched-out + + + True + False + 12 + + + True + False + + + True + False + + + True + False + 0 + Item + + + + + + + + False + False + 0 + + + + + True + False + 0 + In Stock + + + + + + + + False + False + 400 + 1 + + + + + False + False + 10 + 0 + + + + + True + False + + + True + False + 5 + center + + + True + False + 0 + 1 + Colibri PXA270, 32MB Flash, 64MB + + + + + + + False + False + 4 + 0 + + + + + True + False + 0 + Colibri PXA300, 128MB, Flash, 64MB + + + + + + + False + False + 1 + + + + + True + False + 0 + Colibri PXA310, 512MB Flash, 128MB + + + + + + + False + False + 2 + + + + + True + False + 0 + Colibri PXA320, 1GB Flash, 512MB + + + + + + + False + False + 3 + + + + + True + False + 0 + Colibri T20, 512MB Flash, 256MB RAM + + + + + + + False + False + 4 + + + + + True + False + 0 + Colibri T20, 1GB Flash, 512MB RAM + + + + + + + False + False + 5 + + + + + True + False + 0 + Colibri T30, 2GB Flash, 1GB RAM + + + + + + + False + False + 6 + + + + + True + False + 0 + Apalis T30, 2GB Flash, 2GB RAM + + + + + + + False + False + 7 + + + + + False + True + 0 + + + + + True + False + 5 + center + + + True + False + 0 + 0 + + + + + + + False + False + 0 + + + + + True + False + 0 + 0 + + + + + + + False + False + 1 + + + + + True + False + 0 + 0 + + + + + + + False + False + 2 + + + + + True + False + 0 + 0 + + + + + + + False + False + 3 + + + + + True + False + 0 + 0 + + + + + + + False + False + 4 + + + + + True + False + 0 + 0 + + + + + + + False + False + 5 + + + + + True + False + 0 + 0 + + + + + + + False + False + 6 + + + + + True + False + 0 + 0 + + + + + + + False + False + 7 + + + + + False + True + 50 + 1 + + + + + False + False + 1 + + + + + + + + + True + False + True + + + + + True + True + 0 + + + + + 100 + 0 + True + False + center + + + 270 + 50 + True + True + True + False + + + True + False + Clear Good Stock + + + + + + + + + + False + False + 0 + + + + + False + False + 1 + + + + + 4 + + + + + True + False + Stock Info + + + + + + + + 4 + False + + + + + True + False + + + True + False + 0 + etched-out + + + True + False + 12 + + + True + False + + + True + False + + + True + False + 0 + Item + + + + + + + + False + False + 0 + + + + + True + False + 0 + In Stock + + + + + + + + False + False + 400 + 1 + + + + + False + False + 10 + 0 + + + + + True + False + + + True + False + 5 + center + + + True + False + 0 + 1 + Colibri PXA270, 32MB Flash, 64MB + + + + + + + False + False + 4 + 0 + + + + + True + False + 0 + Colibri PXA300, 128MB, Flash, 64MB + + + + + + + False + False + 1 + + + + + True + False + 0 + Colibri PXA310, 512MB Flash, 128MB + + + + + + + False + False + 2 + + + + + True + False + 0 + Colibri PXA320, 1GB Flash, 512MB + + + + + + + False + False + 3 + + + + + True + False + 0 + Colibri T20, 512MB Flash, 256MB RAM + + + + + + + False + False + 4 + + + + + True + False + 0 + Colibri T20, 1GB Flash, 512MB RAM + + + + + + + False + False + 5 + + + + + True + False + 0 + Colibri T30, 2GB Flash, 1GB RAM + + + + + + + False + False + 6 + + + + + True + False + 0 + Apalis T30, 2GB Flash, 2GB RAM + + + + + + + False + False + 7 + + + + + False + True + 0 + + + + + True + False + 5 + center + + + True + False + 0 + 0 + + + + + + + False + False + 0 + + + + + True + False + 0 + 0 + + + + + + + False + False + 1 + + + + + True + False + 0 + 0 + + + + + + + False + False + 2 + + + + + True + False + 0 + 0 + + + + + + + False + False + 3 + + + + + True + False + 0 + 0 + + + + + + + False + False + 4 + + + + + True + False + 0 + 0 + + + + + + + False + False + 5 + + + + + True + False + 0 + 0 + + + + + + + False + False + 6 + + + + + True + False + 0 + 0 + + + + + + + False + False + 7 + + + + + False + True + 50 + 1 + + + + + False + False + 1 + + + + + + + + + True + False + True + + + + + True + True + 0 + + + + + True + False + center + + + 270 + 50 + True + True + True + False + + + True + False + Clear Bad Stock + + + + + + + + + + False + False + 0 + + + + + False + False + end + 1 + + + + + 5 + + + + + True + False + Bad Stock Info + + + + + + + + 5 + False + + + + + True + False + + + True + False + + + True + False + + + True + False + /usr/share/pixmaps/apalis-icon.png + + + True + True + 0 + + + + + True + False + Modules + + + + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + + + True + False + /usr/share/pixmaps/colibri-icon.png + + + True + True + 0 + + + + + True + False + Modules + + + + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + False + + + True + False + /usr/share/pixmaps/robin-icon.png + + + True + True + 0 + + + + + True + False + Modules + + + + + + + + True + True + 1 + + + + + True + True + 2 + + + + + True + False + + + True + False + /usr/share/pixmaps/cloud-icon.png + + + True + True + 0 + + + + + True + False + Free Cloud Library + + + + + + + + True + True + 1 + + + + + True + True + 3 + + + + + True + True + 0 + + + + + True + False + + + True + False + + + True + False + /usr/share/pixmaps/toradex-icon.png + + + True + True + 0 + + + + + True + False + developer.toradex.com + + + + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + center + + + 200 + 50 + True + True + True + False + + + + True + False + Quit + + + + + + + + + + False + False + 0 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + 6 + + + + + True + False + Exit + + + + + + + + 6 + False + + + + + True + True + 1 + + + + + + diff --git a/pos-demo/meta-data/share/pixmaps/apalis-icon.png b/pos-demo/meta-data/share/pixmaps/apalis-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a78b3f4af54670352b34c57f837aa57e98da7426 GIT binary patch literal 2731 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 literal 0 HcmV?d00001 diff --git a/pos-demo/meta-data/share/pixmaps/pos-icon.png b/pos-demo/meta-data/share/pixmaps/pos-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e0304ef33891d9bc7c8b157d29984f8f9580479d GIT binary patch literal 13876 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 QU;qFB07*qoM6N<$f_$py@c;k- literal 0 HcmV?d00001 diff --git a/pos-demo/pos b/pos-demo/pos new file mode 100755 index 0000000000000000000000000000000000000000..95acc750dd3a1278a0c18955685a51f457245afa GIT binary patch literal 14224 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 +#include +#include +#include +#include +#include +#include +#include + +#include "pos-elinux.h" +#include "co-proc-lib.h" + +void close_app(GtkWidget* widget,gpointer user_data) +{ + printf("quit\n"); + gtk_main_quit(); +} + +int serial_init(void) +{ + struct termios tio; + struct termios old_stdio; + int ttyFd; + char *ttyDevPath; + + tcgetattr(STDOUT_FILENO, &old_stdio); + + memset(&tio,0,sizeof(tio)); + tio.c_iflag = 0; + tio.c_oflag = 0; + /* 8n1, see termios.h for more information */ + tio.c_cflag = CS8 |CREAD | CLOCAL; + tio.c_lflag = 0; + tio.c_cc[VMIN] = 1; + tio.c_cc[VTIME] = 5; + + ttyDevPath = "/dev/ttyLP2"; + + switch (getPROCID()){ + case TYPE_PXA270: + case TYPE_PXA320: + case TYPE_PXA300: + case TYPE_PXA310: + break; + case TYPE_TEGRA2: + ttyDevPath = "/dev/ttyHS3"; + break; + case TYPE_TEGRA3: + ttyDevPath = "/dev/ttyHS3"; + break; + case TYPE_VYBRID: + ttyDevPath = "/dev/ttyLP2"; + break; + case TYPE_IMX6: + ttyDevPath = "/dev/ttymxc2"; + break; + default: + ttyDevPath = "/dev/ttyLP2"; + break; + } + + ttyFd = open(ttyDevPath, O_RDWR | O_NONBLOCK); + + if (ttyFd < 0) + perror("tty open failed!"); + + cfsetospeed(&tio, BAUD_RATE); /* 9600 baud */ + cfsetispeed(&tio, BAUD_RATE); /* 9600 baud */ + tcsetattr(ttyFd, TCSANOW, &tio); + + return ttyFd; +} + + +void serial_print(char *filePath) +{ + FILE *fileDescriptor; + int fileSize, tty_fd; + unsigned char c = 'D'; + struct stat st; /* for finding the size of the file */ + + fileDescriptor = fopen(filePath, "r+b"); + stat(filePath, &st); + fileSize = st.st_size; + + tty_fd = serial_init(); + + while (1) { + if (fileSize > 1) { + fread(&c, 1, 1, (FILE *) fileDescriptor); + write(tty_fd, &c, 1); + fileSize -= 1; + } else { + fread(&c, 1, 1, fileDescriptor); + write(tty_fd, &c, 1); + fileSize = 0; + break; + } + } + + fclose(fileDescriptor); + close(tty_fd); + //tcsetattr(STDOUT_FILENO, TCSANOW, &old_stdio); +} + +void pxa270_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(PXA270); + serial_print(END); + g_print("pxa270 clicked\n"); +} + +void pxa300_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(PXA300); + serial_print(END); + g_print("pxa300 clicked\n"); +} + +void pxa310_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(PXA310); + serial_print(END); + g_print("pxa310 clicked\n"); +} + +void pxa320_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(PXA320); + serial_print(END); + g_print("pxa320 clicked\n"); +} + +void colibri_t20_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(COLIBRIT20); + serial_print(END); + g_print("colibriT20 clicked\n"); +} + +void colibri_t30_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(COLIBRIT30); + serial_print(END); + g_print("colibriT30 clicked\n"); +} + +void apalis_t30_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(APALIST30); + serial_print(END); + g_print("apalisT30 clicked\n"); +} + +void z530l_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(ROBINZ530L); + serial_print(END); + g_print("robinz530L clicked\n"); +} + +void z530m_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(ROBINZ530M); + serial_print(END); + g_print("robinz510S clicked\n"); +} + +void z510s_clicked_cb(GtkButton *button, gpointer user_data) +{ + serial_print(ROBINZ510S); + serial_print(END); + g_print("robinz510S clicked\n"); +} + +void done_clicked_cb(GtkWidget *widget, customData *data) +{ + g_print("Quotation\n"); +} + +void tb_good_item_toggled_cb(GtkToggleButton *tButton, customData *data) +{ + if(gtk_toggle_button_get_active (tButton)) { + gtk_label_set_text(data->good_item, "Good Item"); + } else { + gtk_label_set_text(data->good_item, "Bad Item"); + } +} + +void select_colibri_clicked_cb(GtkWidget *widget, customData *data) +{ + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa270, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa300, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa310, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa320, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_t20, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_t30, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_eval_board, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_iris_board, TRUE); +} + +void select_apalis_clicked_cb(GtkWidget *widget, customData *data) +{ + + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_apalis_t30, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_apalis_eval_board, TRUE); +} + +void select_robin_clicked_cb(GtkWidget *widget, customData *data) +{ + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z530l, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z530m, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z510s, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_daisy_board, TRUE); +} + +void select_all_clicked_cb(GtkWidget *widget, customData *data) +{ + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa270, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa300, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa310, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa320, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_t20, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_t30, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_eval_board, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_iris_board, TRUE); + + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_apalis_t30, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_apalis_eval_board, TRUE); + + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z530l, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z530m, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z510s, TRUE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_daisy_board, TRUE); +} + +void deselect_all_clicked_cb(GtkWidget *widget, customData *data) +{ + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa270, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa300, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa310, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_pxa320, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_t20, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_t30, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_colibri_eval_board, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_iris_board, FALSE); + + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_apalis_t30, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_apalis_eval_board, FALSE); + + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z530l, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z530m, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_robin_z510s, FALSE); + gtk_toggle_button_set_active((GtkToggleButton *)data->cb_daisy_board, FALSE); +} + +void colorMe(GtkWidget *objectId) +{ + GdkColor color; + gdk_color_parse( "#000052528888", &color ); + gtk_widget_modify_bg(GTK_WIDGET(objectId), GTK_STATE_NORMAL, &color); + gtk_widget_modify_bg(GTK_WIDGET(objectId), GTK_STATE_PRELIGHT, &color); + gtk_widget_modify_bg(GTK_WIDGET(objectId), GTK_STATE_ACTIVE, &color); +} + +int main (int argc, char **argv) +{ + GtkBuilder *gtkBuilder; + GtkWidget *mainwin; + GtkWidget *pxa270, *pxa300, *pxa310, *pxa320, *colibriT20, *colibriT30, *apalisT30, *z530L, *z530M, *z510S; + GtkWidget *select_colibri, *select_apalis, *select_robin, *select_all, *deselect_all, *done; + GtkWidget *tb_good_item, *remove_item, *bad_item, *print_bill, *quit, *clear_good_stock, *clear_bad_stock, *g_item, *g_in_stock, *b_item, *b_in_stock; + GtkWidget *c_pxa270, *c_pxa300, *c_pxa310, *c_pxa320, *c_t20_v1, *c_t20_v2, *c_t30_v1, *c_t30_v2; + customData data; + + gtk_set_locale(); + /* Initialize the widget set */ + gtk_init (&argc, &argv); + + /* Create the main window */ + gtkBuilder= gtk_builder_new(); + gtk_builder_add_from_file(gtkBuilder, POS_ELINUX_GLADE, NULL); + gtk_builder_connect_signals (gtkBuilder, &data); + mainwin= GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "window")); + + pxa270 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "pxa270")); + colorMe(pxa270); + pxa300 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "pxa300")); + colorMe(pxa300); + pxa310 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "pxa310")); + colorMe(pxa310); + pxa320 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "pxa320")); + colorMe(pxa320); + colibriT20 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "colibri-t20")); + colorMe(colibriT20); + colibriT30 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "colibri-t30")); + colorMe(colibriT30); + apalisT30 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "apalis-t30")); + colorMe(apalisT30); + z530L = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "z530l")); + colorMe(z530L); + z530M = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "z530m")); + colorMe(z530M); + z510S = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "z510s")); + colorMe(z510S); + select_colibri = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "select-colibri")); + colorMe(select_colibri); + select_apalis = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "select-apalis")); + colorMe(select_apalis); + select_robin = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "select-robin")); + colorMe(select_robin); + select_all = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "select-all")); + colorMe(select_all); + deselect_all = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "deselect-all")); + colorMe(deselect_all); + done = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "done")); + colorMe(done); + remove_item = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "remove-item")); + colorMe(remove_item); + bad_item = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "bad-item")); + colorMe(bad_item); + print_bill = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "print-bill")); + colorMe(print_bill); + clear_good_stock = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "clear-good-stock")); + colorMe(clear_good_stock); + clear_bad_stock = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "clear-bad-stock")); + colorMe(clear_bad_stock); + quit = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "quit")); + colorMe(quit); + tb_good_item = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "tb-good-item")); + colorMe(tb_good_item); + data.good_item = GTK_LABEL(gtk_builder_get_object(gtkBuilder,"good-item")); + c_pxa270 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-pxa270")); + colorMe(c_pxa270); + c_pxa300 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-pxa300")); + colorMe(c_pxa300); + c_pxa310 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-pxa310")); + colorMe(c_pxa310); + c_pxa320 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-pxa320")); + colorMe(c_pxa320); + c_t20_v1 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-t20-v1")); + colorMe(c_t20_v1); + c_t20_v2 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-t20-v2")); + colorMe(c_t20_v2); + c_t30_v1 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-t30-v1")); + colorMe(c_t30_v1); + c_t30_v2 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "c-t30-v2")); + colorMe(c_t30_v2); + g_item = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "g_item")); + colorMe(g_item); + g_in_stock = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "g_in-stock")); + colorMe(g_in_stock); + b_item = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "b_item")); + colorMe(b_item); + b_in_stock = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "b_in-stock")); + colorMe(b_in_stock); + + data.cb_colibri_pxa270 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-pxa270")); + data.cb_colibri_pxa300 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-pxa300")); + data.cb_colibri_pxa310 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-pxa310")); + data.cb_colibri_pxa320 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-pxa320")); + data.cb_colibri_t20 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-t20")); + data.cb_colibri_t30 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-t30")); + data.cb_colibri_eval_board = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-colibri-eval-board-v3.1")); + data.cb_iris_board = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-iris-base-board-v1.1")); + data.cb_apalis_t30 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-apalis-t30")); + data.cb_apalis_eval_board = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-apalis-eval-board-v1.0")); + data.cb_robin_z530l = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-robin-z530l")); + data.cb_robin_z530m = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-robin-z530m")); + data.cb_robin_z510s = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-robin-z510s")); + data.cb_daisy_board = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "cb-daisy-pico-itx-carrier-board")); + + g_object_unref ( G_OBJECT(gtkBuilder) ); + + /* Show the application window */ + #ifdef FULL_SCREEN + gtk_window_fullscreen((GtkWindow *) mainwin); + #endif + gtk_widget_show(mainwin); + + /* Enter the main event loop, and wait for user interaction */ + gtk_main(); + + return 0; +} diff --git a/pos-demo/pos-elinux.glade b/pos-demo/pos-elinux.glade new file mode 100644 index 0000000..e62f705 --- /dev/null +++ b/pos-demo/pos-elinux.glade @@ -0,0 +1,2577 @@ + + + + + + 800 + 480 + False + False + True + 800 + 480 + /usr/share/pixmaps/toradex-linux-icon.png + + + + True + False + + + True + False + /usr/share/pixmaps/pos-title.png + + + False + True + 0 + + + + + 800 + 410 + True + True + True + 0 + 5 + True + + + True + False + + + True + False + + + True + False + /usr/share/pixmaps/colibri-icon.png + + + False + True + 15 + 0 + + + + + True + False + 3 + 2 + 5 + 5 + + + 150 + 50 + True + True + True + False + + + + True + False + PXA270 + + + + + + + + + + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + PXA300 + + + + + + + + + + 1 + 2 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + PXA310 + + + + + + + + + + 1 + 2 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + PXA320 + + + + + + + + + + 1 + 2 + 1 + 2 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + T20 + + + + + + + + + + 2 + 3 + + + + + + + 150 + 50 + True + True + True + False + + + + True + False + T30 + + + + + + + + + + 1 + 2 + 2 + 3 + + + + + + + False + False + 1 + + + + + False + True + 30 + 0 + + + + + True + False + + + True + False + /usr/share/pixmaps/apalis-icon.png + + + False + False + 15 + 0 + + + + + 150 + 50 + True + True + True + False + + + + True + False + T30 + + + + + + + + + + False + False + 1 + + + + + False + True + 30 + 1 + + + + + True + False + + + True + False + /usr/share/pixmaps/robin-icon.png + + + False + False + 15 + 0 + + + + + True + False + 5 + True + center + + + 150 + 50 + True + True + True + False + + + + True + False + Z530 L + + + + + + + + + + False + False + 0 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Z530 M + + + + + + + + + + True + True + 1 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Z510 S + + + + + + + + + + False + False + 2 + + + + + False + True + 1 + + + + + False + True + 30 + 2 + + + + + False + + + + + True + False + Quick Info + + + + + + + + False + + + + + True + False + + + True + False + 30 + True + + + True + False + center + + + True + True + False + False + True + + + True + False + Colibri PXA270 + + + + + + + + + + + False + False + 0 + + + + + True + True + False + False + True + + + True + False + Colibri PXA300 + + + + + + + + + + False + False + 1 + + + + + True + True + False + False + True + + + True + False + Colibri PXA310 + + + + + + + + + + False + False + 2 + + + + + True + True + False + False + True + + + True + False + Colibri PXA320 + + + + + + + + + + False + False + 3 + + + + + True + True + False + False + True + + + True + False + Colibri T20 + + + + + + + + + + False + False + 4 + + + + + True + True + False + False + True + + + True + False + Colibri T30 + + + + + + + + + + False + False + 5 + + + + + True + True + False + False + True + + + True + False + Colibri Evaluation Board v3.1 + + + + + + + + + + False + False + 6 + + + + + True + True + False + False + True + + + True + False + Iris Baseboard v1.1 + + + + + + + + + + False + False + 7 + + + + + False + False + 10 + 0 + + + + + True + False + + + True + False + center + + + True + True + False + False + True + + + True + False + Apalis T30 + + + + + + + + + + False + False + 0 + + + + + True + True + False + False + True + + + True + False + Apalis EvaluationBoard v1.0 + + + + + + + + + + False + False + 1 + + + + + False + False + 1 + 0 + + + + + True + False + center + + + True + True + False + False + True + + + True + False + Robin Z530L + + + + + + + + + + False + False + 0 + + + + + True + True + False + False + True + + + True + False + Robin Z530M + + + + + + + + + + False + False + 1 + + + + + True + True + False + False + True + + + True + False + Robin Z510S + + + + + + + + + + False + False + 2 + + + + + True + True + False + False + True + + + True + False + Daisy Pico-ITX Carrier Board + + + + + + + + + + False + False + 3 + + + + + False + False + 20 + 1 + + + + + False + False + 10 + 1 + + + + + False + False + 5 + 0 + + + + + True + False + 5 + + + True + False + 5 + center + + + 150 + 50 + True + True + True + False + + + + True + False + Select Colibri + + + + + + + + + + False + False + 0 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Select Apalis + + + + + + + + + + False + False + 1 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Select Robin + + + + + + + + + + False + False + 2 + + + + + 150 + 50 + True + True + True + False + + + + True + False + Select All + + + + + + + + + + False + False + 3 + + + + + False + False + 0 + + + + + True + False + 5 + center + + + 310 + 50 + True + True + True + False + + + + True + False + Deselect All + + + + + + + + + + False + False + 0 + + + + + 310 + 50 + True + True + True + False + + + True + False + Done + + + + + + + + + + False + False + 1 + + + + + False + False + 1 + + + + + True + True + 10 + 1 + + + + + 1 + False + + + + + True + False + Quick Quote + + + + + + + + 1 + False + + + + + True + False + + + True + False + + + True + True + • + False + False + True + True + + + False + False + 0 + + + + + True + True + False + False + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + spread + + + 200 + 50 + True + True + True + False + + + True + False + Remove Item + + + + + + + + + + False + False + 0 + + + + + 200 + True + True + True + False + + + 100 + 50 + True + False + Bad Item + + + + + + + + + + False + False + 1 + + + + + 200 + 50 + True + True + True + False + + + 100 + 50 + True + False + Print Bill + + + + + + + + + + False + False + 2 + + + + + False + False + 1 + + + + + 2 + False + + + + + True + False + Bill Receipt + + + + + + + + 2 + False + + + + + True + False + + + 800 + True + False + + + True + False + + + True + False + Item No: + + + + + + + False + False + 7 + 0 + + + + + True + True + • + False + False + True + True + + + False + False + 20 + 1 + + + + + False + False + 0 + + + + + 200 + 50 + True + True + True + False + + + + True + False + Good Item + + + + + + + + + + False + False + 90 + 1 + + + + + False + False + 15 + 0 + + + + + 800 + True + False + 4 + 2 + 40 + 20 + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA270, 32Mb Flash, 64MB RAM + + + + + + + + + + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T20, 512MB Flash, 256MB RAM + + + + + + + + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA300, 128MB Flash, 64MB RAM + + + + + + + + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA310, 512MB Flash, 128MB RAM + + + + + + + + + + 2 + 3 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri PXA320, 1GB Flash, 128MB RAM + + + + + + + + + + 3 + 4 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T20, 1GB Flash, 512MB RAM + + + + + + + + + + 1 + 2 + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T30, 2GB Flash, 1GB RAM + + + + + + + + + + 1 + 2 + 2 + 3 + GTK_FILL + GTK_FILL + + + + + 350 + 50 + True + True + True + False + + + True + False + Colibri T30, 2GB Flash, 2GB RAM + + + + + + + + + + 1 + 2 + 3 + 4 + GTK_FILL + GTK_FILL + + + + + False + False + 10 + 1 + + + + + 3 + False + + + + + True + False + Add Items + + + + + + + + 3 + False + + + + + True + False + + + True + False + 0 + etched-out + + + True + False + 12 + + + True + False + 9 + 2 + + + True + False + Item + + + + + + + + + True + False + In Stock + + + + + + + + 1 + 2 + + + + + True + False + 0 + + + 1 + 2 + 1 + 2 + + + + + True + False + 0 + + + 1 + 2 + 2 + 3 + + + + + True + False + 0 + + + 1 + 2 + 3 + 4 + + + + + True + False + 0 + + + 1 + 2 + 4 + 5 + + + + + True + False + 0 + + + 1 + 2 + 5 + 6 + + + + + True + False + 0 + + + 1 + 2 + 6 + 7 + + + + + True + False + 0 + + + 1 + 2 + 7 + 8 + + + + + True + False + 0 + + + 1 + 2 + 8 + 9 + + + + + True + False + label + + + 1 + 2 + + + + + True + False + label + + + 2 + 3 + + + + + True + False + label + + + 3 + 4 + + + + + True + False + label + + + 4 + 5 + + + + + True + False + label + + + 5 + 6 + + + + + True + False + label + + + 6 + 7 + + + + + True + False + label + + + 7 + 8 + + + + + True + False + label + + + 8 + 9 + + + + + + + + + True + False + True + + + + + True + True + 0 + + + + + 100 + 0 + True + False + center + + + 270 + 50 + True + True + True + False + + + True + False + Clear Good Stock + + + + + + + + + + False + False + 0 + + + + + False + False + 1 + + + + + 4 + + + + + True + False + Stock Info + + + + + + + + 4 + False + + + + + True + False + + + True + False + 0 + etched-out + + + True + False + 12 + + + True + False + 9 + 2 + + + True + False + Item + right + start + + + + + + + + + True + False + In Stock + + + + + + + 1 + 2 + + + + + True + False + 0 + start + + + 1 + 2 + 1 + 2 + + + + + True + False + 0 + + + 1 + 2 + 2 + 3 + + + + + True + False + 0 + + + 1 + 2 + 3 + 4 + + + + + True + False + 0 + + + 1 + 2 + 4 + 5 + + + + + True + False + 0 + + + 1 + 2 + 5 + 6 + + + + + True + False + 0 + + + 1 + 2 + 6 + 7 + + + + + True + False + 0 + + + 1 + 2 + 7 + 8 + + + + + True + False + 0 + + + 1 + 2 + 8 + 9 + + + + + True + False + label + + + 1 + 2 + + + + + True + False + label + + + 2 + 3 + + + + + True + False + label + + + 3 + 4 + + + + + True + False + label + + + 4 + 5 + + + + + True + False + label + + + 5 + 6 + + + + + True + False + label + + + 6 + 7 + + + + + True + False + label + + + 7 + 8 + + + + + True + False + label + + + 8 + 9 + + + + + + + + + True + False + True + + + + + True + True + 0 + + + + + True + False + center + + + 270 + 50 + True + True + True + False + + + True + False + Clear Bad Stock + + + + + + + + + + False + False + 0 + + + + + False + False + end + 1 + + + + + 5 + + + + + True + False + Bad Stock Info + + + + + + + + 5 + False + + + + + True + False + + + True + False + + + True + False + + + True + False + /usr/share/pixmaps/apalis-icon.png + + + True + True + 0 + + + + + True + False + Modules + + + + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + + + True + False + /usr/share/pixmaps/colibri-icon.png + + + True + True + 0 + + + + + True + False + Modules + + + + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + False + + + True + False + /usr/share/pixmaps/robin-icon.png + + + True + True + 0 + + + + + True + False + Modules + + + + + + + + True + True + 1 + + + + + True + True + 2 + + + + + True + False + + + True + False + /usr/share/pixmaps/cloud-icon.png + + + True + True + 0 + + + + + True + False + Free Cloud Library + + + + + + + + True + True + 1 + + + + + True + True + 3 + + + + + True + True + 0 + + + + + True + False + + + True + False + + + True + False + /usr/share/pixmaps/toradex-icon.png + + + True + True + 0 + + + + + True + False + developer.toradex.com + + + + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + center + + + 200 + 50 + True + True + True + False + + + + True + False + Quit + + + + + + + + + + False + False + 0 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + 6 + + + + + True + False + Exit + + + + + + + + 6 + False + + + + + True + True + 1 + + + + + + diff --git a/pos-demo/pos-elinux.h b/pos-demo/pos-elinux.h new file mode 100644 index 0000000..cf0ca50 --- /dev/null +++ b/pos-demo/pos-elinux.h @@ -0,0 +1,35 @@ +#include + +#define BAUD_RATE B9600 +#define PXA270 "/usr/share/doc/POSDemoQuickInfo/ColibriPXA270.txt" +#define PXA300 "/usr/share/doc/POSDemoQuickInfo/ColibriPXA300.txt" +#define PXA310 "/usr/share/doc/POSDemoQuickInfo/ColibriPXA320.txt" +#define PXA320 "/usr/share/doc/POSDemoQuickInfo/ColibriPXA320.txt" +#define COLIBRIT20 "/usr/share/doc/POSDemoQuickInfo/ColibriT20.txt" +#define COLIBRIT30 "/usr/share/doc/POSDemoQuickInfo/ColibriT30.txt" +#define APALIST30 "/usr/share/doc/POSDemoQuickInfo/ApalisT30.txt" +#define ROBINZ510S "/usr/share/doc/POSDemoQuickInfo/RobinZ510S.txt" +#define ROBINZ530L "/usr/share/doc/POSDemoQuickInfo/RobinZ530L.txt" +#define ROBINZ530M "/usr/share/doc/POSDemoQuickInfo/RobinZ530M.txt" +#define END "/usr/share/doc/POSDemoQuickInfo/end.txt" +#define POS_ELINUX_GLADE "/usr/share/glade/pos-linux.glade" +#define FULL_SCREEN + +typedef struct _customData +{ + GtkWidget *cb_colibri_pxa270; + GtkWidget *cb_colibri_pxa300; + GtkWidget *cb_colibri_pxa310; + GtkWidget *cb_colibri_pxa320; + GtkWidget *cb_colibri_t20; + GtkWidget *cb_colibri_t30; + GtkWidget *cb_colibri_eval_board; + GtkWidget *cb_iris_board; + GtkWidget *cb_apalis_t30; + GtkWidget *cb_apalis_eval_board; + GtkWidget *cb_robin_z530l; + GtkWidget *cb_robin_z530m; + GtkWidget *cb_robin_z510s; + GtkWidget *cb_daisy_board; + GtkLabel *good_item; +} customData; diff --git a/pos-demo/pos-elinux.o b/pos-demo/pos-elinux.o new file mode 100644 index 0000000000000000000000000000000000000000..db645635087e3d3f50de1abfcf91572d1e1012dd GIT binary patch literal 57728 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