ssize_t qmi_ctl_update_cid(struct qmi_device *qmid, uint8_t service, bool release, uint8_t cid){ uint8_t buf[QMI_DEFAULT_BUF_SIZE]; qmux_hdr_t *qmux_hdr = (qmux_hdr_t*) buf; uint16_t message_id = release ? QMI_CTL_RELEASE_CID : QMI_CTL_GET_CID; //TODO: Perhaps make this nicer, sinceit is only used in one case uint16_t tlv_value = htole16((cid << 8) | service); ssize_t retval = 0; create_qmi_request(buf, QMI_SERVICE_CTL, 0, qmid->ctl_transaction_id, message_id); if(qmid_verbose_logging >= QMID_LOG_LEVEL_2){ if(release) QMID_DEBUG_PRINT(stderr, "Releasing CID %x for service %x\n", cid, service); else QMID_DEBUG_PRINT(stderr, "Requesting CID for service %x\n", service); } if(release) add_tlv(buf, QMI_CTL_TLV_ALLOC_INFO, sizeof(uint16_t), &tlv_value); else add_tlv(buf, QMI_CTL_TLV_ALLOC_INFO, sizeof(uint8_t), &service); retval = qmi_ctl_write(qmid, buf, le16toh(qmux_hdr->length)); if(retval <= 0) if(qmid_verbose_logging >= QMID_LOG_LEVEL_1) QMID_DEBUG_PRINT(stderr, "Failed to send request for CID for %x\n", service); return retval; }
ssize_t qmi_ctl_send_data_format(struct qmi_device *qmid){ uint8_t buf[QMI_DEFAULT_BUF_SIZE]; qmux_hdr_t *qmux_hdr = (qmux_hdr_t*) buf; //Values fetched from windows_telenor_qmi uint8_t format = 0; uint16_t proto = htole16(0x0001); if(qmid_verbose_logging >= QMID_LOG_LEVEL_2) QMID_DEBUG_PRINT(stderr, "Seding set data format request\n"); create_qmi_request(buf, QMI_SERVICE_CTL, 0, qmid->ctl_transaction_id, QMI_CTL_SET_DATA_FORMAT); add_tlv(buf, QMI_CTL_TLV_DATA_FORMAT, sizeof(uint8_t), &format); add_tlv(buf, QMI_CTL_TLV_DATA_PROTO, sizeof(uint16_t), &proto); return qmi_ctl_write(qmid, buf, le16toh(qmux_hdr->length)); }
/* open configuration file to read wlan setting parameters */ int mib_get_object(char * path, struct wps_data *data, const struct mib_param_set * mibsets) { char fname[] = APAC_CONF_FILE_PATH; const struct mib_param_set * mibset; FILE *f; char mibpath[256]; char buf[256]; char *tag; char *value; int param_num = 0; /*Open config file*/ f = fopen(fname, "r"); if (f == NULL) { dprintf(MSG_ERROR, "%s, couldn't open configuration file: '%s'. \n", fname); return -1; } /*get the line from config file by path and name, and copy value string*/ while (fgets(buf, sizeof(buf), f) != NULL) { tag = apac_config_line_lex(buf, &value); if (tag == NULL || *tag == 0) { continue; } mibset = mibsets; while(mibset && mibset->name) { struct wps_tlv *tlv; sprintf(mibpath, "%s.%s", path, mibset->name); if (strcmp(mibpath, tag) == 0) { if(mib_get_tlv(mibset, value ,& tlv) < 0) { dprintf(MSG_ERROR, "Fails: Path [%s], value [%s]\n", path, value); break; } add_tlv(data, tlv); param_num ++; break; } mibset ++; } } /*Close config file*/ fclose(f); if (param_num > 0) return 0; else return -1; }