521
536
result = qcdm_result_new ();
538
/* Convert the ESN from binary to a hex string; it's LE so we have to
539
* swap it to get the correct ordering.
541
swapped[0] = rsp->esn[3];
542
swapped[1] = rsp->esn[2];
543
swapped[2] = rsp->esn[1];
544
swapped[3] = rsp->esn[0];
546
tmp = bin2hexstr (&swapped[0], sizeof (swapped));
547
qcdm_result_add_string (result, QCDM_CMD_STATUS_SNAPSHOT_ITEM_ESN, tmp);
550
/* Cheap binary -> decimal conversion */
551
hmcc = le16toh (rsp->mcc);
552
tmcc[2] = hmcc / 100;
553
tmcc[1] = (hmcc - (tmcc[2] * 100)) / 10;
554
tmcc[0] = (hmcc - (tmcc[2] * 100) - (tmcc[1] * 10));
556
mcc = (100 * digit_fixup (tmcc[2])) + (10 * digit_fixup (tmcc[1])) + digit_fixup (tmcc[0]);
557
qcdm_result_add_u32 (result, QCDM_CMD_STATUS_SNAPSHOT_ITEM_HOME_MCC, mcc);
523
559
qcdm_result_add_u8 (result, QCDM_CMD_STATUS_SNAPSHOT_ITEM_BAND_CLASS, cdma_band_class_to_qcdm (rsp->band_class));
524
560
qcdm_result_add_u8 (result, QCDM_CMD_STATUS_SNAPSHOT_ITEM_BASE_STATION_PREV, cdma_prev_to_qcdm (rsp->prev));
525
561
qcdm_result_add_u8 (result, QCDM_CMD_STATUS_SNAPSHOT_ITEM_MOBILE_PREV, cdma_prev_to_qcdm (rsp->mob_prev));
924
960
/**********************************************************************/
963
qcdm_cmd_nv_get_hybrid_pref_new (char *buf, size_t len)
965
char cmdbuf[sizeof (DMCmdNVReadWrite) + 2];
966
DMCmdNVReadWrite *cmd = (DMCmdNVReadWrite *) &cmdbuf[0];
968
qcdm_return_val_if_fail (buf != NULL, 0);
969
qcdm_return_val_if_fail (len >= sizeof (*cmd) + DIAG_TRAILER_LEN, 0);
971
memset (cmd, 0, sizeof (*cmd));
972
cmd->code = DIAG_CMD_NV_READ;
973
cmd->nv_item = htole16 (DIAG_NV_HYBRID_PREF);
975
return dm_encapsulate_buffer (cmdbuf, sizeof (*cmd), sizeof (cmdbuf), buf, len);
979
qcdm_cmd_nv_get_hybrid_pref_result (const char *buf, size_t len, int *out_error)
981
QcdmResult *result = NULL;
982
DMCmdNVReadWrite *rsp = (DMCmdNVReadWrite *) buf;
983
DMNVItemHybridPref *hybrid;
985
qcdm_return_val_if_fail (buf != NULL, NULL);
987
if (!check_command (buf, len, DIAG_CMD_NV_READ, sizeof (DMCmdNVReadWrite), out_error))
990
if (!check_nv_cmd (rsp, DIAG_NV_HYBRID_PREF, out_error))
993
hybrid = (DMNVItemHybridPref *) &rsp->data[0];
995
if (hybrid->hybrid_pref > 1)
996
qcdm_warn (0, "Unknown hybrid preference 0x%X", hybrid->hybrid_pref);
998
result = qcdm_result_new ();
999
qcdm_result_add_u8 (result, QCDM_CMD_NV_GET_HYBRID_PREF_ITEM_HYBRID_PREF, hybrid->hybrid_pref);
1005
qcdm_cmd_nv_set_hybrid_pref_new (char *buf,
1007
u_int8_t hybrid_pref)
1009
char cmdbuf[sizeof (DMCmdNVReadWrite) + 2];
1010
DMCmdNVReadWrite *cmd = (DMCmdNVReadWrite *) &cmdbuf[0];
1011
DMNVItemHybridPref *req;
1013
qcdm_return_val_if_fail (buf != NULL, 0);
1014
qcdm_return_val_if_fail (len >= sizeof (*cmd) + DIAG_TRAILER_LEN, 0);
1016
if (hybrid_pref > QCDM_CMD_NV_HYBRID_PREF_ITEM_REV_HYBRID_ON) {
1017
qcdm_err (0, "Invalid hybrid preference %d", hybrid_pref);
1021
memset (cmd, 0, sizeof (*cmd));
1022
cmd->code = DIAG_CMD_NV_WRITE;
1023
cmd->nv_item = htole16 (DIAG_NV_HYBRID_PREF);
1025
req = (DMNVItemHybridPref *) &cmd->data[0];
1026
if (hybrid_pref == QCDM_CMD_NV_HYBRID_PREF_ITEM_REV_HYBRID_OFF)
1027
req->hybrid_pref = DIAG_NV_HYBRID_PREF_OFF;
1028
else if (hybrid_pref == QCDM_CMD_NV_HYBRID_PREF_ITEM_REV_HYBRID_ON)
1029
req->hybrid_pref = DIAG_NV_HYBRID_PREF_ON;
1031
return dm_encapsulate_buffer (cmdbuf, sizeof (*cmd), sizeof (cmdbuf), buf, len);
1035
qcdm_cmd_nv_set_hybrid_pref_result (const char *buf, size_t len, int *out_error)
1037
qcdm_return_val_if_fail (buf != NULL, NULL);
1039
if (!check_command (buf, len, DIAG_CMD_NV_WRITE, sizeof (DMCmdNVReadWrite), out_error))
1042
if (!check_nv_cmd ((DMCmdNVReadWrite *) buf, DIAG_NV_HYBRID_PREF, out_error))
1045
return qcdm_result_new ();
1048
/**********************************************************************/
927
1051
hdr_rev_pref_validate (u_int8_t dm)