My new Samsung S5VP210 based arm kit is now up and running on Android 4.0.3 (ICS).
Sunday, January 13, 2013
Monday, January 7, 2013
Mini210S-SDK43 vs. Beagleboard Rev B2
Beagleboard:
root@beagleboard:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 568.23
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x1
CPU part : 0xc08
CPU revision : 3
Hardware : OMAP3 Beagle Board
Revision : 0020
Serial : 0000000000000000
root@beagleboard:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "X-Loader"
mtd1: 001e0000 00020000 "U-Boot"
mtd2: 00020000 00020000 "U-Boot Env"
mtd3: 00400000 00020000 "Kernel"
mtd4: 0f980000 00020000 "File System"
root@beagleboard:~# free-m
-bash: free-m: command not found
root@beagleboard:~# free -m
total used free shared buffers cached
Mem: 106 96 9 0 3 33
-/+ buffers/cache: 59 47
Swap: 0 0 0
root@beagleboard:~#
Mini210S:
/system/busybox/bin # uname -a
Linux FriendlyARM 3.0.8-FriendlyARM #1 PREEMPT Sat Oct 27 15:57:19 CST 2012 armv7l GNU/Linux
/system/busybox/bin # cat /proc/cpuinfo
Processor : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 994.84
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x2
CPU part : 0xc08
CPU revision : 2
Hardware : MINI210
Revision : 0000
Serial : 0000000000000000
/system/busybox/bin #
/system/busybox/bin # cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00100000 "misc"
mtd1: 00500000 00100000 "recovery"
mtd2: 00500000 00100000 "kernel"
mtd3: 00300000 00100000 "ramdisk"
mtd4: 7f200000 00100000 "system"
/system/busybox/bin #
Wednesday, November 21, 2012
Lazy Fox fun set
import sets
magicc=sets.Set('the quick brown fox jumps over a lazy dog')
>>> sorted(magicc)
[' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
>>>
Friday, October 26, 2012
Testing Unicode on this blog
Just recently made some small change in this blog's template. I now implement unicode encoding. See any changes?
If you right click and select "view source of this page", you should see html tag "<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>", which should now support UTF-8 encoding.
If you right click and select "view source of this page", you should see html tag "<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>", which should now support UTF-8 encoding.
Sunday, October 21, 2012
Get Geodata (latitude, longitude, etc.) in Python
I let the API keys empty, 'cause I don't want to expose my keys. You need to register to infodb.com and google to get API keys !!
#!/usr/bin/python
import os
import sys
import socket
import httplib
import xml.dom.minidom as minidom
from googlemaps import GoogleMaps
""" Get googlemap API module from: http://pypi.python.org/pypi/googlemaps/1.0.2
To get Googlemap API Key:
https://code.google.com/apis/console/?pli=1#project:255524978890:access
"""
lat=38.4193
lon=-122.6978
myip = "99.9.21x.xx" (hidden for the purpose of this blog)
debug=0
#time
lat2timeURL="www.earthtools.org"
#lat2timeFile="/timezone/" + str(lat) + '/' + str(lon)
lat2heightURL="www.earthtools.org"
#lat2heightFile="/height/" + str(lat) + "/" + str(lon)
infodb_apikey = "get your own key"
gmap_apikey = "get your own key"
ip2lat2URL = "api.ipinfodb.com"
ip2lat2File = "/v3/ip-city/?key=" + infodb_apikey + "&format=xml&ip="
def getText(nodeList):
rc = []
for node in nodeList:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)
def getXmlElementFromObj(obj, name):
objList = obj.getElementsByTagName(name)[0]
if objList:
return getText(objList.childNodes)
else:
return ""
def DisplayUsage():
sys.stderr.write("\nUsage: %s <address in double-quotes>\n\n" % sys.argv[0])
def EarthData(address):
try:
gmaps = GoogleMaps(gmap_apikey)
lat, lon = gmaps.address_to_latlng(address)
except:
sys.stderr.write("\nUnable to query GoogleMaps\n")
sys.exit(1)
lat2timeFile="/timezone/" + str(lat) + '/' + str(lon)
lat2heightFile="/height/" + str(lat) + "/" + str(lon)
conn = httplib.HTTPConnection(lat2timeURL)
conn.request("GET", lat2timeFile)
resp = conn.getresponse()
if resp.status == 200:
data = resp.read()
if debug:
print data
xml = minidom.parseString(data)
timezoneObj = xml.getElementsByTagName("timezone")
for tmObj in timezoneObj:
nodes = tmObj.childNodes
version = getXmlElementFromObj(tmObj, "version")
lat = getXmlElementFromObj(tmObj, "latitude")
lon = getXmlElementFromObj(tmObj, "longitude")
localtime = getXmlElementFromObj(tmObj, "localtime")
isotime = getXmlElementFromObj(tmObj, "isotime")
utctime = getXmlElementFromObj(tmObj, "utctime")
#print "version=%s" % version
if debug:
print "latitude : %s" % lat
print "longitude : %s" % lon
print "localtime : %s" % localtime
conn.close()
conn = httplib.HTTPConnection(lat2heightURL)
conn.request("GET", lat2heightFile)
resp = conn.getresponse()
if resp.status == 200:
data = resp.read()
if debug:
print data
xml = minidom.parseString(data)
hObj = xml.getElementsByTagName("height")
for h in hObj:
meter = getText(h.getElementsByTagName("meters")[0].childNodes)
feet = getText(h.getElementsByTagName("feet")[0].childNodes)
if debug:
print "Sea-level : %s meters = %s feet" % (meter, feet)
conn.close()
return (lat, lon, localtime, meter, feet)
def GetPublicIp(name):
myip = str(socket.gethostbyname(name))
iplatURL="api.hostip.info"
ip2latFile="/?ip=" + myip + "&position=true"
if debug:
print "IP Address: %s" % myip
ip2lat2File += myip
conn = httplib.HTTPConnection(ip2lat2URL)
conn.request("GET", ip2lat2File)
resp = conn.getresponse()
if resp.status == 200:
data = resp.read()
xml = minidom.parseString(data)
#print data
locObj = xml.getElementsByTagName("Response")
for loc in locObj:
nodes = loc.childNodes
status = getXmlElementFromObj(loc,"statusCode")
if status == "OK":
lat = getXmlElementFromObj(loc, "latitude")
lon = getXmlElementFromObj(loc, "longitude")
countryCode = getXmlElementFromObj(loc, "countryCode")
countryName = getXmlElementFromObj(loc, "countryName")
regionName = getXmlElementFromObj(loc, "regionName")
cityName = getXmlElementFromObj(loc, "cityName")
zipCode = getXmlElementFromObj(loc, "zipCode")
timezone = getXmlElementFromObj(loc, "timeZone")
print "Address : %s %s, %s %s" % (cityName, str(zipCode), regionName, countryName )
conn.close()
"============================== MAIN =================================="
if __name__ == "__main__":
if len(sys.argv) < 2:
DisplayUsage()
sys.exit(1)
else:
addr = sys.argv[1]
print "Querying %s" % addr
(lat, lon, ltime, meter, feet) = EarthData(addr)
print "========================="
print "Address : %s" % addr
print "Latitude : %s" % lat
print "Longitude : %s" % lon
print "Local-time: %s" % ltime
print "Sea-level : %s meters (%s feet)" % (meter, feet)
# print "ip2Lat2=%s%s" % (ip2lat2URL, ip2lat2File)
Example (assume the script above is saved as "earthdata.py"):
bash-4.2$ ./earthdata.py "1450 N McDowell Blvd, Petaluma, CA 94954"
Querying 1450 N McDowell Blvd, Petaluma, CA 94954
=========================
Address : 1450 N McDowell Blvd, Petaluma, CA 94954
Latitude : 38.279534
Longitude : -122.6709223
Local-time: 21 Oct 2012 16:47:33
Sea-level : 12 meters (39.4 feet)
bash-4.2$
Saturday, September 22, 2012
Message-based Client-Server
Server
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <sys/msg.h>
#include "msgdefs.h"
#define OK 0
#define LOG_ERROR(msg) { printf("%s:%u: %s %s\n", \
__FUNCTION__, __LINE__, msg, \
strerror(errno)); }
int msgQueue;
int CreateMsgQueue(long id)
{
int msgId;
key_t key;
struct msqid_ds ds;
key = ftok("msgserv.c", id);
msgId = msgget(key, 0644 | IPC_CREAT);
if (msgId < 0)
{
LOG_ERROR("msgget");
}
if (EEXIST == errno)
{
// reuse
msgctl(msgId, IPC_STAT, &ds);
key = ftok("msgserv.key", id);
msgId = msgget(key, 0777 | IPC_SET);
}
return msgId;
}
int SendMsg(void *msg, size_t msgsz, int msgflg)
{
Msg_t *pMsg;
char *pData;
int retval = 0;
pMsg = malloc(sizeof(Msg_t) + msgsz);
pMsg->hdr.msgType = 1;
pMsg->hdr.dataSize = msgsz;
pData = (char*)(&pMsg->data[0]);
memcpy(pData, msg, msgsz);
retval = msgsnd(msgQueue, pMsg, msgsz, msgflg);
free(pMsg);
return retval;
}
void *SendMsgTask(void *arg)
{
Msg_t msg;
long tick = 0;
if (arg)
printf("This is task %d\n", *(int *) arg);
else
printf("This is task\n");
#if 1
do {
// send msg
printf("Sending tick=%lu\n", tick);
if (OK != SendMsg(&tick, sizeof(tick), 0))
{
LOG_ERROR("SendMsg failed");
}
tick++;
usleep(500000);
//sleep(1);
} while (tick < 50);
//send quit
msg.hdr.msgType = 2;
msgsnd(msgQueue, &msg, sizeof(msg), 0);
return NULL;
#endif
}
int main()
{
int retval;
pthread_t SendMsgTaskId;
pthread_attr_t attr;
pthread_attr_init(&attr);
msgQueue = CreateMsgQueue(MESSAGE1);
if (msgQueue > 0) {
printf("Start the thread..\n");
retval = pthread_create(&SendMsgTaskId, &attr, SendMsgTask, NULL);
if (OK == retval)
pthread_join(SendMsgTaskId, NULL);
}
else {
LOG_ERROR("CreateMsgQueue");
}
if (OK != msgctl(msgQueue, IPC_RMID, NULL))
{
LOG_ERROR("msgctl");
exit(1);
}
pthread_attr_destroy(&attr);
return 0;
}
Client
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <sys/msg.h>
#include "msgdefs.h"
#define OK 0
#define LOG_ERROR(msg) { printf("%s:%u: %s %s\n", \
__FUNCTION__, __LINE__, msg, \
strerror(errno)); }
int msgQueue;
int InitMsgQueue(long id)
{
int msgId;
key_t key;
key = ftok("msgserv.c", id);
msgId = msgget(key, 0644);
if (OK != msgId)
{
LOG_ERROR("msgget");
}
return msgId;
}
int ReceiveMsg(Msg_t **pMsg, size_t *msgsz)
{
int sz;
int retval = 0;
sz = 256;
*pMsg = malloc(sizeof(Msg_t) + sz);
retval = msgrcv(msgQueue, *pMsg, sz, 0, 0);
*msgsz = sz;
return retval;
}
void *ReceiveMsgTask(void *arg)
{
Msg_t *pMsg;
size_t sz;
if (arg)
printf("This is task %d\n", *(int *) arg);
else
printf("This is task\n");
for(;;) {
// rcv msg
if (ReceiveMsg(&pMsg, &sz) < 0)
{
LOG_ERROR("ReceiveMsg");
return NULL;
}
else {
printf("MsgType = %lu\n", pMsg->hdr.msgType);
switch (pMsg->hdr.msgType) {
case 1:
printf("Received sz=%u, tick=%lu\n",
pMsg->hdr.dataSize,
*(long*)(&pMsg->data[0]));
break;
default:
printf("End of task\n");
free(pMsg);
return NULL;
}
}
// msg must be freed
free(pMsg);
}
return NULL;
}
int main()
{
int retval;
pthread_t ReceiveMsgTaskId;
pthread_attr_t attr;
pthread_attr_init(&attr);
msgQueue = InitMsgQueue(MESSAGE1);
if (msgQueue > 0) {
printf("Start the thread..\n");
retval = pthread_create(&ReceiveMsgTaskId, &attr, ReceiveMsgTask, NULL);
if (OK == retval)
pthread_join(ReceiveMsgTaskId, NULL);
}
else {
LOG_ERROR("InitMsgQueue");
}
pthread_attr_destroy(&attr);
return 0;
}
msgdefs.h
#ifndef __MSGDEFS_H__
#define __MSGDEFS_H__
enum {
MESSAGE1 = 0x10000000
};
#define MSG_DATA_SIZE 1024
typedef struct {
long msgType;
unsigned int dataSize;
} MsgHdr_t;
typedef struct {
MsgHdr_t hdr; /* our header */
char data[0]; // just a place holder
} Msg_t;
#endif
Subscribe to:
Posts (Atom)