/* ******************** * SRCP commands */ int setGA(bus_t busnumber, int addr, ga_state_t a) { int number_ga = get_number_ga(busnumber); if ((addr > 0) && (addr <= number_ga)) { char msg[1000]; if (!isInitializedGA(busnumber, addr)) initGA(busnumber, addr, 'P', 0); ga[busnumber].gastate[addr].id = a.id; ga[busnumber].gastate[addr].action = a.action; ga[busnumber].gastate[addr].port = a.port; gettimeofday(&ga[busnumber].gastate[addr]. tv[ga[busnumber].gastate[addr].port], NULL); infoGA(busnumber, addr, a.port, msg); enqueueInfoMessage(msg); return SRCP_OK; } else { return SRCP_NODATA; } }
/** * GET */ int handleGET(sessionid_t sessionid, bus_t bus, char *device, char *parameter, char *reply, size_t length) { struct timeval akt_time; int rc = SRCP_UNSUPPORTEDDEVICEGROUP; *reply = 0x00; gettimeofday(&akt_time, NULL); if (bus_has_devicegroup(bus, DG_FB) && strncasecmp(device, "FB", 2) == 0) { long int nelem, port; nelem = sscanf(parameter, "%ld", &port); if (nelem >= 1) rc = infoFB(bus, port, reply, length); else rc = srcp_fmt_msg(SRCP_LISTTOOSHORT, reply, akt_time); } else if (bus_has_devicegroup(bus, DG_GL) && strncasecmp(device, "GL", 2) == 0) { long nelem, addr; nelem = sscanf(parameter, "%ld", &addr); if (nelem >= 1) rc = cacheInfoGL(bus, addr, reply); else rc = srcp_fmt_msg(SRCP_LISTTOOSHORT, reply, akt_time); } else if (bus_has_devicegroup(bus, DG_GA) && strncasecmp(device, "GA", 2) == 0) { long addr, port, nelem; nelem = sscanf(parameter, "%ld %ld", &addr, &port); switch (nelem) { case 0: case 1: rc = srcp_fmt_msg(SRCP_LISTTOOSHORT, reply, akt_time);; break; case 2: rc = infoGA(bus, addr, port, reply); break; default: rc = srcp_fmt_msg(SRCP_LISTTOOLONG, reply, akt_time);; } } else if (bus_has_devicegroup(bus, DG_SM) && strncasecmp(device, "SM", 2) == 0) { long addr, value1, value2; int nelem; int type; char ctype[MAXSRCPLINELEN]; nelem = sscanf(parameter, "%ld %s %ld %ld", &addr, ctype, &value1, &value2); if (nelem < 3) { rc = SRCP_LISTTOOSHORT; } else { type = -1; if (strcasecmp(ctype, "REG") == 0) type = REGISTER; else if (strcasecmp(ctype, "CVBIT") == 0) type = CV_BIT; else if (strcasecmp(ctype, "PAGE") == 0) type = PAGE; else if (strcasecmp(ctype, "CV") == 0) type = CV; if (type == -1) { rc = SRCP_WRONGVALUE; } else { if (type != CV_BIT) value2 = 0; if (type == CV_BIT && nelem < 4) { rc = SRCP_LISTTOOSHORT; } else { rc = infoSM(bus, GET, type, addr, value1, value2, 0, reply); } } } } else if (bus_has_devicegroup(bus, DG_POWER) && strncasecmp(device, "POWER", 5) == 0) { rc = infoPower(bus, reply); } else if (bus_has_devicegroup(bus, DG_SERVER) && strncasecmp(device, "SERVER", 6) == 0) { rc = infoSERVER(reply); } else if (bus_has_devicegroup(bus, DG_TIME) && strncasecmp(device, "TIME", 4) == 0) { rc = infoTIME(reply); if (rc != SRCP_INFO) { rc = srcp_fmt_msg(SRCP_NODATA, reply, akt_time); } } else if (strncasecmp(device, "DESCRIPTION", 11) == 0) { /* there are two descriptions */ long int addr; char devgrp[11]; int nelem = 0; if (strlen(parameter) > 0) nelem = sscanf(parameter, "%10s %ld", devgrp, &addr); if (nelem <= 0) { rc = describeBus(bus, reply); } else { if (bus_has_devicegroup(bus, DG_DESCRIPTION)) { syslog_bus(bus, DBG_INFO, "DESCRIPTION: devgrp=%s addr=%ld", devgrp, addr); if (strncmp(devgrp, "GL", 2) == 0) rc = cacheDescribeGL(bus, addr, reply); else if (strncmp(devgrp, "GA", 2) == 0) rc = describeGA(bus, addr, reply); else if (strncmp(devgrp, "FB", 2) == 0) rc = describeFB(bus, addr, reply); else if (strncmp(devgrp, "SESSION", 7) == 0) rc = describeSESSION(bus, addr, reply); else if (strncmp(devgrp, "TIME", 4) == 0) rc = describeTIME(reply); else if (strncmp(devgrp, "SERVER", 6) == 0) rc = describeSERVER(bus, addr, reply); } else { rc = srcp_fmt_msg(SRCP_UNSUPPORTEDDEVICEGROUP, reply, akt_time); } } } else if (bus_has_devicegroup(bus, DG_LOCK) && (strncasecmp(device, "LOCK", 4) == 0)) { long int addr; char devgrp[10]; int nelem = -1; if (strlen(parameter) > 0) nelem = sscanf(parameter, "%s %ld", devgrp, &addr); if (nelem <= 1) { rc = srcp_fmt_msg(SRCP_LISTTOOSHORT, reply, akt_time); } else { rc = SRCP_UNSUPPORTEDDEVICEGROUP; if (strncmp(devgrp, "GL", 2) == 0) rc = describeLOCKGL(bus, addr, reply); else if (strncmp(devgrp, "GA", 2) == 0) rc = describeLOCKGA(bus, addr, reply); } } if (reply[0] == 0x00) rc = srcp_fmt_msg(rc, reply, akt_time); return rc; }