ports/108173: New port: devel/libpasori: FeliCa read/write library for Sony RC-S320 USB FeliCa R/W(PaSoRi)

mistral at imasy.or.jp mistral at imasy.or.jp
Sun Jan 21 08:30:18 UTC 2007


>Number:         108173
>Category:       ports
>Synopsis:       New port: devel/libpasori: FeliCa read/write library for Sony RC-S320 USB FeliCa R/W(PaSoRi)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jan 21 08:30:17 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Yoshihiko Sarumaru
>Release:        FreeBSD 6.2-PRERELEASE i386
>Organization:
>Environment:
System: FreeBSD sachiko.yamayuri.org 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #2: Tue Jan 16 02:03:05 JST 2007 root at sachiko.yamayuri.org:/usr/obj/usr/src/sys/VGN-TX92S i386


	
>Description:
	This library works for FeliCa Reader/Writer USB device.
	FeliCa is a contactless IC card technology used in Japan and other
	countries.

	Client programs will be send-pr shortly after this PR.
>How-To-Repeat:
	
>Fix:
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	devel/libpasori/
#	devel/libpasori/Makefile
#	devel/libpasori/distinfo
#	devel/libpasori/files
#	devel/libpasori/files/Makefile.prog
#	devel/libpasori/files/Makefile.lib
#	devel/libpasori/files/patch-lpdump.c
#	devel/libpasori/files/patch-libpasori_polling.c
#	devel/libpasori/files/patch-libpasori_command.h
#	devel/libpasori/files/patch-libpasori_command.c
#	devel/libpasori/files/patch-libpasori_com_bsdugen.c
#	devel/libpasori/files/patch-lptest.c
#	devel/libpasori/pkg-descr
#	devel/libpasori/pkg-plist
#	devel/libpasori/pkg-message
#
echo c - devel/libpasori/
mkdir -p devel/libpasori/ > /dev/null 2>&1
echo x - devel/libpasori/Makefile
sed 's/^X//' >devel/libpasori/Makefile << 'END-of-devel/libpasori/Makefile'
X# New ports collection makefile for:	libpasori
X# Date created:				18 January 2007
X# Whom:					Yoshihiko Sarumaru <mistral at imasy.or.jp>
X#
X# $FreeBSD$
X
XPORTNAME=	libpasori
XPORTVERSION=	02
XCATEGORIES=	devel
XMASTER_SITES=	${MASTER_SITE_SOURCEFORGE_JP}
XMASTER_SITE_SUBDIR=	${PORTNAME}/20457
XDISTNAME=	${PORTNAME}${PORTVERSION}
X
XMAINTAINER=	mistral at imasy.or.jp
XCOMMENT=	FeliCa read/write library for Sony RC-S320 USB FeliCa R/W(PaSoRi)
X
XUSE_BZIP2=	true
XWRKSRC=		${WRKDIR}/${PORTNAME}/src
X
Xdo-build:
X	@(cd ${BUILD_WRKSRC}; ${MAKE} -f ${FILESDIR}/Makefile.lib)
X	@(cd ${BUILD_WRKSRC}; ${MAKE} -f ${FILESDIR}/Makefile.prog PROG=lpdump)
X	@(cd ${BUILD_WRKSRC}; ${MAKE} -f ${FILESDIR}/Makefile.prog PROG=lptest)
X
Xdo-install:
X	@(cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${FILESDIR}/Makefile.lib ${INSTALL_TARGET})
X	@(cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${FILESDIR}/Makefile.prog PROG=lpdump ${INSTALL_TARGET})
X	@(cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${FILESDIR}/Makefile.prog PROG=lptest ${INSTALL_TARGET})
X
Xpost-install:
X	@${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.mk>
END-of-devel/libpasori/Makefile
echo x - devel/libpasori/distinfo
sed 's/^X//' >devel/libpasori/distinfo << 'END-of-devel/libpasori/distinfo'
XMD5 (libpasori02.tar.bz2) = c23f2a3ae3d699bcd7a269dbd64120fb
XSHA256 (libpasori02.tar.bz2) = 753dedbb8deb1f30d6d227f6e352714b5045badc6c86e77c651497e0b2a9bb15
XSIZE (libpasori02.tar.bz2) = 6352
END-of-devel/libpasori/distinfo
echo c - devel/libpasori/files
mkdir -p devel/libpasori/files > /dev/null 2>&1
echo x - devel/libpasori/files/Makefile.prog
sed 's/^X//' >devel/libpasori/files/Makefile.prog << 'END-of-devel/libpasori/files/Makefile.prog'
X#PROG?=		xxxx
XDPADD=		libpasori.a
XLDADD=		-L. -lpasori
X
XBINDIR=		${LOCALBASE}/bin
XNO_MAN=		true
X
XCFLAGS+=	-Wall -W
X
X.include <bsd.prog.mk>
END-of-devel/libpasori/files/Makefile.prog
echo x - devel/libpasori/files/Makefile.lib
sed 's/^X//' >devel/libpasori/files/Makefile.lib << 'END-of-devel/libpasori/files/Makefile.lib'
XLIB=		pasori
XSRCS=		libpasori_command.c libpasori_com_bsdugen.c \
X		libpasori_polling.c 
XINCS=		libpasori.h libpasori_com.h libpasori_command.h \
X		libpasori_config.h libpasori_liblocal.h
X
XLIBDIR=		${LOCALBASE}/lib
XINCLUDEDIR=	${LOCALBASE}/include 
XNO_PROFILE=	true
X
XCFLAGS+=	-D__LIBPASORI_WITH_BSDUGEN
XCFLAGS+=	-Wall -W
X
X.include <bsd.lib.mk>
END-of-devel/libpasori/files/Makefile.lib
echo x - devel/libpasori/files/patch-lpdump.c
sed 's/^X//' >devel/libpasori/files/patch-lpdump.c << 'END-of-devel/libpasori/files/patch-lpdump.c'
X--- lpdump.c.orig	Tue May 16 02:55:42 2006
X+++ lpdump.c	Sat Jan 20 23:04:08 2007
X@@ -1,8 +1,10 @@
X #include <stdio.h>
X #include <stdlib.h>
X+#include <string.h>
X #include <time.h>
X 
X #include "libpasori.h"
X+#include "libpasori_command.h"
X 
X void
X mydump(uint8 *p,int size){
X@@ -96,7 +98,6 @@
X 	uint16 area_end[60];
X 	uint16 area_count;
X 	uint16 servicecode[128];
X-	int servicecode_area[128];
X 	uint16 servicecode_count;
X 	uint16 t;
X 	uint16 idx;
X@@ -166,7 +167,7 @@
X 	uint8 resp[256];
X 	uint16 sc[4];
X 	int sc_count;
X-	int i,j;
X+	int i;
X 
X 	cmd[0] = 0x0c;
X 	memcpy(&cmd[1],f->IDm,8);
X@@ -188,14 +189,15 @@
X }
X 
X int
X-main(void){
X+main(int argc, char **argv){
X 	pasori* p;
X 	felica* f;
X-	int i;
X-	int m;
X-	uint8 b[16];
X 	
X-	p = pasori_open(NULL);
X+	char* devpath = NULL;
X+	if (argc == 2) {
X+		devpath = argv[1];
X+	}
X+	p = pasori_open(devpath);
X 	if(!p){
X 		printf("error\n");
X 		exit(-1);
END-of-devel/libpasori/files/patch-lpdump.c
echo x - devel/libpasori/files/patch-libpasori_polling.c
sed 's/^X//' >devel/libpasori/files/patch-libpasori_polling.c << 'END-of-devel/libpasori/files/patch-libpasori_polling.c'
X--- libpasori_polling.c.orig	Tue May 16 01:45:01 2006
X+++ libpasori_polling.c	Fri Jan 19 01:09:56 2007
X@@ -1,6 +1,8 @@
X /* libpasori polling func. */
X #include <stdlib.h>
X+#include <string.h>
X #include "libpasori_liblocal.h"
X+#include "libpasori_command.h"
X 
X 
X felica *
END-of-devel/libpasori/files/patch-libpasori_polling.c
echo x - devel/libpasori/files/patch-libpasori_command.h
sed 's/^X//' >devel/libpasori/files/patch-libpasori_command.h << 'END-of-devel/libpasori/files/patch-libpasori_command.h'
X--- libpasori_command.h.orig	Mon Mar 20 09:12:58 2006
X+++ libpasori_command.h	Fri Jan 19 00:38:48 2007
X@@ -2,8 +2,8 @@
X #define __LIBPASORI_COMMAND_H
X 
X int pasori_init(pasori*);
X-int pasori_write(pasori*,uint8,uint8);
X-int pasori_read(pasori*,uint8,uint8);
X+int pasori_write(pasori*,uint8*,uint8);
X+int pasori_read(pasori*,uint8*,uint8);
X 
X felica* felica_polling(pasori*,uint16,uint8,uint8);
X int felica_read_without_encryption02(felica* f,int servicecode,int mode,uint8 addr,uint8* b);
END-of-devel/libpasori/files/patch-libpasori_command.h
echo x - devel/libpasori/files/patch-libpasori_command.c
sed 's/^X//' >devel/libpasori/files/patch-libpasori_command.c << 'END-of-devel/libpasori/files/patch-libpasori_command.c'
X--- libpasori_command.c.orig	Mon Mar 20 09:12:58 2006
X+++ libpasori_command.c	Fri Jan 19 01:54:43 2007
X@@ -1,6 +1,7 @@
X /* pasori commands */
X #include "libpasori_liblocal.h"
X #include <stdlib.h>
X+#include <string.h>
X 
X /* FIXME: UNKNOWN CONSTANTS */
X const uint8 PASORI_INIT0[] = {0x62,0x01,0x82};
X@@ -24,7 +25,6 @@
X void /* FIXME: return errorcode */
X pasori_packet_write(pasori* p,uint8* data,int size){ /* RAW Packet SEND */
X 	uint8 cmd[256];
X-	uint8 recv[256];
X 	uint8 sum;
X 	int i;
X 	sum = 0;
X@@ -81,6 +81,7 @@
X 	s = recv[3];
X 	/* FIXME:calc checksum */
X 	/* FIXME:check buffer size */
X+	(void)size;
X 	/* FIXME:check msgid */
X 	s--;
X 	memcpy(data,&recv[7],s);
X@@ -95,6 +96,9 @@
X 	uint8 resp[256];
X 	uint8 blklist[2];
X 	int i;
X+
X+	(void)mode; /* FIXME: what is this argument? */
X+
X 	blklist[0] = 0;
X 	blklist[1] = addr;
X 	blklist[0] |= 0x80; /* element size == 2 */
X@@ -124,7 +128,6 @@
X /* INIT */
X int
X pasori_init(pasori *p){
X-	uint8 recv[256];
X 	pasori_test(p,PASORI_INIT0,sizeof(PASORI_INIT0));
X 	pasori_test(p,PASORI_INIT1,sizeof(PASORI_INIT1));
X 	pasori_test(p,PASORI_INIT2,sizeof(PASORI_INIT2));
END-of-devel/libpasori/files/patch-libpasori_command.c
echo x - devel/libpasori/files/patch-libpasori_com_bsdugen.c
sed 's/^X//' >devel/libpasori/files/patch-libpasori_com_bsdugen.c << 'END-of-devel/libpasori/files/patch-libpasori_com_bsdugen.c'
X--- libpasori_com_bsdugen.c.orig	Mon Mar 20 09:12:58 2006
X+++ libpasori_com_bsdugen.c	Sat Jan 20 23:13:12 2007
X@@ -6,7 +6,16 @@
X #include <sys/ioctl.h>
X #include <errno.h>
X 
X+#include <sys/param.h>
X+#include <string.h>
X+#include <unistd.h>
X+#include <err.h>
X+
X #include "libpasori_liblocal.h"
X+#include "libpasori.h"
X+
X+#define VENDOR_SONY	0x054c
X+#define PRODUCT_RC_S320	0x01bb
X 
X void dbg_dump(uint8* d,int size){
X         int i;
X@@ -16,25 +25,86 @@
X         Log("\n");
X }
X 
X-pasori* pasori_open(char* c){ /* FIXME:unused arg. */
X+void search_pasori(char* devname, int devnamelen){
X+    int pathnum;
X+    char buspath[16];
X+    int busfd;
X+
X+    memset(devname, 0, devnamelen);
X+    for (pathnum = 0; pathnum < 10; pathnum++) {
X+	snprintf(buspath, sizeof(buspath), "/dev/usb%d", pathnum);
X+	if ((busfd = open(buspath, O_RDONLY)) >= 0) {
X+	    int devnum;
X+	    for (devnum = 1; devnum < USB_MAX_DEVICES; devnum++) {
X+		struct usb_device_info di;
X+		di.udi_addr = devnum;
X+		if (ioctl(busfd, USB_DEVICEINFO, &di) != -1) {
X+		    if ((di.udi_vendorNo == VENDOR_SONY) &&
X+			(di.udi_productNo == PRODUCT_RC_S320)) {
X+			int i;
X+			for (i=0; i<USB_MAX_DEVNAMES; i++) {
X+			    if (strncmp(di.udi_devnames[i], "ugen", 4) == 0) {
X+				snprintf(devname, devnamelen,
X+					 "/dev/%s", di.udi_devnames[i]);
X+				devname[devnamelen -1] = '\0';
X+				break;
X+			    }
X+			}
X+		    }
X+		}
X+		if (devname[0] != '\0') break;
X+	    }
X+	    close(busfd);
X+	    if (devname[0] != '\0') break;
X+	} else {
X+	    continue;
X+	}
X+    }
X+}    
X+
X+pasori* pasori_open(char* c){
X         int config;
X         pasori *pp;
X-        char* pasori_devname;
X-        char* pasori_intr;
X+	char pasori_devname[USB_MAX_DEVNAMELEN +1];
X+        char pasori_ctrl[PATH_MAX];
X+        char pasori_intr[PATH_MAX];
X         int i;
X-	int t;
X-        const int timeout = 400;
X-        const int size = 0;
X         pp = (pasori *)malloc(sizeof(pasori));
X 
X-        pasori_devname = "/dev/ugen0.00"; /* FIXME:hardcoded device path */
X-        pasori_intr = "/dev/ugen0.01";
X-
X-        pp->fd_cntl = open(pasori_devname,O_RDWR);
X+	if (c != NULL) {
X+		snprintf(pasori_devname, sizeof(pasori_devname), 
X+			 "%s", c);
X+		pasori_devname[sizeof(pasori_devname) -1] = '\0';
X+	} else {
X+		search_pasori(pasori_devname, sizeof(pasori_devname));
X+		if (strlen(pasori_devname) == 0) {
X+		    warnx("No PaSoRi was found.");
X+		    return NULL;
X+		}
X+	}
X+#if defined(__NetBSD__) || defined(__OpenBSD__)
X+	snprintf(pasori_ctrl, sizeof(pasori_ctrl), 
X+		 "%s.00", pasori_devname);
X+#else
X+	snprintf(pasori_ctrl, sizeof(pasori_ctrl), 
X+		 "%s", pasori_devname);
X+#endif
X+	pasori_ctrl[sizeof(pasori_ctrl) -1] = '\0';
X+	snprintf(pasori_intr, sizeof(pasori_intr), 
X+		 "%s.1", pasori_devname);
X+	pasori_intr[sizeof(pasori_intr) -1] = '\0';
X+
X+        pp->fd_cntl = open(pasori_ctrl,O_RDWR);
X+	if (pp->fd_cntl == -1) {
X+	    warn("%s", pasori_ctrl);
X+	}
X 
X         config = 1;
X         i = ioctl(pp->fd_cntl,USB_SET_CONFIG,&config);
X         pp->fd_intr = open(pasori_intr,O_RDONLY | O_NONBLOCK);
X+	if (pp->fd_intr == -1) {
X+	    warn("%s", pasori_intr);
X+	}
X         if( (pp->fd_cntl < 0) || (pp->fd_intr < 0) ){
X                 Log("error opening pasori.%d %d",pp->fd_cntl,pp->fd_intr);
X                 close(pp->fd_cntl);
X@@ -47,7 +117,6 @@
X 
X int pasori_send(pasori* pp,uint8 *cmd,uint8 size,int timeout){
X         struct usb_ctl_request req;
X-        uint8 msg[128]; /* FIXME:max message bytes? */
X         uint8 resp[256];
X         signed int i;
X 	int t;
X@@ -90,11 +159,12 @@
X int pasori_recv(pasori* pp,uint8* buf,uint8 bufsize,int timeout){
X         signed int i;
X         int state;
X-        int size;
X+        int size=0;
X         int ptr;
X-        int one = 1;
X 	fd_set fds;
X 	struct timeval tv;
X+
X+	(void)bufsize; /* FIXME: buffer size is not checked */
X 	
X         uint8 resp;
X         state = STATE_UNKNOWN;
X@@ -156,5 +226,7 @@
X void pasori_close(pasori* p){
X         close(p->fd_intr);
X         close(p->fd_cntl);
X+	free(p);
X+	p = NULL;
X }
X 
END-of-devel/libpasori/files/patch-libpasori_com_bsdugen.c
echo x - devel/libpasori/files/patch-lptest.c
sed 's/^X//' >devel/libpasori/files/patch-lptest.c << 'END-of-devel/libpasori/files/patch-lptest.c'
X--- lptest.c.orig	Mon Mar 20 09:12:58 2006
X+++ lptest.c	Sun Jan 21 00:36:43 2007
X@@ -2,24 +2,29 @@
X #include <stdlib.h>
X 
X #include "libpasori.h"
X+#include "libpasori_command.h"
X 
X 
X int
X-main(void){
X+main(int argc, char **argv){
X 	pasori* p;
X 	felica* f;
X 	int i;
X-	int m;
X 	uint8 b[16];
X 	
X 	printf("lptest : start\n");
X-	p = pasori_open(NULL);
X+	char* devpath = NULL;
X+	if (argc == 2) {
X+		devpath = argv[1];
X+	}
X+	p = pasori_open(devpath);
X 	if(!p){
X 		printf("error\n");
X 		exit(-1);
X 	}
X 	pasori_init(p);
X 	f = felica_polling(p,POLLING_ANY,0,0);
X+	if (f) {
X 	printf("read test\n");
X 	for(i=0;i!=32;i++){
X 		if(!felica_read_without_encryption02(f,0x090f,0,i,b)){
X@@ -38,6 +43,8 @@
X 			
X 			
X 		}
X+	}
X+	free(f);
X 	}
X 
X 	pasori_close(p);
END-of-devel/libpasori/files/patch-lptest.c
echo x - devel/libpasori/pkg-descr
sed 's/^X//' >devel/libpasori/pkg-descr << 'END-of-devel/libpasori/pkg-descr'
XFeliCa read/write library for Sony RC-S320 USB FeliCa R/W(PaSoRi).
XThis library is independent from the SDK for FeliCa.
X
XWWW: http://libpasori.sourceforge.jp/
END-of-devel/libpasori/pkg-descr
echo x - devel/libpasori/pkg-plist
sed 's/^X//' >devel/libpasori/pkg-plist << 'END-of-devel/libpasori/pkg-plist'
Xbin/lpdump
Xbin/lptest
Xinclude/libpasori.h
Xinclude/libpasori_command.h
Xinclude/libpasori_liblocal.h
Xinclude/libpasori_com.h
Xinclude/libpasori_config.h
Xlib/libpasori.a
END-of-devel/libpasori/pkg-plist
echo x - devel/libpasori/pkg-message
sed 's/^X//' >devel/libpasori/pkg-message << 'END-of-devel/libpasori/pkg-message'
X******************************************************************************
XPlace your FeliCa card on PaSoRi before executing commands.
X******************************************************************************
END-of-devel/libpasori/pkg-message
exit

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list