Exemplo n.º 1
0
Arquivo: sdev.c Projeto: caicry/sge800
/******************************************************************************
*	函数:	streamdev_open
*	功能:	打开数据流设备
*	参数:
*	返回:	0				-	成功


*	说明:	无
******************************************************************************/
struct sdevhandle * streamdev_open(u8 id)
{
	int ret;
	struct sdevhandle *p;
	if((id < 0) || (id >= CFG_SDEV_MAX)){
		goto error;
	}

	switch(id){
	case CFG_GPRS_ME3000:
		sdevhandle[CFG_GPRS_ME3000].setconfig = gprs_me3000_setconfig;
		sdevhandle[CFG_GPRS_ME3000].getconfig = gprs_me3000_getconfig;
		sdevhandle[CFG_GPRS_ME3000].send = gprs_me3000_send;
		sdevhandle[CFG_GPRS_ME3000].recv = gprs_me3000_recv;
		sdevhandle[CFG_GPRS_ME3000].sendsmg = gprs_me3000_sendsmg;
		sdevhandle[CFG_GPRS_ME3000].recvsmg = gprs_me3000_recvsmg;
		sdevhandle[CFG_GPRS_ME3000].connect = gprs_me3000_connect;
		sdevhandle[CFG_GPRS_ME3000].disconnect = gprs_me3000_disconnect;
		sdevhandle[CFG_GPRS_ME3000].getstat = gprs_me3000_getstat;
		sdevhandle[CFG_GPRS_ME3000].turnon = gprs_me3000_turnon;
		sdevhandle[CFG_GPRS_ME3000].turnoff = gprs_me3000_turnoff;
		sdevhandle[CFG_GPRS_ME3000].poweron = gprs_me3000_poweron;
		sdevhandle[CFG_GPRS_ME3000].poweroff = gprs_me3000_poweroff;
		sdevhandle[CFG_GPRS_ME3000].reset = gprs_me3000_reset;
		ret = gprs_me3000_init();
		if (ret){
			goto error;
		}
		p = (struct sdevhandle *)&sdevhandle[CFG_GPRS_ME3000];
		break;
	case CFG_SDEV_485:
		sdevhandle[CFG_SDEV_485].setconfig = sdev_485_setconfig;
		sdevhandle[CFG_SDEV_485].getconfig = sdev_485_getconfig;
		sdevhandle[CFG_SDEV_485].send = sdev_485_send;
		sdevhandle[CFG_SDEV_485].recv = sdev_485_recv;
		sdevhandle[CFG_SDEV_485].sendsmg = sdev_485_sendsmg;
		sdevhandle[CFG_SDEV_485].recvsmg = sdev_485_recvsmg;
		sdevhandle[CFG_SDEV_485].connect = sdev_485_connect;
		sdevhandle[CFG_SDEV_485].disconnect = sdev_485_disconnect;
		sdevhandle[CFG_SDEV_485].getstat = sdev_485_getstat;
		sdevhandle[CFG_SDEV_485].turnon = sdev_485_turnon;
		sdevhandle[CFG_SDEV_485].turnoff = sdev_485_turnoff;
		sdevhandle[CFG_SDEV_485].poweron = sdev_485_poweron;
		sdevhandle[CFG_SDEV_485].poweroff = sdev_485_poweroff;
		sdevhandle[CFG_SDEV_485].reset = sdev_485_reset;
		ret = comport_init(CFG_SDEV_485_COMPORT, COMPORT_MODE_485);
		if (ret){
			goto error;
		}
		p = (struct sdevhandle *)&sdevhandle[CFG_SDEV_485];
		break;
	case CFG_SDEV_NET:
		sdevhandle[CFG_SDEV_NET].setconfig = sdev_net_setconfig;
		sdevhandle[CFG_SDEV_NET].getconfig = sdev_net_getconfig;
		sdevhandle[CFG_SDEV_NET].send = sdev_net_send;
		sdevhandle[CFG_SDEV_NET].recv = sdev_net_recv;
		sdevhandle[CFG_SDEV_NET].sendsmg = sdev_net_sendsmg;
		sdevhandle[CFG_SDEV_NET].recvsmg = sdev_net_recvsmg;
		sdevhandle[CFG_SDEV_NET].connect = sdev_net_connect;
		sdevhandle[CFG_SDEV_NET].disconnect = sdev_net_disconnect;
		sdevhandle[CFG_SDEV_NET].getstat = sdev_net_getstat;
		sdevhandle[CFG_SDEV_NET].turnon = sdev_net_turnon;
		sdevhandle[CFG_SDEV_NET].turnoff = sdev_net_turnoff;
		sdevhandle[CFG_SDEV_NET].poweron = sdev_net_poweron;
		sdevhandle[CFG_SDEV_NET].poweroff = sdev_net_poweroff;
		sdevhandle[CFG_SDEV_NET].reset = sdev_net_reset;
		p = (struct sdevhandle *)&sdevhandle[CFG_SDEV_NET];
		break;
	default:
		goto error;
		break;
	}
	return(p);
error:
	return NULL;
}
Exemplo n.º 2
0
int main(int argc, char **argv)
{
    int opt = 0;
    int retval = 0;
    int iRecv = 0;
    int i;
    char *dev_name = NULL;
    int baudrate = 115200;
    char *settings = "8N1N";
    unsigned char aucBuf[512];
    unsigned char disp_mode = 0x00;

    struct sigaction sigact;

    struct option long_options[] = {
        {"device", required_argument, NULL, 'd'},
        {"baudrate", required_argument, NULL, 'b'},
        {"settings", required_argument, NULL, 's'},
        {"ioctl", required_argument, NULL, 'i'},
        {"hex", no_argument, NULL, 'x'},
        {"version", no_argument, NULL, 'v'},
        {"help", no_argument, NULL, 'h'},
        {NULL, 0, NULL, 0}
    };

    while ((opt = getopt_long(argc, argv, "d:b:s:ivh", long_options, NULL)) != -1)
    {
        switch (opt)
        {
        case 'd':
            dev_name = optarg;
            break;
        case 'b':
            baudrate = atoi(optarg);
            break;
        case 's':            /* Default settings as 8N1N */
            settings = optarg;
            break;
        case 'i':
            if (5 != argc)
            {
                usage(argv[0]);
            }
            else
            {
                do_ioctl(argv[2], atoi(argv[3]), atoi(argv[4]));
            }
            return 0;
        case 'x':            /* Display receive data as Hex mode */
            disp_mode = 0x01;
            break;
        case 'v':            /* version */
            print_version(argv[0]);
            return 0;
        case 'h':            /* help */
            usage(argv[0]);
            return 0;
        default:
            break;
        }                       /* end of "switch(opt)" */
    }

    if (argc < 2)
    {
        usage(argv[0]);
        return 0;
    }

    COM_PORT *comport = NULL;
    if (NULL == (comport = comport_init(dev_name, baudrate, settings)))
    {
        printf("Comport initialize failure.\n");
        return -1;
    }

    if ((retval = comport_open(comport)) < 0)
    {
        printf("Failed to open %s with baudrate %d, %s. RetCode [0x%02x]", dev_name, baudrate,
               settings, retval);
        return -1;
    }

    nonblock();

    /* Process level signal handler */
    sigemptyset(&sigact.sa_mask);
    sigact.sa_flags = 0;
    sigact.sa_handler = signal_handler;

    sigaction(SIGTERM, &sigact, NULL);  /* catch terminate signal */
    sigaction(SIGINT, &sigact, NULL);   /* catch interrupt signal */
    sigaction(SIGSEGV, &sigact, NULL);  /* catch segmentation faults */
    sigaction(SIGTSTP, &sigact, NULL);  /* catch ctrl+Z */
    sigaction(SIGSTOP, &sigact, NULL);  /* catch ctrl+Z */

    while (0x01 == g_ucProcToken)
    {
        retval = comport_recv(comport, aucBuf, sizeof(aucBuf) - 1, &iRecv, 10);
        if (0x00 == retval && 0 < iRecv)
        {
            for (i = 0; i < iRecv; i++)
            {
                if (0 == disp_mode)
                    printf("%c", aucBuf[i]);
                else
                    printf("%02X ", aucBuf[i]);
            }
            fflush(stdout);
        }
        if (0 != kbhit())
        {
            iRecv = fgetc(stdin);

            if (10 == iRecv)
            {
                aucBuf[0] = 13;
            }
            else
            {
                aucBuf[0] = iRecv;
            }

            comport_send(comport, aucBuf, 1);
        }
        else if (0x00 != g_ucCtrlZ)
        {
            g_ucCtrlZ = 0x00;
            aucBuf[0] = 0x1A;
            comport_send(comport, aucBuf, 1);
        }
    }

    comport_term(comport);
    return 0;
}                               /* ----- End of main() ----- */
Exemplo n.º 3
0
Arquivo: gprs.c Projeto: caicry/sge800
/*************************************************
  API
*************************************************/
static int me3000_open(void)
{
	int ret;
	comport_config_t gprs_cfg = {
			.baud	=	9600,
			.verify	= COMPORT_VERIFY_NO,
			.ndata	= 8,
			.nstop	= 1,
			.timeout = 0,
			.rtscts = COMPORT_RTSCTS_ENABLE,
	};
	ret = comport_init(GPRS_COM, COMPORT_MODE_NORMAL);
	if (ret < 0 && ret != -6) {
		goto error;
	}
	ret = comport_setconfig(GPRS_COM, &gprs_cfg);
	if (ret < 0 ) {
		goto error;
	}

error:
	return ret;
}

static int me3000_connect(u8 mode, u8 *ip, u16 port)
{
	return 0;
}

static int me3000_disconnect(int cd)
{
	return 0;
}

static int me3000_senddata(int cd, u8 *buf, u32 count)
{
	return 0;
}

static int me3000_sendsms(int cd, u8 *buf, u32 count)
{
	return 0;
}

static int me3000_turnon(void)
{
	return 0;
}

static int me3000_turnoff(void)
{
	return 0;
}

static int me3000_getflow(u8 type)
{
	return 0;
}

static int me3000_getstat(int cd)
{
	return 0;
}

static int me3000_getsi(void)
{
	return 0;
}

gprs_device_t gprs_device[] = {
	{
		me3000_open,
		me3000_connect,
		me3000_disconnect,
		me3000_senddata,
		me3000_sendsms,
		me3000_turnon,
		me3000_turnoff,
		me3000_getflow,
		me3000_getstat,
		me3000_getsi
	},
};